From d259d9fcba5e9755ef58357ae747b59760edea70 Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza Date: Thu, 13 Aug 2026 00:02:25 -0300 Subject: [PATCH] fix(ci): clear base-reds on release/v3.8.50 (round 3) (#10213) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(ci): clear base-reds on release/v3.8.50 (round 3) - CHANGELOG.md: restore the top [Unreleased] section dropped by the #10189 reconcile (docs-sync gate: first section must be Unreleased) - env-doc-sync: document CONDUCTOR_ORCHESTRATOR_TOKEN + CONDUCTOR_SPOKESPERSON_URL in .env.example/ENVIRONMENT.md; allowlist the CI-only GITHUB_STEP_SUMMARY and TS7_BASE_REF (ts7 ratchet signals); drop a stray merge artifact line - providers: restore the audited chatanywhere metadata entry that base-reds round 2 dropped together with its duplicate — the provider was half-wired (registry+endpoint without APIKEY metadata), which is what the wave3 test catches; re-pin providers-constants-split at the measured 228 - docs counts: 338 -> 339 (today's +2 void-ai/helixmind, -1 Puter) via gen:provider-reference + README/AGENTS/llm.txt/package.json/diagrams/i18n mirrors - file-size ratchet: annotated rebaseline for the two pre-existing drifts (ModelSelectModal 1138, gateways 1250) following the 2026-08-11 precedent Refs #9985 * fix(ci): base-reds round 3b — stale sibling tests + mode-pack weight contract - check-docs-counts-sync.test.ts: drop the imports/subtests of the four helpers #10196 removed from the gate script (readMcpFactsFromSource, listLocalizedDocs, makeRequiredCountsValidator, checkFreeTierInventory) — the new-API tests that #10196 added stay; the file now loads again under the node runner - quota-connection-recovery.test.ts: convert from vitest APIs to node:test — the file lives in tests/unit/*.test.ts (node-runner glob) and the vitest runtime crashes when imported outside vitest, killing the whole shard entry - modePacks.ts: re-normalize all six mode packs to sum 1.0 — #8940 added sessionAvailability: 0.05 to every pack without rebalancing (1.05 total); ratios preserved exactly (÷1.05), so post-normalizeScoringWeights behavior is unchanged; restores the declared sum-to-1.0 contract the 4235 test pins Refs #9985 * fix(ci): base-reds round 3c — vitest siblings, weights default, secrets FP, mutation tap - DistributeProxiesButton.test.tsx: wrap renders in NextIntlClientProvider — #9245 localized the component (useTranslations) and left the test without the intl context, failing all 14 cases - scoring.ts: re-normalize DEFAULT_WEIGHTS to sum 1.0 (same #8940 class as the mode packs — sessionAvailability added without rebalancing; ratios preserved) - .gitleaks.toml: generalize the kimi sponsor-banner localStorage-key allowlist to -v\d+ — #10200 bumped v1→v2 and the stale regex regressed the secrets ratchet with a false positive - stryker.conf.json: register 6 covering unit tests in tap.testFiles (4 modules) so their mutant kills count — unblocks check:mutation-test-coverage --strict Refs #9985 * fix(ci): base-reds round 3d — inspector factor gap, stale registry/gap tests, i18n key sync - comboScoringInspector: add cacheAffinity/sessionAvailability/connectionDensity to FACTOR_KEYS + the factor-key type — calculateScore() weighs them but the breakdown omitted them, so the explained contributions never summed to the reported score (inspector bug, red on the pure tip) - combo-scoring-inspector.test: make the explicit-weights override sum-neutral (±0.05 shift) so it stays valid for any DEFAULT_WEIGHTS values — the hardcoded override only summed to 1.0 against the pre-#8940 defaults, which is also why explicit weights silently fell back to 'default' on the tip - unorouter-registry.test: align to the canonical .com host (api.unorouter.ai 301-redirects there, verified live) and to wave4's live model discovery (passthrough, no static seed) — the .ai/auto-model expectations were stale - check-migration-numbering.test: 147 left KNOWN_GAPS when 147_api_keys_model_access_mode.sql landed — assert absent (same as 143) - i18n: sync-ui pass — 35,914 missing UI keys stamped as __MISSING__ placeholders across 42 locales (mechanical; greens the pt-BR key-presence integrity test; coverage pct unchanged by design — translation is a separate workstream) Refs #9985 * fix(ci): base-reds round 3e — 2 real defects + 14 stale sibling tests (waves A-E) Real defects fixed: - src/lib/db/apiKeys.ts: #9313's empty-allowlist early return bypassed the group permission check, silently disabling group deny rules (#8817) for every key without a per-key allowlist; fall-through restored, restricted+[] deny-all kept - open-sse/utils/proxyFetch.ts: #10032 re-appended the raw transport error to the propagated message, reintroducing the proxy user:password leak #9837 closed; new redactProxyDetailsInMessage() keeps the reason, redacts URL/credentials - .github/workflows/quality.yml: #10134 added the TS7 ratchet as a separate blocking step AFTER the aggregated gates — the exact #8542 masking mechanism; folded into the non-fail-fast loop (still blocking, still PR-only) ⚠️ CI edit, gate-strengthening — explicit owner sign-off requested on the PR - src/i18n/messages/ko.json: 3 machine-mistranslation regressions caught by the #8244 glossary checker (장애인→비활성화됨, 양말5://→socks5://, 비클로드→Claude가 아닌) Stale sibling tests aligned to deliberately-moved contracts (each cites its mover): request-log-detail-layout + -stream (#9245 intl provider), repro-8542 pin update, quality-rail-gate-membership (#10134 shape), agentSkills-routes 45→46 (#9058), cloudflare-ai-catalog-8717 (#8804 supersedes #8808), executor-xai (#9994), vision-bridge-claude-wire (#9463 minimax→openai), sse-auth forced-pin (#8893), tls-proxy-context (strengthened leak guards), rate-limit-local-error-classification (#9164/#9342), minimax-thinking-signature (#9463), codebuddy-cn (#9723 +1 test), github-copilot-custom-model (#9050), providers-g4f-batch3 (#9584), synced-capability-warmup (#9199, stricter), sidebar-tools-group (#8221), oauth-modal-grok-cli-paste (#9245); agentSkills/catalog.ts comment 45→46; file-size rebaseline for proxyFetch (+19, annotated) Refs #9985 * fix(ci): base-reds round 3f — waves F-J: 9 more real defects + stale sibling sweep Real production defects fixed (all red on the pure tip, each with its origin): - routeGuard.ts: #8949 accidentally DELETED the /api/providers/[id]/login local-only pattern — the route spawns a browser, so the loopback gate for a process-spawning route was gone (Hard Rules #15/#17); restored (314 guard tests green) - agentSkills generator: #9058's category dispatch gave the config category an empty body, wiping skills/config-codex-cli/SKILL.md at the #10131 sync; fixed + SKILL.md regenerated via the official generator - imageRegistry: #9982 broke same-provider bare aliasing (antigravity preview id sent upstream unresolved); new resolveSameProviderBareAlias() keeps the fal cross-provider fix intact - imageRegistry: #9982's prefix strip handed the bare nano-banana ids to fal-ai, violating the pinned 2026-07-31 operator decision (adobe-firefly owns them); fal entries made prefix-only (dispatch already re-prefixes) - mediaGeneration/fal.ts: the missing-credential 401 guard was lost when #10198 deleted the superseded falHandler — tests were hitting the live network - bottleneckPatch/rateLimitManager: #9041's merge clobbered #9604, resurrecting the Bottleneck v2.19.5 heartbeat bug (reservoir never refills); patched the library defect at the root and re-aligned chat-rate-limit-body-lock to the working reservoir contract - processSupervisor.mjs: #9761 regressed the Node spawn to bare "node" (the #9156 launchd bug) and dropped #9209's ipv4first args; both restored - openai-responses/pureHelpers: #9423's Agent null-sentinel was unreachable on the schemaless JSON-string path; gate extended - i18n en.json: #8222's regen reverted the #9976 unclosed-tag fix and #8559's combo-cooldown copy; #9038 shipped 40 t() calls with no messages (runtime MISSING_MESSAGE); all restored/added + official sync-ui stamps, and vi's zero-marker policy re-established via the sanctioned translation backend Stale sibling tests aligned (movers cited inline): chat-helpers (#9447), executor-antigravity (#9351), video-fal-grok (#9982), visionBridge (#9759), web-session-credentials (#8974), production-build-module-integrity (positive anchor added), agentSkills-generator/skillManifestsLint/skills-injection/ agentSkillTools-mcp/listCapabilities-a2a (#9058), memory-settings (#10010), model-catalog-policy-invalidation (#8906), model-alias-seed (#9485), reactive-context-compaction (#8949), combo-provider-wildcard (broken upsert helper), oauth-google-loopback (43-locale resurrected-key removal) Validation: 501/501 across the 47 touched test files; typecheck:core, lint, file-size, docs-sync all green. Refs #9985 * fix(ci): base-reds round 3g — wave K/L: 4 more real defects + stale alignments Real defects: - base/reasoningEffort.ts: the stale duplicate cherry-pick #9612 re-added the codex minimal→low rewrite that #9883 had deliberately removed (OMP minimal passthrough); block removed again - cursorImages.ts: #9840 wired prepareCursorImageForWire (sharp re-encode, fail-closed) into the SHARED resolveCursorImages, breaking zai-web and conol-web image uploads (HTTP 400 'undecodable'); new prepareForWire opt-out, Cursor default path unchanged (8 cursor suites green) - modelCapabilities/snapshot: catalog prepare still issued 323 per-model reads of model_context_overrides + max_input_tokens overrides, violating #9199's bulk-load contract; both now resolve from the snapshot single pass - v1-models-discovery-conformance: re-pinned to the bounded 30s SWR window (#9199/#10198) — the old 'stale-first regardless of age' contract is gone Stale tests aligned (movers cited inline): codex-tools-strict-default (#9828 redundant-oneOf strip), devin-providers (#9245 i18n), db-migrationrunner- constants-split (147→151 renumber #8228), gitlab-duo-oauth-setup (#9245), chatcore-extracted-modules (#9161 outbound-protocol keying) compression-api CI failures were cascade artifacts of codex-tools-strict-default failing in the same force-exit shard process — no own defect (171/171 local). Refs #9985 * fix(test): compression-api — register both describes before the runner starts The DATA_DIR setup + route/db top-level awaits sat BETWEEN the two describes; under --test-force-exit (the CI unit-runner flag) the process exits once the already-registered tests finish, so on slow CI machines the whole second describe died as 'Promise resolution is still pending' — the recurring CI-only shard-2 failure that never reproduced locally without the flag. Moved to the top of the file; 10/10 under --test-force-exit locally. Refs #9985 * fix(quality): freeze modelCapabilities.ts at 1006 (annotated) — snapshot routing growth Refs #9985 * fix(quality): move the modelCapabilities freeze into the frozen map (nested schema) Refs #9985 * fix(i18n): translate all 39,718 pending UI keys across 42 locales (owner-approved) Mass-translated every __MISSING__ placeholder via the official i18n:sync-ui --translate-markers pipeline (operator backend), restoring i18nUiCoverage to the 100 baseline (was 89.9 after the merge-storm UI landings + the 42 keys #9038 never shipped). Post-pass repairs, all caught by the existing gates: - glossary: retired renderings the machine reintroduced normalized again (提供商→提供者 zh-CN/zh-TW, 鏈接→連結, 文檔→文件, 調用→呼叫, 供應商→提供者, 響應→回應, 不活躍→未啟用 zh-TW; 클로드→Claude, 옴니루트→OmniRoute ko); DATA_DIR forbidden rendering avoided via 数据文件夹 rephrase - ICU integrity: 120 values with renamed/dropped {params} repaired (39 positional renames, 81 reset to the en source — functional over fluent) Validation: glossary/pt-BR/vi/deno-relay/settings-keys/value-drift/google- loopback suites 76/76; placeholder diff en×42 locales = 0; worst-locale coverage = 100.0%. Refs #9985 --------- Co-authored-by: backryun --- .env.example | 7 +- .github/workflows/quality.yml | 19 +- .gitleaks.toml | 5 +- AGENTS.md | 2 +- CHANGELOG.md | 4 + README.md | 16 +- bin/cli/runtime/processSupervisor.mjs | 27 +- config/quality/file-size-baseline.json | 18 +- docs/diagrams/cli-terminal.svg | 2 +- docs/diagrams/comparison-table.svg | 2 +- docs/diagrams/promise-pillars.svg | 6 +- docs/diagrams/readme-hero.svg | 4 +- docs/i18n/ar/llm.txt | 8 +- docs/i18n/az/llm.txt | 8 +- docs/i18n/bg/llm.txt | 8 +- docs/i18n/bn/llm.txt | 8 +- docs/i18n/cs/llm.txt | 8 +- docs/i18n/da/llm.txt | 8 +- docs/i18n/de/llm.txt | 8 +- docs/i18n/es/llm.txt | 8 +- docs/i18n/fa/llm.txt | 8 +- docs/i18n/fi/llm.txt | 8 +- docs/i18n/fr/llm.txt | 8 +- docs/i18n/gu/llm.txt | 8 +- docs/i18n/he/llm.txt | 8 +- docs/i18n/hi/llm.txt | 8 +- docs/i18n/hu/llm.txt | 8 +- docs/i18n/id/llm.txt | 8 +- docs/i18n/in/llm.txt | 8 +- docs/i18n/it/llm.txt | 8 +- docs/i18n/ja/llm.txt | 8 +- docs/i18n/ko/llm.txt | 8 +- docs/i18n/mr/llm.txt | 8 +- docs/i18n/ms/llm.txt | 8 +- docs/i18n/nl/llm.txt | 8 +- docs/i18n/no/llm.txt | 8 +- docs/i18n/phi/llm.txt | 8 +- docs/i18n/pl/llm.txt | 8 +- docs/i18n/pt-BR/llm.txt | 8 +- docs/i18n/pt/llm.txt | 8 +- docs/i18n/ro/llm.txt | 8 +- docs/i18n/ru/llm.txt | 8 +- docs/i18n/sk/llm.txt | 8 +- docs/i18n/sv/llm.txt | 8 +- docs/i18n/sw/llm.txt | 8 +- docs/i18n/ta/llm.txt | 8 +- docs/i18n/te/llm.txt | 8 +- docs/i18n/th/llm.txt | 8 +- docs/i18n/tr/llm.txt | 8 +- docs/i18n/uk-UA/llm.txt | 8 +- docs/i18n/ur/llm.txt | 8 +- docs/i18n/vi/llm.txt | 8 +- docs/i18n/zh-CN/llm.txt | 8 +- docs/i18n/zh-TW/llm.txt | 8 +- docs/reference/ENVIRONMENT.md | 2 + docs/reference/PROVIDER_REFERENCE.md | 5 +- llm.txt | 8 +- open-sse/config/imageRegistry.ts | 26 +- open-sse/executors/base/reasoningEffort.ts | 10 - open-sse/executors/conol-web.ts | 6 +- open-sse/executors/zai-web.ts | 3 +- open-sse/handlers/mediaGeneration/fal.ts | 6 + open-sse/services/autoCombo/modePacks.ts | 123 +- open-sse/services/autoCombo/scoring.ts | 24 +- open-sse/services/bottleneckPatch.ts | 69 + open-sse/services/rateLimitManager.ts | 10 +- .../response/openai-responses/pureHelpers.ts | 6 +- open-sse/utils/cursorImages.ts | 15 +- open-sse/utils/proxyFetch.ts | 21 +- package.json | 2 +- scripts/check/check-env-doc-sync.mjs | 6 + skills/config-codex-cli/SKILL.md | 14 + src/i18n/messages/ar.json | 1153 +++++++- src/i18n/messages/az.json | 1151 +++++++- src/i18n/messages/bg.json | 1151 +++++++- src/i18n/messages/bn.json | 1153 +++++++- src/i18n/messages/cs.json | 1153 +++++++- src/i18n/messages/da.json | 1149 +++++++- src/i18n/messages/de.json | 1148 +++++++- src/i18n/messages/en.json | 69 +- src/i18n/messages/es.json | 1171 +++++++- src/i18n/messages/fa.json | 1149 +++++++- src/i18n/messages/fi.json | 1149 +++++++- src/i18n/messages/fr.json | 874 +++--- src/i18n/messages/gu.json | 1153 +++++++- src/i18n/messages/he.json | 1151 +++++++- src/i18n/messages/hi.json | 1153 +++++++- src/i18n/messages/hu.json | 1149 +++++++- src/i18n/messages/id.json | 1149 +++++++- src/i18n/messages/in.json | 1149 +++++++- src/i18n/messages/it.json | 1149 +++++++- src/i18n/messages/ja.json | 1151 +++++++- src/i18n/messages/ko.json | 1159 +++++++- src/i18n/messages/mr.json | 1153 +++++++- src/i18n/messages/ms.json | 1149 +++++++- src/i18n/messages/nl.json | 1149 +++++++- src/i18n/messages/no.json | 1149 +++++++- src/i18n/messages/phi.json | 1149 +++++++- src/i18n/messages/pl.json | 1153 +++++++- src/i18n/messages/pt-BR.json | 2543 +++++++++-------- src/i18n/messages/pt.json | 1119 +++++++- src/i18n/messages/ro.json | 1149 +++++++- src/i18n/messages/ru.json | 1161 +++++++- src/i18n/messages/sk.json | 1149 +++++++- src/i18n/messages/sv.json | 1149 +++++++- src/i18n/messages/sw.json | 1151 +++++++- src/i18n/messages/ta.json | 1153 +++++++- src/i18n/messages/te.json | 1153 +++++++- src/i18n/messages/th.json | 1149 +++++++- src/i18n/messages/tr.json | 1155 +++++++- src/i18n/messages/uk-UA.json | 1155 +++++++- src/i18n/messages/ur.json | 1151 +++++++- src/i18n/messages/vi.json | 893 +++--- src/i18n/messages/zh-CN.json | 1317 +++++++-- src/i18n/messages/zh-TW.json | 1212 +++++++- src/lib/agentSkills/catalog.ts | 4 +- src/lib/agentSkills/generator.ts | 6 +- src/lib/db/apiKeys.ts | 12 +- src/lib/db/modelCapabilityOverrides.ts | 3 +- src/lib/modelCapabilities.ts | 47 +- src/lib/modelCapabilityResolutionSnapshot.ts | 10 +- src/lib/usage/comboScoringInspector.ts | 3 + src/server/authz/routeGuard.ts | 1 + .../DistributeProxiesButton.test.tsx | 16 +- .../constants/providers/apikey/gateways.ts | 15 + src/shared/types/utilization.ts | 5 +- stryker.conf.json | 32 +- tests/unit/agentSkillTools-mcp.test.ts | 7 +- tests/unit/agentSkills-generator.test.ts | 15 +- tests/unit/agentSkills-routes.test.ts | 9 +- .../api/compression/compression-api.test.ts | 20 +- tests/unit/chat-helpers.test.ts | 28 +- tests/unit/chat-rate-limit-body-lock.test.ts | 11 +- .../chatcore-extracted-modules-3821.test.ts | 5 +- tests/unit/check-docs-counts-sync.test.ts | 51 - tests/unit/check-migration-numbering.test.ts | 3 +- tests/unit/cloudflare-ai-catalog-8717.test.ts | 20 +- tests/unit/codebuddy-cn-provider.test.ts | 44 +- tests/unit/codex-tools-strict-default.test.ts | 7 +- tests/unit/combo-provider-wildcard.test.ts | 11 +- tests/unit/combo-scoring-inspector.test.ts | 7 +- ...db-migrationrunner-constants-split.test.ts | 3 +- tests/unit/devin-providers.test.ts | 12 +- tests/unit/docs/skillManifestsLint.test.ts | 6 +- tests/unit/executor-antigravity.test.ts | 16 +- tests/unit/executor-xai.test.ts | 6 +- ...copilot-custom-model-target-format.test.ts | 8 +- .../unit/gitlab-duo-oauth-setup-8688.test.ts | 12 +- .../vision-bridge-claude-wire.test.ts | 17 +- tests/unit/guardrails/visionBridge.test.ts | 9 +- tests/unit/listCapabilities-a2a.test.ts | 12 +- tests/unit/memory-settings.test.ts | 3 + .../minimax-thinking-signature-2706.test.ts | 27 +- tests/unit/model-alias-seed.test.ts | 2 + ...l-catalog-policy-invalidation-8728.test.ts | 6 +- .../oauth-modal-grok-cli-paste-7610.test.ts | 16 +- .../production-build-module-integrity.test.ts | 8 + tests/unit/providers-constants-split.test.ts | 13 +- tests/unit/providers-g4f-batch3.test.ts | 6 +- .../unit/quality-rail-gate-membership.test.ts | 10 +- tests/unit/quota-connection-recovery.test.ts | 25 +- ...e-limit-local-error-classification.test.ts | 38 +- ...eactive-context-compaction-policy.test.mjs | 8 +- tests/unit/request-log-detail-layout.test.ts | 24 +- tests/unit/request-log-detail-stream.test.ts | 24 +- tests/unit/sidebar-tools-group.test.ts | 7 +- tests/unit/skills-injection.test.ts | 37 +- tests/unit/sse-auth.test.ts | 7 +- .../synced-capability-warmup-8697.test.ts | 59 +- tests/unit/tls-proxy-context.test.ts | 9 +- tests/unit/unorouter-registry.test.ts | 13 +- .../v1-models-discovery-conformance.test.ts | 11 +- tests/unit/video-fal-grok.test.ts | 4 +- tests/unit/web-session-credentials.test.ts | 2 + 174 files changed, 46115 insertions(+), 5035 deletions(-) diff --git a/.env.example b/.env.example index f3ae64d57f..abed863585 100644 --- a/.env.example +++ b/.env.example @@ -2665,4 +2665,9 @@ QUOTA_STORE_DRIVER=sqlite # sqlite | redis # Used by: src/lib/conductor/boot.ts, src/lib/conductor/bridge.ts # CONDUCTOR_HUB_URL=http://127.0.0.1:7910 # CONDUCTOR_HUB_TOKEN= -feat/conductor-bridge +# Inbound A2A→hub delegation credential (falls back to CONDUCTOR_HUB_TOKEN when unset). +# Used by: src/lib/conductor/hubProxy.ts +# CONDUCTOR_ORCHESTRATOR_TOKEN= +# Spokesperson (Faro) base URL for the dashboard chat proxy (/api/conductor/ask). +# Used by: src/lib/conductor/faroProxy.ts +# CONDUCTOR_SPOKESPERSON_URL=http://127.0.0.1:7920 diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 38b1ede96e..7163c9c22b 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -266,6 +266,15 @@ jobs: echo "::group::check:dashboard-typecheck" npm run check:dashboard-typecheck || failed+=("check:dashboard-typecheck") echo "::endgroup::" + # #10134: TS7 zero-new-diagnostics ratchet — folded into this non-fail-fast + # loop (never a separate blocking step) so an earlier red gate cannot abort + # the job and mask it (#8542 mechanism). PR-only: the base-relative + # comparison needs the PR base SHA (empty on workflow_dispatch). + if [ -n "${PR_BASE_SHA:-}" ]; then + echo "::group::check:ts7-diagnostics-ratchet" + npm run check:ts7-diagnostics-ratchet -- --base-ref "$PR_BASE_SHA" || failed+=("ts7-diagnostics-ratchet") + echo "::endgroup::" + fi if (( ${#failed[@]} )); then printf '::error::%d gate(s) failed: %s\n' "${#failed[@]}" "${failed[*]}" exit 1 @@ -276,8 +285,9 @@ jobs: # (the hybrid is the officially documented pattern). Isolated npx on purpose: # installing an alias package could collide node_modules/.bin/tsc with 6.x. # The full result stays advisory while #8484 has a backlog. The blocking - # base-relative ratchet immediately below rejects only diagnostics added by - # the PR, so existing release debt does not block unrelated work. + # base-relative ratchet (folded into the non-fail-fast gates step above) + # rejects only diagnostics added by the PR, so existing release debt does + # not block unrelated work. - name: Typecheck (core) — TS7 native shadow (advisory) continue-on-error: true run: | @@ -286,11 +296,6 @@ jobs: npm exec --yes --package=typescript@7.0.2 -- tsc --pretty false -p tsconfig.typecheck-core.json || RC=$? echo "[ts7-shadow] exit=$RC elapsed=$(( $(date +%s) - START ))s — the 6.x step above stays authoritative" exit $RC - - name: Typecheck (core) — TS7 zero-new-diagnostics ratchet - if: ${{ github.event_name == 'pull_request' }} - env: - TS7_BASE_REF: ${{ github.event.pull_request.base.sha }} - run: npm run check:ts7-diagnostics-ratchet -- --base-ref "$TS7_BASE_REF" # TIA: build the impact map at runtime (gitignored, ~21MB) and run only the # unit tests impacted by this PR's changed files. On hub/unmapped changes the # selector returns __RUN_ALL__ — full-suite authority is the parallel diff --git a/.gitleaks.toml b/.gitleaks.toml index 22023b1a8d..103e0d801c 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -87,9 +87,10 @@ '''latencyP\d{2}Ms''', '''interleaved-thinking-2025-05-14''', # v3.8.49 pre-flight (2026-07-28). Nenhum dos dois e credencial: - # - chave de localStorage do banner de patrocinio (#8723), so um identificador de UI; + # - chave de localStorage do banner de patrocinio (#8723; #10200 bumpou v1->v2, + # generalizado para -v\d+ no round 3 de base-reds #9985), so um identificador de UI; # - x-api-key PUBLICO do Firefly web (documentado em open-sse/utils/publicCreds.ts:207); # as duas ocorrencias sinalizadas estao em COMENTARIOS JSDoc, o runtime le de resolvePublicCred(). - '''omniroute-kimi-sponsor-banner-dismissed-v1''', + '''omniroute-kimi-sponsor-banner-dismissed-v\d+''', '''SunbreakWebUI1''', ] diff --git a/AGENTS.md b/AGENTS.md index a7435533e5..305e18490f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,7 +46,7 @@ Repository map and Reference Documentation sections below. ## Project at a Glance -**OmniRoute** — unified AI proxy/router. One endpoint, 338 LLM providers, auto-fallback. +**OmniRoute** — unified AI proxy/router. One endpoint, 339 LLM providers, auto-fallback. | Layer | Location | Purpose | | ------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/CHANGELOG.md b/CHANGELOG.md index dcf702012a..6198c78746 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [Unreleased] + +--- + ## [3.8.50] — TBD _Living section — regenerated 2026-08-12 from all cycle commits (cycle open `ed2db6cb19` → tip). Bullets carry the merged PR and its author; direct pushes listed separately._ diff --git a/README.md b/README.md index af30296ab2..ee36e11261 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # 🚀 OmniRoute — The Free AI Gateway -OmniRoute — Never stop coding. Every AI tool → 338 providers — 90+ free — through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) — never hit limits. 338 AI providers · 90+ free tiers · ~1.51B free tokens/mo · 19 routing strategies · $0 to start. +OmniRoute — Never stop coding. Every AI tool → 339 providers — 90+ free — through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) — never hit limits. 339 AI providers · 90+ free tiers · ~1.51B free tokens/mo · 19 routing strategies · $0 to start. @@ -63,7 +63,7 @@ | | v3.8.49 | **v3.8.50** | `v3.8.51+` | | ------------------------- | :-----: | :---------: | :---------: | -| 🌐 Providers | 291 | **338** | more queued | +| 🌐 Providers | 291 | **339** | more queued | | 🧠 Documented models | 500+ | **1200+** | — | | 🖼️ Modality Bridge | — | 🆕 vision | video | | 📡 Radar free catalog | — | — | 🔭 next | @@ -101,7 +101,7 @@ ⚙️ Features 🎯 Combos - 🌐 Providers + 🌐 Providers 🔌 CLI & MCP @@ -210,7 +210,7 @@ curl http://localhost:20128/v1/chat/completions \ -The Promise — One endpoint. 338 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 338 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 40+ free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 105 tools, A2A, memory, guardrails, evals — 25,000+ tests). +The Promise — One endpoint. 339 providers. Never stop building — OmniRoute picks the cheapest one that works. Six pillars: Never hit limits (auto-fallback across 339 providers in milliseconds, zero downtime) · Save up to 95% tokens (RTK + Caveman stacked compression cuts 15–95%, ~89% avg on tool-heavy sessions) · $0 to start (90+ free tiers, 40+ free forever — no card needed) · Every tool works (33 coding agents through one config) · One endpoint (OpenAI ↔ Claude ↔ Gemini ↔ Responses API at /v1) · Production-grade (circuit breakers, TLS stealth, MCP 105 tools, A2A, memory, guardrails, evals — 25,000+ tests).

@@ -461,7 +461,7 @@ All **19** strategies — mix & match per combo step: -What sets OmniRoute apart — comparison table vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 338 providers, 90+ free providers built-in, 19 routing strategies, 12-engine token compression, built-in MCP server with 105 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA, 43 i18n UI locales, 100% MIT self-hosted. OmniRoute is the only one with the full set; competitors show a mix of checks, partials and crosses. Verified from each project's docs. +What sets OmniRoute apart — comparison table vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 339 providers, 90+ free providers built-in, 19 routing strategies, 12-engine token compression, built-in MCP server with 105 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA, 43 i18n UI locales, 100% MIT self-hosted. OmniRoute is the only one with the full set; competitors show a mix of checks, partials and crosses. Verified from each project's docs. 📊 Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM → [`docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md`](docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md) @@ -538,7 +538,7 @@ Pix copia-e-cola: - **🖼️ New endpoints** — `/v1/ocr` (Mistral OCR) and `/v1/audio/translations` (Whisper-style) round out the media surface. → [API Reference](docs/reference/API_REFERENCE.md) - **🎨 Image / video / audio generation** — one API for media: xAI Grok Imagine & Novita AI video, ComfyUI, Freepik, Adobe Firefly, Microsoft Designer, Google Imagen, Segmind, EdgeTTS. → [API Reference](docs/reference/API_REFERENCE.md) - **🌍 Deployment & ops** — reverse-proxy `basePath`, browser-language auto-detect, per-key device tracking, root-less MITM trust, zh-TW localization. → [Environment](docs/reference/ENVIRONMENT.md) -- **🤝 More providers & agents** — Cursor Cloud Agent, Grok Build (xAI) with browser + OAuth login, Ollama first-class card, Claude Opus 5 & Sonnet 5, Kimi official partnership (Code/Web/Moonshot), Zed, Requesty, SenseNova, Yuanbao, Agnes AI… and a refreshed **338-provider catalog**. → [Providers](docs/reference/PROVIDER_REFERENCE.md) +- **🤝 More providers & agents** — Cursor Cloud Agent, Grok Build (xAI) with browser + OAuth login, Ollama first-class card, Claude Opus 5 & Sonnet 5, Kimi official partnership (Code/Web/Moonshot), Zed, Requesty, SenseNova, Yuanbao, Agnes AI… and a refreshed **339-provider catalog**. → [Providers](docs/reference/PROVIDER_REFERENCE.md) - **📡 Routing transparency** — every response carries an `X-OmniRoute-Decision` header naming the strategy/provider/latency that served it, a new `cache-optimized` combo strategy + Auto-Combo `cacheAffinity` factor route repeat requests back to the connection holding the cached prefix, and a read-only `/v1/auto-combo/{channel}/candidates` endpoint exposes an `auto/*` channel's live candidate pool. → [Auto-Combo](docs/routing/AUTO-COMBO.md) - **⚡ Local performance & infra** — one-click local Redis, Cloudflare Workers / Deno Deploy relay deployers, Bifrost & Mux as supervised embedded services. → [Embedded Services](docs/frameworks/EMBEDDED-SERVICES.md) @@ -599,11 +599,11 @@ Pix copia-e-cola:
-## 🌐 338 AI Providers — 90+ Free +## 🌐 339 AI Providers — 90+ Free
-> The most complete catalog of any open-source router: **338 providers**, **90+ with a free tier**, **40+ free forever**. +> The most complete catalog of any open-source router: **339 providers**, **90+ with a free tier**, **40+ free forever**.
diff --git a/bin/cli/runtime/processSupervisor.mjs b/bin/cli/runtime/processSupervisor.mjs index 621ff96c28..cf0ede4ce9 100644 --- a/bin/cli/runtime/processSupervisor.mjs +++ b/bin/cli/runtime/processSupervisor.mjs @@ -8,7 +8,7 @@ import { computeRestartDelayMs, waitUntilPortFree, } from "./supervisorPolicy.mjs"; -import { buildNodeHeapArgs } from "../../../scripts/build/runtime-env.mjs"; +import { buildNodeRuntimeArgs } from "../../../scripts/build/runtime-env.mjs"; import { stopProcessGracefully } from "../../../src/shared/platform/windowsProcess.ts"; import { isFatalInstrumentationHookFailure, @@ -44,23 +44,26 @@ export class ServerSupervisor { this.instrumentationFailureHintPrinted = false; const showLog = process.env.OMNIROUTE_SHOW_LOG === "1"; - // #5238: skip the explicit CLI --max-old-space-size when the user pinned the - // heap via NODE_OPTIONS (a CLI arg would shadow/override their value). The - // calibrated heap is already carried by env.NODE_OPTIONS either way. - const heapArgs = buildNodeHeapArgs(process.env, this.memoryLimit); // #6321: stdout used to be discarded (`"ignore"`) whenever `--log`/OMNIROUTE_SHOW_LOG // wasn't set (the default) — any debug/pino output written to stdout vanished // silently, so a boot that never becomes ready looked like a dead hang with zero // output even at APP_LOG_LEVEL=debug. Pipe stdout too and buffer it alongside // stderr so a readiness timeout can surface what the child actually printed. + // #9156: always spawn via process.execPath (absolute path to the running + // runtime — node or bun). Bare "node" is unresolvable under macOS launchd's + // minimal PATH; #9761's Bun ternary accidentally regressed the Node branch. + // Node args come from buildNodeRuntimeArgs (#9209 IPv4-first DNS + #5238 + // heap flag handling); the Bun branch keeps #9761's polyfill preload — + // Bun does not accept the Node-only flags. this.child = spawn( - process.versions.bun ? process.execPath : "node", - [ - ...(process.versions.bun - ? ["--preload", join(dirname(this.serverPath), "open-sse/utils/setupPolyfill.ts")] - : heapArgs), - this.serverPath, - ], + process.execPath, + process.versions.bun + ? [ + "--preload", + join(dirname(this.serverPath), "open-sse/utils/setupPolyfill.ts"), + this.serverPath, + ] + : buildNodeRuntimeArgs(process.env, this.memoryLimit, this.serverPath), { cwd: dirname(this.serverPath), env: this.env, diff --git a/config/quality/file-size-baseline.json b/config/quality/file-size-baseline.json index 68c61f39a3..64c5e75c8e 100644 --- a/config/quality/file-size-baseline.json +++ b/config/quality/file-size-baseline.json @@ -431,19 +431,20 @@ "open-sse/executors/kiro.ts": 1390, "open-sse/translator/request/openai-to-kiro.ts": 1374, "open-sse/utils/sseHeartbeat.ts": 194, - "open-sse/utils/proxyFetch.ts": 1220, + "open-sse/utils/proxyFetch.ts": 1239, "_rebaseline_2026_08_11_v3850_merge_storm_provider_registry: DRIFT do merge-storm 2026-08-11 (99 PRs mergeados no release/v3.8.50). AddApiKeyModal.tsx (PR #8949 ChatGPT Web provider) e useProviderConnections.ts/ModelSelectModal.tsx (PRs #9011 combo test-all, #9499 image combos) = UI nova legítima acima do cap; gateways.ts = god-file de catálogo de providers que cresceu com os PRs #9009/#9421/#9468/#9594 (qualquer split arriscaria corromper o merge de novo — o próprio PR #9421 foi o que quebrou o arquivo; sem split até o release, congelado no tamanho atual). Owner autorizou rebaseline com anotação (2026-08-11).": { "src/app/(dashboard)/dashboard/providers/[id]/components/modals/AddApiKeyModal.tsx": 1062, "src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderConnections.ts": 1051, - "src/shared/components/ModelSelectModal.tsx": 1135, - "src/shared/constants/providers/apikey/gateways.ts": 1215 + "src/shared/components/ModelSelectModal.tsx": 1138, + "src/shared/constants/providers/apikey/gateways.ts": 1250 }, "src/app/(dashboard)/dashboard/providers/[id]/components/modals/AddApiKeyModal.tsx": 1062, "src/app/(dashboard)/dashboard/providers/[id]/hooks/useProviderConnections.ts": 1051, - "src/shared/components/ModelSelectModal.tsx": 1135, - "src/shared/constants/providers/apikey/gateways.ts": 1215, + "src/shared/components/ModelSelectModal.tsx": 1138, + "src/shared/constants/providers/apikey/gateways.ts": 1250, "open-sse/vendor/codex-chatgpt-web/bridge.ts": 1387, - "_rebaseline_2026_08_11_v3850_merge_storm_provider_registry": "DRIFT do merge-storm 2026-08-11 (99 PRs mergeados no release/v3.8.50). AddApiKeyModal.tsx (PR #8949 ChatGPT Web provider) e useProviderConnections.ts/ModelSelectModal.tsx (PRs #9011 combo test-all, #9499 image combos) = UI nova legitima acima do cap; gateways.ts = god-file de catalogo de providers que cresceu com PRs #9009/#9421/#9468/#9594 (qualquer split arriscaria corromper o merge de novo — o proprio PR #9421 quebrou o arquivo); bridge.ts (PR #8949) = ponte Chromium vendored; proxyFetch.ts 1207->1220 = drift herdado de merges. Owner autorizou rebaseline com anotacao (2026-08-11)." + "_rebaseline_2026_08_11_v3850_merge_storm_provider_registry": "DRIFT do merge-storm 2026-08-11 (99 PRs mergeados no release/v3.8.50). AddApiKeyModal.tsx (PR #8949 ChatGPT Web provider) e useProviderConnections.ts/ModelSelectModal.tsx (PRs #9011 combo test-all, #9499 image combos) = UI nova legitima acima do cap; gateways.ts = god-file de catalogo de providers que cresceu com PRs #9009/#9421/#9468/#9594 (qualquer split arriscaria corromper o merge de novo — o proprio PR #9421 quebrou o arquivo); bridge.ts (PR #8949) = ponte Chromium vendored; proxyFetch.ts 1207->1220 = drift herdado de merges. Owner autorizou rebaseline com anotacao (2026-08-11).", + "src/lib/modelCapabilities.ts": 1006 }, "_rebaseline_base_2026_08_10_proxyfetch": "Base-red fix (green-prs sweep, issue #9985): open-sse/utils/proxyFetch.ts 1207 > cap 1000 — new proxied-TLS fetch helper introduced by the Fal reference-image work. Owner-authorized quick rebaseline to green; structural slim tracked for v3.9.0.", "_rebaseline_2026_07_27_v3849_train2": "Merge-train 2 (7 PRs) — owner-approved 2026-07-27. Single entry: chatCore.ts 4955->5006 (#8595, Responses multi-turn image compaction before the context hard-reject). Genuine irreducible growth at the existing compaction chokepoint in handleChatCore — the PR adds a last-resort retry against the concrete budget plus the estimateFinalInputTokens helper, both wired at the pre-existing call site rather than a new branch. Covered by tests/unit/8560-responses-image-compaction.test.ts (4 tests).", @@ -603,5 +604,8 @@ "_rebaseline_2026_08_04_9006_reconcile_onto_tip": "PR #9006 (fix/vertex-claude-catalog-dispatch) rebase-onto-tip reconciliation, 5 days after the PR's own _rebaseline_2026_07_30_9006 entry below. Two further inherited drifts, neither this PR's own growth (its own diff still touches neither open-sse/executors/base.ts nor src/sse/handlers/chat.ts): (1) src/sse/handlers/chat.ts 1846->1847 (+1), same root cause as the original entry (fast-gates PR->release does not run check:file-size) — another already-merged PR added one more line since. (2) open-sse/executors/base.ts 1578->1623 (+45): commit 7163081f5 fix(agentrouter): retry on 400 content-blocked + burst guard (#9323), merged directly to release/v3.8.50 between this PR's last sync and now, grew base.ts without updating its baseline entry. No offending branch left to fix in either case; verified via git diff against upstream/release/v3.8.50 that this PR's own commits do not touch either file.", "_rebaseline_2026_08_08_9006_own_comment_growth": "PR #9006's own follow-up commit (a32aed738): tests/unit/combo-routing-engine.test.ts 3457->3464 (+7) is this PR's own growth — explanatory comment blocks added alongside the ALL_ACCOUNTS_INACTIVE->ALL_TARGETS_SKIPPED stale-assertion fix (matching the identical fix applied to #9619/#9173/#8909 the same day; upstream's own test was never updated when the recordedAttempts===0 pre-dispatch-skip branch shipped). Caught by CI's PR-mode check:file-size (--base-ref) after the fix commit; missed locally because check-file-size.mjs was not re-run after that specific edit.", "_rebaseline_2026_08_07_9006_reconcile_onto_tip_3": "PR #9006 (fix/vertex-claude-catalog-dispatch) third rebase-onto-tip reconciliation (2026-08-07), shared root cause with PRs #9619 and #9173's same-day reconciliations: open-sse/mcp-server/schemas/tools.ts 1505->1553, open-sse/mcp-server/server.ts 1411->1444, open-sse/services/accountFallback.ts 1972->1978, src/app/(dashboard)/dashboard/combos/page.tsx 4647->4703, EditConnectionModal.tsx 1316->1324, src/app/api/providers/[id]/models/route.ts 2250->2304, src/app/api/v1/models/catalog.ts 1549->1556, src/lib/db/core.ts 1637->1639, src/lib/tokenHealthCheck.ts 1021->1053, tests/unit/translator-openai-to-gemini.test.ts 1619->1622 — none touched by this PR's own vertex-claude-catalog-dispatch diff (verified: this PR's commits do not touch any of these files). Same root cause as every other entry in this chain: fast-gates PR->release does not run check:file-size. No offending branch left to fix.", - "_rebaseline_2026_08_06_9006_reconcile_onto_tip_2": "PR #9006 (fix/vertex-claude-catalog-dispatch) second rebase-onto-tip reconciliation. Same two files as _rebaseline_2026_08_04_9006_reconcile_onto_tip below, further inherited drift, still not this PR's own growth (verified via git diff against the fresh upstream/release/v3.8.50 merge-base — this PR's own commits still touch neither file): open-sse/executors/base.ts 1623->1640 (+17) and src/sse/handlers/chat.ts 1847->1881 (+34), both measured post-merge via split(\"\\n\").length. More already-merged release/v3.8.50 PRs grew these files without updating their baseline entries (same root cause as every other entry in this chain: fast-gates PR->release does not run check:file-size). No offending branch left to fix." + "_rebaseline_2026_08_06_9006_reconcile_onto_tip_2": "PR #9006 (fix/vertex-claude-catalog-dispatch) second rebase-onto-tip reconciliation. Same two files as _rebaseline_2026_08_04_9006_reconcile_onto_tip below, further inherited drift, still not this PR's own growth (verified via git diff against the fresh upstream/release/v3.8.50 merge-base — this PR's own commits still touch neither file): open-sse/executors/base.ts 1623->1640 (+17) and src/sse/handlers/chat.ts 1847->1881 (+34), both measured post-merge via split(\"\\n\").length. More already-merged release/v3.8.50 PRs grew these files without updating their baseline entries (same root cause as every other entry in this chain: fast-gates PR->release does not run check:file-size). No offending branch left to fix.", + "_rebaseline_2026_08_12_v3850_basereds_round3": "Base-reds round 3 (#9985, 2026-08-12): ModelSelectModal.tsx 1135->1138 = base drift from the #10198 SWR/build repair (flagged as non-blocking drift by Release-Green run 31634993212, rebaselined here so the PR queue's Fast Quality Gates stop failing on inherited drift); gateways.ts 1215->1250 = base drift from the 08-12 merges (#10131 regolo/naga-ac repair, #9210 void-ai+helixmind) plus this PR restoring the chatanywhere metadata entry that round 2 dropped along with its duplicate (wave3 audited entry, +16 lines; same god-file no-split rationale as the 2026-08-11 annotation). Owner-authorized sweep (/sweep-reds).", + "_rebaseline_2026_08_12_proxyfetch_redaction": "Base-reds round 3 (#9985): proxyFetch.ts 1220->1239 (+19) = redactProxyDetailsInMessage() helper closing the credential leak #10032 reintroduced (raw proxy URL with user:password appended to the propagated error, Hard Rule #12); irreducible security fix at the existing error-surface chokepoint. Covered by tests/unit/tls-proxy-context.test.ts (strengthened leak guards).", + "_rebaseline_2026_08_12_modelcapabilities_snapshot_routing": "Base-reds round 3 (#9985): modelCapabilities.ts crossed the new-file cap at 1006 (+~10) when the context/max-input-token override lookups were routed through the #9199 bulk snapshot (fixing 323 per-model SQLite reads per catalog prepare — auto-combo-context-advertising guard); cohesive change at the existing resolution chokepoints, not extractable. Covered by tests/unit/auto-combo-context-advertising.test.ts + model-capability-resolution-snapshot-9199.test.ts." } diff --git a/docs/diagrams/cli-terminal.svg b/docs/diagrams/cli-terminal.svg index 989a0b8ff6..7dd470e02a 100644 --- a/docs/diagrams/cli-terminal.svg +++ b/docs/diagrams/cli-terminal.svg @@ -1,4 +1,4 @@ - + Compact animated terminal cycling three real OmniRoute CLI commands with a typewriter effect and a scrolling subcommand ticker; the first frame shows the completed providers-list screen. diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index 509ec7f0ac..38ac551df7 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index 39d9ccffb4..4f975d25fb 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -21,7 +21,7 @@ - One endpoint. 338 providers. Never stop building — OmniRoute picks the cheapest one that works. + One endpoint. 339 providers. Never stop building — OmniRoute picks the cheapest one that works. @@ -38,7 +38,7 @@ Never hit limits - Auto-fallback across 338 providers in + Auto-fallback across 339 providers in milliseconds. Quota out? The next provider takes over — zero downtime. diff --git a/docs/diagrams/readme-hero.svg b/docs/diagrams/readme-hero.svg index ea615506ee..77d89335be 100644 --- a/docs/diagrams/readme-hero.svg +++ b/docs/diagrams/readme-hero.svg @@ -1,4 +1,4 @@ - + Animated hero card: a pulse travels the divider line and a compression bar demo repeatedly shrinks a prompt by up to 95 percent; all headline content is static and readable on the first frame. @@ -28,7 +28,7 @@ Never stop coding. - Every AI tool → 338 providers90+ free — through one endpoint. + Every AI tool → 339 providers90+ free — through one endpoint. Claude Code · Codex · Cursor · Cline · Copilot · Antigravity  →  FREE Claude / GPT / Gemini · auto-fallback diff --git a/docs/i18n/ar/llm.txt b/docs/i18n/ar/llm.txt index 782ed36993..6dbf971fc1 100644 --- a/docs/i18n/ar/llm.txt +++ b/docs/i18n/ar/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/az/llm.txt b/docs/i18n/az/llm.txt index 326e9d53cd..405168adc4 100644 --- a/docs/i18n/az/llm.txt +++ b/docs/i18n/az/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/bg/llm.txt b/docs/i18n/bg/llm.txt index 326e9d53cd..405168adc4 100644 --- a/docs/i18n/bg/llm.txt +++ b/docs/i18n/bg/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/bn/llm.txt b/docs/i18n/bn/llm.txt index ed5018803b..a8c0992170 100644 --- a/docs/i18n/bn/llm.txt +++ b/docs/i18n/bn/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/cs/llm.txt b/docs/i18n/cs/llm.txt index 9db561a499..6d9f9450ed 100644 --- a/docs/i18n/cs/llm.txt +++ b/docs/i18n/cs/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/da/llm.txt b/docs/i18n/da/llm.txt index d69934faa7..d749a51e22 100644 --- a/docs/i18n/da/llm.txt +++ b/docs/i18n/da/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/de/llm.txt b/docs/i18n/de/llm.txt index ec69d3bd26..c0a8b44da4 100644 --- a/docs/i18n/de/llm.txt +++ b/docs/i18n/de/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/es/llm.txt b/docs/i18n/es/llm.txt index 41bd5e2763..fc3ce9004d 100644 --- a/docs/i18n/es/llm.txt +++ b/docs/i18n/es/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fa/llm.txt b/docs/i18n/fa/llm.txt index eddf9a0508..18b5ce1fea 100644 --- a/docs/i18n/fa/llm.txt +++ b/docs/i18n/fa/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fi/llm.txt b/docs/i18n/fi/llm.txt index 62c1602e03..1b9f7928f7 100644 --- a/docs/i18n/fi/llm.txt +++ b/docs/i18n/fi/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/fr/llm.txt b/docs/i18n/fr/llm.txt index c88c0bea08..9c47df309b 100644 --- a/docs/i18n/fr/llm.txt +++ b/docs/i18n/fr/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/gu/llm.txt b/docs/i18n/gu/llm.txt index 2d0e32c28a..280f67d0a8 100644 --- a/docs/i18n/gu/llm.txt +++ b/docs/i18n/gu/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/he/llm.txt b/docs/i18n/he/llm.txt index 5ef6a38c4f..9f52454218 100644 --- a/docs/i18n/he/llm.txt +++ b/docs/i18n/he/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/hi/llm.txt b/docs/i18n/hi/llm.txt index 0485b25972..67b8a5ce78 100644 --- a/docs/i18n/hi/llm.txt +++ b/docs/i18n/hi/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/hu/llm.txt b/docs/i18n/hu/llm.txt index d41f96ae59..bd50d354e7 100644 --- a/docs/i18n/hu/llm.txt +++ b/docs/i18n/hu/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/id/llm.txt b/docs/i18n/id/llm.txt index 6f22e0d810..9e14654777 100644 --- a/docs/i18n/id/llm.txt +++ b/docs/i18n/id/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/in/llm.txt b/docs/i18n/in/llm.txt index 101449022a..a8c5f7246e 100644 --- a/docs/i18n/in/llm.txt +++ b/docs/i18n/in/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/it/llm.txt b/docs/i18n/it/llm.txt index 6b4955dcf2..eda2f0a11b 100644 --- a/docs/i18n/it/llm.txt +++ b/docs/i18n/it/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ja/llm.txt b/docs/i18n/ja/llm.txt index 8323995d8e..36ce0452eb 100644 --- a/docs/i18n/ja/llm.txt +++ b/docs/i18n/ja/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ko/llm.txt b/docs/i18n/ko/llm.txt index 2af005e4c0..dd4e615ed3 100644 --- a/docs/i18n/ko/llm.txt +++ b/docs/i18n/ko/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/mr/llm.txt b/docs/i18n/mr/llm.txt index 7ee59e5eea..0c7c910196 100644 --- a/docs/i18n/mr/llm.txt +++ b/docs/i18n/mr/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ms/llm.txt b/docs/i18n/ms/llm.txt index 95ed1a5b9f..a4444836c8 100644 --- a/docs/i18n/ms/llm.txt +++ b/docs/i18n/ms/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/nl/llm.txt b/docs/i18n/nl/llm.txt index 23a11d7be9..769d9694e4 100644 --- a/docs/i18n/nl/llm.txt +++ b/docs/i18n/nl/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/no/llm.txt b/docs/i18n/no/llm.txt index 1f6343a945..26591c62aa 100644 --- a/docs/i18n/no/llm.txt +++ b/docs/i18n/no/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/phi/llm.txt b/docs/i18n/phi/llm.txt index f9cc575c93..bb41be4c75 100644 --- a/docs/i18n/phi/llm.txt +++ b/docs/i18n/phi/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pl/llm.txt b/docs/i18n/pl/llm.txt index 10916ca0ac..f78a71616b 100644 --- a/docs/i18n/pl/llm.txt +++ b/docs/i18n/pl/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pt-BR/llm.txt b/docs/i18n/pt-BR/llm.txt index 0700125ea9..d8d0d4ccb1 100644 --- a/docs/i18n/pt-BR/llm.txt +++ b/docs/i18n/pt-BR/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/pt/llm.txt b/docs/i18n/pt/llm.txt index 80e252d280..6645730180 100644 --- a/docs/i18n/pt/llm.txt +++ b/docs/i18n/pt/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ro/llm.txt b/docs/i18n/ro/llm.txt index 521a4967e8..d6246cbbec 100644 --- a/docs/i18n/ro/llm.txt +++ b/docs/i18n/ro/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ru/llm.txt b/docs/i18n/ru/llm.txt index 3418675f11..94ab1c502f 100644 --- a/docs/i18n/ru/llm.txt +++ b/docs/i18n/ru/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sk/llm.txt b/docs/i18n/sk/llm.txt index eee4ed1ebc..8f0ed3facc 100644 --- a/docs/i18n/sk/llm.txt +++ b/docs/i18n/sk/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sv/llm.txt b/docs/i18n/sv/llm.txt index 5c632bbcfd..fe740a63ae 100644 --- a/docs/i18n/sv/llm.txt +++ b/docs/i18n/sv/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/sw/llm.txt b/docs/i18n/sw/llm.txt index edee4bf350..cdcf4ca22f 100644 --- a/docs/i18n/sw/llm.txt +++ b/docs/i18n/sw/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ta/llm.txt b/docs/i18n/ta/llm.txt index 051be3f29e..4ac620a283 100644 --- a/docs/i18n/ta/llm.txt +++ b/docs/i18n/ta/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/te/llm.txt b/docs/i18n/te/llm.txt index cec468f0f5..329c91af47 100644 --- a/docs/i18n/te/llm.txt +++ b/docs/i18n/te/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/th/llm.txt b/docs/i18n/th/llm.txt index 8a3b811fa4..2ec1f8d9ab 100644 --- a/docs/i18n/th/llm.txt +++ b/docs/i18n/th/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/tr/llm.txt b/docs/i18n/tr/llm.txt index ebbaacb067..6ce3de4093 100644 --- a/docs/i18n/tr/llm.txt +++ b/docs/i18n/tr/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/uk-UA/llm.txt b/docs/i18n/uk-UA/llm.txt index 26f1d1d862..9df2f77df2 100644 --- a/docs/i18n/uk-UA/llm.txt +++ b/docs/i18n/uk-UA/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/ur/llm.txt b/docs/i18n/ur/llm.txt index 8c98210df2..9564625be8 100644 --- a/docs/i18n/ur/llm.txt +++ b/docs/i18n/ur/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/vi/llm.txt b/docs/i18n/vi/llm.txt index 0043dc5ac3..bddf9a846c 100644 --- a/docs/i18n/vi/llm.txt +++ b/docs/i18n/vi/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/zh-CN/llm.txt b/docs/i18n/zh-CN/llm.txt index 648b17d188..4b6c349ff9 100644 --- a/docs/i18n/zh-CN/llm.txt +++ b/docs/i18n/zh-CN/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/i18n/zh-TW/llm.txt b/docs/i18n/zh-TW/llm.txt index 95108c5472..a402eedfc3 100644 --- a/docs/i18n/zh-TW/llm.txt +++ b/docs/i18n/zh-TW/llm.txt @@ -7,7 +7,7 @@ -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -172,7 +172,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -284,7 +284,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -482,7 +482,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/docs/reference/ENVIRONMENT.md b/docs/reference/ENVIRONMENT.md index 8be1263399..9f02980f0f 100644 --- a/docs/reference/ENVIRONMENT.md +++ b/docs/reference/ENVIRONMENT.md @@ -1485,3 +1485,5 @@ Long-lived SSE consumer that mirrors OmniConductor hub tasks into the local A2A | --------------------- | ---------- | ---------------------------- | ------------------------------------------------------------------------------------------------------- | | `CONDUCTOR_HUB_URL` | _(empty)_ | `src/lib/conductor/boot.ts` | Base URL of the OmniConductor hub (e.g. `http://127.0.0.1:7910`). Unset = bridge disabled. | | `CONDUCTOR_HUB_TOKEN` | _(empty)_ | `src/lib/conductor/boot.ts` | Hub credential for the SSE feed — emit a `spokesperson`-kind peer on the hub (`POST /v1/peers`, admin). | +| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(empty)_ | `src/lib/conductor/hubProxy.ts` | Credential for inbound A2A→hub task delegation (`POST /v1/tasks`); falls back to `CONDUCTOR_HUB_TOKEN` when unset. | +| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Base URL of the spokesperson (Faro) service behind the dashboard chat proxy (`/api/conductor/ask`). | diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index a184cc10a4..b21f8d27c2 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -10,7 +10,7 @@ lastUpdated: 2026-08-12 > Regenerate with: `npm run gen:provider-reference` > **Last generated:** 2026-08-12 -Total providers: **338**. See category breakdown below. +Total providers: **339**. See category breakdown below. ## Categories @@ -118,7 +118,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `zai-web` | `zw` | Z.ai Web | Web cookie | [link](https://chat.z.ai) | Copy the "token" value from chat.z.ai → DevTools → Application → Local Storage. Do not copy cookies; OmniRoute handles the per-request CAPTCHA through its browser transport. | — | | `zenmux-free` | `zmf` | ZenMux Free (Web) | Web cookie | [link](https://zenmux.ai) | Login at zenmux.ai, then export all cookies using EditThisCookie or Cookie-Editor and paste the full Cookie header string here. Refresh every ~30 days. | — | -## API Key Providers (paid / paid-with-free-credits) (227) +## API Key Providers (paid / paid-with-free-credits) (228) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -154,6 +154,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `cerebras` | `cerebras` | Cerebras | API key | [link](https://inference.cerebras.ai) | Free Trial: 1M tokens/day, 30K TPM, 5 RPM — no credit card. | | `charm-hyper` | `charm-hyper` | Charm Hyper | API key | [link](https://hyper.charm.land) | 100 free monthly Hypercredits on signup | | `chat-oripe` | `chat-oripe` | Chat Oripe | API key, aggregator | [link](https://api.oriper.com) | Official metadata advertises 2M tokens/month, but the public site and documentation were blocked during audit; treat the quota and brand mapping as unconfirmed. | +| `chatanywhere` | `chatanywhere` | ChatAnywhere | API key, aggregator | [link](https://chatanywhere.tech) | Personal, educational or research use only: public documentation cites 10,000 points/day and 200 requests/day per IP/key; do not use for commercial traffic. | | `cheaperinference` | `cinf` | Cheaper Inference | API key | [link](https://cheaperinference.com/?utm_source=omniroute) | — | | `chenzk` | `chenzk` | Chenzk API | API key | [link](https://chenzk.top) | — | | `chutes` | `chutes` | Chutes.ai | API key, aggregator | [link](https://chutes.ai) | Bearer API key for the Chutes OpenAI-compatible gateway. | diff --git a/llm.txt b/llm.txt index c9819f298f..2d0d3ec260 100644 --- a/llm.txt +++ b/llm.txt @@ -1,6 +1,6 @@ # OmniRoute -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 338 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -165,7 +165,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ └── manager.ts # MITM proxy manager │ ├── shared/ # Shared utilities, components, and constants │ │ ├── components/ # Reusable UI components (Card, Badge, Button, Modal, Sidebar, ProviderIcon, etc.) -│ │ ├── constants/ # Provider definitions (338), model lists, pricing, routing strategies, MCP scopes +│ │ ├── constants/ # Provider definitions (339), model lists, pricing, routing strategies, MCP scopes │ │ ├── contracts/ # Shared API contracts │ │ ├── hooks/ # React hooks │ │ ├── middleware/ # Shared middleware utilities @@ -277,7 +277,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **338 AI providers** with automatic format translation +- **339 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **18 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription → API Key → Cheap → Free @@ -475,7 +475,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool ## v3.8.x Highlights -- **338-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add +- **339-provider catalog** with 90+ free tiers, one-click account imports, and bulk key add - **19 routing strategies** — including `fusion` (parallel panel + judge synthesis), `pipeline`, `reset-aware`, `reset-window`, `headroom`, and `context-relay` - **14-factor Auto-Combo scoring** with bandit exploration and progressive cooldown - **MCP server expanded to 105 tools / 31 scopes** (base + memory/skill/agentSkill/githubSkill/pool/notion/obsidian/localCorpus/gamification/plugin modules) diff --git a/open-sse/config/imageRegistry.ts b/open-sse/config/imageRegistry.ts index d7097420c4..b383895061 100644 --- a/open-sse/config/imageRegistry.ts +++ b/open-sse/config/imageRegistry.ts @@ -136,6 +136,17 @@ function resolveImageModelAlias(modelStr) { return alias ? { provider: alias.provider, model: alias.model } : null; } +// A bare alias may only rewrite a provider-prefixed model when it stays on the +// SAME provider (e.g. `antigravity/gemini-3.1-flash-image-preview` → +// antigravity's callable `gemini-3.1-flash-image`). A cross-provider bare alias +// must NOT override an explicit prefix — #9982 removed the unconditional bare +// fallback because `fal-ai/flux-2-max` was being hijacked to black-forest-labs +// by the bare `flux-2-max` alias. +function resolveSameProviderBareAlias(providerId, model) { + const aliased = resolveImageModelAlias(model); + return aliased && aliased.provider === providerId ? aliased : null; +} + function findImageModelConfig(providerId, modelId) { const provider = IMAGE_PROVIDERS[providerId]; if (!provider) return null; @@ -527,8 +538,11 @@ export const IMAGE_PROVIDERS: Record = { { id: "bytedance/seedream/v4.5/text-to-image", name: "SeeDream V4.5" }, { id: "bytedance/dreamina/v3.1/text-to-image", name: "Dreamina V3.1" }, { id: "ideogram/v3", name: "Ideogram V3" }, - { id: "nano-banana-pro", name: "Nano Banana Pro" }, - { id: "nano-banana-2", name: "Nano Banana 2" }, + // Prefix-only on purpose: adobe-firefly owns the bare nano-banana ids + // (operator decision 2026-07-31, pinned by cheaperinference-image-models + // guard). The dispatch path tolerates the fal-ai/ prefix (fal.ts). + { id: "fal-ai/nano-banana-pro", name: "Nano Banana Pro" }, + { id: "fal-ai/nano-banana-2", name: "Nano Banana 2" }, { id: "recraft/v4/pro/text-to-image", name: "Recraft V4 Pro via Fal" }, { id: "recraft/v4/text-to-image", name: "Recraft V4 via Fal" }, { id: "stable-diffusion-v35-medium", name: "Stable Diffusion v3.5 Medium" }, @@ -852,13 +866,17 @@ export function parseImageModel(modelStr) { for (const [providerId, config] of Object.entries(IMAGE_PROVIDERS)) { if (modelStr.startsWith(providerId + "/")) { const model = modelStr.slice(providerId.length + 1); - const aliased = resolveImageModelAlias(`${providerId}/${model}`); + const aliased = + resolveImageModelAlias(`${providerId}/${model}`) || + resolveSameProviderBareAlias(providerId, model); return aliased || { provider: providerId, model }; } // Check alias if available if (config.alias && modelStr.startsWith(config.alias + "/")) { const model = modelStr.slice(config.alias.length + 1); - const aliased = resolveImageModelAlias(`${providerId}/${model}`); + const aliased = + resolveImageModelAlias(`${providerId}/${model}`) || + resolveSameProviderBareAlias(providerId, model); return aliased || { provider: providerId, model }; } } diff --git a/open-sse/executors/base/reasoningEffort.ts b/open-sse/executors/base/reasoningEffort.ts index 55b328965e..5edf1188ae 100644 --- a/open-sse/executors/base/reasoningEffort.ts +++ b/open-sse/executors/base/reasoningEffort.ts @@ -260,16 +260,6 @@ export function sanitizeReasoningEffortForProvider( const effortStr = typeof c.effort === "string" ? c.effort.toLowerCase() : ""; const modelStr = model || ""; - // Oh My Pi exposes `minimal`, while Codex's Responses API starts at `low`. - // Normalize every carrier before the Codex executor sends the upstream request. - if (provider === "codex" && effortStr === "minimal") { - log?.info?.( - "REASONING_SANITIZE", - `${provider}/${modelStr}: normalized reasoning_effort minimal → low` - ); - return writeEffortValue(b, "low", c); - } - const githubOptIn = provider === "github" && GITHUB_REASONING_EFFORT_OPT_IN_PATTERN.test(modelStr); const rejecting = diff --git a/open-sse/executors/conol-web.ts b/open-sse/executors/conol-web.ts index 34914ea336..eb2efa8a84 100644 --- a/open-sse/executors/conol-web.ts +++ b/open-sse/executors/conol-web.ts @@ -512,7 +512,8 @@ async function uploadConolImages( signal?: AbortSignal | null, sessionId?: string ): Promise { - const images = await resolveCursorImages(imageUrls); + // Conol's asset endpoint stores the original bytes (no Cursor wire prep). + const images = await resolveCursorImages(imageUrls, { prepareForWire: false }); const parts: ConolMessagePart[] = []; for (const image of images) { const response = await fetch(`${CONOL_ORIGIN}/api/assets`, { @@ -683,8 +684,7 @@ export class ConolWebExecutor extends BaseExecutor { const timezone = safeTimezone(requestBody.timezone); // Sticky: once a session has carried an image, Conol keeps treating it as // multimodal, which drives preset text/multimodal model resolution. - const hasImageHistory = - (cachedBinding?.hasImageHistory ?? false) || imageParts.length > 0; + const hasImageHistory = (cachedBinding?.hasImageHistory ?? false) || imageParts.length > 0; // Conol ignores agentModel/agentEffort on session creation, so create the // session empty and configure it before any turn is submitted. Otherwise the diff --git a/open-sse/executors/zai-web.ts b/open-sse/executors/zai-web.ts index 159d7e2c1b..6629192c94 100644 --- a/open-sse/executors/zai-web.ts +++ b/open-sse/executors/zai-web.ts @@ -89,7 +89,8 @@ async function resolveZaiBrowserAttachments( { attachments: ZaiBrowserAttachments } | { errorResult: ReturnType } > { try { - const images = await resolveCursorImages(imageUrls); + // Browser-page upload: keep the original bytes/mimeType (no Cursor wire prep). + const images = await resolveCursorImages(imageUrls, { prepareForWire: false }); return { attachments: images.map((image, index) => ({ name: zaiImageFileName(image.mimeType, index), diff --git a/open-sse/handlers/mediaGeneration/fal.ts b/open-sse/handlers/mediaGeneration/fal.ts index 85053ef17d..fb1547ecb4 100644 --- a/open-sse/handlers/mediaGeneration/fal.ts +++ b/open-sse/handlers/mediaGeneration/fal.ts @@ -244,6 +244,12 @@ async function runFalQueue({ const startTime = Date.now(); const baseUrl = providerConfig.baseUrl.replace(/\/$/, ""); const token = getToken(credentials); + // Missing-credential guard — do not send an unauthenticated request upstream. + // The standalone falHandler.ts this module superseded (#9982/#10198 over + // #9969) returned this local 401; preserve that contract. + if (!token) { + return { success: false, status: 401, error: "Fal API key is required" }; + } const headers = { Authorization: `Key ${token}`, "Content-Type": "application/json", diff --git a/open-sse/services/autoCombo/modePacks.ts b/open-sse/services/autoCombo/modePacks.ts index 5c0bfd54cc..267dfceeec 100644 --- a/open-sse/services/autoCombo/modePacks.ts +++ b/open-sse/services/autoCombo/modePacks.ts @@ -14,84 +14,85 @@ export const MODE_PACKS: Record = { // Prioritize latency → health. tierPriority replaces 0.05 from stability. // tierAffinity/specificityMatch stay at 0 (manifest-routing-only weights). "ship-fast": { - quota: 0.14, - health: 0.28, - costInv: 0.05, - latencyInv: 0.32, - taskFit: 0.1, - stability: 0.0, - tierPriority: 0.05, + quota: 0.1333, + health: 0.2667, + costInv: 0.0476, + latencyInv: 0.3048, + taskFit: 0.0952, + stability: 0, + tierPriority: 0.0476, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.01, - sessionAvailability: 0.05, + contextAffinity: 0.0095, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, // Prioritize cost. tierPriority replaces 0.05 from stability. "cost-saver": { - quota: 0.14, - health: 0.19, - costInv: 0.37, - latencyInv: 0.05, - taskFit: 0.1, - stability: 0.05, - tierPriority: 0.05, + quota: 0.1333, + health: 0.181, + costInv: 0.3524, + latencyInv: 0.0476, + taskFit: 0.0952, + stability: 0.0476, + tierPriority: 0.0476, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.0, - sessionAvailability: 0.05, + contextAffinity: 0, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, // Prioritize task fitness. tierPriority replaces 0.05 from latencyInv. "quality-first": { - quota: 0.1, - health: 0.18, - costInv: 0.05, - latencyInv: 0.05, - taskFit: 0.37, - stability: 0.15, - tierPriority: 0.05, + quota: 0.0952, + health: 0.1714, + costInv: 0.0476, + latencyInv: 0.0476, + taskFit: 0.3524, + stability: 0.1429, + tierPriority: 0.0476, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.0, - sessionAvailability: 0.05, + contextAffinity: 0, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, // Prioritize quota availability. tierPriority replaces 0.05 from taskFit. "offline-friendly": { - quota: 0.37, - health: 0.28, - costInv: 0.1, - latencyInv: 0.05, - taskFit: 0.0, - stability: 0.1, - tierPriority: 0.05, + quota: 0.3524, + health: 0.2667, + costInv: 0.0952, + latencyInv: 0.0476, + taskFit: 0, + stability: 0.0952, + tierPriority: 0.0476, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.0, - sessionAvailability: 0.05, + contextAffinity: 0, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, // #4235 `:reliable` — prioritize healthy, low-variance providers (high availability). - // health (circuit-breaker) + stability (latency std-dev) dominate; weights sum to 1.0. + // health (circuit-breaker) + stability (latency std-dev) dominate; weights sum to ~1.0 + // (re-normalized after #8940 added sessionAvailability without rebalancing — #9985). "reliability-first": { - quota: 0.14, - health: 0.37, - costInv: 0.04, - latencyInv: 0.05, - taskFit: 0.1, - stability: 0.2, - tierPriority: 0.05, + quota: 0.1333, + health: 0.3524, + costInv: 0.0381, + latencyInv: 0.0476, + taskFit: 0.0952, + stability: 0.1905, + tierPriority: 0.0476, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.0, - sessionAvailability: 0.05, + contextAffinity: 0, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, // Chaos mode — priority: health > stability > taskFit > latency. // Selects top-N healthy providers for parallel dispatch. Favors providers with @@ -100,19 +101,19 @@ export const MODE_PACKS: Record = { // to picking the most stable providers); connectionDensity boosted slightly to // prefer providers with multiple accounts (more resilient to per-account rate limits). "chaos-mode": { - quota: 0.05, - health: 0.42, - costInv: 0.02, - latencyInv: 0.03, - taskFit: 0.2, - stability: 0.18, - tierPriority: 0.02, + quota: 0.0476, + health: 0.4, + costInv: 0.019, + latencyInv: 0.0286, + taskFit: 0.1905, + stability: 0.1714, + tierPriority: 0.019, tierAffinity: 0, specificityMatch: 0, - contextAffinity: 0.03, - sessionAvailability: 0.05, + contextAffinity: 0.0286, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }, }; diff --git a/open-sse/services/autoCombo/scoring.ts b/open-sse/services/autoCombo/scoring.ts index f64ab607f2..b8f66a797e 100644 --- a/open-sse/services/autoCombo/scoring.ts +++ b/open-sse/services/autoCombo/scoring.ts @@ -43,20 +43,20 @@ export interface ScoringWeights { } export const DEFAULT_WEIGHTS: ScoringWeights = { - quota: 0.15, - health: 0.2, - costInv: 0.15, - latencyInv: 0.12, - taskFit: 0.08, - stability: 0.05, - tierPriority: 0.05, - tierAffinity: 0.05, - specificityMatch: 0.05, - contextAffinity: 0.05, + quota: 0.1429, + health: 0.1905, + costInv: 0.1429, + latencyInv: 0.1143, + taskFit: 0.0762, + stability: 0.0476, + tierPriority: 0.0476, + tierAffinity: 0.0476, + specificityMatch: 0.0476, + contextAffinity: 0.0476, cacheAffinity: 0, - sessionAvailability: 0.05, + sessionAvailability: 0.0476, resetWindowAffinity: 0, - connectionDensity: 0.05, + connectionDensity: 0.0476, }; /** Normalize independently configured UI weights into a scoring distribution. */ diff --git a/open-sse/services/bottleneckPatch.ts b/open-sse/services/bottleneckPatch.ts index fafafcb9ed..f2dcca9666 100644 --- a/open-sse/services/bottleneckPatch.ts +++ b/open-sse/services/bottleneckPatch.ts @@ -17,6 +17,75 @@ import Bottleneck from "bottleneck"; +/** Bottleneck LocalDatastore instance (internal, not exported). */ +interface BottleneckLocalDatastore { + heartbeat: ReturnType | null | undefined; + storeOptions: { + reservoirRefreshInterval?: number | null; + reservoirRefreshAmount?: number | null; + reservoirIncreaseInterval?: number | null; + reservoirIncreaseAmount?: number | null; + }; + _startHeartbeat: () => unknown; +} + +let heartbeatPatched = false; + +/** + * Monkey-patch for Bottleneck v2.19.5 LocalDatastore#_startHeartbeat bug. + * + * Bug (LocalDatastore.js:26-58): the guard `if (this.heartbeat == null && )` + * only creates the reservoir-refresh setInterval the FIRST time. Every later call — + * including the one `updateSettings()` triggers via `__updateSettings__` — takes the + * `else` branch and does `clearInterval(this.heartbeat)` WITHOUT resetting + * `this.heartbeat` to null. The stale reference makes all future calls keep taking + * the dead `else` branch: the periodic reservoir refresh is gone forever after the + * first manual `updateSettings()` on a limiter that already had a heartbeat. + * + * Production symptom (#9529 / weighted.test.ts E2E): after a header-learned + * updateSettings(), the reservoir zeroes and never refills — the request queue wedges + * until the watchdog fires a synthetic 502. + * + * Fixed semantics: + * - refresh config present, no live interval → create (delegate to the original). + * - refresh config present, interval alive → keep it (interval reads storeOptions + * live, so updated amounts are picked up) — upstream wrongly killed it here. + * - refresh config absent, interval alive → clearInterval AND null the handle. + */ +export function applyBottleneckHeartbeatPatch(): void { + if (heartbeatPatched) return; + heartbeatPatched = true; + + // LocalDatastore is not exported; reach its prototype through a throwaway instance. + const probe = new Bottleneck({}); + const store = (probe as unknown as { _store: BottleneckLocalDatastore })._store; + const proto = Object.getPrototypeOf(store) as BottleneckLocalDatastore; + void probe.disconnect(); + + const originalStartHeartbeat = proto._startHeartbeat; + if (typeof originalStartHeartbeat !== "function") { + console.warn("[bottleneck-patch] _startHeartbeat not found on LocalDatastore, patch skipped"); + return; + } + + proto._startHeartbeat = function patchedStartHeartbeat(this: BottleneckLocalDatastore) { + const opts = this.storeOptions ?? {}; + const wantsHeartbeat = + (opts.reservoirRefreshInterval != null && opts.reservoirRefreshAmount != null) || + (opts.reservoirIncreaseInterval != null && opts.reservoirIncreaseAmount != null); + + if (this.heartbeat != null) { + if (wantsHeartbeat) return; // alive and still wanted — upstream wrongly cleared it here + clearInterval(this.heartbeat); + this.heartbeat = null; // upstream forgot this null-out — the core of the bug + return; + } + return originalStartHeartbeat.call(this); + }; + + console.log("[bottleneck-patch] Applied _startHeartbeat fix for Bottleneck v2.19.5"); +} + /** Bottleneck Job instance (internal, not exported). */ interface BottleneckJob { options: { id?: string; expiration?: number }; diff --git a/open-sse/services/rateLimitManager.ts b/open-sse/services/rateLimitManager.ts index a58407194f..3582eec9c0 100644 --- a/open-sse/services/rateLimitManager.ts +++ b/open-sse/services/rateLimitManager.ts @@ -9,7 +9,10 @@ */ import Bottleneck from "bottleneck"; -import { applyBottleneckDoExpirePatch } from "./bottleneckPatch.ts"; +import { + applyBottleneckDoExpirePatch, + applyBottleneckHeartbeatPatch, +} from "./bottleneckPatch.ts"; import { parseRetryAfterFromBody } from "./accountFallback.ts"; import { getAntigravityQuotaFamily } from "./antigravityQuotaFamily.ts"; import { getProviderCategory } from "../config/providerRegistry.ts"; @@ -323,6 +326,7 @@ export async function initializeRateLimits() { initialized = true; // Fix Bottleneck v2.19.5 doExpire bug before any limiter is created. applyBottleneckDoExpirePatch(); + applyBottleneckHeartbeatPatch(); try { const { getCachedProviderConnections, getSettings } = await import("@/lib/localDb"); @@ -467,6 +471,10 @@ function getLimiter(provider, connectionId, model = null) { const key = getLimiterKey(provider, connectionId, model); if (!limiters.has(key)) { + // Idempotent — covers callers (and tests) that reach limiter creation + // without going through initializeRateLimits(). + applyBottleneckDoExpirePatch(); + applyBottleneckHeartbeatPatch(); const preserved = preservedReplacementSettings.get(key); let options: Bottleneck.ConstructorOptions; if (preserved) { diff --git a/open-sse/translator/response/openai-responses/pureHelpers.ts b/open-sse/translator/response/openai-responses/pureHelpers.ts index 7cea183884..b7624dd287 100644 --- a/open-sse/translator/response/openai-responses/pureHelpers.ts +++ b/open-sse/translator/response/openai-responses/pureHelpers.ts @@ -108,7 +108,11 @@ export function stripEmptyOptionalToolArgs(value, toolName, schema) { if (typeof value === "string") { // JSON-string cleanup runs for allowlisted tools, or for any tool once a schema is // supplied (schema-aware normalization is not restricted to the allowlist). - if (!hasUsableSchema(schema) && !STRIPPABLE_EMPTY_ARG_TOOLS.has(toolName)) return value; + // "Agent" also passes without a schema: isDroppableNullEntry drops its null + // omission sentinels even when the strict schema snapshot is unavailable (#9423). + if (!hasUsableSchema(schema) && !STRIPPABLE_EMPTY_ARG_TOOLS.has(toolName) && toolName !== "Agent") { + return value; + } try { const parsed = JSON.parse(value); if (Array.isArray(parsed) || typeof parsed !== "object" || parsed === null) return value; diff --git a/open-sse/utils/cursorImages.ts b/open-sse/utils/cursorImages.ts index 1ac6fbafd1..11d1beda2d 100644 --- a/open-sse/utils/cursorImages.ts +++ b/open-sse/utils/cursorImages.ts @@ -657,8 +657,13 @@ export async function prepareCursorImageForWire(input: { */ export async function resolveCursorImages( imageUrls: string[], - options?: { detail?: string } + options?: { detail?: string; prepareForWire?: boolean } ): Promise { + // Cursor's SelectedImage wire format needs the JPEG soft-cap prep (#9840). + // Browser-upload callers (zai-web, conol-web) upload the ORIGINAL bytes to + // their own web UIs, so they opt out and keep the pre-#9840 decode+validate + // behavior: raw data + declared mimeType, capped at MAX_CURSOR_IMAGE_BYTES. + const prepareForWire = options?.prepareForWire !== false; if (imageUrls.length > MAX_CURSOR_IMAGES) { throw new CursorImageError(`Too many images in one request (max ${MAX_CURSOR_IMAGES}).`); } @@ -679,6 +684,14 @@ export async function resolveCursorImages( throw new CursorImageError("Image input is too large to process safely."); } + if (!prepareForWire) { + if (data.length > MAX_CURSOR_IMAGE_BYTES) { + throw new CursorImageError("Image input is too large (max 1 MiB). Resize and retry."); + } + out.push({ data, mimeType, uuid: crypto.randomUUID() }); + continue; + } + const prepared = await prepareCursorImageForWire({ data, mimeType, diff --git a/open-sse/utils/proxyFetch.ts b/open-sse/utils/proxyFetch.ts index b8b9798bc6..56920ccef5 100644 --- a/open-sse/utils/proxyFetch.ts +++ b/open-sse/utils/proxyFetch.ts @@ -318,6 +318,20 @@ function isWreqProxySupported(proxyUrl: string): boolean { } } +/** + * Redact proxy URLs (and any bare `user:pass@host` credential tokens) from an + * upstream transport-error message before it is surfaced. #10032 keeps the + * underlying failure reason in the propagated error for diagnosability, but + * the raw message can embed the full proxy URL — including userinfo + * credentials — which must never bubble into response bodies (#9837, Hard + * Rule #12). + */ +function redactProxyDetailsInMessage(message: string): string { + return message + .replace(/\b(?:https?|socks[45][ah]?|socks):\/\/\S+/gi, "[redacted-proxy]") + .replace(/\b[^\s:@/]+:[^\s@/]*@\S+/g, "[redacted-proxy]"); +} + function sanitizeTransportError( error: unknown, message: string, @@ -1106,7 +1120,12 @@ async function patchedFetch( continue; } tagProxyUnreachable(error); - const originalMsg = error instanceof Error ? error.message : String(error); + // #10032: keep the underlying reason for diagnosability, but redact any + // proxy URL / credential tokens first — this error can bubble into + // response bodies (#9837, Hard Rule #12). + const originalMsg = redactProxyDetailsInMessage( + error instanceof Error ? error.message : String(error) + ); const sanitized = sanitizeTransportError( error, originalMsg diff --git a/package.json b/package.json index e89911492c..4b01b57f15 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "omniroute", "version": "3.8.50", - "description": "Unified AI router with 338 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", + "description": "Unified AI router with 339 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", "type": "module", "bin": { "omniroute": "bin/omniroute.mjs", diff --git a/scripts/check/check-env-doc-sync.mjs b/scripts/check/check-env-doc-sync.mjs index 05921a4e2b..427813063e 100644 --- a/scripts/check/check-env-doc-sync.mjs +++ b/scripts/check/check-env-doc-sync.mjs @@ -91,6 +91,12 @@ const IGNORE_FROM_CODE = new Set([ // CI providers (set by the runner). "GITHUB_BASE_REF", "GITHUB_BASE_SHA", + // Set by the Actions runner; the ts7 ratchet appends its job summary there + // (scripts/check/check-ts7-diagnostics-ratchet.mjs) — never OmniRoute runtime config (#9985). + "GITHUB_STEP_SUMMARY", + // Same class as BASE_REF: CI passes the PR base ref to the ts7 diagnostics ratchet + // (scripts/check/check-ts7-diagnostics-ratchet.mjs) — a check signal, not runtime config (#9985). + "TS7_BASE_REF", // CI passes BASE_REF=${{ github.base_ref }} to the OpenAPI breaking-change gate // (scripts/check/check-openapi-breaking.mjs) — a build/check signal, not OmniRoute runtime config. "BASE_REF", diff --git a/skills/config-codex-cli/SKILL.md b/skills/config-codex-cli/SKILL.md index 89900b2f54..3d895db52f 100644 --- a/skills/config-codex-cli/SKILL.md +++ b/skills/config-codex-cli/SKILL.md @@ -4,6 +4,20 @@ description: Step-by-step agent workflow to configure the OpenAI Codex CLI on an --- +## Overview + +Step-by-step agent workflow to configure the OpenAI Codex CLI on any machine (Linux, macOS, Windows) to use OmniRoute as an OpenAI-compatible backend. Detects OS and shell, writes config.toml and 7 named profiles, sets environment variables, and verifies the setup. + +## Quick install + +```bash +npm install -g omniroute # or: npx omniroute +omniroute --version +``` + +## Subcommands + +_No CLI subcommands mapped for this family yet._ diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 643544bf07..8f78c97d96 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -172,6 +172,18 @@ "unselectAll": "إلغاء تحديد الكل", "visibleModels": "مرئي", "selectAllConfirm": "إضافة {count} نموذجًا إلى هذه المجموعة؟", + "testSelectedProviders": "موفرو الاختبارات", + "testingSelectedProviders": "اختبار {done}/{total}...", + "noProvidersSelectedToTest": "تحقق من مزود واحد على الأقل أدناه أولاً", + "noModelsToTestForProviders": "لا توجد نماذج للاختبار لمقدمي الخدمة المحددين", + "testSelectedProvidersResults": "{ok} من {total} نموذج يعمل", + "selectWorkingModels": "إضافة العمل", + "unselectWorkingModels": "إلغاء تحديد العمل", + "noWorkingModelsToSelect": "لا توجد نماذج عمل متبقية للإضافة", + "providerTestHint": "نصيحة: تحقق من مزود → اختبار → أضف العمل. انقر مرة أخرى لإلغاء التحديد.", + "selectAllProviders": "تحقق من جميع المزودين", + "clearProviderSelection": "إلغاء تحديد المزودين", + "providersSelectedCount": "تم التحقق من {count} مزودًا", "errorOccurred": "حدث خطأ", "comboDeleted": "تم حذف المجموعة", "hide": "إخفاء", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "هل تريد إلغاء هذه الدفعة؟ ستتوقف الطلبات قيد التقدم.", "batchActionCancelError": "فشل في إلغاء الدفعة. حاول ثانية.", "batchActionRetryError": "فشلت إعادة محاولة الطلبات الفاشلة. حاول ثانية.", - "batchConceptRetentionNote": "يتم الاحتفاظ بالنتائج وملفات الأخطاء لمدة 30 يومًا (Anthropic: 29 يومًا)" + "batchConceptRetentionNote": "يتم الاحتفاظ بالنتائج وملفات الأخطاء لمدة 30 يومًا (Anthropic: 29 يومًا)", + "batchFilesSizeColumn": "الحجم", + "toggleNoAuthProvider": "تبديل مزود عدم المصادقة", + "loadingModels": "جارٍ تحميل النماذج…", + "selectAModel": "اختر نموذجًا", + "degraded": "متدهور", + "zeroConfigBannerTitle": "التشغيل في وضع عدم الحاجة إلى تكوين", + "zeroConfigBannerBody": "تم إنشاء مفاتيح تشفير آمنة تلقائيًا بواسطة OmniRoute عند الإطلاق الأول. يتم الاحتفاظ بها في {dataDir}. لا حاجة لأي إجراء - بياناتك مشفرة وآمنة. لاستخدام مفاتيح مخصصة، أضف JWT_SECRET و STORAGE_ENCRYPTION_KEY إلى ذلك الملف.", + "batchRelativeTimeIn": "في {value}", + "batchRelativeTimeAgo": "منذ {value}", + "batchDetailsTitle": "تفاصيل الدفعة", + "batchProgress": "التقدم", + "batchCompletedCount": "{count} مكتمل", + "batchFailedCount": "{count} فشل", + "batchPendingCount": "{count} معلقة", + "batchTimeline": "الجدول الزمني", + "batchTimelineInProgress": "قيد التقدم", + "batchTimelineFinalizing": "إنهاء", + "batchTimelineCompleted": "مكتمل", + "batchTimelineFailed": "فشل", + "batchTimelineExpires": "تنتهي صلاحيتها", + "batchTimelineExpired": "منتهي الصلاحية", + "batchTimelineCancelling": "إلغاء", + "batchTimelineCancelled": "ملغى", + "batchTokenUsage": "استخدام الرمز", + "batchMetadata": "بيانات التعريف", + "batchFileContents": "محتويات الملف", + "batchFileUsedByCount": "مستخدم بواسطة {count, plural, one {دفعة واحدة} other {# دفعات}}", + "batchFilePreview": "معاينة", + "batchFilePreviewTruncated": "عرض {shown} سطرًا أوليًا ({total} سطرًا إجماليًا)", + "batchFileDownloadFull": "تحميل الملف الكامل" }, "disabled": "معطل", "featureFlagOmnirouteEmergencyFallbackDescription": "توجيه الطلبات التي استنفدت الميزانية إلى موفر/نموذج الاحتياط المجاني للطوارئ.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "فاصل", "discovery": "اكتشاف", "discoverySubtitle": "فحص المزودين للوصول المجاني", + "conductor": "موصل", + "conductorSubtitle": "أسطول عميل سطر الأوامر", "resilienceConnections": "مرونة الاتصال", "resilienceConnectionsSubtitle": "التبريد، القاطع، حالة الحظر", "settingsModalityBridge": "جسر الوضعية", - "settingsModalityBridgeSubtitle": "تحويل الصورة/الصوت إلى نص للنماذج التي تدعم النص فقط" + "settingsModalityBridgeSubtitle": "تحويل الصورة/الصوت إلى نص للنماذج التي تدعم النص فقط", + "commandPalette": { + "title": "لوحة الأوامر", + "searchPlaceholder": "ابحث عن الصفحات، الإعدادات، الأدوات...", + "clearSearch": "مسح البحث", + "noResults": "لا توجد نتائج", + "navigate": "تصفح", + "open": "فتح", + "close": "إغلاق" + }, + "noResults": "لا توجد نتائج" }, "webhooks": { "title": "خطافات الويب", @@ -1477,7 +1531,11 @@ "settings.update_failed": "فشل تحديث الإعدادات", "sync.token.created": "تم إنشاء رمز المزامنة", "sync.token.revoked": "تم إلغاء رمز المزامنة" - } + }, + "mcpMetricCalls24h": "المكالمات (24 ساعة)", + "mcpMetricSuccessRate": "معدل النجاح", + "mcpMetricAvgDuration": "متوسط المدة", + "mcpMetricTopTool": "أفضل أداة" }, "themesPage": { "title": "المواضيع", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "نسخة جديدة متاحة. انقر للتحديث.", "updateStarted": "بدأ التحديث...", "reloadingPageAutomatically": "جارٍ إعادة تحميل الصفحة تلقائيًا...", - "providerTopology": "طوبولوجيا الموفر" + "providerTopology": "طوبولوجيا الموفر", + "downloadDmg": "تحميل DMG (macOS)", + "downloadDmgDescription": "يتوفر إصدار جديد من تطبيق OmniRoute لسطح المكتب. يرجى تنزيل وتثبيت مثبت DMG لنظام macOS للتحديث (الحالي: v{version}).", + "downloadExe": "تحميل EXE (ويندوز)", + "downloadExeDescription": "يتوفر إصدار جديد من تطبيق OmniRoute لسطح المكتب. يرجى تنزيل وتثبيت مثبت Windows EXE للتحديث (الحالي: v{version}).", + "downloadAppImage": "تحميل AppImage (لينكس)", + "downloadAppImageDescription": "يتوفر إصدار جديد من تطبيق OmniRoute لسطح المكتب. يرجى تنزيل حزمة Linux AppImage للتحديث (الحالي: v{version}).", + "downloadUpdate": "تنزيل التحديث", + "downloadUpdateDescription": "يتوفر إصدار جديد من تطبيق OmniRoute لسطح المكتب. يرجى تنزيل تنسيق التطبيق المناسب لنظامك للتحديث (الحالي: v{version}).", + "updateQueued": "تمت جدولة التحديث إلى v{version}.", + "updateDockerRebuilding": "صورة Docker تعيد البناء في الخلفية.", + "updateWaitingRestart": "في انتظار إعادة تشغيل OmniRoute مع الإصدار الجديد.", + "updateInstalling": "تثبيت v{version}.", + "updateRunning": "OmniRoute يعمل الآن بالإصدار v{version}.", + "updateCompleted": "تم تحديث OmniRoute إلى الإصدار {version}.", + "updateDockerStillRebuilding": "صورة Docker لا تزال تعيد البناء للإصدار {version}.", + "updateInstallingBackground": "تثبيت v{version} في الخلفية.", + "updateWaitingVersion": "في انتظار عودة OmniRoute على v{version}.", + "updateDockerStillInProgress": "إعادة بناء Docker لا تزال جارية.", + "updateRestarting": "إعادة تشغيل الخدمة جارية. في انتظار عودة OmniRoute إلى العمل...", + "updateTimeout": "بدأ التحديث، لكن v{version} لم يصبح متاحًا قبل انتهاء المهلة. قم بتحديث الصفحة أو تحقق من سجلات الخادم.", + "updateTimedOut": "انتهت مهلة التحديث إلى v{version}.", + "updateStartFailed": "فشل في بدء التحديث.", + "noResponseStream": "لم يتم استلام تدفق استجابة.", + "updateComplete": "تم التحديث بنجاح!", + "updateFailed": "فشل التحديث.", + "updateNetworkError": "خطأ في الشبكة - تم فقدان الاتصال أثناء التحديث.", + "stepInstallPackage": "تثبيت الحزمة", + "stepRebuildNativeModules": "إعادة بناء الوحدات الأصلية", + "stepRestartService": "إعادة تشغيل الخدمة", + "stepComplete": "مكتمل", + "stepError": "خطأ", + "updateCompleteTitle": "تم التحديث بنجاح!", + "updateFailedTitle": "فشل التحديث", + "updatingTitle": "تحديث OmniRoute...", + "reloadNotice": "ستتم إعادة تحميل الصفحة تلقائيًا خلال بضع ثوانٍ.", + "retryNotice": "يرجى المحاولة مرة أخرى أو التحديث يدويًا عبر CLI.", + "restartNotice": "لا تغلق هذه الصفحة. سيقوم النظام بإعادة التشغيل تلقائيًا.", + "reloadNow": "إعادة تحميل الآن", + "closeUpdate": "إغلاق", + "retryUpdate": "إعادة المحاولة", + "updateAvailableTitle": "تحديث متاح: v{version}{desktop}", + "desktopAppLabel": "(تطبيق سطح المكتب)", + "checkingForUpdates": "جارٍ التحقق من التحديثات...", + "versionAvailableForDownload": "الإصدار v{version} متاح للتنزيل.", + "downloadingUpdate": "جارٍ تنزيل التحديث... {percent}% مكتمل.", + "updateDownloaded": "تم تنزيل التحديث بنجاح! انقر على إعادة التشغيل والتثبيت لتطبيقه.", + "autoUpdateFailed": "فشل التحديث التلقائي: {reason}.", + "unknownUpdateError": "خطأ غير معروف", + "versionAvailableDesktop": "الإصدار v{version} متاح لتطبيق سطح المكتب.", + "manualUpdateRequired": "تحديث يدوي مطلوب لهذا النوع من التثبيت.", + "restartAndInstall": "إعادة التشغيل والتثبيت", + "checkForUpdate": "تحقق من التحديثات", + "manualUpdate": "تحديث يدوي", + "directDownloadHint": "أو قم بتنزيل تنسيق المثبت المعني مباشرة:", + "releaseNotes": "ملاحظات الإصدار", + "readMore": "اقرأ المزيد", + "noAuthLabel": "لا يوجد مصادقة" }, "analytics": { "title": "التحليلات", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "مستنتج من سجلات الاستدعاء المحفوظة حول هذا الطلب", "routeRecommendations": "التوصيات", "routeLimitations": "القيود", - "routeNoKnownLimitations": "لا توجد قيود معروفة لهذا التفسير." + "routeNoKnownLimitations": "لا توجد قيود معروفة لهذا التفسير.", + "searchAnalyticsLoading": "جارٍ تحميل تحليلات البحث…", + "searchAnalyticsNoData": "لا توجد بيانات بحث متاحة بعد.", + "searchAnalyticsNoDataDescription": "ستظهر طلبات البحث هنا بعد أول بحث عبر /v1/search.", + "searchAnalyticsToday": "{count} اليوم", + "searchAnalyticsCachedRequests": "{count} طلبات مخزنة", + "searchAnalyticsApiCosts": "تكاليف واجهة برمجة التطبيقات للبحث", + "searchAnalyticsErrors": "{count} أخطاء", + "searchAnalyticsNoErrors": "لا توجد أخطاء", + "searchAnalyticsProviderBreakdown": "تفصيل المزود", + "searchAnalyticsQueries": "استعلامات", + "searchAnalyticsEmptyDescription": "استخدم POST /v1/search لبدء توجيه عمليات البحث على الويب.", + "searchAnalyticsFreeTier": "الطبقة المجانية متاحة: سيربر (2,500/شهر)، بريف (2,000/شهر)، إكسا (1,000/شهر)، تافيلي (1,000/شهر) — إجمالي 6,500+ بحث مجاني/شهر مع التحويل التلقائي.", + "autoRoutingNoDataAvailable": "لا توجد تحليلات توجيه تلقائي متاحة. قم بإجراء الطلبات باستخدام بادئة auto/ لرؤية المقاييس.", + "defaultVariantLabel": "افتراضي", + "freeTierAvailable": "الطبقة المجانية متاحة" }, "apiManager": { "title": "مفاتيح واجهة برمجة التطبيقات", @@ -2124,7 +2254,7 @@ "savePermissions": "حفظ الأذونات", "endpointRestrictions": "نقاط النهاية المسموح بها", "allEndpointsAllowed": "يمكن لهذا المفتاح الوصول إلى جميع نقاط نهاية API.", - "endpointsRestricted": "مقيّد بـ {count} من نقاط النهاية.", + "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "الحل التلقائي", "autoResolveDesc": "حل أسماء النماذج الغامضة تلقائيًا للموفر الأصلي لمفتاح واجهة برمجة التطبيقات (API) هذا.", "streamDefaultMode": "التوافق الافتراضي للبث", @@ -2348,7 +2478,9 @@ "providerCount": "{count} من المزودين", "imageToTextBridgeAvailable": "يمكن لجسر الوضعية الآن وصف الصور للنماذج النصية فقط. سيكون ملعب التعليمات البرمجية المضمن متاحًا عندما يتم تنفيذ /api/v1/images/understanding.", "imageToTextBridgeCta": "قم بتكوين جسر الصورة→النص في إعدادات جسر الوضعية", - "sttBridgeCta": "قم بتكوين جسر الكلام→النص في إعدادات جسر الوضعية" + "sttBridgeCta": "قم بتكوين جسر الكلام→النص في إعدادات جسر الوضعية", + "existingConnection": "الاتصال الحالي", + "openrouterSttDescription": "تستخدم نماذج تحويل الكلام إلى نص في OpenRouter اتصال OpenRouter الذي قمت بتكوينه. لا حاجة لمصادقة منفصلة." }, "search": { "searchQuery": "استعلام البحث", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "لصق في:", "copilotReloadInstruction": "ثم أعد تحميل VS Code وعيّن مفتاح API في موجه الإدخال.", "wireApiChatCompletions": "مكتملات الدردشة (/chat/مكتملات)", - "wireApiResponses": "واجهة برمجة تطبيقات الاستجابات (/ الاستجابات)" + "wireApiResponses": "واجهة برمجة تطبيقات الاستجابات (/ الاستجابات)", + "cliproxyapiActionFailed": "فشل الإجراء", + "cliproxyapiActionSucceeded": "تمت العملية بنجاح", + "cliproxyapiCheckUpdates": "تحقق من التحديثات", + "cliproxyapiDescription": "تراجع الوكيل العلوي (OAuth المعتمد على Go)", + "cliproxyapiHealth": "الصحة", + "cliproxyapiHealthy": "صحي", + "cliproxyapiInstall": "تثبيت", + "cliproxyapiNotInstalledValue": "غير مثبت", + "cliproxyapiPort": "منفذ", + "cliproxyapiRequestFailed": "فشل الطلب", + "cliproxyapiRestart": "إعادة تشغيل", + "cliproxyapiStart": "ابدأ", + "cliproxyapiStatusError": "خطأ", + "cliproxyapiStatusInstalled": "تم التثبيت", + "cliproxyapiStatusNotInstalled": "غير مثبت", + "cliproxyapiStatusRunning": "تشغيل", + "cliproxyapiStatusStopped": "توقف", + "cliproxyapiStop": "توقف", + "cliproxyapiUnhealthy": "غير صحي", + "cliproxyapiUnknown": "غير معروف", + "cliproxyapiUpdate": "تحديث", + "cliproxyapiUpdateAvailable": "تحديث متاح: v{current} → v{latest}", + "cliproxyapiVersion": "الإصدار" }, "combos": { "title": "المجموعات", @@ -3236,6 +3391,8 @@ "pricingMissing": "الأسعار غير متوفرة", "pricingAvailableShort": "متوفر", "pricingMissingShort": "مفقود", + "fallbackOnlyOnQuotaExhaustion": "التقدم فقط عند استنفاد الحصة", + "fallbackOnlyOnQuotaExhaustionShort": "تراجع خاص بالحصة فقط", "warningRoundRobinSingleModel": "يكون التوزيع الدوري أكثر فائدة مع نموذجين على الأقل.", "warningCostOptimizedPartialPricing": "فقط {priced} من طرازات {total} لها أسعار. قد يكون التوجيه مدركًا جزئيًا للتكلفة.", "warningCostOptimizedNoPricing": "لم يتم العثور على بيانات تسعير لهذه المجموعة. قد يتم توجيه التكلفة المحسّنة بشكل غير متوقع.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "تبقى حزمة الوضع والترجيح هنا، وتبقى حالة قاطع الدائرة وقت التشغيل في صفحة الصحة.", "emailVisibilityHint": "يتبع عرض البريد الإلكتروني للحساب هنا إعداد الخصوصية العام.", "emailVisibilityTooltip": "استخدم رمز العين لإظهار رسائل البريد الإلكتروني للحسابات أو إخفائها في جميع شاشات المجموعات والمزودين والحصص.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "خطوة بخطوة (المزود → النموذج)", + "builderModeGlobal": "بحث النموذج العالمي (مجموعة مخصصة)", + "builderGlobalSearchPlaceholder": "ابحث عن النماذج عبر جميع المزودين (مثل opus، sonnet، deepseek، kimi، qwen)...", + "builderGlobalAddAll": "أضف الكل", + "builderGlobalShortcuts": "اختصارات:", + "builderGlobalNoResults": "لم يتم العثور على نموذج لـ \"{query}\".", + "builderGlobalProviderLabel": "المزود:", + "builderGlobalAccountCount": "{count, plural, one {# حساب} other {# حسابات}}", + "builderGlobalAdded": "تم الإضافة", + "builderGlobalAdd": "أضف", "manualModel": "نموذج يدوي", "manualModelInvalid": "أدخل النموذج بالصيغة provider/model.", "manualModelUnknownProvider": "بادئة المزود غير معروفة.", @@ -3324,6 +3481,7 @@ "weightStability": "الاستقرار", "weightTierPriority": "الطبقة", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "توفر الجلسة", "reviewIntelligentTitle": "تكوين التوجيه الذكي", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "تم إيقاف الثبات", "kimiPresetTitle": "إعداد Kimi Coding المسبق", "kimiPresetDescription": "نموذج Kimi K3 كنموذج أساسي (Moonshot API)، مع تراجع تلقائي إلى اتصالات Kimi Code الخاصة بك (kimi-coding، kimi-web) عند تكوينها.", - "kimiPresetCta": "إضافة الإعداد المسبق" + "kimiPresetCta": "إضافة الإعداد المسبق", + "intelligentComboCount": "{count, plural, one {# مجموعة ذكية} other {# مجموعات ذكية}}", + "providersInScope": "{count, plural, one {مزود واحد في النطاق} other {مزودون # في النطاق}}", + "savingModePack": "جارٍ حفظ {pack}…", + "errorTitle": "فشل في تحميل الكومبوهات", + "errorDescription": "لم نتمكن من تحميل بيانات المجموعة في الوقت الحالي. تحقق من اتصالك وحاول مرة أخرى.", + "errorId": "معرّف الخطأ: {id}", + "errorRetry": "حاول مرة أخرى", + "comboLabel": "كومبو" }, "costs": { "title": "التكاليف", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "عنوان URL لـ WebDAV", "obsidianUsername": "اسم المستخدم", "obsidianPassword": "كلمة المرور", - "obsidianTailscaleHint": "استخدم عنوان IP الخاص بـ Tailscale بدلاً من localhost إذا كنت تتصل من الهاتف المحمول. يجب أن يكون كلا الجهازين على نفس شبكة Tailscale." + "obsidianTailscaleHint": "استخدم عنوان IP الخاص بـ Tailscale بدلاً من localhost إذا كنت تتصل من الهاتف المحمول. يجب أن يكون كلا الجهازين على نفس شبكة Tailscale.", + "cloudSyncNotConfigured": "لم يتم تكوين مزامنة السحابة على هذه النسخة.", + "notionConnect": "اتصل", + "notionConnectFailed": "فشل في الاتصال", + "notionConnected": "متصل", + "notionConnectionFailed": "فشل الاتصال", + "notionDescription": "ابحث، اقرأ، استفسر، واكتب إلى Notion من خلال نماذج الذكاء الاصطناعي الموجهة", + "notionDisconnect": "فصل الاتصال", + "notionDisconnectFailed": "فشل في قطع الاتصال", + "notionEnterToken": "يرجى إدخال رمز تكامل Notion", + "notionIntegrationHelp": "إنشاء تكامل داخلي في", + "notionIntegrationToken": "رمز تكامل Notion الداخلي", + "notionNotConnected": "غير متصل", + "notionTokenConfigured": "تم تكوين الرمز. أدوات Notion متاحة عبر MCP." }, "endpoints": { "tabProxy": "بروكسي نقطة النهاية", @@ -4152,6 +4331,12 @@ "providerModelLabel": "المزود / النموذج", "noRemoteProviders": "لا توجد مزودات بمفتاح API مهيأ", "selectProviderModel": "حدد نموذجًا", + "customBaseUrlLabel": "عنوان URL أساسي مخصص (اختياري)", + "customModelIdLabel": "معرف النموذج المخصص (اختياري)", + "customEndpointHelp": "استخدم نقطة نهاية /embeddings المتوافقة مع OpenAI. يُسمح بالنقاط النهائية المحلية؛ أهداف بيانات السحابة محجوبة.", + "customEndpointSave": "تطبيق نقطة نهاية مخصصة", + "customEndpointInvalid": "أدخل كل من عنوان URL أساسي صالح HTTP(S) ومعرف النموذج، أو اترك كلا الحقلين فارغين.", + "customEndpointSaveFailed": "لم يتمكن من حفظ نقطة النهاية المخصصة للتضمين.", "staticEnabledLabel": "تمكين Static Potion", "staticEnabledDesc": "تنزيل نموذج potion-base-8M واستخدامه محليًا", "transformersEnabledLabel": "تمكين Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "جاري التنظيف...", "cleanNow": "تنظيف الآن", "cleanupSuccess": "تمت إزالة {count} نقطة", - "cleanupFailed": "فشل التنظيف" + "cleanupFailed": "فشل التنظيف", + "hostLabel": "مضيف", + "collectionLabel": "مجموعة" }, "rerank": { "enableLabel": "تمكين إعادة الترتيب", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute مخطط احتياطي ثلاثي الطبقات", "apiKeyMgmt": "إدارة مفتاح واجهة برمجة التطبيقات (API)", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "إعداد مزودين مجانيين", + "description": "قم بتمكين مقدمي الخدمة المختارين بدون تسجيل اختيارياً. راجع إشعار كل مزود وموقعه قبل المتابعة؛ تتControlled التوافر وحدود المعدلات بواسطة أطراف ثالثة.", + "loading": "جارٍ تحميل مقدمي الخدمة المجانية...", + "loadFailed": "تعذر تحميل مقدمي الخدمة المجانيين.", + "alreadyConfigured": "تم تكوين جميع مقدمي الخدمة المجانيين المؤهلين بالفعل.", + "reviewProviderSite": "راجع موقع المزود والشروط", + "confirmation": "لقد قمت بمراجعة هؤلاء المزودين من الطرف الثالث وأريد من OmniRoute إنشاء الاتصالات المحددة.", + "setupSelected": "إعداد مقدمي الخدمة المحددين", + "settingUp": "جارٍ الإعداد...", + "setupFailed": "لم يكن بالإمكان إعداد المزودين المحددين. لم يتغير أي شيء موجود.", + "retryFailed": "إعادة محاولة مقدمي الخدمة الفاشلين", + "orUseApiKey": "أو الاتصال باستخدام مفتاح API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "تم الإنشاء", + "skipped": "تم التكوين بالفعل", + "failed": "فشل" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "مطلوب؛ عنوان URL الأساسي لواجهة API الخاصة بالمزود.", "iconUrlLabel": "عنوان URL للأيقونة", "iconUrlHint": "اختياري. عنوان URL للصورة المعروضة كأيقونة لهذا المزود.", + "iconUrlInvalid": "رابط الأيقونة غير صالح. استخدم http(s):// أو data:image/*;base64 رابط.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} متوافق (المنتج)", "tokenRefreshed": "تم تحديث الرمز المميز بنجاح", "tokenRefreshFailed": "فشل تحديث الرمز المميز", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "الجلسة الحالية بالفعل", "applyCodexAuthLocal": "تطبيق المصادقة", "exportCodexAuthFile": "تصدير المصادقة", "applyClaudeAuthLocal": "تطبيق مصادقة Claude", @@ -5679,7 +5867,7 @@ "zedImportHint": "استيراد إعدادات المزودين من Zed", "zedImportNetworkError": "خطأ في الشبكة أثناء الاستيراد من Zed", "zedImportNone": "لا شيء لاستيراده من Zed", - "zedImportSuccess": "تم الاستيراد من Zed بنجاح", + "zedImportSuccess": "Imported {credentials} credential(s) from Zed for {providers} provider(s)", "zedImporting": "جارٍ الاستيراد من Zed...", "zedNoCredentials": "لم يتم العثور على بيانات اعتماد Zed في سلسلة المفاتيح", "zedUnsupportedCredentials": "تم العثور على {count} من بيانات اعتماد سلسلة المفاتيح، ولكن لم يتطابق أي منها مع الموفرين المدعومين", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "الصق مفتاح API…", "zedSaving": "جاري الحفظ…", "zedImportAction": "استيراد", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "تمكين تجديد جلسة المؤشر تلقائيًا", + "cursorAgentNudgeBody": "قم بتثبيت cursor-agent لتجديد الجلسة تلقائيًا - بدون ذلك، تحتاج اتصالات Cursor إلى إعادة الاتصال يدويًا بشكل دوري تقريبًا كل 24 ساعة.", + "cursorAgentNudgeDismiss": "رفض", "zedManualImportFailed": "فشل الاستيراد اليدوي", "zedManualImportSuccess": "تم استيراد رمز {provider} من Zed", "grokImportTitle": "استيراد مصادقة Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "فئة مجانية للاستدلال بدون خادم — لا يلزم وجود بطاقة ائتمان", "gemini": "مجاني للأبد: 1,500 طلب/يوم لـ Gemini 2.5 Flash — بدون بطاقة ائتمان، احصل على المفتاح من aistudio.google.com", "gigachat": "ربط GigaChat (Sber) بمفتاح API.", - "github-models": "أنشئ رمز وصول شخصي (PAT) لـ GitHub بنطاق 'models: read' على github.com/settings/tokens", "gitlab": "رمز وصول شخصي لـ GitLab لواجهة برمجة تطبيقات مقترحات الأكواد العامة. قم بتكوين عنوان URL أساسي مستضاف ذاتيًا عند عدم استخدام gitlab.com.", "gitlawb-gmi": "احصل على مفتاح API الخاص بك من لوحة تحكم Gitlawb Opengateway.", "gitlawb": "احصل على مفتاح API الخاص بك من لوحة تحكم Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "ربط Kimi Coding باستخدام تدفق OAuth الحالي.", "kiro": "الفئة المجانية: 50 رصيدًا شهريًا (~25 ألف–100 ألف توكن). ⚠️ تحظر شروط خدمة Kiro استخدام وكيل/أداة خارجية.", "codex": "ربط OpenAI Codex باستخدام تدفق OAuth الحالي.", - "qwen": "ربط Qwen Code باستخدام تدفق OAuth الحالي." + "qwen": "ربط Qwen Code باستخدام تدفق OAuth الحالي.", + "github-models": "أنشئ رمز وصول شخصي (PAT) لـ GitHub بنطاق 'models: read' على github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} يقبل معرفات النماذج الأصلية للموفر. قم بالاستيراد من /models أو قم بإضافة معرفات مخصصة للتوجيه.", "bedrockModelsDescription": "يتم تحديد نطاق نماذج Amazon Bedrock حسب منطقة AWS. قم بالاستيراد من /models أو قم بإضافة معرفات نماذج Bedrock الممكنة في المنطقة المحددة.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "عند استنفاد جميع الاتصالات المكونة (الحصة، الاعتمادات، أو انتهاء الصلاحية)، استخدم مؤقتًا المستوى بدون مفتاح لهذا المزود. قم بإيقاف التشغيل لتخطي هذا المزود بدلاً من إرسال طلبات مجهولة — يُوصى بذلك عندما يرفض المستوى بدون مفتاح هذه الطلبات (401).", "anonymousFallbackEnabled": "تم تمكين النسخة الاحتياطية المجهولة لـ {provider}", "anonymousFallbackDisabled": "تم تعطيل النسخ الاحتياطي المجهول لـ {provider} — ستتجاوز الاتصالات المستنفدة هذا المزود", - "anonymousFallbackUpdateFailed": "فشل في تحديث إعداد النسخ الاحتياطي المجهول" + "anonymousFallbackUpdateFailed": "فشل في تحديث إعداد النسخ الاحتياطي المجهول", + "batchDeleteFailed": "فشل حذف الدفعة", + "batchDeleteNetworkError": "خطأ في الشبكة أثناء الحذف الجماعي", + "batchUpdateFailed": "فشل تحديث الدفعة", + "batchUpdateNetworkError": "خطأ في الشبكة أثناء التحديث الجماعي", + "categoryAudio": "صوت", + "categoryCloudAgent": "عميل السحابة", + "categoryIde": "بيئة تطوير متكاملة", + "categoryLocal": "محلي", + "categorySearch": "بحث", + "categoryWebCookie": "ملف تعريف الارتباط على الويب", + "claudeExtraUsageBlockingDisabled": "تم تعطيل حظر الاستخدام الإضافي لـ Claude (الاستخدام الإضافي مسموح)", + "claudeExtraUsageBlockingEnabled": "تم تفعيل حظر الاستخدام الإضافي لـ Claude (سيتم حظر الاستخدام الإضافي)", + "claudeRoutingPreferenceDisabled": "لم تعد نماذج كلود غير المسبوقة تفضل كلود كود", + "claudeRoutingPreferenceEnabled": "تفضل نماذج كلود غير المسبوقة الآن كلود كود", + "clearMediaFilter": "مسح", + "cliproxyRoutingDisabled": "تستخدم الطلبات الآن OmniRoute الأصلي (مباشر)", + "cliproxyRoutingEnabled": "الطلبات الآن تمر عبر CLIProxyAPI (محاكاة أعمق)", + "codexLimitPolicyUpdated": "تم تحديث سياسة حد Codex", + "codexServiceModeUpdated": "تم تحديث وضع خدمة Codex", + "codexServiceTierActive": "خدمة Codex {tier} نشطة", + "codexTierFastLabel": "سريع", + "codexTierFlexLabel": "فليكس", + "commandCodeApplyFailed": "فشل في تطبيق رمز الأمر auth", + "commandCodeApplyingApproval": "تمت الموافقة على المتصفح، جاري التطبيق…", + "commandCodeApplyingKey": "تطبيق المفتاح المعتمد من المتصفح…", + "commandCodeApprovalInstructions": "افتح عنوان URL للمصادقة، وافق على الوصول، ثم الصق المفتاح/JSON/URL المعاد أدناه…", + "commandCodeAuthExpired": "انتهت صلاحية رمز الأمر", + "commandCodeConnected": "تم الاتصال برمز الأمر", + "commandCodeConnectionAdded": "تم إضافة اتصال رمز الأمر", + "commandCodeLinkExpired": "رابط كود الأمر منتهي الصلاحية", + "commandCodeOpeningStudio": "فتح كود ستوديو الأوامر…", + "commandCodePopupBlocked": "تم حظر النافذة المنبثقة. يرجى السماح بالنوافذ المنبثقة والمحاولة مرة أخرى باستخدام Command Code Connect.", + "commandCodeStartFailed": "فشل في بدء الأمر Code auth", + "connectionDeleted": "تم حذف الاتصال", + "connectionFallback": "الاتصال", + "coolingConnectionsDescription": "أعادت هذه الاتصالات 429 (حد معدل) في آخر طلب لها. ستتخطى OmniRoute هذه الاتصالات حتى تنتهي مدة المؤقت - لا حاجة لتعطيل يدوي.", + "coolingConnectionsTitle": "التبريد الحالي ({count})", + "failedDeleteAlias": "فشل في حذف الاسم المستعار", + "failedDeleteConnection": "فشل في حذف الاتصال", + "failedDistributeProxies": "فشل في توزيع الوكلاء.", + "failedSaveModelEndpointSettings": "فشل في حفظ إعدادات نقطة نهاية النموذج", + "failedUpdateClaudeExtraUsagePolicy": "فشل في تحديث سياسة الاستخدام الإضافي لـ Claude", + "failedUpdateClaudeRoutingPreference": "فشل في تحديث تفضيل توجيه كود كلود", + "failedUpdateCliproxyRouting": "فشل في تحديث توجيه CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "فشل في تحديث سياسة حد Codex", + "failedUpdateCodexServiceMode": "فشل في تحديث وضع خدمة Codex", + "filterByMedia": "وسائط", + "freeBadge": "مجاني", + "kimiCodeApiKeyLabel": "مفتاح واجهة برمجة تطبيقات Kimi Code", + "modelTestFailed": "فشل اختبار النموذج", + "modelTestNetworkError": "خطأ في الشبكة أثناء اختبار النموذج", + "networkError": "خطأ في الشبكة", + "networkErrorDeletingAlias": "خطأ في الشبكة أثناء حذف الاسم المستعار", + "networkErrorSettingAlias": "خطأ في الشبكة أثناء تعيين الاسم المستعار", + "noProvidersMatch": "لا توجد مزودات تطابق بحثك.", + "noSavedProxies": "لم يتم العثور على أي بروكسيات محفوظة. أضف البروكسيات في الإعدادات → البروكسي أولاً.", + "pageLoadErrorDescription": "لم نتمكن من تحميل بيانات المزود في الوقت الحالي. تحقق من اتصالك وحاول مرة أخرى.", + "pageLoadErrorId": "معرّف الخطأ: {id}", + "pageLoadErrorRetry": "حاول مرة أخرى", + "pageLoadErrorTitle": "فشل في تحميل الموفرين", + "playgroundTitle": "ملعب", + "providerDetailConnectionFlexActive": "طبقة خدمة Codex Flex مفعلة لهذا الاتصال", + "providerDetailConnectionPriorityActive": "طبقة خدمة أولوية Codex مفعلة لهذا الاتصال", + "providerDetailGlobalFlexActive": "خدمة مستوى Global Codex flex نشطة", + "providerDetailGlobalPriorityActive": "خدمة الأولوية لرمز عالمي نشطة", + "proxiesDistributed": "تم توزيع {assigned} تعيين وكيل عبر {tagLabel}{total} اتصال(ات).", + "rerankEndpoint": "إعادة ترتيب", + "savedModelEndpointSettings": "إعدادات نقطة نهاية النموذج المحفوظ", + "searchByModelAria": "البحث حسب الطراز", + "selectSupportedEndpoint": "اختر نقطة نهاية مدعومة واحدة على الأقل", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "الإعدادات", @@ -6460,7 +6719,24 @@ "loadFailed": "فشل تحميل قائمة الاشتراك", "toggleFailed": "فشل في تبديل التبديل", "refreshFailed": "فشل التحديث", - "deleteFailed": "فشل الحذف" + "deleteFailed": "فشل الحذف", + "add": "أضف", + "cancel": "إلغاء", + "configure": "تكوين", + "copyEndpoint": "نسخ نقطة النهاية", + "coreEndpointHint": "تلميح نقطة النهاية الأساسية", + "coreNodesHint": "تلميح العقد الأساسية", + "create": "إنشاء", + "deleteConfirm": "تأكيد الحذف", + "empty": "فارغ", + "globalModeDescription": "وصف الوضع العالمي", + "localCoreHint": "تلميح النواة المحلية", + "nodeSummary": "ملخص العقدة", + "providerRequired": "مطلوب مزود", + "providerRouting": "توجيه المزود", + "refresh": "تحديث", + "refreshInterval": "فترة التحديث", + "ruleModeDescription": "وصف وضع القاعدة" }, "bulkHealthcheck": "الفحص الصحي بالجملة", "bulkHealthcheckDesc": "اختبر جميع الوكلاء الذين تم تكوينهم مقابل عنوان URL المستهدف للعثور على الوكلاء الذين يعملون.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "قم بتشغيل احتياطي تلقائي لرؤية النص قبل توجيه طلبات الصور إلى النماذج النصية فقط.", "visionBridgeEnabledLabel": "ممكّن", "visionBridgeEnabledDesc": "قم بتبديل جسر الاتصال المسبق الذي يستبدل أجزاء الصورة بالنص المستخرج.", + "visionBridgeRerouteTextOnlyLabel": "إعادة توجيه النماذج النصية فقط", + "visionBridgeRerouteTextOnlyDesc": "أرسل الطلب الكامل، بما في ذلك الصور، إلى نموذج الجسر عندما لا يحتوي النموذج المحدد على إدخال صورة.", "visionBridgeModel": "نموذج الجسر", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "يمكن هنا استخدام أي معرف لنموذج OmniRoute يدعم الرؤية.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "يفتقر مفتاح API إلى نطاق الإدارة.", "BYPASS_PREFIX_NOT_ALLOWED": "تستهدف بادئة واحدة أو أكثر المسارات القادرة على النشر ولا يمكن تجاوزها.", "GENERIC": "فشل في تحديث إعدادات authz." - } + }, + "remove": "إزالة" }, "resilienceBaseCooldownLabel": "التهدئة الأساسية", "scopeLabel": "النطاق", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "اختبار الصوت…", "modalityBridgeAudioTestOk": "جسر الصوت OK — تم نسخ {count} مقطع(ات) بواسطة {model}", "modalityBridgeAudioTestNoop": "لم يتم تفعيل جسر الصوت (قد يدعم الهدف الصوت، لم يتم الاتصال بمزود STT، أو أن الجسر معطل)", - "modalityBridgeAudioTestError": "فشل اختبار الصوت: {message}" + "modalityBridgeAudioTestError": "فشل اختبار الصوت: {message}", + "modelRoutingDescriptionPlaceholder": "توجيه نماذج أوبوس إلى مجموعة الحدود", + "cliproxyapiFallbackCodes": "رموز التراجع لـ Cliproxyapi", + "cliproxyapiFallbackDescription": "وصف النسخة الاحتياطية لـ Cliproxyapi", + "cliproxyapiHealthLabel": "ملصق صحة Cliproxyapi", + "cliproxyapiImportFailed": "فشل استيراد Cliproxyapi", + "cliproxyapiImportResult": "نتيجة استيراد Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi عنوان URL غير صالح", + "cliproxyapiLifecycleNoticeAfter": "إشعار دورة حياة Cliproxyapi بعد", + "cliproxyapiLifecycleNoticeBefore": "إشعار دورة حياة Cliproxyapi قبل", + "cliproxyapiLifecycleNoticeLink": "رابط إشعار دورة حياة Cliproxyapi", + "cliproxyapiPortLabel": "ملصق منفذ Cliproxyapi", + "cliproxyapiStatusLabel": "ملصق حالة Cliproxyapi", + "cliproxyapiVersionLabel": "ملصق إصدار Cliproxyapi", + "collection": "مجموعة", + "errorPage": { + "description": "لم نتمكن من تحميل الإعدادات في الوقت الحالي. يرجى المحاولة مرة أخرى بعد بضع ثوانٍ.", + "errorId": "معرّف الخطأ: {id}", + "retry": "حاول مرة أخرى", + "title": "فشل في تحميل الإعدادات" + }, + "host": "مضيف", + "notInstalled": "غير مثبت", + "oneproxyActions": "إجراءات Oneproxy", + "oneproxyActive": "Oneproxy نشط", + "oneproxyAnonymity": "ون بروكسي إخفاء الهوية", + "oneproxyCountry": "بلد Oneproxy", + "oneproxyDelete": "حذف Oneproxy", + "oneproxyEmpty": "Oneproxy فارغ", + "oneproxyHost": "ونبروكسي هوست", + "oneproxyLatency": "زمن انتقال Oneproxy", + "oneproxyProtocol": "بروتوكول Oneproxy", + "oneproxyQuality": "جودة Oneproxy", + "oneproxySyncFailed": "فشل المزامنة: {error}", + "oneproxySyncSuccess": "تم مزامنة {total} وكيل ({added} جديد، {updated} محدث)", + "proxyDocumentationSocks5DescAfter": "وثائق الوكيل Socks5 الوصف بعد", + "proxyFreePoolAddProxy": "إضافة وكيل إلى مجموعة الوكلاء المجانية", + "proxyFreePoolAdding": "إضافة مجموعة بروكسي مجانية", + "proxyFreePoolSelectProxy": "اختيار وكيل من مجموعة الوكلاء المجانية", + "proxyStatusActive": "حالة الوكيل نشطة", + "proxyStatusInactive": "حالة الوكيل غير نشطة", + "routingAddEntry": "أضف إدخالاً", + "settingSaveFailed": "فشل حفظ الإعدادات", + "settingSaved": "تم حفظ الإعدادات", + "skillsmpApiKeyHintAfter": ". حد المعدل: {limit} طلبات/يوم.", + "skillsmpApiKeyHintBefore": "احصل على مفتاح API الخاص بك من", + "syncFailed": "فشل المزامنة", + "unhealthy": "غير صحي", + "oneproxyDescription": "احصل على بروكسيات مجانية تم التحقق منها وقم بتدويرها من منصة مجتمع 1proxy", + "oneproxySyncing": "جارٍ المزامنة...", + "oneproxySyncNow": "مزامنة الآن", + "oneproxyClearAll": "مسح الكل", + "oneproxyGoogle": "جوجل", + "oneproxyClearAllConfirm": "مسح جميع بروكسيات 1proxy؟", + "memorySkillsSkillsmpDescription": "اتصل بـ SkillsMP لاكتشاف وتثبيت المهارات من السوق.", + "memorySkillsActiveProviderDescription": "اختر مزود البحث والتثبيت الذي تستخدمه صفحة المهارات.", + "memorySkillsSkillsmpProviderTitle": "سوق SkillsMP", + "memorySkillsSkillsmpProviderDescription": "سوق موثوق (يستخدم مفتاح API الخاص بك في SkillsMP).", + "memorySkillsSkillsshProviderTitle": "دليل skills.sh", + "memorySkillsSkillsshProviderDescription": "موفر الدليل العام (لا يتطلب مفتاح API).", + "routingCcBridgeCatalogName": "جسر CC المتوافق مع Anthropic", + "routingClaudeProviderName": "كلود (OAuth)", + "routingClaudeProviderDescription": "موفر كلود الأصلي مع رموز تم إصدارها بواسطة OAuth.", + "routingCcBridgeName": "جسر كلود-كود", + "routingCcBridgeDescription": "نقاط نقل باستخدام مفاتيح API (متوافقة مع anthropic-cc-*).", + "routingCustomProviderDescription": "مزود مخصص.", + "routingUnknownOpKind": "نوع العملية غير معروف: {kind}", + "routingInvalidJson": "JSON غير صالح: {error}", + "routingConfigMustBeObject": "يجب أن تكون الإعدادات كائن JSON", + "routingEnabledMustBeBoolean": "يجب أن تكون `enabled` صحيحة أو خاطئة", + "routingPipelineMustBeArray": "يجب أن تكون `pipeline` مصفوفة من العمليات", + "routingPipelineTooLong": "لا يمكن أن يتجاوز خط الأنابيب 50 عملية", + "routingOpMissingKind": "العملية #{index}: مفقود أو غير صالح `kind`", + "routingOpUnknownKind": "العملية #{index}: نوع غير معروف \"{kind}\"", + "routingJsonEditorHide": "إخفاء محرر JSON", + "routingJsonEditorImportExport": "استيراد / تصدير JSON", + "routingJsonEditorLabel": "JSON (تعديل وتطبيق، أو لصق للاستيراد)", + "routingApplyJson": "تطبيق JSON", + "routingTransformsFootnote": "جميع عمليات التحويل هي متكررة عند إعادة التشغيل. تدخل التغييرات حيز التنفيذ على الفور في الطلب التالي.", + "cliproxyapiUnknown": "غير معروف", + "cliproxyapiVersion": "الإصدار", + "cliproxyapiHealth": "الصحة", + "cliproxyapiPort": "منفذ", + "qdrantHost": "مضيف", + "qdrantCollection": "مجموعة" }, "contextRtk": { "title": "محرك آر تي كيه", @@ -8016,6 +8379,15 @@ "full": "كامل", "ultra": "فائق" } + }, + "modeOptions": { + "default": "افتراضي", + "off": "إيقاف", + "lite": "لايت", + "standard": "قياسي", + "aggressive": "عدواني", + "ultra": "ألترا", + "responsesToolOutput": "أداة مخرجات الردود" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "يعمل في نهاية المكدس (بعد أن يقوم RTK/Caveman بتنظيف النص، ويقوم OmniGlyph بتحويل المتبقي إلى صور) ويعمل أيضًا بشكل مستقل عبر وضع omniglyph. هذه نسخة معاينة وتظل معطلة افتراضيًا حتى تكتمل عملية التحقق الشاملة من البداية للنهاية.", "saved": "تم الحفظ.", "saveFailed": "تعذر الحفظ.", - "enableAria": "تمكين محرك OmniGlyph" + "enableAria": "تمكين محرك OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "الخدمات المضمنة", @@ -9127,7 +9500,49 @@ "unableToLoad": "غير قادر على تحميل مقاييس النظام", "product": "المنتج", "resources": "الموارد", - "company": "الشركة" + "company": "الشركة", + "tokenHealthTooltips": { + "allHealthy": "جميع الرموز سليمة", + "needsAttention": "بعض الرموز تحتاج إلى اهتمام", + "refreshFailures": "تم الكشف عن فشل في تحديث الرمز", + "unknown": "حالة الصحة غير معروفة" + }, + "systemMonitor": { + "metricsAriaLabel": "مقاييس النظام", + "memory": "ذاكرة", + "memoryShort": "ميم", + "uptime": "وقت التشغيل", + "ariaLabel": "مراقبة النظام", + "title": "مراقب النظام", + "version": "الإصدار", + "connections": "الاتصالات", + "circuitBreakers": "قواطع الدائرة", + "open": "{count} مفتوح", + "memoryUsage": "استخدام الذاكرة" + }, + "never": "أبداً", + "justNow": "الآن فقط", + "minutesAgo": "منذ {count} دقيقة", + "hoursAgo": "منذ {count} ساعة", + "tokens": "رموز", + "costs": "التكاليف", + "autoRefresh": "تحديث تلقائي ({seconds}ث)", + "toggleAutoRefresh": "تبديل التحديث التلقائي", + "activeRequests": "طلبات نشطة", + "totalRequests": "إجمالي الطلبات", + "totalInputTokens": "إجمالي رموز الإدخال", + "model": "نموذج", + "provider": "مزود", + "requests": "طلبات", + "lastUsed": "آخر استخدام", + "inputTokens": "رموز الإدخال", + "totalTokens": "إجمالي الرموز", + "inputCost": "تكلفة الإدخال", + "outputCost": "تكلفة الإخراج", + "noUsageData": "لم يتم تسجيل أي استخدام بعد. قم بإجراء بعض الطلبات لرؤية البيانات هنا.", + "account": "حساب", + "accountLabel": "الحساب {id}", + "noAccountUsage": "لم يتم تسجيل أي استخدام محدد للحساب بعد. قم بإجراء الطلبات باستخدام حسابات OAuth لرؤية البيانات هنا." }, "auth": { "welcome": "مرحبًا", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "إصدار Node.js غير متوافق", "nodeIncompatibleDesc": "تستخدم Node.js بالإصدار {version}، وهو خارج سياسة وقت التشغيل الآمن المدعومة في OmniRoute. استخدم إصدارًا مصححًا من Node.js 20.x أو 22.x LTS.", "nodeIncompatibleFixLabel": "الإصلاح: ثبّت إصدار Node.js 22 LTS مصححًا", - "nodeIncompatibleHint": "يتطلب OmniRoute الإصدار Node.js 22.22.2+ (ضمن 22.x LTS) أو 24.0.0+ (ضمن 24.x LTS). يُوصى بـ Node 24 LTS." + "nodeIncompatibleHint": "يتطلب OmniRoute الإصدار Node.js 22.22.2+ (ضمن 22.x LTS) أو 24.0.0+ (ضمن 24.x LTS). يُوصى بـ Node 24 LTS.", + "resetViaAppDataTitle": "إعادة تعيين عبر بيانات التطبيق", + "resetViaAppDataDescription": "احذف ملف الإعدادات من دليل بيانات التطبيق لإعادة تعيين كلمة المرور الخاصة بك:", + "quitDesktopApp": "قم بإغلاق تطبيق OmniRoute لسطح المكتب بالكامل", + "navigateToAppDataDirectory": "انتقل إلى دليل بيانات التطبيق:", + "checkSystemAppDataFolder": "(تحقق من مجلد بيانات تطبيق النظام الخاص بك)", + "relaunchDesktopFreshSetup": "أعد تشغيل تطبيق OmniRoute لسطح المكتب — سيبدأ إعدادًا جديدًا", + "alternativeSetPasswordTitle": "بديل: تعيين كلمة مرور جديدة", + "alternativeSetPasswordDescription": "قم بتعيين كلمة مرور أولية جديدة عبر ملف بيئة الخادم:", + "openServerEnvFilePrefix": "فتح", + "relaunchDesktopApp": "أعد تشغيل تطبيق OmniRoute لسطح المكتب", + "codexLinkInvalidOrExpired": "هذا الرابط غير صالح أو منتهي الصلاحية.", + "codexValidationServerError": "لم نتمكن من الوصول إلى الخادم للتحقق من هذا الرابط.", + "codexSaveConnectionError": "لم يتمكن من حفظ الاتصال. قد تكون الرابط قد انتهت صلاحيته.", + "codexDeviceLoginDisabled": "تم تعطيل تسجيل الدخول باستخدام رمز الجهاز لهذا الحساب في OpenAI. قم بتمكينه في إعدادات أمان ChatGPT (أو اطلب من مسؤول مساحة العمل الخاصة بك).", + "codexAuthorizationTimedOut": "انتهت صلاحية التفويض. انقر على ابدأ مرة أخرى لإعادة المحاولة.", + "authenticationCancelled": "تم إلغاء المصادقة.", + "unexpectedAuthenticationError": "خطأ غير متوقع أثناء المصادقة. يرجى المحاولة مرة أخرى.", + "connectOpenAiCodexTitle": "اتصل بـ OpenAI Codex", + "codexConnectDescription": "قم بتفويض حساب ChatGPT لإكمال إعداد هذا الاتصال.", + "validatingCodexLink": "جارٍ التحقق من الرابط…", + "codexGenerateCodeDescription": "انقر أدناه لإنشاء رمز لمرة واحدة، ثم قم بتسجيل الدخول إلى OpenAI.", + "startCodexFlow": "ابدأ", + "requestingOpenAiCode": "طلب كود من OpenAI…", + "codexVerificationInstructions": "1. افتح صفحة التحقق من OpenAI و 2. أدخل هذا الرمز. يتم تحديث هذه الصفحة تلقائيًا بمجرد أن تقوم بالتفويض.", + "yourCode": "شفرتك", + "openVerificationPage": "افتح صفحة التحقق", + "copyUrlShort": "نسخ عنوان URL", + "savingConnection": "جارٍ حفظ الاتصال…", + "codexConnected": "متصل!", + "codexConnectionRegistered": "تم تسجيل حساب Codex. يمكنك إغلاق هذه النافذة.", + "tryAgain": "حاول مرة أخرى", + "traeAuthorizationSuccess": "تفويض Trae ✓", + "traeAuthorizationFailed": "فشل تفويض Trae", + "closeAuthorizationWindow": "يمكنك إغلاق هذه النافذة.", + "returnToDashboard": "العودة إلى لوحة التحكم.", + "resetViaAppData": "إعادة تعيين عبر بيانات التطبيق", + "deleteSettingsToReset": "احذف ملف الإعدادات من دليل بيانات التطبيق لإعادة تعيين كلمة المرور الخاصة بك:", + "quitAppCompletely": "قم بإغلاق تطبيق OmniRoute لسطح المكتب بالكامل", + "navigateToAppData": "انتقل إلى دليل بيانات التطبيق", + "checkAppDataFolder": "تحقق من مجلد بيانات تطبيق النظام لديك", + "deleteSettingsJson": "حذف", + "relaunchAppFresh": "أعد تشغيل تطبيق OmniRoute لسطح المكتب — سيبدأ إعدادًا جديدًا", + "alternativeSetPassword": "بديل: تعيين كلمة مرور جديدة", + "setNewPasswordViaEnv": "قم بتعيين كلمة مرور أولية جديدة عبر ملف بيئة الخادم:", + "openServerEnv": "فتح", + "inDataDirectory": "في دليل البيانات", + "addOrUpdate": "أضف أو حدّث", + "deleteAndRelaunch": "حذف", + "settingsJson": "settings.json", + "fromDataDir": "من دليل البيانات", + "relaunchApp": "أعد تشغيل تطبيق OmniRoute لسطح المكتب" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "هل أنت مستعد لتبسيط البنية الأساسية للذكاء الاصطناعي لديك؟", "ctaDescription": "انضم إلى المطورين الذين يقومون بتبسيط عمليات تكامل الذكاء الاصطناعي الخاصة بهم مع OmniRoute. مفتوح المصدر ومجاني للبدء.", "startFree": "ابدأ مجانًا", - "readDocumentation": "قراءة الوثائق" + "readDocumentation": "قراءة الوثائق", + "company": "شركة", + "pricing": "التسعير", + "apiReference": "مرجع واجهة برمجة التطبيقات", + "helpCenter": "مركز المساعدة", + "about": "حول", + "blog": "مدونة", + "contact": "اتصل", + "terms": "الشروط", + "privacy": "الخصوصية", + "license": "ترخيص", + "footerDescription": "الواجهة الموحدة للبنية التحتية الحديثة للذكاء الاصطناعي. آمنة، قابلة للمراقبة، وقابلة للتوسع.", + "communityDiscussions": "نقاشات المجتمع" }, "docs": { "title": "التوثيق", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "قم بتسجيل الوكلاء وإدارتهم عبر سجل ACP للتواصل بين الوكلاء ومشاركة الأدوات.", "protocolAcpStep1": "انتقل إلى لوحة المعلومات → الوكلاء لعرض وكلاء ACP المسجلين.", "protocolAcpStep2": "قم بتسجيل وكلاء جدد يتمتعون بالإمكانيات وتكوين نقطة النهاية.", - "protocolAcpStep3": "استخدم أدوات CLI لتكوين قنوات اتصال الوكيل." + "protocolAcpStep3": "استخدم أدوات CLI لتكوين قنوات اتصال الوكيل.", + "metadataTitleTemplate": "%s — وثائق OmniRoute", + "metadataDefaultTitle": "وثائق OmniRoute", + "metadataDescription": "وثائق شاملة لبوابة OmniRoute AI - الإعداد، واجهة برمجة التطبيقات، الضغط، النشر، والمزيد.", + "layoutNavTitle": "وثائق OmniRoute", + "layoutHomeLink": "صفحة الوثائق الرئيسية", + "layoutDashboardLink": "← العودة إلى لوحة التحكم", + "homeTitle": "وثائق OmniRoute", + "homeMetadataDescription": "كل ما تحتاجه لتوجيه وضغط وتوسيع الذكاء الاصطناعي الخاص بك - أدلة الإعداد، مرجع API، الضغط، النشر، والمزيد.", + "homeTwitterDescription": "وثائق شاملة لبوابة OmniRoute AI", + "homeDescription": "كل ما تحتاجه لتوجيه وضغط وتوسيع الذكاء الاصطناعي الخاص بك", + "homeSearchHint": "اضغط على Ctrl K للبحث في الوثائق", + "featuredQuickStartTitle": "بدء سريع", + "featuredQuickStartDescription": "قم بتشغيل OmniRoute في 3 دقائق", + "featuredAutoComboTitle": "دليل التجميع التلقائي", + "featuredAutoComboDescription": "دع OmniRoute يختار لك أفضل ذكاء اصطناعي", + "featuredProvidersTitle": "دليل مقدمي الخدمة", + "featuredProvidersDescription": "قم بتوصيل مزودي الذكاء الاصطناعي في دقائق", + "nonTechUsersTitle": "للمستخدمين غير التقنيين", + "nonTechUsersSubtitle": "ابدأ بسرعة — لا حاجة لخلفية تقنية", + "techUsersTitle": "للمستخدمين التقنيين", + "techUsersSubtitle": "غوص عميق في الهندسة المعمارية وواجهات برمجة التطبيقات والداخلية", + "apiExplorerMetadataTitle": "مستكشف واجهة برمجة التطبيقات — وثائق أومني روت", + "apiExplorerMetadataDescription": "مستكشف واجهة برمجة التطبيقات التفاعلي - جرب نقاط نهاية OmniRoute مباشرة مع استجابات في الوقت الحقيقي", + "apiExplorerTitle": "مستكشف واجهة برمجة التطبيقات", + "apiExplorerDescription": "جرّب نقاط نهاية OmniRoute مباشرة. اختر نقطة نهاية، قم بتكوين طلبك، وشاهد الاستجابة في الوقت الفعلي.", + "apiExplorerSseStarted": "تم بدء تدفق SSE — تحقق من الطرفية/أدوات المطورين للحصول على مخرجات في الوقت الحقيقي.", + "apiExplorerError": "خطأ: {message}", + "apiExplorerAuth": "المصادقة", + "apiExplorerResponseLabel": "استجابة", + "apiExplorerSelectEndpoint": "اختر نقطة نهاية لاستكشافها", + "apiExplorerChooseApi": "اختر واجهة برمجة التطبيقات من الشريط الجانبي لرؤية التفاصيل وتجربتها مباشرة", + "feedbackThanks": "شكرًا على ملاحظاتك!", + "feedbackQuestion": "هل كانت هذه الصفحة مفيدة؟", + "pageMetadataTitle": "{title} — وثائق OmniRoute", + "pageMetadataDescription": "وثائق OmniRoute: {title}", + "breadcrumb": "خبير التنقل", + "apiReferenceTable": { + "parameters": "المعلمات", + "name": "اسم", + "type": "اكتب", + "description": "وصف", + "returns": "يعود", + "typePrefix": "نوع:" + } }, "legal": { "privacyPolicy": "سياسة الخصوصية", @@ -9957,7 +10479,42 @@ "successMessage": "لقد تم ربط حسابك {providerName}.", "done": "تم", "error": "فشل الاتصال", - "tryAgain": "حاول مرة أخرى" + "tryAgain": "حاول مرة أخرى", + "errorSessionIncomplete": "جلسة OAuth غير مكتملة (يفتقر إلى URI إعادة التوجيه أو رمز التحقق). أعد تشغيل الاتصال وحاول مرة أخرى.", + "errorExchangeFailed": "فشل التبادل", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: تعمل بيانات اعتماد Google OAuth الافتراضية فقط على localhost. للاستخدام عن بُعد، قم بتكوين بيانات اعتماد OAuth الخاصة بك عبر متغيرات البيئة: ANTIGRAVITY_OAUTH_CLIENT_ID و ANTIGRAVITY_OAUTH_CLIENT_SECRET. راجع قسم README 'OAuth على خادم بعيد'.", + "errorSaveFailed": "فشل الحفظ", + "errorAuthorizationFailed": "فشل التفويض", + "errorAuthorizationTimeout": "انتهاء مهلة التفويض", + "errorRequestFailed": "فشل الطلب", + "errorCallbackServerFailed": "فشل في بدء خادم الاسترجاع", + "errorBrowserUnavailable": "تسجيل الدخول عبر المتصفح غير متاح لهذا المزود في البيئة الحالية. استخدم طريقة المصادقة المدعومة بدلاً من ذلك.", + "errorStateMismatch": "عدم تطابق حالة OAuth. أعد تشغيل الاتصال وحاول مرة أخرى.", + "errorImportAccessToken": "فشل في استيراد رمز الوصول", + "errorSessionNotInitialized": "لم يتم تهيئة جلسة OAuth. أعد تشغيل تدفق الاتصال وحاول مرة أخرى.", + "errorNoAuthorizationCode": "لم يتم العثور على رمز التفويض. الصق عنوان URL الخاص بالاسترجاع أو رمز المصادقة.", + "tabDeviceCode": "رمز الجهاز", + "tabBrowserLogin": "تسجيل دخول المتصفح", + "tabImportAuthJson": "استيراد auth.json", + "tabPasteApiKey": "الصق مفتاح واجهة برمجة التطبيقات", + "windsurfPasteDescription": "في Windsurf / VS Code IDE، قم بتشغيل أمر \"Windsurf: Provide Auth Token\" من لوحة الأوامر (أو انقر على زر \"Get Windsurf Authentication Token\" في Jupyter)، ثم انسخ الرمز المعروض والصقه أدناه. فتح windsurf.com/show-auth-token مباشرةً يظهر فقط صفحة \"Redirecting\" — يجب أن يبدأ IDE العملية.", + "grokAuthJsonDescription": "الصق المحتويات الكاملة لـ ~/.grok/auth.json (ليس فقط حقل \"key\" الخاص بـ JWT). يحتوي JWT العاري على عدم وجود refresh_token، لذا تتوقف الاتصال بعد انتهاء الصلاحية (#7610). يُفضل استخدام نافذة استيراد auth.json المخصصة عند توفرها.", + "devinDesktopPasteDescription": "قم بلصق مفتاح API الخاص بـ Devin الموجود من جلسة Devin مصدقة. تتفاوت توفر تصدير المفتاح والخطوات حسب إصدار Devin والحساب.", + "devinPasteDescription": "قدم مفتاح API الخاص بك WINDSURF_API_KEY (الذي تم الحصول عليه عبر `devin auth login`، أو عبر أمر \"Windsurf: Provide Auth Token\" في IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok بناء auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "مفتاح API / رمز", + "saving": "جارٍ الحفظ…", + "saveConnection": "حفظ الاتصال", + "gheDescription": "أدخل عنوان URL الأساسي لمثيل GitHub Enterprise الخاص بك (على سبيل المثال https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "رابط GitHub Enterprise", + "gheUrlRequired": "يتطلب عنوان URL لـ GitHub Enterprise", + "gitlabDuoSetupTitle": "إعداد OAuth ثنائي لـ GitLab", + "gitlabDuoSetupMessage": "لم يتم تكوين GitLab Duo OAuth. قم بتسجيل تطبيق OAuth على {applicationsUrl} مع URI إعادة التوجيه {redirectUri} والنطاقات \"{scopes}\"، ثم قم بتعيين {clientIdEnv} (ويمكنك أيضًا {clientSecretEnv}) وأعد التشغيل.", + "gitlabDuoSetupDescription": "بعد تسجيل التطبيق وضبط متغيرات البيئة على هذه النسخة من OmniRoute، انقر على متابعة لبدء تسجيل الدخول عبر OAuth.", + "continue": "تابع" }, "cursorAuthModal": { "title": "ربط IDE Cursor", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "لا توجد سجلات تطابق عوامل التصفية الحالية.", "callLogsInfo": "يتم أيضًا حفظ سجلات المكالمات كملفات JSON في {dataDir} ويتم تدويرها بناءً على {retentionDays} و{maxEntries}.", "loadMore": "تحميل المزيد", - "loadingMore": "جاري تحميل المزيد..." + "loadingMore": "جاري تحميل المزيد...", + "correlationId": "معرف الارتباط", + "group": { + "showAllRows": "عرض جميع الصفوف", + "showLatestPerCorrelation": "عرض الأحدث حسب معرف الارتباط", + "grouped": "مجموعة" + }, + "running": "تشغيل", + "interval": { + "decrease": "تقليل الفاصل الزمني", + "title": "فترة التحديث التلقائي بالثواني", + "increase": "زيادة الفاصل الزمني" + }, + "status": { + "inProgress": "قيد التقدم", + "recoveredByRetry": "تم الاسترداد عن طريق إعادة المحاولة", + "goToParent": "اذهب إلى الطلب الرئيسي", + "healedTitle": "فشل، تم الاسترداد بعد {count} محاولات", + "healed": "شفاء", + "failedTitle": "فشلت جميع المحاولات {count}", + "failed": "فشل", + "pinnedTitle": "تم اختيار النموذج عبر تثبيت جلسة ذاكرة التخزين المؤقت للسياق", + "pinned": "مثبت" + }, + "attempts": "محاولات", + "detail": { + "collapse": "طي {title}", + "expand": "قم بتوسيع {title}", + "copyTitle": "نسخ {title}", + "copied": "تم النسخ!", + "copy": "نسخ", + "autoscrollOn": "التمرير التلقائي: تشغيل", + "autoscrollOff": "التScroll التلقائي: إيقاف", + "payload": { + "clientRawRequest": "طلب العميل الخام", + "clientRequest": "طلب العميل", + "openaiRequest": "طلب OpenAI", + "providerRequest": "طلب مزود", + "providerResponse": "استجابة المزود", + "clientResponse": "استجابة العميل", + "pipelineError": "خطأ في خط الأنابيب" + }, + "payloadMissing": "لا يتوفر حِمل البيانات التفصيلي بعد الآن لهذه السجل.", + "payloadCorrupt": "تعذر تحليل الحمولة التفصيلية.", + "notAvailable": "غير متوفر", + "semanticCache": "سيمانتك (أومني روت)", + "upstreamCache": "المصدر (المزود)", + "ariaLabel": "تفاصيل سجل الطلب", + "completed": "مكتمل", + "upstreamStatus": "المصدر: {status}", + "statusDiscrepancy": "أعاد OmniRoute {status} على الرغم من أن المزود أعاد {provider}", + "previousRequest": "الطلب السابق", + "nextRequest": "الطلب التالي", + "close": "إغلاق نافذة التفاصيل", + "startedAt": "بدأت في", + "endedAt": "انتهى في", + "duration": "المدة", + "model": "نموذج", + "provider": "مزود", + "account": "حساب", + "input": "إدخال", + "totalIn": "الإجمالي الداخل: {value}", + "cacheRead": "قراءة الذاكرة المؤقتة: {value}", + "cacheWrite": "كتابة الذاكرة المؤقتة: {value}", + "compressed": "مضغوط: {from} → {to} ({percent}% موفر)", + "output": "مخرج", + "totalOut": "الإجمالي الخارج: {value}", + "reasoning": "التفكير: {value}", + "requestedModel": "النموذج المطلوب", + "requestProtocol": "بروتوكول المتطلبات", + "cacheSource": "مصدر التخزين المؤقت", + "modelPinning": "تثبيت النموذج", + "activeModelPinning": "نشط — نموذج تم اختياره عبر تثبيت الجلسة", + "rotated": "تم التدوير: {initial} -> {final}", + "apiKey": "مفتاح API", + "noApiKey": "لا يوجد مفتاح API", + "combo": "مجموعة", + "error": "خطأ", + "unblockAll": "إلغاء حظر الكل", + "cleared": "تم مسحها", + "unblock": "إلغاء الحظر", + "relatedRequests": "طلبات ذات صلة ({count})", + "current": "الحالي", + "detailStatus": "تفاصيل الحالة", + "loadingDetails": "جارٍ تحميل تفاصيل الطلب...", + "providerEventStream": "تدفق أحداث المزود", + "clientEventStream": "تدفق أحداث العميل", + "eventStream": "تدفق الحدث", + "responsePayloadLegacy": "حمولة الاستجابة (القديمة)", + "requestPayloadLegacy": "حمولة الطلب (القديمة)", + "noPayload": "لا توجد بيانات حمولة متاحة لهذه السجل.", + "correlationId": "معرف الترابط", + "correlationIdValue": "معرّف الارتباط: {id}", + "detailedPayloadInfo": "قم بتمكين تسجيل الدخول التفصيلي أولاً إذا كنت ترغب في عرض الحمولة من أربعة مراحل للعميل/المزود للطلبات الجديدة." + } }, "proxyLogger": { "filterAll": "الكل", @@ -11703,7 +12354,11 @@ "providerDisabled": "تم تعطيل {provider}", "providerAdded": "تم إضافة {provider}", "add": "أضف", - "manualApiKey": "استخدم مفتاح API يدوي" + "manualApiKey": "استخدم مفتاح API يدوي", + "createDahlTokenFailed": "فشل في إنشاء رمز دال", + "providerProxy": "وكيل", + "providerProxyConfigureHint": "تكوين الوكيل", + "providerProxyTitleConfigured": "تم تكوين الوكيل: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "مقيد بشروط الخدمة — راجع الشروط", "caution": "تنبيه — بنود الاستخدام الشخصي / البروكسي", "ok": "مسموح به عموماً" - } + }, + "allProviders": "جميع المزودين", + "noApiKeyRequired": "لا حاجة لمفتاح API" }, "providerHealthAutopilot": { "title": "الطيار الآلي لصحة المزود", @@ -12390,7 +13047,11 @@ "on": "تشغيل", "off": "إيقاف", "availableProviders": "المزودون المتاحون ({count})", - "noProviderOverrides": "لا توجد تجاوزات — سيشارك جميع المزودين النشطين بنماذجهم الافتراضية" + "noProviderOverrides": "لا توجد تجاوزات — سيشارك جميع المزودين النشطين بنماذجهم الافتراضية", + "resetFailed": "إعادة التعيين فشلت", + "resetSuccess": "إعادة تعيين الإعدادات إلى الافتراضي", + "running": "جارٍ التشغيل...", + "testFailed": "فشل الاختبار" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) هو صديق المصدر المفتوح المؤسس لـ OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "المزود لا يدعم الرؤية لطلب الصورة هذا", "capabilityFilter.toolsMismatch": "المزود لا يدعم استدعاء الأداة", "capabilityFilter.structuredOutputMismatch": "المزود لا يدعم الإخراج المنظم", - "capabilityFilter.contextWindowMismatch": "تجاوز الطلب نافذة سياق المزود" + "capabilityFilter.contextWindowMismatch": "تجاوز الطلب نافذة سياق المزود", + "publicSystem": { + "notFound": { + "title": "الصفحة غير موجودة", + "description": "الصفحة التي تبحث عنها غير موجودة أو تم نقلها.", + "dashboardAriaLabel": "العودة إلى لوحة التحكم", + "statusAriaLabel": "افتح صفحة حالة النظام", + "systemStatus": "حالة النظام" + }, + "error": { + "title": "خطأ في الخادم الداخلي", + "description": "حدث خطأ أثناء معالجة طلبك. لقد تم إبلاغ فريقنا وهم يعملون على إصلاح ذلك.", + "errorId": "معرّف الخطأ: {id}", + "detailsAriaLabel": "تفاصيل الخطأ", + "retryAriaLabel": "إعادة تحميل الصفحة", + "tryAgain": "حاول مرة أخرى", + "dashboardAriaLabel": "العودة إلى لوحة التحكم", + "statusAriaLabel": "فتح حالة النظام", + "systemStatus": "حالة النظام" + }, + "globalError": { + "title": "حدث خطأ ما", + "description": "حدث خطأ غير متوقع. تم تسجيل هذا وسيتحقق فريقنا منه.", + "detailsAriaLabel": "تفاصيل الخطأ", + "retryAriaLabel": "إعادة تحميل الصفحة", + "tryAgain": "حاول مرة أخرى", + "statusAriaLabel": "فتح حالة النظام", + "systemStatus": "حالة النظام" + }, + "offline": { + "title": "مشكلة الاتصال", + "description": "لا يمكن لـ OmniRoute الوصول إلى الشبكة في الوقت الحالي. تحقق من إعدادات الإنترنت أو VPN أو الوكيل لديك.", + "connectionRestored": "تم استعادة الاتصال", + "offlineModeDetected": "وضع عدم الاتصال تم اكتشافه", + "retryConnection": "إعادة محاولة الاتصال", + "openStatusPage": "فتح صفحة الحالة" + }, + "maintenance": { + "title": "الصيانة المجدولة", + "description": "بعض الخدمات غير متاحة مؤقتًا أثناء إجراء الصيانة. عادةً ما تظل التوجيهات الأساسية متصلة بالإنترنت، ولكن قد تتدهور ميزات الإدارة.", + "suggestion1": "حاول مرة أخرى بعد بضع دقائق.", + "suggestion2": "تحقق من مؤشرات الصحة الحالية وحالة المزود قبل إعادة المحاولة.", + "systemStatus": "عرض حالة النظام", + "healthDashboard": "فتح لوحة معلومات الصحة" + }, + "status": { + "title": "حالة النظام", + "description": "لقطة تشغيلية حية لخدمات OmniRoute الأساسية.", + "loadingHealth": "جارٍ تحميل مقاييس الصحة...", + "failedToLoad": "فشل في تحميل صحة النظام.", + "unableToReachHealth": "غير قادر على الوصول إلى نقطة نهاية الصحة. تحقق من الاتصال وحاول مرة أخرى.", + "healthCheckFailed": "فحص الصحة فشل", + "openConnectivityHelp": "مساعدة الاتصال المفتوح", + "maintenanceInfo": "معلومات الصيانة", + "service": "خدمة", + "unknown": "غير معروف", + "notAvailable": "غير متوفر", + "providersTracked": "المزودون المتعقبون", + "circuitBreakerState": "حالة قاطع الدائرة لمزود الخدمة", + "lastUpdate": "آخر تحديث: {timestamp}", + "uptimeMinutes": "{minutes}د", + "uptimeHoursMinutes": "{hours}س {minutes}د" + }, + "statusPages": { + "400": { + "title": "طلب غير صالح", + "description": "حمولة الطلب غير صالحة أو غير مكتملة.", + "suggestion1": "راجع الحقول المطلوبة وتنسيق الحمولة قبل إعادة المحاولة.", + "suggestion2": "إذا كنت تستخدم واجهة برمجة التطبيقات، تحقق من مخطط JSON محليًا.", + "suggestion3": "إذا استمر هذا في الحدوث، افتح الطلب في Translator Playground لفحص الحمولة.", + "primaryAction": "فتح الوثائق", + "secondaryAction": "افتح المترجم" + }, + "401": { + "title": "غير مصرح", + "description": "يتطلب الوصول إلى هذه المورد مصادقة.", + "suggestion1": "قم بتسجيل الدخول مرة أخرى وحاول العملية مرة أخرى.", + "suggestion2": "لإجراء مكالمات API، تأكد من وجود رمز Bearer وأنه صالح.", + "suggestion3": "إذا تم تغيير الرمز مؤخرًا، قم بتحديث بيانات اعتماد العميل الخاصة بك.", + "primaryAction": "اذهب إلى تسجيل الدخول", + "secondaryAction": "إدارة مفاتيح API" + }, + "403": { + "title": "ممنوع", + "description": "تم فهم طلبك، لكن الوصول مرفوض وفقًا للسياسة.", + "suggestion1": "تحقق من قواعد قائمة السماح/الحظر لعناوين IP في الإعدادات.", + "suggestion2": "تحقق من سياسات النموذج والميزانية المعينة لمفتاح API الخاص بك.", + "suggestion3": "اطلب من المسؤول منح نطاق الأذونات المطلوبة.", + "primaryAction": "مساعدة الوصول المفتوح", + "secondaryAction": "فتح إعدادات الأمان" + }, + "408": { + "title": "انتهت مهلة الطلب", + "description": "لم يستلم الخادم طلبًا كاملاً في الوقت المحدد.", + "suggestion1": "أعد المحاولة مع حمولة أصغر.", + "suggestion2": "تحقق من استقرار الشبكة لديك وزمن استجابة VPN/الوكيل.", + "suggestion3": "لعمليات طويلة، قم بتمكين البث أو تقسيم الطلب.", + "primaryAction": "دليل فتح نقطة النهاية", + "secondaryAction": "تحقق من حالة الشبكة" + }, + "429": { + "title": "عدد كبير جداً من الطلبات", + "description": "تم تجاوز حدود المعدلات لهذا العميل أو المفتاح أو المزود.", + "suggestion1": "انتظر حتى انتهاء فترة الانتظار وحاول مرة أخرى بعد الفترة المقترحة.", + "suggestion2": "التبديل إلى مجموعة مع مزودي النسخ الاحتياطي.", + "suggestion3": "ضبط ملفات تعريف مرونة المزود/حدود المعدل في الإعدادات.", + "primaryAction": "فتح إعدادات المرونة", + "secondaryAction": "فتح الكومبوز" + }, + "500": { + "title": "خطأ في الخادم الداخلي", + "description": "حدث خطأ غير متوقع على جانب الخادم أثناء معالجة طلبك.", + "suggestion1": "أعد المحاولة مرة كل بضع ثوانٍ.", + "suggestion2": "تحقق من بيانات صحة النظام وسجلات الخادم للحصول على معرفات الطلبات المرتبطة.", + "suggestion3": "إذا استمرت المشكلة، يرجى الإبلاغ عنها مع الطابع الزمني وسياق الطلب.", + "primaryAction": "فتح لوحة معلومات الصحة", + "secondaryAction": "فتح السجلات" + }, + "502": { + "title": "بوابة سيئة", + "description": "عاد مزود الخدمة أو تكامل البوابة استجابة غير صالحة.", + "suggestion1": "حاول مرة أخرى مع مزود آخر أو مسار مجموعة نشط.", + "suggestion2": "تحقق من بيانات اعتماد المزود وتوافر النموذج.", + "suggestion3": "افحص مخرجات المترجم إذا كان هناك تحويل للتنسيق.", + "primaryAction": "فتح المزودين", + "secondaryAction": "افتح المترجم" + }, + "503": { + "title": "الخدمة غير متاحة", + "description": "الخدمة غير متاحة مؤقتًا بسبب الصيانة أو الاعتماديات المتدهورة.", + "suggestion1": "انتظر لحظة وحاول مرة أخرى.", + "suggestion2": "تحقق من إشعارات الصيانة وحالة النظام.", + "suggestion3": "استخدم مزودي النسخ الاحتياطي إذا كانت سيرتك الذاتية حساسة للزمن.", + "primaryAction": "تفاصيل الصيانة", + "secondaryAction": "حالة النظام" + } + } + }, + "kiroAuthModal": { + "title": "اتصل بـ {providerLabel}", + "chooseMethod": "اختر طريقة المصادقة الخاصة بك:", + "builderId": "معرف منشئ AWS", + "builderDescription": "موصى به لمعظم المستخدمين. قم بتسجيل الدخول باستخدام حساب AWS المرتبط بـ {providerLabel}.", + "organization": "منظمتك (AWS IAM Identity Center)", + "organizationDescription": "استخدم عنوان URL لبدء SSO الخاص بشركتك (مثال: {url}).", + "googleAccount": "حساب Google", + "googleDescription": "تسجيل الدخول باستخدام حساب Google الخاص بك.", + "githubAccount": "حساب GitHub", + "githubDescription": "تسجيل الدخول باستخدام حساب GitHub الخاص بك.", + "importToken": "استيراد الرمز", + "importDescription": "الصق رمز التحديث الذي تم تصديره من {providerLabel}.", + "apiKey": "مفتاح API", + "apiKeyDescription": "الصق مفتاح API طويل الأمد لـ {providerLabel} / CodeWhisperer. يتم تخزينه كاعتماد حامل بدون رمز تحديث؛ اكتشاف الملف الشخصي يعتمد على الجهد الأفضل.", + "idcStartUrl": "رابط بدء IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "رابط مركز هوية AWS IAM الخاص بمنظمتك", + "awsRegion": "منطقة AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "منطقة AWS لمركز الهوية الخاص بك (افتراضي: us-east-1)", + "continue": "استمر", + "back": "رجوع", + "autoDetecting": "يتم الكشف عن الرمز تلقائيًا...", + "readingCredentials": "قراءة بيانات اعتماد {providerLabel} من ذاكرة التخزين المؤقت لـ AWS SSO", + "tokenNotDetected": "لم يتم اكتشاف رمز {providerLabel} تلقائيًا. يرجى لصق رمز التحديث الخاص بك يدويًا.", + "refreshToken": "تحديث الرمز", + "tokenPlaceholder": "سيتم ملء الرمز تلقائيًا...", + "importing": "جارٍ الاستيراد...", + "apiKeyPlaceholder": "الصق مفتاح API الخاص بك {providerLabel}...", + "apiKeyStoredDescription": "تم تخزينه مشفراً كاعتماد حاملي طويل الأمد. لا يوجد تدفق تحديث.", + "apiKeyRegionDescription": "منطقة AWS للمفتاح (افتراضي: us-east-1)", + "validating": "جارٍ التحقق...", + "validateAndSaveApiKey": "تحقق من مفتاح API واحفظه", + "errorAutoDetect": "تعذر الكشف التلقائي عن الرمز", + "errorAutoDetectFailed": "فشل في الكشف التلقائي عن الرمز", + "errorRefreshTokenRequired": "يرجى إدخال رمز التحديث", + "errorImportFailed": "فشل الاستيراد", + "errorApiKeyRequired": "يرجى إدخال مفتاح واجهة برمجة تطبيقات Kiro", + "errorApiKeyImportFailed": "فشل استيراد مفتاح API", + "errorIdcStartUrlRequired": "يرجى إدخال عنوان URL لبدء IDC الخاص بك" + }, + "kiroSocialOAuthModal": { + "title": "اتصل بـ {providerLabel} عبر {providerName}", + "errorStartAuthorization": "فشل في بدء التفويض", + "errorAuthorizationExpired": "انتهت صلاحية التفويض. ابدأ عملية تسجيل الدخول مرة أخرى.", + "errorAuthorizationFailed": "فشل التفويض", + "initializing": "جارٍ التهيئة...", + "settingUp": "إعداد مصادقة {providerName}", + "openIncognito": "افتح هذا الرابط في نافذة التصفح المتخفي", + "incognitoDescription": "استخدم نافذة التصفح المتخفي/الخاص لتجنب تعارضات الجلسة مع الحسابات الموجودة.", + "copyLink": "نسخ الرابط", + "verificationCode": "رمز التحقق", + "waiting": "في انتظار التفويض...", + "cancel": "إلغاء", + "successTitle": "تم الاتصال بنجاح!", + "successMessage": "تم ربط حسابك {providerLabel} عبر {providerName}.", + "done": "تمّ", + "errorTitle": "فشل الاتصال", + "close": "إغلاق" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "فشل التفويض", + "errorPopupBlocked": "تم حظر النوافذ المنبثقة - يرجى السماح بالنوافذ المنبثقة لهذا الموقع، أو لصق الرمز يدويًا أدناه.", + "errorPopupClosed": "تم إغلاق نافذة التفويض قبل الاكتمال.", + "errorAccessTokenRequired": "مطلوب رمز الوصول.", + "errorImportFailed": "فشل الاستيراد", + "title": "اتصل بـ Trae SOLO", + "authorizeDescription": "قم بالتفويض عبر trae.ai في نافذة منبثقة. ستغلق النافذة المنبثقة نفسها بمجرد استيراد الرمز.", + "authorizeImportant": "مهم: يجب أن تكون مسجلاً الدخول إلى trae.ai في هذا المتصفح أولاً. صفحة التفويض تؤكد فقط وجود جلسة حالية - لا يمكنها تسجيل دخولك. إذا رأيت \"فشل تسجيل الدخول\"، انقر على \"فتح solo.trae.ai\"، سجل الدخول، ثم عد إلى هنا.", + "waitingForAuthorization": "انتظار trae.ai…", + "authorizeWithBrowser": "تفويض باستخدام المتصفح", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "أو لصق رمز يدويًا", + "manualInstructions": "قم بتسجيل الدخول إلى solo.trae.ai، افتح أدوات المطور → الشبكة، أرسل أي رسالة دردشة، وانسخ JWT من Authorization: Cloud-IDE-JWT {tokenPlaceholder} رأس الطلب. مدة صلاحية JWT حوالي 14 يومًا. تأتي حقول الهوية الاختيارية من common_params في نفس جسم الطلب.", + "accessTokenLabel": "رمز الوصول (Cloud-IDE-JWT)", + "webId": "معرف الويب", + "optional": "اختياري", + "bizUserId": "معرف مستخدم الأعمال", + "userUniqueId": "معرف المستخدم الفريد", + "scope": "نطاق", + "tenant": "مستأجر", + "region": "المنطقة", + "importing": "جارٍ الاستيراد…", + "importToken": "استيراد الرمز", + "cancel": "إلغاء" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "توزيع...", + "complete": "مكتمل", + "defaultLabel": "توزيع الوكلاء" + } + }, + "providerTest": { + "dialogLabel": "اختبار {provider}", + "deprecated": "مُهمل", + "risk": "خطر", + "close": "إغلاق", + "model": "نموذج", + "key": "مفتاح", + "defaultKey": "افتراضي", + "clearConversation": "مسح المحادثة", + "clear": "مسح", + "tabs": { + "test": "اختبار", + "logs": "السجلات" + }, + "loadingLogs": "جارٍ تحميل السجلات…", + "failedToLoadLogs": "فشل في تحميل السجلات", + "noLogsYet": "لا توجد سجلات بعد", + "noLogsDescription": "أرسل رسالة اختبار من علامة التبويب اختبار — ستظهر السجلات لهذا المزود هنا.", + "openFullLogs": "افتح صفحة السجلات الكاملة", + "live": "مباشر", + "tailingLast": "تتبع آخر {count}", + "refreshNow": "تحديث الآن", + "refresh": "تحديث", + "unknownRequester": "مطلوب غير معروف", + "fields": { + "timestamp": "طابع زمني", + "status": "الحالة", + "duration": "المدة", + "model": "نموذج", + "requestedModel": "النموذج المطلوب", + "provider": "مزود", + "requester": "طالب", + "tokens": "رموز" + } + }, + "proxyLog": { + "detailAriaLabel": "تفاصيل سجل الوكيل", + "event": "حدث الوكيل", + "close": "إغلاق نافذة تفاصيل الوكيل", + "time": "الوقت", + "latency": "زمن الانتقال", + "clientIp": "عنوان IP للعميل", + "proxy": "وكيل", + "direct": "مباشر", + "type": "اكتب", + "level": "مستوى", + "provider": "مزود", + "tlsFingerprint": "بصمة TLS", + "directNative": "مباشر", + "targetUrl": "عنوان URL المستهدف", + "error": "خطأ", + "configuration": "تكوين الوكيل" + }, + "requestTimeline": { + "title": "جدول زمني للطلب", + "modes": { + "follow": "تابع", + "followDescription": "يتحرك المحور إلى اليسار، وتبقى خط NOW عند 75%", + "now": "الآن", + "nowDescription": "انتقل إلى الوقت الحالي، خط NOW يعيد التعيين إلى المركز", + "pan": "بان", + "panDescription": "اسحب للاستكشاف، الخلفية مجمدة" + }, + "reset": "إعادة تعيين", + "started": "بدأت", + "ended": "انتهى", + "duration": "المدة", + "status": "الحالة", + "provider": "مزود", + "tokens": "رموز", + "active": "نشط", + "other": "أخرى", + "tenMinutes": "10دقيقة", + "hour": "ساعة", + "day": "يوم", + "unknownModel": "غير معروف", + "pending": "معلق" + }, + "metadata": { + "compressionTitle": "ضغط", + "compressionDescription": "قم بتكوين إعدادات ضغط السياق لتقليل استخدام الرموز والتكاليف.", + "relayTitle": "OmniRoute — بروكسيات الريلاي", + "relayDescription": "نقاط نهاية وكيل Relay بدون خادم لبنيتك التحتية للذكاء الاصطناعي", + "trafficInspectorTitle": "مفتش المرور — أومني روت", + "trafficInspectorDescription": "راقب مكالمات LLM + قم بتصحيح أي حركة مرور HTTPS لتطبيق ما" + }, + "conductor": { + "title": "كوندوكتور — أسطول عميل CLI", + "subtitle": "محور OmniConductor: العدائين، قائمة المهام والمجالس، مباشر", + "runners": "العداؤون", + "tasks": "المهام", + "colName": "اسم", + "colClis": "واجهات سطر الأوامر", + "colStatus": "الحالة", + "colTask": "مهمة", + "colMode": "وضع", + "colRunner": "عداء", + "colSummary": "ملخص", + "online": "متصل", + "offline": "غير متصل", + "draining": "تجفيف", + "hubOffline": "محور الموصل غير متصل أو غير مُهيأ (CONDUCTOR_HUB_URL) — لا يظهر أي شيء بدلاً من بيانات قديمة.", + "noRunners": "لا يوجد عداؤون مسجلون", + "noTasks": "لا توجد مهام بعد", + "detailTitle": "تفاصيل المهمة", + "prompt": "موجه", + "branch": "فرع", + "fetchHint": "احصل على النتيجة باستخدام: git fetch origin {branch}", + "council": "مجلس", + "candidates": "المرشحون", + "cancel": "إلغاء المهمة", + "cancelConfirmTitle": "هل تريد إلغاء هذه المهمة؟", + "cancelConfirmMessage": "سيقوم المركز بإلغاء التنفيذ على العداء. لا يمكن التراجع عن ذلك.", + "cancelFailed": "رفض المركز إلغاء الطلب", + "close": "إغلاق", + "error": "خطأ", + "faroTitle": "فاروس — المتحدث الرسمي للأسطول", + "faroSubtitle": "الدردشة والصوت، متجذرة في أحداث الأسطول الحقيقية. الأوامر التدميرية دائمًا تطلب تأكيدًا.", + "faroEmpty": "اسأل عن الأسطول — على سبيل المثال \"كيف حال الأسطول؟\"", + "faroPending": "فارو يطلب تأكيدًا", + "faroPlaceholder": "تحدث إلى Faro…", + "faroSend": "إرسال", + "faroOffline": "فاروا (المتحدث الرسمي) غير متصل", + "yes": "نعم", + "no": "لا", + "pushToTalk": "اضغط للتحدث", + "speakAnswers": "تحدث بالإجابات", + "voiceModels": "نماذج الصوت (مزود/نموذج هذا OmniRoute)", + "voiceIdle": "تحدث", + "voiceListening": "يستمع...", + "voiceThinking": "تفكير…", + "voiceSpeaking": "يتحدث...", + "sttFailed": "فشل النسخ (تحقق من نموذج/مزود STT)", + "ttsFailed": "فشل توليد الكلام (تحقق من نموذج/مزود TTS)", + "micDenied": "الميكروفون غير متاح أو تم رفض الإذن" + }, + "cliproxyProviderExposure": { + "title": "تعرض المزود", + "description": "تعريض نماذج CLIProxyAPI كهدف توجيه تحت بادئة cliproxyapi/.", + "label": "Expose as cliproxyapi/...", + "hint": "عند التمكين، تظهر النماذج المكتشفة في اختيارات المزود عبر OmniRoute.", + "updateFailed": "فشل في التحديث (HTTP {status})", + "networkError": "خطأ في الشبكة - لم يتمكن من تحديث إعدادات تعرض المزود" + } } - diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json index ae340730bb..6b296974fd 100644 --- a/src/i18n/messages/az.json +++ b/src/i18n/messages/az.json @@ -172,6 +172,18 @@ "unselectAll": "Seçimi ləğv et", "visibleModels": "görünən", "selectAllConfirm": "{count} model bu kombinasiyaya əlavə edilsin?", + "testSelectedProviders": "Test provayderləri", + "testingSelectedProviders": "Test edilir {done}/{total}...", + "noProvidersSelectedToTest": "Əvvəlcə aşağıdakı təminatçılardan ən azı birini yoxlayın", + "noModelsToTestForProviders": "Seçilmiş təminatçılar üçün sınaq üçün modellər yoxdur", + "testSelectedProvidersResults": "{ok} {total} model işləyir", + "selectWorkingModels": "İşləyir əlavə et", + "unselectWorkingModels": "Seçimi ləğv etmək", + "noWorkingModelsToSelect": "Əlavə etmək üçün işləyən model qalmayıb", + "providerTestHint": "İpucu: təminatçını yoxlayın → Test → İşləyən əlavə edin. Seçimi ləğv etmək üçün yenidən klikləyin.", + "selectAllProviders": "Bütün təminatçıları yoxlayın", + "clearProviderSelection": "Təchizatçıları seçimi ləğv et", + "providersSelectedCount": "{count} təminatçı yoxlanıldı", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Ölçü", + "toggleNoAuthProvider": "No-Auth Provayderini Dəyişdirin", + "loadingModels": "Modellər yüklənir…", + "selectAModel": "Model seçin", + "degraded": "Zəifləmiş", + "zeroConfigBannerTitle": "Sıfır konfiqurasiya rejimində işləyir", + "zeroConfigBannerBody": "OmniRoute ilk açılışda avtomatik olaraq təhlükəsiz şifrələmə açarları yaradıb. Onlar {dataDir} yerində saxlanılır. Heç bir əməliyyat tələb olunmur — məlumatlarınız şifrələnib və təhlükəsizdir. Xüsusi açarlardan istifadə etmək üçün həmin fayla JWT_SECRETSTORAGE_ENCRYPTION_KEY əlavə edin.", + "batchRelativeTimeIn": "{value} daxil", + "batchRelativeTimeAgo": "{value} əvvəl", + "batchDetailsTitle": "Partiya Məlumatları", + "batchProgress": "İrəliləyiş", + "batchCompletedCount": "{count} tamamlandı", + "batchFailedCount": "{count} uğursuz oldu", + "batchPendingCount": "{count} gözləyir", + "batchTimeline": "Zaman Çizgisi", + "batchTimelineInProgress": "İcra olunur", + "batchTimelineFinalizing": "Tamamlama", + "batchTimelineCompleted": "Tamamlandı", + "batchTimelineFailed": "Uğursuz oldu", + "batchTimelineExpires": "Bitmə müddəti", + "batchTimelineExpired": "Müddəti Bitmiş", + "batchTimelineCancelling": "Ləğv edilir", + "batchTimelineCancelled": "Ləğv edildi", + "batchTokenUsage": "Token İstifadəsi", + "batchMetadata": "Metaməlumat", + "batchFileContents": "Fayl Məzmunu", + "batchFileUsedByCount": "{count, plural, one {# partiya} other {# partiyalar}}", + "batchFilePreview": "Önizləmə", + "batchFilePreviewTruncated": "İlk {shown} sətir göstərilir ({total} cəmi sətir)", + "batchFileDownloadFull": "Tam Faylı Yüklə" }, "disabled": "Deaktiv", "featureFlagOmnirouteEmergencyFallbackDescription": "Büdcəsi tükənmiş sorğuları təcili pulsuz ehtiyat təminatçıya/modelə yönləndirin.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Ayırıcı", "discovery": "Kəşf", "discoverySubtitle": "Pulsuz giriş üçün provayderləri skan edin", + "conductor": "İdarəçi", + "conductorSubtitle": "CLI-agent donanması", "resilienceConnections": "Bağlantı Davamlılığı", "resilienceConnectionsSubtitle": "Soyuma, açar, blok vəziyyəti", "settingsModalityBridge": "Modallıq Körpüsü", - "settingsModalityBridgeSubtitle": "Şəkil/səs → mətn yalnız model üçün mətnə keçid" + "settingsModalityBridgeSubtitle": "Şəkil/səs → mətn yalnız model üçün mətnə keçid", + "commandPalette": { + "title": "Əmr palitrası", + "searchPlaceholder": "Səhifələri, parametrləri, alətləri axtarın...", + "clearSearch": "Axtarışı təmizlə", + "noResults": "Heç bir nəticə yoxdur", + "navigate": "naviqasiya", + "open": "açıq", + "close": "bağla" + }, + "noResults": "Heç bir nəticə yoxdur" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Parametrlərin Yenilənməsi Uğursuz Oldu", "sync.token.created": "Sinxronizasiya Tokeni Yaradıldı", "sync.token.revoked": "Sinxronizasiya Tokeni Ləğv Edildi" - } + }, + "mcpMetricCalls24h": "Zənglər (24s)", + "mcpMetricSuccessRate": "Uğur nisbəti", + "mcpMetricAvgDuration": "Ortalama müddət", + "mcpMetricTopTool": "Ən Yaxşı Alət" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "Səhifə avtomatik yenidən yüklənir...", - "providerTopology": "Provayder Topologiyası" + "providerTopology": "Provayder Topologiyası", + "downloadDmg": "DMG-ni Yükləyin (macOS)", + "downloadDmgDescription": "OmniRoute masaüstü tətbiqinin yeni versiyası mövcuddur. Zəhmət olmasa, yeniləmək üçün macOS DMG quraşdırıcısını yükləyin və quraşdırın (hazırkı: v{version}).", + "downloadExe": "EXE-ni Yükləyin (Windows)", + "downloadExeDescription": "OmniRoute masaüstü tətbiqinin yeni versiyası mövcuddur. Zəhmət olmasa, yeniləmək üçün Windows EXE quraşdırıcısını yükləyin və quraşdırın (hazırkı: v{version}).", + "downloadAppImage": "AppImage-i Yükləyin (Linux)", + "downloadAppImageDescription": "OmniRoute masaüstü tətbiqinin yeni versiyası mövcuddur. Zəhmət olmasa, yeniləmək üçün Linux AppImage paketini yükləyin (hazırkı: v{version}).", + "downloadUpdate": "Yeniləməni Yüklə", + "downloadUpdateDescription": "OmniRoute masaüstü tətbiqinin yeni versiyası mövcuddur. Zəhmət olmasa, sisteminiz üçün müvafiq tətbiq formatını yükləyin (hazırkı: v{version}).", + "updateQueued": "v{version} üçün yeniləmə sıraya alındı.", + "updateDockerRebuilding": "Docker imici arxa planda yenidən qurulur.", + "updateWaitingRestart": "OmniRoute-un yeni versiya ilə yenidən başlamasını gözləyir.", + "updateInstalling": "v{version} quraşdırılır.", + "updateRunning": "OmniRoute indi v{version} versiyasında işləyir.", + "updateCompleted": "OmniRoute v{version} versiyasına yeniləndi.", + "updateDockerStillRebuilding": "Docker imici hələ də v{version} üçün yenidən qurulur.", + "updateInstallingBackground": "Arxa planda v{version} quraşdırılır.", + "updateWaitingVersion": "OmniRoute v{version} versiyasına qayıtmağı gözləyir.", + "updateDockerStillInProgress": "Docker yenidən qurulması hələ də davam edir.", + "updateRestarting": "Xidmətin yenidən başladılması prosesi gedir. OmniRoute-un yenidən onlayn olmasını gözləyir...", + "updateTimeout": "Yeniləmə başladı, lakin v{version} zaman aşımından əvvəl mövcud olmadı. Səhifəni yeniləyin və ya server loglarını yoxlayın.", + "updateTimedOut": "v{version} versiyasına yeniləmə vaxtı bitdi.", + "updateStartFailed": "Yeniləməni başlada bilmədik.", + "noResponseStream": "Cavab axını alınmadı.", + "updateComplete": "Yeniləmə tamamlandı!", + "updateFailed": "Yeniləmə baş tutmadı.", + "updateNetworkError": "Şəbəkə xətası — yeniləmə zamanı əlaqə itdi.", + "stepInstallPackage": "Paket Quraşdırın", + "stepRebuildNativeModules": "Təkrar Yerləşdirin Yerli Modulları", + "stepRestartService": "Xidməti Yenidən Başlat", + "stepComplete": "Tamamlandı", + "stepError": "Xəta", + "updateCompleteTitle": "Yeniləmə Tamamlandı!", + "updateFailedTitle": "Yeniləmə Baş Tutmadı", + "updatingTitle": "OmniRoute-u yeniləyir...", + "reloadNotice": "Səhifə bir neçə saniyə ərzində avtomatik yeniləcək.", + "retryNotice": "Zəhmət olmasa, yenidən cəhd edin və ya CLI vasitəsilə əl ilə yeniləyin.", + "restartNotice": "Bu səhifəni bağlamayın. Sistem avtomatik olaraq yenidən başlayacaq.", + "reloadNow": "İndi Yenilə", + "closeUpdate": "Bağla", + "retryUpdate": "Təkrar et", + "updateAvailableTitle": "Yeniləmə Mövcuddur: v{version}{desktop}", + "desktopAppLabel": "(İş Masası Tətbiqi)", + "checkingForUpdates": "Yeniləmələr yoxlanılır...", + "versionAvailableForDownload": "Versiya v{version} yüklənmək üçün mövcuddur.", + "downloadingUpdate": "Yeniləmə yüklənir... {percent}% tamamlandı.", + "updateDownloaded": "Yükləmə müvəffəqiyyətlə başa çatdı! Tətbiq etmək üçün Yenidən Başlat və Quraşdır düyməsini basın.", + "autoUpdateFailed": "Avtomatik yeniləmə uğursuz oldu: {reason}.", + "unknownUpdateError": "Naməlum xəta", + "versionAvailableDesktop": "Versiya v{version} masaüstü tətbiqi üçün mövcuddur.", + "manualUpdateRequired": "Bu quraşdırma növü üçün əl ilə yeniləmə tələb olunur.", + "restartAndInstall": "Yenidən Başlat və Quraşdır", + "checkForUpdate": "Yeniləməni Yoxla", + "manualUpdate": "Əl İlə Yeniləmə", + "directDownloadHint": "Yaxud müvafiq quraşdırıcı formatını birbaşa yükləyin:", + "releaseNotes": "Buraxılış Qeydləri", + "readMore": "Daha Çox Oxu", + "noAuthLabel": "No Auth" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Bu sorğu ətrafındakı yadda saxlanılmış zəng jurnallarından müəyyən edilib", "routeRecommendations": "Tövsiyələr", "routeLimitations": "Məhdudiyyətlər", - "routeNoKnownLimitations": "Bu izahat üçün məlum məhdudiyyət yoxdur." + "routeNoKnownLimitations": "Bu izahat üçün məlum məhdudiyyət yoxdur.", + "searchAnalyticsLoading": "Axtarış analitikası yüklənir…", + "searchAnalyticsNoData": "Hələlik axtarış məlumatı mövcud deyil.", + "searchAnalyticsNoDataDescription": "Axtarış tələbləri burada /v1/search vasitəsilə ilk axtarışdan sonra görünəcək.", + "searchAnalyticsToday": "{count} bu gün", + "searchAnalyticsCachedRequests": "{count} keşlənmiş sorğular", + "searchAnalyticsApiCosts": "axtarış API xərcləri", + "searchAnalyticsErrors": "{count} səhvlər", + "searchAnalyticsNoErrors": "Heç bir səhv yoxdur", + "searchAnalyticsProviderBreakdown": "Təchizatçı Analizi", + "searchAnalyticsQueries": "sorğular", + "searchAnalyticsEmptyDescription": "Web axtarışlarını yönləndirmək üçün POST /v1/search istifadə edin.", + "searchAnalyticsFreeTier": "Pulsuz səviyyə mövcuddur: Serper (2,500/ay), Brave (2,000/ay), Exa (1,000/ay), Tavily (1,000/ay) — avtomatik keçid ilə cəmi 6,500+ pulsuz axtarış/ay.", + "autoRoutingNoDataAvailable": "Avtomatik yönləndirmə analitikası mövcud deyil. Metrləri görmək üçün auto/ prefiksini istifadə edərək sorğular göndərin.", + "defaultVariantLabel": "Defolt", + "freeTierAvailable": "Pulsuz səviyyə mövcuddur" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} provayder", "imageToTextBridgeAvailable": "Modality Bridge indi yalnız mətn modeləri üçün şəkilləri təsvir edə bilər. /api/v1/images/understanding tətbiq edildikdə inline oyun sahəsi mövcud olacaq.", "imageToTextBridgeCta": "Modallıq Körpüsü parametrlərində Şəkil→Mətn körpüsünü konfiqurasiya edin", - "sttBridgeCta": "Modality Bridge parametrlərində Səs→Mətn körpüsünü konfiqurasiya edin" + "sttBridgeCta": "Modality Bridge parametrlərində Səs→Mətn körpüsünü konfiqurasiya edin", + "existingConnection": "Mövcud bağlantı", + "openrouterSttDescription": "OpenRouter nitqdan mətbəx modelləri sizin konfiqurasiya edilmiş OpenRouter bağlantınızı istifadə edir. Ayrı bir etimadnaməyə ehtiyac yoxdur." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Yapışdırın:", "copilotReloadInstruction": "Sonra VS Code-u yenidən yükləyin və daxiletmə sorğusunda API açarını təyin edin.", "wireApiChatCompletions": "Söhbət Tamamlamaları (/chat/tamamlamalar)", - "wireApiResponses": "Responses API (/cavablar)" + "wireApiResponses": "Responses API (/cavablar)", + "cliproxyapiActionFailed": "Əməliyyat uğursuz oldu", + "cliproxyapiActionSucceeded": "Əməliyyat uğurla başa çatdı", + "cliproxyapiCheckUpdates": "Yeniləmələri Yoxla", + "cliproxyapiDescription": "Yuxarı axın proxy geri dönməsi (Go əsaslı OAuth)", + "cliproxyapiHealth": "Sağlamlıq", + "cliproxyapiHealthy": "Sağlam", + "cliproxyapiInstall": "Quraşdırın", + "cliproxyapiNotInstalledValue": "Quraşdırılmayıb", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Sorğu uğursuz oldu", + "cliproxyapiRestart": "Yenidən Başlat", + "cliproxyapiStart": "Başla", + "cliproxyapiStatusError": "Xəta", + "cliproxyapiStatusInstalled": "Quraşdırılıb", + "cliproxyapiStatusNotInstalled": "Quraşdırılmayıb", + "cliproxyapiStatusRunning": "İşləyir", + "cliproxyapiStatusStopped": "Dayandırıldı", + "cliproxyapiStop": "Dayandırmaq", + "cliproxyapiUnhealthy": "Sağlıqsız", + "cliproxyapiUnknown": "Bilinməyən", + "cliproxyapiUpdate": "Yenilə", + "cliproxyapiUpdateAvailable": "Yeniləmə mövcuddur: v{current} → v{latest}", + "cliproxyapiVersion": "Versiya" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Yalnız kvota tükənməsi zamanı irəliləyin", + "fallbackOnlyOnQuotaExhaustionShort": "yalnız kvota ehtiyatı", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Rejim paketi və çəki dərəcəsi burada qalır; breaker iş vaxtı vəziyyəti Sağlamlıq səhifəsində qalır.", "emailVisibilityHint": "Buradakı hesab e-poçtları qlobal məxfilik keçidini izləyir.", "emailVisibilityTooltip": "Kombolar, provayderlər və kvota ekranlarında hesab e-poçtlarını qlobal olaraq göstərmək və ya gizlətmək üçün göz ikonundan istifadə edin.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Addım-addım (Təchizatçı → Model)", + "builderModeGlobal": "Qlobal model axtarışı (Xüsusi kombinasiyalar)", + "builderGlobalSearchPlaceholder": "Bütün provayderlər arasında modelləri axtarın (məsələn, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Hamısını əlavə et", + "builderGlobalShortcuts": "Qısa Yollar:", + "builderGlobalNoResults": "\"{query}\" üçün model tapılmadı.", + "builderGlobalProviderLabel": "Təchizatçı:", + "builderGlobalAccountCount": "{count, plural, one {# hesab} other {# hesablar}}", + "builderGlobalAdded": "Əlavə edildi", + "builderGlobalAdd": "Əlavə et", "manualModel": "Mexniki model", "manualModelInvalid": "Modeli provayder/model kimi daxil edin.", "manualModelUnknownProvider": "Naməlum provayder prefiksi.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Sessiya Mövcudluğu", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Yapışqanlıq qapalıdır", "kimiPresetTitle": "Kimi Coding hazır ayarı", "kimiPresetDescription": "Əsas model olaraq Kimi K3 (Moonshot API), konfiqurasiya edildikdə Kimi Code bağlantılarınıza (kimi-coding, kimi-web) avtomatik keçid ilə.", - "kimiPresetCta": "Hazır ayarı əlavə et" + "kimiPresetCta": "Hazır ayarı əlavə et", + "intelligentComboCount": "{count, plural, one {# ağıllı kombinasiyası} other {# ağıllı kombinasiyaları}}", + "providersInScope": "{count, plural, one {# təminatçı əhatədə} other {# təminatçılar əhatədə}}", + "savingModePack": "{pack} saxlanılır…", + "errorTitle": "Kombinasyonlar yüklənmədi", + "errorDescription": "Hazırda kombinasiyalı məlumatları yükləyə bilmirik. Bağlantınızı yoxlayın və yenidən cəhd edin.", + "errorId": "Xəta ID: {id}", + "errorRetry": "Yenidən Cəhd Et", + "comboLabel": "Kombinasiya" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL-i", "obsidianUsername": "İstifadəçi adı", "obsidianPassword": "Şifrə", - "obsidianTailscaleHint": "Mobildən qoşulursunuzsa, localhost əvəzinə Tailscale IP-nizdən istifadə edin. Hər iki cihaz eyni Tailscale şəbəkəsində olmalıdır." + "obsidianTailscaleHint": "Mobildən qoşulursunuzsa, localhost əvəzinə Tailscale IP-nizdən istifadə edin. Hər iki cihaz eyni Tailscale şəbəkəsində olmalıdır.", + "cloudSyncNotConfigured": "Bu instansiyada bulud sinxronizasiyası konfiqurasiya edilməyib.", + "notionConnect": "Bağlan", + "notionConnectFailed": "Bağlantı qurmaq mümkün olmadı", + "notionConnected": "Bağlıdır", + "notionConnectionFailed": "Bağlantı uğursuz oldu", + "notionDescription": "Notion-a yönləndirilmiş AI modelləri vasitəsilə axtarış edin, oxuyun, sorğu verin və yazın", + "notionDisconnect": "Bağlantını kəsin", + "notionDisconnectFailed": "Bağlantını kəsmək mümkün olmadı", + "notionEnterToken": "Zəhmət olmasa, Notion inteqrasiya tokenini daxil edin", + "notionIntegrationHelp": "İç İnteqrasiya Yaradın at", + "notionIntegrationToken": "Notion Daxili İnteqrasiya Tokeni", + "notionNotConnected": "Bağlı deyil", + "notionTokenConfigured": "Token konfiqurasiya edilib. Notion alətləri MCP vasitəsilə mövcuddur." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provayder / Model", "noRemoteProviders": "API açarı konfiqurasiya edilmiş provayder yoxdur", "selectProviderModel": "Model seçin", + "customBaseUrlLabel": "Xüsusi əsas URL (isteğe bağlı)", + "customModelIdLabel": "Xüsusi model ID-si (istəyə bağlı)", + "customEndpointHelp": "OpenAI-uyğun /embeddings son nöqtəsindən istifadə edin. Lokal son nöqtələrə icazə verilir; bulud metadata hədəfləri bloklanıb.", + "customEndpointSave": "Xüsusi son nöqtəni tətbiq et", + "customEndpointInvalid": "Həm etibarlı HTTP(S) əsas URL, həm də model ID daxil edin, ya da hər iki sahəni boş buraxın.", + "customEndpointSaveFailed": "Xüsusi yerləşdirmə son nöqtəsi saxlanıla bilmədi.", "staticEnabledLabel": "Statik Potion-u aktivləşdirin", "staticEnabledDesc": "potion-base-8M modelini yükləyin və lokal olaraq istifadə edin", "transformersEnabledLabel": "Transformers.js-i aktivləşdirin", @@ -4258,7 +4443,9 @@ "cleaning": "Təmizlənir...", "cleanNow": "İndi təmizlə", "cleanupSuccess": "{count} nöqtə silindi", - "cleanupFailed": "Təmizləmə uğursuz oldu" + "cleanupFailed": "Təmizləmə uğursuz oldu", + "hostLabel": "Ev sahibi", + "collectionLabel": "Kolleksiya" }, "rerank": { "enableLabel": "Rerank-i aktivləşdir", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 səviyyəli ehtiyat diaqramı", "apiKeyMgmt": "API Açar İdarəetmə", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Pulsuz təminatçıları qurun", + "description": "Seçimlə qeydiyyatsız təminatçıları aktivləşdirin. Davam etməzdən əvvəl hər bir təminatçının bildirişini və saytını nəzərdən keçirin; mövcudluq və sürət limitləri üçüncü tərəflər tərəfindən idarə olunur.", + "loading": "Pulsuz təminatçılar yüklənir...", + "loadFailed": "Pulsuz təminatçıları yükləmək mümkün olmadı.", + "alreadyConfigured": "Bütün uyğun pulsuz təminatçılar artıq konfiqurasiya edilib.", + "reviewProviderSite": "Təchizatçı saytını və şərtləri nəzərdən keçirin", + "confirmation": "Mən bu üçüncü tərəf təminatçılarını nəzərdən keçirdim və OmniRoute-un seçilmiş əlaqələri yaratmasını istəyirəm.", + "setupSelected": "Seçilmiş provayderləri qurun", + "settingUp": "Quraşdırılır...", + "setupFailed": "Seçilmiş təminatçıları quraşdırmaq mümkün olmadı. Heç bir mövcud şey dəyişdirilmədi.", + "retryFailed": "Uğursuz olan təminatçıları yenidən cəhd et", + "orUseApiKey": "və ya API açarı ilə qoşulun", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "yaradıldı", + "skipped": "artıq konfiqurasiya edilib", + "failed": "başarısız oldu" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "İkon URL-i", "iconUrlHint": "İstəyə bağlı. Bu provayderin ikonu kimi göstərilən şəkil URL-i.", + "iconUrlInvalid": "Yanlış ikon URL-si. http(s):// və ya data:image/*;base64 URL istifadə edin.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "Bu təminatçının modellərini claude/<provider>/<model> güzgü ID-ləri altında reklam edin ki, Claude Code-un qapı modeli kəşfi onları siyahıya ala bilsin. Varsayılan olaraq deaktivdir — bunu aktivləşdirmək bütün müştərilər üçün kataloq girişlərini ikiqat artırır.", "ccAliasProviderLevelLabel": "Təchizatçı standart", "ccAliasModelOverridesLabel": "Model üzrə üst-üstə düşmələr", - "ccAliasModelOverrideAriaLabel": "{name} üçün üst-üstə düşmə", + "ccAliasModelOverrideAriaLabel": "{modelId} üçün üst-üstə düşmə", "ccAliasStateInherit": "İrsiyyət", "ccAliasStateOn": "Üstündə", "ccAliasStateOff": "Söndürüldü", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessiya artıq aktivdir", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Doğrulama tətbiq edin", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API açarını yapışdırın…", "zedSaving": "Saxlanılır…", "zedImportAction": "İdxal et", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Avtomatik İmleç sessiyasının yenilənməsini aktivləşdirin", + "cursorAgentNudgeBody": "Cursor-agent-i avtomatik sessiya yeniləməsi üçün quraşdırın — bunun olmaması halında, Cursor bağlantıları təxminən 24 saatda bir dəfə müntəzəm olaraq əl ilə yenidən qoşulma tələb edir.", + "cursorAgentNudgeDismiss": "İmtina et", "zedManualImportFailed": "Əl ilə idxal uğursuz oldu", "zedManualImportSuccess": "Zed-dən {provider} tokeni idxal edildi", "grokImportTitle": "Grok Build Auth idxal et", @@ -5878,7 +6066,6 @@ "friendliai": "Serverless çıxarış üçün pulsuz tarif — kredit kartı tələb olunmur", "gemini": "Həmişə pulsuz: Gemini 2.5 Flash üçün gündə 1,500 sorğu — kredit kartı yoxdur, açarı aistudio.google.com ünvanından əldə edin", "gigachat": "GigaChat (Sber)-ı API açarı ilə qoşun.", - "github-models": "github.com/settings/tokens ünvanında 'models: read' əhatə dairəsi ilə GitHub PAT yaradın", "gitlab": "İctimai Code Suggestions API üçün GitLab şəxsi giriş tokeni. gitlab.com istifadə etmədikdə, self-hosted baza URL-i konfiqurasiya edin.", "gitlawb-gmi": "API açarınızı Gitlawb Opengateway idarəetmə panelindən əldə edin.", "gitlawb": "API açarınızı Gitlawb Opengateway idarəetmə panelindən əldə edin.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Kimi Coding-i mövcud OAuth axını ilə qoşun.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Connect OpenAI Codex with the existing OAuth flow.", - "qwen": "Connect Qwen Code with the existing OAuth flow." + "qwen": "Connect Qwen Code with the existing OAuth flow.", + "github-models": "github.com/settings/tokens ünvanında 'models: read' əhatə dairəsi ilə GitHub PAT yaradın" }, "passthroughModelsDescription": "{provider} provayderin yerli model identifikatorlarını qəbul edir. /modellərdən idxal edin və ya marşrutlaşdırma üçün fərdi identifikatorlar əlavə edin.", "bedrockModelsDescription": "Amazon Bedrock modelləri AWS bölgəsi tərəfindən əhatə olunur. /modellərdən idxal edin və ya seçilmiş regionda aktivləşdirilmiş Bedrock model ID-lərini əlavə edin.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Bütün konfiqurasiya olunmuş bağlantılar tükəndikdə (kvota, kreditlər və ya müddət), müvəqqəti olaraq bu təminatçının açarsız səviyyəsini istifadə edin. Anonim sorğular göndərmək əvəzinə bu təminatçını atlamaq üçün söndürün — açarsız səviyyə onları rədd etdikdə (401) tövsiyə olunur.", "anonymousFallbackEnabled": "{provider} üçün anonim ehtiyat aktivdir", "anonymousFallbackDisabled": "{provider} üçün anonim ehtiyat deaktiv edilib — tükənmiş bağlantılar bu provayderi atlayacaq", - "anonymousFallbackUpdateFailed": "Anonim ehtiyat parametrlərini yeniləmək mümkün olmadı" + "anonymousFallbackUpdateFailed": "Anonim ehtiyat parametrlərini yeniləmək mümkün olmadı", + "batchDeleteFailed": "Kütləvi silmə baş tutmadı", + "batchDeleteNetworkError": "Kütləvi silmə zamanı şəbəkə xətası", + "batchUpdateFailed": "Kütləvi yeniləmə uğursuz oldu", + "batchUpdateNetworkError": "Kütləvi yeniləmə zamanı şəbəkə xətası", + "categoryAudio": "Səs", + "categoryCloudAgent": "Bulud Agentı", + "categoryIde": "IDE", + "categoryLocal": "Yerel", + "categorySearch": "Axtarış", + "categoryWebCookie": "Veb Kukisi", + "claudeExtraUsageBlockingDisabled": "Claude əlavə istifadə bloklanması deaktivdir (əlavə istifadəyə icazə verilir)", + "claudeExtraUsageBlockingEnabled": "Claude əlavə istifadə bloklanması aktivdir (əlavə istifadə bloklanacaq)", + "claudeRoutingPreferenceDisabled": "Prefiksiz Claude modelləri artıq Claude Code-u üstün tutmur.", + "claudeRoutingPreferenceEnabled": "Prefiksiz Claude modelləri indi Claude Code-u üstün tutur", + "clearMediaFilter": "Təmizlə", + "cliproxyRoutingDisabled": "İstəklər indi yerli OmniRoute (birbaşa) istifadə edir", + "cliproxyRoutingEnabled": "İstəklər indi CLIProxyAPI (daha dərin emulyasiya) vasitəsilə yönləndirilir", + "codexLimitPolicyUpdated": "Codex limit siyasəti yeniləndi", + "codexServiceModeUpdated": "Codex xidmət rejimi yeniləndi", + "codexServiceTierActive": "Codex {tier} xidmət səviyyəsi aktivdir", + "codexTierFastLabel": "Tez", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Komanda Kodu auth tətbiq etmək mümkün olmadı", + "commandCodeApplyingApproval": "Brauzer təsdiqləndi, tətbiq edilir…", + "commandCodeApplyingKey": "Brauzer tərəfindən təsdiqlənmiş açar tətbiq edilir…", + "commandCodeApprovalInstructions": "Auth URL-ni açın, giriş icazəsini təsdiqləyin, sonra aşağıda qaytarılan açarı/JSON-u/URL-i yapışdırın…", + "commandCodeAuthExpired": "Komanda Kodu auth müddəti bitdi", + "commandCodeConnected": "Əmr Kodu qoşuldu", + "commandCodeConnectionAdded": "Komanda Kodu bağlantısı əlavə edildi", + "commandCodeLinkExpired": "Əmr Kodu bağlantısı müddəti bitdi", + "commandCodeOpeningStudio": "Komanda Kod Studiyasını Açır…", + "commandCodePopupBlocked": "Pop-up bloklandı. Zəhmət olmasa, pop-uplara icazə verin və Command Code Connect-i yenidən cəhd edin.", + "commandCodeStartFailed": "Komanda Kodu auth başlamaqda uğursuz oldu", + "connectionDeleted": "Bağlantı silindi", + "connectionFallback": "bağlantı", + "coolingConnectionsDescription": "Bu bağlantılar son sorğularında 429 (sürət limiti) aldı. OmniRoute onları zamanlayıcı bitənə qədər atlayacaq — əl ilə deaktiv etməyə ehtiyac yoxdur.", + "coolingConnectionsTitle": "Hazırda soyudulur ({count})", + "failedDeleteAlias": "Alias silinmədi", + "failedDeleteConnection": "Bağlantını silmək mümkün olmadı", + "failedDistributeProxies": "Proksiləri paylamaq mümkün olmadı.", + "failedSaveModelEndpointSettings": "Model son nöqtəsi parametrlərini saxlamaq mümkün olmadı", + "failedUpdateClaudeExtraUsagePolicy": "Claude əlavə istifadə siyasətini yeniləmək mümkün olmadı", + "failedUpdateClaudeRoutingPreference": "Claude Kod yönləndirmə tercihini yeniləmək mümkün olmadı", + "failedUpdateCliproxyRouting": "CLIProxyAPI yönləndirməsini yeniləmək mümkün olmadı", + "failedUpdateCodexLimitPolicy": "Codex limit siyasətini yeniləmək mümkün olmadı", + "failedUpdateCodexServiceMode": "Codex xidmət rejimini yeniləmək mümkün olmadı", + "filterByMedia": "Media", + "freeBadge": "Pulsuz", + "kimiCodeApiKeyLabel": "Kimi Code API Açarı", + "modelTestFailed": "Model testi uğursuz oldu", + "modelTestNetworkError": "Şəbəkə xətası test modeli", + "networkError": "Şəbəkə xətası", + "networkErrorDeletingAlias": "Şəbəkə xətası ləğv edilən təxəllüsü silərkən", + "networkErrorSettingAlias": "Şəbəkə xətası təyin edərkən ləqəb", + "noProvidersMatch": "Axtarışınıza uyğun təminatçı tapılmadı.", + "noSavedProxies": "Heç bir saxlanılmış proxy tapılmadı. Əvvəlcə Parametrlər → Proxy bölməsində proxy əlavə edin.", + "pageLoadErrorDescription": "Hazırda təminatçı məlumatlarını yükləyə bilmirik. Bağlantınızı yoxlayın və yenidən cəhd edin.", + "pageLoadErrorId": "Xəta ID: {id}", + "pageLoadErrorRetry": "Yenidən Cəhd Et", + "pageLoadErrorTitle": "Təchizatçıları yükləmək mümkün olmadı", + "playgroundTitle": "Oyun Sahəsi", + "providerDetailConnectionFlexActive": "Codex flex xidmət səviyyəsi bu bağlantı üçün aktivdir", + "providerDetailConnectionPriorityActive": "Codex prioritet xidmət səviyyəsi bu bağlantı üçün aktivdir", + "providerDetailGlobalFlexActive": "Qlobal Codex flex xidmət səviyyəsi aktivdir", + "providerDetailGlobalPriorityActive": "Qlobal Codex prioritet xidmət səviyyəsi aktivdir", + "proxiesDistributed": "{tagLabel}{total} bağlantı üzrə paylanmış {assigned} proxy təyinatı.", + "rerankEndpoint": "Yenidən Sıralamaq", + "savedModelEndpointSettings": "Saxlanmış model son nöqtəsi parametrləri", + "searchByModelAria": "Model üzrə axtarış edin", + "selectSupportedEndpoint": "Ən azı bir dəstəklənən son nöqtəni seçin", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "Abunəlik siyahısını yükləmək alınmadı", "toggleFailed": "Keçiri dəyişdirmək alınmadı", "refreshFailed": "Yeniləmək alınmadı", - "deleteFailed": "Silmək alınmadı" + "deleteFailed": "Silmək alınmadı", + "add": "Əlavə et", + "cancel": "İmtina et", + "configure": "Konfiqurasiya et", + "copyEndpoint": "Nüsxə Etmək Üçün Sonlandırıcı", + "coreEndpointHint": "Köklü Sonluq İpucu", + "coreNodesHint": "Əsas Düğümlər İpucu", + "create": "Yarat", + "deleteConfirm": "Silinmə Təsdiqi", + "empty": "Boş", + "globalModeDescription": "Qlobal Rejim Təsviri", + "localCoreHint": "Yerel Nüvə İpucu", + "nodeSummary": "Node Xülasəsi", + "providerRequired": "Təchizatçı Tələb Olunur", + "providerRouting": "Təchizatçı Yönləndirməsi", + "refresh": "Təzələmək", + "refreshInterval": "Təzələmə Aralığı", + "ruleModeDescription": "Qayda Rejimi Təsviri" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Şəkil sorğularını yalnız mətn modellərinə yönləndirməzdən əvvəl avtomatik görüntüdən mətnə (vision-to-text) ehtiyat planını işə salın.", "visionBridgeEnabledLabel": "Aktivləşdirilib", "visionBridgeEnabledDesc": "Şəkil hissələrini çıxarılmış mətnlə əvəz edən zəngdən əvvəlki körpünü yandırın/söndürün.", + "visionBridgeRerouteTextOnlyLabel": "Mətnlə işləyən modelləri yönləndirin", + "visionBridgeRerouteTextOnlyDesc": "Seçilmiş modelin şəkil girişi olmadıqda, tam sorğunu, şəkilləri də daxil olmaqla, körpü modelinə göndərin.", "visionBridgeModel": "Körpü Modeli", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Görüntünü dəstəkləyən hər hansı OmniRoute model ID-si burada istifadə edilə bilər.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API açarında manage sahəsi yoxdur.", "BYPASS_PREFIX_NOT_ALLOWED": "Bir və ya bir neçə prefiks spawn-capable marşrutları hədəfləyir və onlardan yan keçmək olmaz.", "GENERIC": "Authz parametrlərini yeniləmək mümkün olmadı." - } + }, + "remove": "Silin" }, "resilienceBaseCooldownLabel": "Baza soyutma", "scopeLabel": "Scope", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Səsi test edir…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip(ler) {model} tərəfindən transkribasiya edildi", "modalityBridgeAudioTestNoop": "Audio Bridge aktivləşmədi (hədəf audio dəstəkləyə bilər, STT provayderi qoşulmayıb, ya da körpü deaktivdir)", - "modalityBridgeAudioTestError": "Səs testi uğursuz oldu: {message}" + "modalityBridgeAudioTestError": "Səs testi uğursuz oldu: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus modellərini sərhəd kombinasiyasına yönləndirin", + "cliproxyapiFallbackCodes": "Cliproxyapi Yedək Kodları", + "cliproxyapiFallbackDescription": "Cliproxyapi Yedək Təsviri", + "cliproxyapiHealthLabel": "Cliproxyapi Sağlamlıq Etiketi", + "cliproxyapiImportFailed": "Cliproxyapi İdxalı Baş Tutmadı", + "cliproxyapiImportResult": "Cliproxyapi İdxal Nəticəsi", + "cliproxyapiInvalidUrl": "Cliproxyapi Yanlış URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Həyat Dövrü Bildirişi Sonra", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Həyat Dövrü Bildirişi Əvvəlcə", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Həyat Dövrü Bildirişi Bağlantısı", + "cliproxyapiPortLabel": "Cliproxyapi Port Etiketi", + "cliproxyapiStatusLabel": "Cliproxyapi Status Etiketi", + "cliproxyapiVersionLabel": "Cliproxyapi Versiyası Etiketi", + "collection": "Kolleksiya", + "errorPage": { + "description": "Hazırda parametrləri yükləyə bilmirik. Zəhmət olmasa bir neçə saniyə sonra yenidən cəhd edin.", + "errorId": "Xəta ID: {id}", + "retry": "Yenidən Cəhd Et", + "title": "Parametrləri yükləmək mümkün olmadı" + }, + "host": "Ev sahibi", + "notInstalled": "Quraşdırılmayıb", + "oneproxyActions": "Oneproxy Əməliyyatları", + "oneproxyActive": "Oneproxy Aktivdir", + "oneproxyAnonymity": "Oneproxy Anonimliyi", + "oneproxyCountry": "Oneproxy Ölkəsi", + "oneproxyDelete": "Oneproxy Silin", + "oneproxyEmpty": "Oneproxy Boşdur", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Gecikməsi", + "oneproxyProtocol": "Oneproxy Protokolu", + "oneproxyQuality": "Oneproxy Keyfiyyəti", + "oneproxySyncFailed": "Sinkronizasiya uğursuz oldu: {error}", + "oneproxySyncSuccess": "Sinkronizasiya olunmuş {total} proksi ({added} yeni, {updated} yenilənmiş)", + "proxyDocumentationSocks5DescAfter": "Proxy Sənədi Socks5 Təsviri Sonra", + "proxyFreePoolAddProxy": "Proksi Pulsuz Hovuzu Proksi Əlavə Et", + "proxyFreePoolAdding": "Proxy Pulsuz Hovuzu Əlavə Edilir", + "proxyFreePoolSelectProxy": "Proksi Pulsuz Hovuz Proksi Seçin", + "proxyStatusActive": "Proksi Statusu Aktiv", + "proxyStatusInactive": "Proksi Statusu Aktiv Deyil", + "routingAddEntry": "Giriş əlavə et", + "settingSaveFailed": "Tənzimləmənin Saxlanması Baş Tutmadı", + "settingSaved": "Tənzimləmə Saxlanıldı", + "skillsmpApiKeyHintAfter": ". Sorğu limiti: {limit} sorğu/gün.", + "skillsmpApiKeyHintBefore": "API açarınızı alın", + "syncFailed": "Sinkronizasiya uğursuz oldu", + "unhealthy": "Sağlıqsız", + "oneproxyDescription": "1proxy icma platformasından pulsuz təsdiqlənmiş proxy-ləri əldə edin və döndərin", + "oneproxySyncing": "Sinkronizasiya...", + "oneproxySyncNow": "İndi Senkronizasiya Et", + "oneproxyClearAll": "Hamısını Təmizlə", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Bütün 1proxy proxy-lərini silmək?", + "memorySkillsSkillsmpDescription": "SkillsMP-yə qoşulun, bazardan bacarıqları kəşf edin və quraşdırın.", + "memorySkillsActiveProviderDescription": "Bacarıqlar səhifəsinin axtarış və quraşdırma üçün hansı təminatçını istifadə edəcəyini seçin.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Bazar", + "memorySkillsSkillsmpProviderDescription": "Təsdiqlənmiş bazar (Sizin SkillsMP API açarınızı istifadə edir).", + "memorySkillsSkillsshProviderTitle": "skills.sh Kataloqu", + "memorySkillsSkillsshProviderDescription": "İctimai kataloq təminatçısı (API açarı tələb olunmur).", + "routingCcBridgeCatalogName": "Anthropic-uyğun CC körpüsü", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "OAuth tərəfindən verilmiş tokenlər ilə Native Claude təminatçısı.", + "routingCcBridgeName": "Claude-Code Körpüsü", + "routingCcBridgeDescription": "API açarları (anthropic-compatible-cc-*) istifadə edərək relay son nöqtələri.", + "routingCustomProviderDescription": "Xüsusi təminatçı.", + "routingUnknownOpKind": "Bilinməyən əməliyyat növü: {kind}", + "routingInvalidJson": "Yanlış JSON: {error}", + "routingConfigMustBeObject": "Konfiqurasiya JSON obyekti olmalıdır", + "routingEnabledMustBeBoolean": "`enabled` doğru və ya yanlış olmalıdır", + "routingPipelineMustBeArray": "`pipeline` ops-ların bir massivi olmalıdır", + "routingPipelineTooLong": "Pipeline 50 əməliyyatı aşmamalıdır", + "routingOpMissingKind": "Op #{index}: itkin və ya etibarsız `kind`", + "routingOpUnknownKind": "Op #{index}: naməlum növ \"{kind}\"", + "routingJsonEditorHide": "JSON redaktoru gizlət", + "routingJsonEditorImportExport": "JSON-i idxal et / ixrac et", + "routingJsonEditorLabel": "JSON (redaktə et və tətbiq et, ya da idxal üçün yapışdır)", + "routingApplyJson": "JSON tətbiq et", + "routingTransformsFootnote": "Bütün transformasiya əməliyyatları yenidən icra edildikdə idempotentdir. Dəyişikliklər növbəti sorğuda dərhal qüvvəyə minir.", + "cliproxyapiUnknown": "Naməlum", + "cliproxyapiVersion": "Versiya", + "cliproxyapiHealth": "Sağlamlıq", + "cliproxyapiPort": "Port", + "qdrantHost": "Ev sahibi", + "qdrantCollection": "Kolleksiya" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Tam", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Defolt", + "off": "Söndürüldü", + "lite": "Lite", + "standard": "Standart", + "aggressive": "Təcavüzkar", + "ultra": "Ultra", + "responsesToolOutput": "Cavablar aləti çıxışı" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Yığında ən son işləyir (RTK/Caveman mətni təmizlədikdən sonra OmniGlyph qalan hissəni şəkillərə çevirir) və həmçinin omniglyph rejimi vasitəsilə müstəqil işləyir. Bu, ilkin baxışdır və başdan-başa yoxlama tamamlanana qədər standart olaraq söndürülmüş qalır.", "saved": "Saxlanıldı.", "saveFailed": "Saxlamaq mümkün olmadı.", - "enableAria": "OmniGlyph mühərrikini aktivləşdir" + "enableAria": "OmniGlyph mühərrikini aktivləşdir", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Quraşdırılmış xidmətlər", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "Bütün tokenlər sağlamdır", + "needsAttention": "Bəzi tokenlərə diqqət yetirilməlidir", + "refreshFailures": "Token yeniləmə xətaları aşkar edildi", + "unknown": "Sağlamlıq vəziyyəti məlum deyil" + }, + "systemMonitor": { + "metricsAriaLabel": "Sistem metrikaları", + "memory": "Yaddaş", + "memoryShort": "mem", + "uptime": "İşləmə müddəti", + "ariaLabel": "Sistem Monitorinqi", + "title": "Sistem Monitoru", + "version": "Versiya", + "connections": "Bağlantılar", + "circuitBreakers": "Dövrə Qırıcıları", + "open": "{count} açıq", + "memoryUsage": "Yaddaş istifadəsi" + }, + "never": "Heç vaxt", + "justNow": "İndi dəqiq", + "minutesAgo": "{count}d əvvəl", + "hoursAgo": "{count}saat əvvəl", + "tokens": "Tokenlar", + "costs": "Xərclər", + "autoRefresh": "Avtomatik Yeniləmə ({seconds}s)", + "toggleAutoRefresh": "Avtomatik yeniləməni dəyişdirin", + "activeRequests": "Aktiv Tələblər", + "totalRequests": "Ümumi Sorğular", + "totalInputTokens": "Cəmi Giriş Tokenləri", + "model": "Model", + "provider": "Təchizatçı", + "requests": "Sorğular", + "lastUsed": "Son İstifadə Olunmuş", + "inputTokens": "Giriş Tokenləri", + "totalTokens": "Ümumi Tokenlər", + "inputCost": "Giriş Xərci", + "outputCost": "Çıxış Xərci", + "noUsageData": "Hələlik heç bir istifadə qeydə alınmayıb. Məlumatları burada görmək üçün bir neçə sorğu edin.", + "account": "Hesab", + "accountLabel": "Hesab {id}", + "noAccountUsage": "Hələlik hesab spesifik istifadəsi qeydə alınmayıb. Məlumatları burada görmək üçün OAuth hesabları ilə sorğular edin." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Tətbiq Məlumatı İlə Sıfırlayın", + "resetViaAppDataDescription": "Şifrənizi sıfırlamaq üçün tətbiq məlumatları qovluğundan konfiqurasiya faylını silin:", + "quitDesktopApp": "OmniRoute masaüstü tətbiqini tamamilə bağlayın", + "navigateToAppDataDirectory": "Tətbiq məlumatları qovluğuna keçin:", + "checkSystemAppDataFolder": "(Sistem tətbiqi məlumatları qovluğunuzu yoxlayın)", + "relaunchDesktopFreshSetup": "OmniRoute masaüstü tətbiqini yenidən işə salın — bu, yeni quraşdırma başlayacaq", + "alternativeSetPasswordTitle": "Alternativ: Yeni Şifrə Təyin Et", + "alternativeSetPasswordDescription": "Server mühit faylı vasitəsilə yeni ilkin şifrə təyin edin:", + "openServerEnvFilePrefix": "Açıq", + "relaunchDesktopApp": "OmniRoute masaüstü tətbiqini yenidən işə salın", + "codexLinkInvalidOrExpired": "Bu link etibarsızdır və ya müddəti bitmişdir.", + "codexValidationServerError": "Bu bağlantını təsdiqləmək üçün serverə çata bilmədik.", + "codexSaveConnectionError": "Bağlantını saxlamaq mümkün olmadı. Bağlantı müddəti bitmiş ola bilər.", + "codexDeviceLoginDisabled": "Bu OpenAI hesabı üçün cihaz kodu ilə giriş deaktivdir. Bunu ChatGPT təhlükəsizlik parametrlərində aktivləşdirin (və ya iş yerinizin administratorundan soruşun).", + "codexAuthorizationTimedOut": "Təsdiq müddəti bitdi. Yenidən cəhd etmək üçün Yenidən Başla düyməsini basın.", + "authenticationCancelled": "Təsdiqləmə ləğv edildi.", + "unexpectedAuthenticationError": "Təsadüfi səhv baş verdi. Zəhmət olmasa, yenidən cəhd edin.", + "connectOpenAiCodexTitle": "OpenAI Codex ilə Bağlanın", + "codexConnectDescription": "Bu bağlantını tamamlamaq üçün ChatGPT hesabını təsdiqləyin.", + "validatingCodexLink": "Bağlantı təsdiqlənir…", + "codexGenerateCodeDescription": "Aşağıdakı düyməni basın ki, bir dəfəlik kod yaransın, sonra OpenAI-ya daxil olun.", + "startCodexFlow": "Başla", + "requestingOpenAiCode": "OpenAI-dan kod tələb olunur…", + "codexVerificationInstructions": "1. OpenAI təsdiq səhifəsini açın və 2. bu kodu daxil edin. Bu səhifə icazə verdikdən sonra avtomatik yenilənir.", + "yourCode": "Sizin kodunuz", + "openVerificationPage": "Təsdiq səhifəsini açın", + "copyUrlShort": "URL-i Kopyala", + "savingConnection": "Bağlantı saxlanılır…", + "codexConnected": "Bağlandı!", + "codexConnectionRegistered": "Codex hesabı qeydiyyatdan keçdi. Bu tabı bağlaya bilərsiniz.", + "tryAgain": "Yenidən cəhd et", + "traeAuthorizationSuccess": "Trae avtorizasiyası ✓", + "traeAuthorizationFailed": "Trae avtorizasiyası uğursuz oldu", + "closeAuthorizationWindow": "Bu pəncərəni bağlaya bilərsiniz.", + "returnToDashboard": "Gösteriş panelinə qayıt.", + "resetViaAppData": "Tətbiq Məlumatı İlə Sıfırlayın", + "deleteSettingsToReset": "Şifrənizi sıfırlamaq üçün tətbiq məlumatları qovluğundan ayarlar faylını silin:", + "quitAppCompletely": "OmniRoute masaüstü tətbiqini tamamilə bağlayın", + "navigateToAppData": "Tətbiq məlumatları qovluğuna keçin", + "checkAppDataFolder": "Sistem tətbiqi məlumatları qovluğunuzu yoxlayın", + "deleteSettingsJson": "Silin", + "relaunchAppFresh": "OmniRoute masaüstü tətbiqini yenidən işə salın — bu, yeni quraşdırma başlayacaq", + "alternativeSetPassword": "Alternativ: Yeni Şifrə Təyin Et", + "setNewPasswordViaEnv": "Server mühit faylı vasitəsilə yeni ilkin şifrə təyin edin:", + "openServerEnv": "Açıq", + "inDataDirectory": "məlumat qovluğunda", + "addOrUpdate": "Əlavə et və ya yenilə", + "deleteAndRelaunch": "Silin", + "settingsJson": "settings.json", + "fromDataDir": "məlumat qovluğundan", + "relaunchApp": "OmniRoute masaüstü tətbiqini yenidən işə salın" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "Şirkət", + "pricing": "Qiymətləndirmə", + "apiReference": "API İstinadı", + "helpCenter": "Yardım Mərkəzi", + "about": "Haqqında", + "blog": "Blog", + "contact": "Əlaqə", + "terms": "Şərtlər", + "privacy": "Məxfilik", + "license": "Lisenziya", + "footerDescription": "Müasir AI infrastrukturu üçün birləşdirilmiş interfeys. Təhlükəsiz, müşahidə edilə bilən və genişlənə bilən.", + "communityDiscussions": "İcma Müzakirələri" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute Sənədləri", + "metadataDefaultTitle": "OmniRoute Sənədləri", + "metadataDescription": "OmniRoute AI qapısı üçün ətraflı sənədləşmə — qurma, API, sıxma, yerləşdirmə və daha çox.", + "layoutNavTitle": "OmniRoute Sənədləri", + "layoutHomeLink": "Sənədlər Ev", + "layoutDashboardLink": "← İdarəetmə Panelinə Qayıt", + "homeTitle": "OmniRoute Sənədləri", + "homeMetadataDescription": "AI-nizi yönləndirmək, sıxmaq və genişləndirmək üçün lazım olan hər şey — quraşdırma bələdçiləri, API istinadı, sıxma, yerləşdirmə və daha çox.", + "homeTwitterDescription": "OmniRoute AI qapısı üçün ətraflı sənədlər", + "homeDescription": "AI-nizi yönləndirmək, sıxmaq və miqyaslandırmaq üçün lazım olan hər şey", + "homeSearchHint": "Dokumentləri axtarmaq üçün Ctrl K düyməsini basın", + "featuredQuickStartTitle": "Tez Başlanğıc", + "featuredQuickStartDescription": "OmniRoute-u 3 dəqiqəyə işə salın", + "featuredAutoComboTitle": "Avtomatik Kombinasiya Bələdçisi", + "featuredAutoComboDescription": "OmniRoute sizin üçün ən yaxşı AI seçsin", + "featuredProvidersTitle": "Təchizatçılar Bələdçisi", + "featuredProvidersDescription": "AI təminatçılarını dəqiqələr içində qoşun", + "nonTechUsersTitle": "Texniki Olmayan İstifadəçilər Üçün", + "nonTechUsersSubtitle": "Tez başlayın — texniki bilik tələb olunmur", + "techUsersTitle": "Texnologiya İstifadəçiləri üçün", + "techUsersSubtitle": "Memarlıq, API-lər və daxili strukturlar üzrə dərin araşdırma", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Sənədləri", + "apiExplorerMetadataDescription": "İnteraktiv API tədqiqatçısı — OmniRoute son nöqtələrini canlı olaraq real vaxt cavabları ilə sınayın", + "apiExplorerTitle": "API Tədqiqatçısı", + "apiExplorerDescription": "OmniRoute son nöqtələrini canlı sınayın. Bir son nöqtə seçin, tələbinizi konfiqurasiya edin və cavabı real vaxtda görün.", + "apiExplorerSseStarted": "SSE axını başladı — real vaxt çıxışı üçün terminal/devtools-u yoxlayın.", + "apiExplorerError": "Xəta: {message}", + "apiExplorerAuth": "auth", + "apiExplorerResponseLabel": "Cavab", + "apiExplorerSelectEndpoint": "Araşdırmaq üçün bir son nöqtə seçin", + "apiExplorerChooseApi": "Yan menyudan bir API seçin, detalları görmək və onu canlı sınaqdan keçirmək üçün", + "feedbackThanks": "Fikirləriniz üçün təşəkkür edirik!", + "feedbackQuestion": "Bu səhifə faydalı oldumu?", + "pageMetadataTitle": "{title} — OmniRoute Sənədləri", + "pageMetadataDescription": "OmniRoute sənədliyyatı: {title}", + "breadcrumb": "Çörək qırıntısı", + "apiReferenceTable": { + "parameters": "Parametrlər", + "name": "Ad", + "type": "Yazın", + "description": "Təsvir", + "returns": "Qayıdır", + "typePrefix": "Növ:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth sessiyası tamamlanmayıb (yenidən yönləndirmə URI və ya kod təsdiqləyici yoxdur). Bağlantını yenidən başladın və yenidən cəhd edin.", + "errorExchangeFailed": "Mübadilə baş tutmadı", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Default Google OAuth kimlik bilgileri yalnızca localhost-da işləyir. Uzaqdan istifadə üçün öz OAuth kimlik bilgilerinizi mühit dəyişənləri vasitəsilə konfiqurasiya edin: ANTIGRAVITY_OAUTH_CLIENT_ID və ANTIGRAVITY_OAUTH_CLIENT_SECRET. 'Uzaq Serverdə OAuth' README bölməsinə baxın.", + "errorSaveFailed": "Saxlamaq alınmadı", + "errorAuthorizationFailed": "Təsdiq uğursuz oldu", + "errorAuthorizationTimeout": "Təsdiq müddəti bitdi", + "errorRequestFailed": "Sorğu uğursuz oldu", + "errorCallbackServerFailed": "Geri çağırma serverini başlamaq mümkün olmadı", + "errorBrowserUnavailable": "Brauzer OAuth bu təminatçı üçün cari mühitdə mövcud deyil. Bunun əvəzinə dəstəklənən autentifikasiya metodundan istifadə edin.", + "errorStateMismatch": "OAuth vəziyyəti uyğun gəlmir. Bağlantını yenidən başladın və yenidən cəhd et.", + "errorImportAccessToken": "Giriş tokenini idxal etmək mümkün olmadı", + "errorSessionNotInitialized": "OAuth sessiyası başlatılmayıb. Bağlantı axınını yenidən başladın və yenidən cəhd edin.", + "errorNoAuthorizationCode": "Heç bir avtorizasiya kodu tapılmadı. Geri çağırma URL-sini və ya Avtorizasiya Kodunu yapışdırın.", + "tabDeviceCode": "Cihaz Kodu", + "tabBrowserLogin": "Brauzer Girişi", + "tabImportAuthJson": "auth.json faylını idxal et", + "tabPasteApiKey": "API Açarını Yapışdırın", + "windsurfPasteDescription": "Windsurf / VS Code IDE-də komanda palitrasından \"Windsurf: Provide Auth Token\" əmrini icra edin (və ya Jupyter \"Get Windsurf Authentication Token\" düyməsini basın), sonra göstərilən tokeni kopyalayın və aşağıya yapışdırın. birbaşa windsurf.com/show-auth-token açmaq yalnız \"Redirecting\" səhifəsini göstərir — axını IDE başlatmalıdır.", + "grokAuthJsonDescription": "Tam ~/.grok/auth.json faylının məzmununu yapışdırın (yalnız JWT \"açar\" sahəsini deyil). Sadə bir JWT-nin refresh_token-i yoxdur, buna görə də əlaqə müddəti bitdikdən sonra ölür (#7610). Mövcud olduqda, xüsusi İdxal auth.json modalını istifadə etməyi üstün tutun.", + "devinDesktopPasteDescription": "Mövcud Devin API açarını təsdiqlənmiş Devin sessiyasından yapışdırın. Açarın ixrac olunma mövcudluğu və addımları Devin versiyasına və hesabınıza görə dəyişir.", + "devinPasteDescription": "WINDSURF_API_KEY-nizi təqdim edin ( `devin auth login` vasitəsilə əldə edilmişdir, ya da Windsurf IDE-də \"Windsurf: Provide Auth Token\" əmri vasitəsilə).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Açarı / Token", + "saving": "Saxlanılır…", + "saveConnection": "Bağlantını Saxla", + "gheDescription": "GitHub Enterprise instansiyanızın əsas URL-sini daxil edin (məsələn, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL tələb olunur", + "gitlabDuoSetupTitle": "GitLab Duo OAuth qurulması", + "gitlabDuoSetupMessage": "GitLab Duo OAuth konfiqurasiya edilməyib. {applicationsUrl} ünvanında yönləndirmə URI {redirectUri} və \"scopes\" \"{scopes}\" ilə OAuth tətbiqi qeydiyyatdan keçirin, sonra {clientIdEnv} (və istəyə bağlı olaraq {clientSecretEnv}) təyin edin və yenidən başladın.", + "gitlabDuoSetupDescription": "Tətbiq qeydiyyatdan keçdikdən və bu OmniRoute nümunəsində env dəyişənləri təyin edildikdən sonra, OAuth girişini başlamaq üçün Davam et düyməsini basın.", + "continue": "Davam et" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Daha çox yüklə", - "loadingMore": "Daha çox yüklənir..." + "loadingMore": "Daha çox yüklənir...", + "correlationId": "Korrelyasiya ID-si", + "group": { + "showAllRows": "Bütün sətirləri göstər", + "showLatestPerCorrelation": "Sonuncu korrelyasiya ID-sinə görə göstərin", + "grouped": "Qruplaşdırılmış" + }, + "running": "işləyir", + "interval": { + "decrease": "Aralığı azaldın", + "title": "Avtomatik yeniləmə intervallı saniyə ilə", + "increase": "Arttır intervalı" + }, + "status": { + "inProgress": "İcra olunur", + "recoveredByRetry": "Təkrar cəhdlə bərpa edildi", + "goToParent": "Valideyn tələbinə keçin", + "healedTitle": "Uğursuz oldu, {count} cəhdindən sonra bərpa edildi", + "healed": "şifa tapdı", + "failedTitle": "Bütün {count} cəhdlər uğursuz oldu", + "failed": "başarısız oldu", + "pinnedTitle": "Kontekst-cache sessiya pinləmə vasitəsilə model seçildi", + "pinned": "sabitləşdirilmiş" + }, + "attempts": "cəhdlər", + "detail": { + "collapse": "{title}ni Sıxışdır", + "expand": "{title} genişləndirin", + "copyTitle": "Kopyala {title}", + "copied": "Kopyalandı!", + "copy": "Kopyala", + "autoscrollOn": "Avtomatik Sürüş: açıq", + "autoscrollOff": "Avtomatik Sürüş: söndürüldü", + "payload": { + "clientRawRequest": "Müştəri Xam Sorğu", + "clientRequest": "Müştəri Tələbi", + "openaiRequest": "OpenAI Sorğusu", + "providerRequest": "Təchizatçı Tələbi", + "providerResponse": "Təchizatçı Cavabı", + "clientResponse": "Müştəri Cavabı", + "pipelineError": "Borular Xətası" + }, + "payloadMissing": "Bu log girişinə aid ətraflı yük artefaktı artıq mövcud deyil.", + "payloadCorrupt": "Ətraflı yük artefaktı təhlil oluna bilmədi.", + "notAvailable": "N/A", + "semanticCache": "Semantik (OmniRoute)", + "upstreamCache": "Yuxarı axın (Təchizatçı)", + "ariaLabel": "Sorğu logunun detalları", + "completed": "Tamamlandı", + "upstreamStatus": "Yuxarı axın: {status}", + "statusDiscrepancy": "OmniRoute {provider} qaytardığı halda {status} qaytardı", + "previousRequest": "Əvvəlki tələb", + "nextRequest": "Növbəti tələb", + "close": "Detallı modalı bağlayın", + "startedAt": "Başlanğıc Tarixi", + "endedAt": "Bitdi Saatı", + "duration": "Müddət", + "model": "Model", + "provider": "Təchizatçı", + "account": "Hesab", + "input": "Giriş", + "totalIn": "Cəmi: {value}", + "cacheRead": "Keş Oxu: {value}", + "cacheWrite": "Keş Yaz: {value}", + "compressed": "Sıxılmış: {from} → {to} ({percent}% qənaət edildi)", + "output": "Çıxış", + "totalOut": "Ümumi Çıxış: {value}", + "reasoning": "Müqayisə: {value}", + "requestedModel": "Tələb Olunan Model", + "requestProtocol": "Req Protokolu", + "cacheSource": "Keş Mənbəyi", + "modelPinning": "Model Pinning", + "activeModelPinning": "Aktiv — sessiya sabitlənməsi vasitəsilə seçilmiş model", + "rotated": "Dönmüşdür: {initial} -> {final}", + "apiKey": "API Açarı", + "noApiKey": "API açarı yoxdur", + "combo": "Kombinasiya", + "error": "Xəta", + "unblockAll": "Hamısını açın", + "cleared": "Təmizləndi", + "unblock": "Bloku aç", + "relatedRequests": "Əlaqəli Tələblər ({count})", + "current": "hazır", + "detailStatus": "Ətraflı Status", + "loadingDetails": "Yüklənir, sorğu detalları...", + "providerEventStream": "Təchizatçı Hadisə Axını", + "clientEventStream": "Müştəri Hadisə Axını", + "eventStream": "Hadisə Axını", + "responsePayloadLegacy": "Cavab Yükü (Köhnə)", + "requestPayloadLegacy": "Sorğu Yükü (Köhnə)", + "noPayload": "Bu log girişi üçün heç bir yük məlumatı mövcud deyil.", + "correlationId": "Korrelyasiya ID-si", + "correlationIdValue": "Korrelyasiya ID: {id}", + "detailedPayloadInfo": "Əvvəlcə ətraflı qeydiyyatı aktiv edin, əgər yeni tələblər üçün dörd mərhələli müştəri/təchizatçı yük görünüşünü istəyirsinizsə." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} deaktiv edildi", "providerAdded": "{provider} əlavə edildi", "add": "Əlavə et", - "manualApiKey": "İstifadəçi API açarını əl ilə daxil etsin" + "manualApiKey": "İstifadəçi API açarını əl ilə daxil etsin", + "createDahlTokenFailed": "Dahl token yaratmaq mümkün olmadı", + "providerProxy": "Proksi", + "providerProxyConfigureHint": "Proksi konfiqurasiya et", + "providerProxyTitleConfigured": "Proxy konfiqurasiya edilib: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS ilə məhdudlaşdırılıb — şərtləri nəzərdən keçirin", "caution": "Xəbərdarlıq — şəxsi istifadə / proksi bəndləri", "ok": "Ümumiyyətlə icazəverici" - } + }, + "allProviders": "Bütün təminatçılar", + "noApiKeyRequired": "API açarı tələb olunmur" }, "providerHealthAutopilot": { "title": "Provayder Sağlamlığı Avtopilotu", @@ -12390,7 +13047,11 @@ "on": "AÇIQ", "off": "QAPALI", "availableProviders": "Mövcud provayderlər ({count})", - "noProviderOverrides": "Əvəzetmə yoxdur — bütün aktiv provayderlər standart modelləri ilə iştirak edəcək" + "noProviderOverrides": "Əvəzetmə yoxdur — bütün aktiv provayderlər standart modelləri ilə iştirak edəcək", + "resetFailed": "Sıfırlama uğursuz oldu", + "resetSuccess": "Konfiqurasiya standartlara sıfırlandı", + "running": "İcra edilir...", + "testFailed": "Test uğursuz oldu" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute-un təsisçi Açıq Mənbə Dostudur", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Təchizatçı bu şəkil tələbi üçün görünüşü dəstəkləmir", "capabilityFilter.toolsMismatch": "Təchizatçı alət çağırışını dəstəkləmir", "capabilityFilter.structuredOutputMismatch": "Təchizatçı strukturlaşdırılmış çıxışı dəstəkləmir", - "capabilityFilter.contextWindowMismatch": "Sorğu təminatçının kontekst pəncərəsini aşır" + "capabilityFilter.contextWindowMismatch": "Sorğu təminatçının kontekst pəncərəsini aşır", + "publicSystem": { + "notFound": { + "title": "Səhifə tapılmadı", + "description": "Axtardığınız səhifə mövcud deyil və ya köçürülmüşdür.", + "dashboardAriaLabel": "Göyərtəyə qayıt", + "statusAriaLabel": "Sistem status səhifəsini açın", + "systemStatus": "Sistem Statusu" + }, + "error": { + "title": "Daxili Server Xətası", + "description": "Sizin tələbinizi emal edərkən bir problem baş verdi. Komandamız məlumatlandırılıb və problemi həll etmək üzərində çalışır.", + "errorId": "Xəta ID: {id}", + "detailsAriaLabel": "Xəta təfərrüatları", + "retryAriaLabel": "Səhifəni yenidən yükləməyə cəhd edin", + "tryAgain": "Yenidən Cəhd Et", + "dashboardAriaLabel": "Göndərmə panelinə qayıt", + "statusAriaLabel": "Sistem vəziyyətini açın", + "systemStatus": "Sistem Statusu" + }, + "globalError": { + "title": "Bir şey səhv oldu", + "description": "Gözlənilməz bir xəta baş verdi. Bu qeydə alınıb və komandamız araşdıracaq.", + "detailsAriaLabel": "Xəta təfərrüatları", + "retryAriaLabel": "Səhifəni yenidən yükləməyə cəhd edin", + "tryAgain": "Yenidən Cəhd Et", + "statusAriaLabel": "Sistem vəziyyətini açın", + "systemStatus": "Sistem Statusu" + }, + "offline": { + "title": "Bağlantı Problemi", + "description": "OmniRoute hazırda şəbəkəyə çata bilmir. İnternet, VPN və ya proksi parametrlərinizi yoxlayın.", + "connectionRestored": "Bağlantı bərpa olundu", + "offlineModeDetected": "Offline rejimi aşkar edildi", + "retryConnection": "Bağlantını Yenidən Cəhd Et", + "openStatusPage": "Status Səhifəsini Açın" + }, + "maintenance": { + "title": "Planlaşdırılmış Baxım", + "description": "Bəzi xidmətlər müvəqqəti olaraq əlçatmazdır, çünki texniki xidmət aparılır. Əsas yönləndirmə adətən onlayn qalır, lakin idarəetmə funksiyaları zəifləyə bilər.", + "suggestion1": "Bir neçə dəqiqədən sonra yenidən cəhd edin.", + "suggestion2": "Yenidən cəhd etməzdən əvvəl cari sağlamlıq göstəricilərini və təminatçı statusunu yoxlayın.", + "systemStatus": "Sistem Statusunu Görüntüləyin", + "healthDashboard": "Sağlıq Tablosunu Açın" + }, + "status": { + "title": "Sistem Statusu", + "description": "OmniRoute əsas xidmətləri üçün canlı əməliyyat görüntüsü.", + "loadingHealth": "Sağlamlıq göstəriciləri yüklənir...", + "failedToLoad": "Sistem sağlamlığı yüklənmədi.", + "unableToReachHealth": "Sağlamlıq son nöqtəsinə çatmaq mümkün deyil. Bağlantını yoxlayın və yenidən cəhd edin.", + "healthCheckFailed": "Sağlamlıq Yoxlaması Uğursuz Oldu", + "openConnectivityHelp": "Açıq Bağlantı Köməyi", + "maintenanceInfo": "Baxım Məlumatı", + "service": "Xidmət", + "unknown": "naməlum", + "notAvailable": "n/a", + "providersTracked": "İzlənən Təchizatçılar", + "circuitBreakerState": "Təchizatçı Dövrə Qırıcı Vəziyyəti", + "lastUpdate": "Son yeniləmə: {timestamp}", + "uptimeMinutes": "{minutes}d", + "uptimeHoursMinutes": "{hours}s {minutes}d" + }, + "statusPages": { + "400": { + "title": "Pis Sorğu", + "description": "Sorğu yükü etibarsızdır və ya tam deyil.", + "suggestion1": "Təkrar cəhd etməzdən əvvəl tələb olunan sahələri və yük formatını yoxlayın.", + "suggestion2": "Əgər API-dən istifadə edirsinizsə, JSON sxemini yerli olaraq təsdiqləyin.", + "suggestion3": "Əgər bu davam edərsə, yüklənməni yoxlamaq üçün Tercüməçi Oyun Sahəsində sorğunu açın.", + "primaryAction": "Sənədləri Açın", + "secondaryAction": "Tərcüməçini Açın" + }, + "401": { + "title": "İcazəsiz", + "description": "Bu resursa daxil olmaq üçün autentifikasiya tələb olunur.", + "suggestion1": "Yenidən daxil olun və əməliyyatı yenidən cəhd edin.", + "suggestion2": "API çağırmaları üçün Bearer token-in mövcud və etibarlı olduğunu təsdiqləyin.", + "suggestion3": "Token son dövrlərdə dəyişdirilibsə, müştəri məlumatlarınızı yeniləyin.", + "primaryAction": "Daxil Olmağa Gedin", + "secondaryAction": "API Açarlarını İdarə Et" + }, + "403": { + "title": "Qadağan olunub", + "description": "Sizin tələbiniz başa düşüldü, lakin siyasət tərəfindən giriş qadağandır.", + "suggestion1": "Parametrlərdə IP icazə siyahısı/qadağa siyahısı qaydalarını yoxlayın.", + "suggestion2": "API açarınıza təyin edilmiş model və büdcə siyasətlərini təsdiqləyin.", + "suggestion3": "İdarəçidən tələb olunan icazə sahəsini verməsini xahiş edin.", + "primaryAction": "Açıq Giriş Köməyi", + "secondaryAction": "Təhlükəsizlik Parametrlərini Açın" + }, + "408": { + "title": "Sorğu Vaxtı Bitdi", + "description": "Server tam zamanında tam bir tələb almadı.", + "suggestion1": "Tələbi daha kiçik yük ilə yenidən cəhd edin.", + "suggestion2": "Şəbəkə sabitliyinizi və VPN/proksi gecikməsini yoxlayın.", + "suggestion3": "Uzun əməliyyatlar üçün axını aktivləşdirin və ya sorğunu bölün.", + "primaryAction": "Açıq Endpoint Bələdçisi", + "secondaryAction": "Şəbəkə Statusunu Yoxlayın" + }, + "429": { + "title": "Çoxlu Sorğular", + "description": "Bu müştəri, açar və ya təminatçı üçün dərəcə limitləri aşılmışdır.", + "suggestion1": "Soyutma müddətini gözləyin və təklif olunan intervaldan sonra yenidən cəhd edin.", + "suggestion2": "Ehtiyat təminatçıları ilə birləşməyə keçin.", + "suggestion3": "Təchizatçı davamlılığı/şərait məhdudlaşdırma profillərini parametrlərdə tənzimləyin.", + "primaryAction": "Resilience Parametrlərini Açın", + "secondaryAction": "Açıq Kombinlər" + }, + "500": { + "title": "Daxili Server Xətası", + "description": "Sorğunuzu emal edərkən gözlənilməz server tərəfi xətası baş verdi.", + "suggestion1": "Bir neçə saniyədən sonra bir daha cəhd edin.", + "suggestion2": "Sağlamlıq telemetriyası və server jurnallarını əlaqəli sorğu ID-ləri üçün yoxlayın.", + "suggestion3": "Əgər davamlıdırsa, problemi zaman damğası və tələb konteksti ilə bildirin.", + "primaryAction": "Sağlamlıq Tablosunu Açın", + "secondaryAction": "Girişləri Açın" + }, + "502": { + "title": "Pis Keçid", + "description": "Yuxarı axın təminatçısı və ya qapı inteqrasiyası etibarsız cavab qaytardı.", + "suggestion1": "Başqa bir provayder ilə və ya aktiv kombinasiyalı marşrutla yenidən cəhd edin.", + "suggestion2": "Təchizatçı kimliklərini və modelin mövcudluğunu yoxlayın.", + "suggestion3": "Format konversiyası iştirak edərsə, tərcüməçi çıxışını yoxlayın.", + "primaryAction": "Provayderləri Açın", + "secondaryAction": "Tərcüməçini Açın" + }, + "503": { + "title": "Xidmət Mövcud Değil", + "description": "Xidmət müvəqqəti olaraq texniki xidmət və ya zəif asılılıqlar səbəbindən əlçatmazdır.", + "suggestion1": "Bir an gözləyin və yenidən cəhd edin.", + "suggestion2": "Təmir bildirişlərini və sistem statusunu yoxlayın.", + "suggestion3": "Əgər iş axınınız gecikməyə həssasdırsa, ehtiyat təminatçılardan istifadə edin.", + "primaryAction": "Baxım Məlumatları", + "secondaryAction": "Sistem Statusu" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel} ilə əlaqə qurun", + "chooseMethod": "Təsdiq metodunuzu seçin:", + "builderId": "AWS Builder ID", + "builderDescription": "Əksər istifadəçilər üçün tövsiyə olunur. {providerLabel} ilə bağlı AWS hesabı ilə daxil olun.", + "organization": "Sizin Təşkilatınız (AWS IAM Kimlik Mərkəzi)", + "organizationDescription": "Şirkətinizin SSO başlanğıc URL-sindən istifadə edin (məsələn: {url}).", + "googleAccount": "Google Hesabı", + "googleDescription": "Google hesabınızla daxil olun.", + "githubAccount": "GitHub Hesabı", + "githubDescription": "GitHub hesabınızla daxil olun.", + "importToken": "Token İdxal Et", + "importDescription": "{providerLabel} tərəfindən ixrac edilmiş yeniləmə tokenini yapışdırın.", + "apiKey": "API Açarı", + "apiKeyDescription": "Uzun müddətli {providerLabel} / CodeWhisperer API açarını yapışdırın. Bu, yeniləmə tokeni olmadan daşıyıcı etibarnaməsi kimi saxlanılır; profil aşkar etmə ən yaxşı cəhdlə həyata keçirilir.", + "idcStartUrl": "IDC Başlanğıc URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Sizin təşkilatınızın AWS IAM İdentlik Mərkəzi URL-i", + "awsRegion": "AWS Region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Kimlik Mərkəziniz üçün AWS bölgəsi (default: us-east-1)", + "continue": "Davam et", + "back": "Geri", + "autoDetecting": "Token avtomatik aşkarlanır...", + "readingCredentials": "AWS SSO keşindən {providerLabel} etimadnamələrini oxuyur", + "tokenNotDetected": "{providerLabel} token avtomatik olaraq aşkar edilmədi. Zəhmət olmasa, yeniləmə tokeninizi əl ilə yapışdırın.", + "refreshToken": "Təzələmə Tokeni", + "tokenPlaceholder": "Token avtomatik doldurulacaq...", + "importing": "İdxal edilir...", + "apiKeyPlaceholder": "{providerLabel} API açarınızı yapışdırın...", + "apiKeyStoredDescription": "Uzunmüddətli daşıyıcı etibarnamə kimi şifrələnmiş saxlanılır. Yeniləmə axını yoxdur.", + "apiKeyRegionDescription": "Açar üçün AWS bölgəsi (default: us-east-1)", + "validating": "Təsdiqlənir...", + "validateAndSaveApiKey": "API Açarını Doğrula və Saxla", + "errorAutoDetect": "Token avtomatik olaraq aşkar edilə bilmədi", + "errorAutoDetectFailed": "Token avtomatik olaraq aşkar edilə bilmədi", + "errorRefreshTokenRequired": "Zəhmət olmasa, yeniləmə tokenini daxil edin", + "errorImportFailed": "İdxal uğursuz oldu", + "errorApiKeyRequired": "Zəhmət olmasa, Kiro API açarını daxil edin", + "errorApiKeyImportFailed": "API açarının idxalı uğursuz oldu", + "errorIdcStartUrlRequired": "Zəhmət olmasa, IDC başlanğıc URL-nizi daxil edin" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} {providerName} vasitəsilə qoşulun", + "errorStartAuthorization": "Təsdiqləmə başlaya bilmədi", + "errorAuthorizationExpired": "Təsdiq müddəti bitdi. Yenidən giriş prosesini başladın.", + "errorAuthorizationFailed": "Təsdiq uğursuz oldu", + "initializing": "İlkinləşdirilir...", + "settingUp": "{providerName} autentifikasiyasını qurmaq", + "openIncognito": "Bu linki Gizli pəncərədə açın", + "incognitoDescription": "Mövcud hesablarla sessiya münaqişələrindən qaçmaq üçün İncognito/Özəl pəncərədən istifadə edin.", + "copyLink": "Bağlantını kopyala", + "verificationCode": "Təsdiq kodu", + "waiting": "Təsdiq üçün gözləyir...", + "cancel": "İmtina et", + "successTitle": "Uğurla Bağlandı!", + "successMessage": "Sizin {providerName} vasitəsilə {providerLabel} hesabınız qoşulmuşdur.", + "done": "Tamamlandı", + "errorTitle": "Bağlantı Uğursuz Oldu", + "close": "Bağla" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Təsdiq uğursuz oldu", + "errorPopupBlocked": "Pop-up bloklandı — bu sayt üçün pop-uplara icazə verin, ya da tokeni aşağıda əl ilə yapışdırın.", + "errorPopupClosed": "Təsdiq pəncərəsi tamamlanmadan bağlandı.", + "errorAccessTokenRequired": "Giriş tokeni tələb olunur.", + "errorImportFailed": "İdxal uğursuz oldu", + "title": "Trae SOLO ilə Bağlanın", + "authorizeDescription": "trae.ai vasitəsilə pop-up pəncərəsində icazə verin. Token idxal edildikdən sonra pop-up pəncərəsi öz-özünə bağlanacaq.", + "authorizeImportant": "Əhəmiyyətli: əvvəlcə trae.ai saytına bu brauzerdə daxil olmalısınız. Təsdiq səhifəsi yalnız mövcud sessiyanı təsdiqləyir — sizi daxil edə bilmir. \"Daxil Olma Uğursuz Oldu\" mesajını görsəniz, \"solo.trae.ai aç\" düyməsini basın, daxil olun, sonra bura qayıdın.", + "waitingForAuthorization": "trae.ai üçün gözləyir…", + "authorizeWithBrowser": "Brauzer ilə Təsdiqləyin", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "və ya token-i əl ilə yapışdırın", + "manualInstructions": "solo.trae.ai saytına daxil olun, DevTools → Şəbəkə bölməsini açın, istənilən çat mesajını göndərin və Authorization: Cloud-IDE-JWT {tokenPlaceholder} sorğu başlığından JWT-ni kopyalayın. JWT-nin ömrü ~14 gündür. İstəyə bağlı şəxsiyyət sahələri eyni sorğu bədənindəki common_params -dan gəlir.", + "accessTokenLabel": "Access Token (Cloud-IDE-JWT)", + "webId": "Veb ID", + "optional": "isteğe bağlı", + "bizUserId": "Biz İstifadəçi ID-si", + "userUniqueId": "İstifadəçi Unikal ID", + "scope": "Məhdudiyyət", + "tenant": "Kiracı", + "region": "Region", + "importing": "İdxal edilir…", + "importToken": "Token İdxal Et", + "cancel": "İmtina et" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Paylanır...", + "complete": "Tamamlandı", + "defaultLabel": "Proksiləri Paylaşın" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "istifadədən çıxmış", + "risk": "risk", + "close": "Bağla", + "model": "Model", + "key": "Açar", + "defaultKey": "defolt", + "clearConversation": "Söhbəti təmizlə", + "clear": "Təmizlə", + "tabs": { + "test": "Test", + "logs": "Girişlər" + }, + "loadingLogs": "Yüklənir qeydlər…", + "failedToLoadLogs": "Jurnalları yükləmək mümkün olmadı", + "noLogsYet": "Hələlik heç bir qeyd yoxdur", + "noLogsDescription": "Test tab-dan test mesajı göndərin — bu təminatçı üçün qeydlər burada görünəcək.", + "openFullLogs": "Tam loqlar səhifəsini açın", + "live": "Canlı", + "tailingLast": "son {count} izlənilir", + "refreshNow": "İndi yenilə", + "refresh": "Təzələmə", + "unknownRequester": "naməlum tələb edən", + "fields": { + "timestamp": "Zaman damğası", + "status": "Status", + "duration": "Müddət", + "model": "Model", + "requestedModel": "Tələb olunan model", + "provider": "Təchizatçı", + "requester": "Tələb edən", + "tokens": "Tokenlar" + } + }, + "proxyLog": { + "detailAriaLabel": "Proksi log detalları", + "event": "Proxy Hadisəsi", + "close": "Proksi detalları modalını bağlayın", + "time": "Vaxt", + "latency": "Gecikmə", + "clientIp": "Müştəri IP", + "proxy": "Proksi", + "direct": "Birbaşa", + "type": "Yazın", + "level": "Səviyyə", + "provider": "Təchizatçı", + "tlsFingerprint": "TLS Barmaq İzi", + "directNative": "Birbaşa", + "targetUrl": "Hədəf URL", + "error": "Xəta", + "configuration": "Proksi Konfiqurasiyası" + }, + "requestTimeline": { + "title": "Sorğu Zaman Çizgisi", + "modes": { + "follow": "İzləyin", + "followDescription": "Ox sürüşdürülür, İNDİ xətti 75%-də qalır", + "now": "İndi", + "nowDescription": "Cari vaxta keçid, İNDİ xətti mərkəzə sıfırlanır", + "pan": "Pan", + "panDescription": "Sürüşdürərək kəşf edin, fon donmuşdur" + }, + "reset": "Sıfırla", + "started": "Başlandı", + "ended": "Bitdi", + "duration": "Müddət", + "status": "Status", + "provider": "Təchizatçı", + "tokens": "Tokenlar", + "active": "Aktiv", + "other": "Digər", + "tenMinutes": "10dəq", + "hour": "saat", + "day": "gün", + "unknownModel": "naməlum", + "pending": "gözləyir" + }, + "metadata": { + "compressionTitle": "Sıxma", + "compressionDescription": "Kontekst sıxma parametrlərini tənzimləyin ki, token istifadəsini və xərcləri azaltsın.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy son nöqtələri sizin AI infrastrukturunuz üçün", + "trafficInspectorTitle": "Trafik Müfəttişi — OmniRoute", + "trafficInspectorDescription": "LLM çağrılarını izləyin + hər hansı bir tətbiqin HTTPS trafikini düzəldin" + }, + "conductor": { + "title": "Konduktor — CLI-agent donanması", + "subtitle": "OmniConductor mərkəzi: icraçılar, vəzifə növbəsi və şuralar, canlı", + "runners": "İdmançılar", + "tasks": "Tapşırıqlar", + "colName": "Ad", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Tapşırıq", + "colMode": "Rejim", + "colRunner": "İcraçı", + "colSummary": "Xülasə", + "online": "onlayn", + "offline": "offline", + "draining": "boşaltma", + "hubOffline": "İdarəedici mərkəzi offline və ya konfiqurasiya edilməyib (CONDUCTOR_HUB_URL) — köhnəlmiş məlumatlar əvəzinə heç nə göstərmir.", + "noRunners": "Heç bir iştirakçı qeydiyyatdan keçməyib", + "noTasks": "Hələlik heç bir vəzifə yoxdur", + "detailTitle": "Tapşırıqın təfərrüatı", + "prompt": "Təklif", + "branch": "Şöbə", + "fetchHint": "Nəticəni əldə et: git fetch origin {branch}", + "council": "Şura", + "candidates": "Namizədlər", + "cancel": "Tapşırığı ləğv et", + "cancelConfirmTitle": "Bu vəzifəni ləğv edəsiniz?", + "cancelConfirmMessage": "Mərkəz icraatı yerinə yetirən üzərində dayandıracaq. Bu, geri alına bilməz.", + "cancelFailed": "Mərkəz ləğvi qəbul etmədi", + "close": "Bağla", + "error": "Xəta", + "faroTitle": "Faro — donanma sözçüsü", + "faroSubtitle": "Söhbət və səs, real donanma hadisələrinə bağlıdır. Zərərli əmrlər həmişə təsdiq tələb edir.", + "faroEmpty": "Donanma haqqında soruşun — məsələn, \"donanma necədir?\"", + "faroPending": "Faro təsdiq tələb edir", + "faroPlaceholder": "Faro ilə danış…", + "faroSend": "göndər", + "faroOffline": "Faro (nümayəndə) onlayn deyil", + "yes": "Bəli", + "no": "Xeyr", + "pushToTalk": "Danışmaq üçün saxlayın", + "speakAnswers": "cavabları danış", + "voiceModels": "Səs modelləri (bu OmniRoute-un provayderi/modeli)", + "voiceIdle": "danışmaq", + "voiceListening": "dinləyir…", + "voiceThinking": "düşünürəm…", + "voiceSpeaking": "danışır…", + "sttFailed": "Transkripsiya uğursuz oldu (STT modeli/təchizatçısını yoxlayın)", + "ttsFailed": "Nitq sintezi uğursuz oldu (TTS modeli/təchizatçısını yoxlayın)", + "micDenied": "Mikrofon mövcud deyil və ya icazə verilməyib" + }, + "cliproxyProviderExposure": { + "title": "Təchizatçı Məlumatı", + "description": "CLIProxyAPI modellərini cliproxyapi/ prefiksi altında yönləndirmə hədəfi kimi təqdim edin.", + "label": "cliproxyapi/... olaraq açıq et", + "hint": "Aktiv edildikdə, aşkar edilmiş modellər OmniRoute boyunca təminatçı seçimlərində görünür.", + "updateFailed": "Yeniləmə baş tutmadı (HTTP {status})", + "networkError": "Şəbəkə xətası — təminatçı açıq parametrlərini yeniləmək mümkün olmadı" + } } - diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index ab848d1ba4..dca81288ba 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -172,6 +172,18 @@ "unselectAll": "Отмени избора", "visibleModels": "видими", "selectAllConfirm": "Да се добавят ли {count} модела към тази комбинация?", + "testSelectedProviders": "Тестови доставчици", + "testingSelectedProviders": "Тестване {done}/{total}...", + "noProvidersSelectedToTest": "Проверете поне един доставчик по-долу първо", + "noModelsToTestForProviders": "Няма модели за тестване за избраните доставчици", + "testSelectedProvidersResults": "{ok} от {total} модела работят", + "selectWorkingModels": "Добавяне на работа", + "unselectWorkingModels": "Деактивиране на работа", + "noWorkingModelsToSelect": "Няма налични работещи модели за добавяне", + "providerTestHint": "Съвет: проверете доставчика → Тест → Добавете работещ. Кликнете отново, за да отмените избора.", + "selectAllProviders": "Проверете всички доставчици", + "clearProviderSelection": "Премахнете отметката от доставчиците", + "providersSelectedCount": "Проверени {count} доставчици", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Размер", + "toggleNoAuthProvider": "Превключване на доставчик без удостоверяване", + "loadingModels": "Зареждане на модели…", + "selectAModel": "Изберете модел", + "degraded": "Намалено качество", + "zeroConfigBannerTitle": "Работи в режим без конфигурация", + "zeroConfigBannerBody": "OmniRoute автоматично генерира сигурни ключове за криптиране при първото стартиране. Те се запазват в {dataDir}. Няма нужда от действия — вашите данни са криптирани и в безопасност. За да използвате персонализирани ключове, добавете JWT_SECRET и STORAGE_ENCRYPTION_KEY в този файл.", + "batchRelativeTimeIn": "в {value}", + "batchRelativeTimeAgo": "преди {value}", + "batchDetailsTitle": "Детайли за партида", + "batchProgress": "Напредък", + "batchCompletedCount": "{count} завършени", + "batchFailedCount": "{count} неуспеха", + "batchPendingCount": "{count} в очакване", + "batchTimeline": "Хронология", + "batchTimelineInProgress": "В процес на изпълнение", + "batchTimelineFinalizing": "Финализиране", + "batchTimelineCompleted": "Завършено", + "batchTimelineFailed": "Неуспешно", + "batchTimelineExpires": "Изтича", + "batchTimelineExpired": "Изтекъл", + "batchTimelineCancelling": "Отказване", + "batchTimelineCancelled": "Отменено", + "batchTokenUsage": "Използване на токени", + "batchMetadata": "Метаданни", + "batchFileContents": "Съдържание на файла", + "batchFileUsedByCount": "Използвано от {count, plural, one {# партида} other {# партиди}}", + "batchFilePreview": "Преглед", + "batchFilePreviewTruncated": "Показване на първите {shown} реда ({total} общо реда)", + "batchFileDownloadFull": "Изтеглете целия файл" }, "disabled": "Деактивирано", "featureFlagOmnirouteEmergencyFallbackDescription": "Маршрутизиране на заявки с изчерпан бюджет към аварийния безплатен резервен доставчик/модел.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Разделител", "discovery": "Откриване", "discoverySubtitle": "Сканиране на доставчици за безплатен достъп", + "conductor": "Кондуктор", + "conductorSubtitle": "CLI-агент флот", "resilienceConnections": "Устойчивост на Връзката", "resilienceConnectionsSubtitle": "Охлаждане, прекъсвач, статус на заключване", "settingsModalityBridge": "Модалностен мост", - "settingsModalityBridgeSubtitle": "Fallback за текст само модели за изображение/аудио → текст" + "settingsModalityBridgeSubtitle": "Fallback за текст само модели за изображение/аудио → текст", + "commandPalette": { + "title": "Командна палитра", + "searchPlaceholder": "Търсене на страници, настройки, инструменти...", + "clearSearch": "Изчисти търсенето", + "noResults": "Няма резултати", + "navigate": "навигация", + "open": "отвори", + "close": "затвори" + }, + "noResults": "Няма резултати" }, "webhooks": { "title": "Уеб кукички", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Неуспешно обновяване на настройките", "sync.token.created": "Създаден токен за синхронизация", "sync.token.revoked": "Отменен токен за синхронизация" - } + }, + "mcpMetricCalls24h": "Обаждания (24ч)", + "mcpMetricSuccessRate": "Процент на успеха", + "mcpMetricAvgDuration": "Средна продължителност", + "mcpMetricTopTool": "Най-добър инструмент" }, "themesPage": { "title": "Теми", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Налична е нова версия. Кликнете, за да актуализирате.", "updateStarted": "Актуализацията започна...", "reloadingPageAutomatically": "Страницата се презарежда автоматично...", - "providerTopology": "Топология на доставчика" + "providerTopology": "Топология на доставчика", + "downloadDmg": "Изтеглете DMG (macOS)", + "downloadDmgDescription": "Налична е нова версия на настолната апликация OmniRoute. Моля, изтеглете и инсталирайте DMG инсталатора за macOS, за да актуализирате (текуща: v{version}).", + "downloadExe": "Изтеглете EXE (Windows)", + "downloadExeDescription": "Налична е нова версия на настолната апликация OmniRoute. Моля, изтеглете и инсталирайте Windows EXE инсталатора, за да актуализирате (текуща: v{version}).", + "downloadAppImage": "Изтеглете AppImage (Linux)", + "downloadAppImageDescription": "Налична е нова версия на настолната апликация OmniRoute. Моля, изтеглете пакета Linux AppImage, за да актуализирате (текуща: v{version}).", + "downloadUpdate": "Изтеглете актуализацията", + "downloadUpdateDescription": "Налична е нова версия на настолната апликация OmniRoute. Моля, изтеглете съответния формат на приложението за вашата система, за да актуализирате (текуща: v{version}).", + "updateQueued": "Изчакваща актуализация до v{version}.", + "updateDockerRebuilding": "Docker изображението се изгражда отново на заден план.", + "updateWaitingRestart": "Изчакване на OmniRoute да се рестартира с новата версия.", + "updateInstalling": "Инсталиране на v{version}.", + "updateRunning": "OmniRoute сега работи с v{version}.", + "updateCompleted": "OmniRoute актуализиран до v{version}.", + "updateDockerStillRebuilding": "Docker изображението все още се изгражда за v{version}.", + "updateInstallingBackground": "Инсталиране на v{version} във фонов режим.", + "updateWaitingVersion": "Чакам OmniRoute да се върне на v{version}.", + "updateDockerStillInProgress": "Docker повторното изграждане все още е в процес.", + "updateRestarting": "Възстановяване на услугата. Изчакване OmniRoute да се върне онлайн...", + "updateTimeout": "Актуализацията започна, но v{version} не стана налична преди изтичането на времето. Освежете страницата или проверете сървърните журнали.", + "updateTimedOut": "Изтеглянето на v{version} изтече.", + "updateStartFailed": "Неуспешно стартиране на актуализацията.", + "noResponseStream": "Не е получен поток от отговор.", + "updateComplete": "Актуализацията е завършена!", + "updateFailed": "Актуализацията не успя.", + "updateNetworkError": "Грешка в мрежата — връзката беше изгубена по време на актуализацията.", + "stepInstallPackage": "Инсталирай Пакет", + "stepRebuildNativeModules": "Препострояване на нативни модули", + "stepRestartService": "Рестартиране на услугата", + "stepComplete": "Завършено", + "stepError": "Грешка", + "updateCompleteTitle": "Актуализацията е завършена!", + "updateFailedTitle": "Актуализацията не успя", + "updatingTitle": "Актуализиране на OmniRoute...", + "reloadNotice": "Страницата ще се презареди автоматично след няколко секунди.", + "retryNotice": "Моля, опитайте отново или актуализирайте ръчно чрез CLI.", + "restartNotice": "Не затваряйте тази страница. Системата ще се рестартира автоматично.", + "reloadNow": "Презареди сега", + "closeUpdate": "Затвори", + "retryUpdate": "Опитай отново", + "updateAvailableTitle": "Налична актуализация: v{version}{desktop}", + "desktopAppLabel": "(Десктоп приложение)", + "checkingForUpdates": "Проверка за актуализации...", + "versionAvailableForDownload": "Версия v{version} е налична за изтегляне.", + "downloadingUpdate": "Изтегляне на актуализация... {percent}% завършено.", + "updateDownloaded": "Актуализацията беше изтеглена успешно! Кликнете върху Рестартиране и инсталиране, за да приложите.", + "autoUpdateFailed": "Автоматичното обновление не успя: {reason}.", + "unknownUpdateError": "Неизвестна грешка", + "versionAvailableDesktop": "Версия v{version} е налична за настолната апликация.", + "manualUpdateRequired": "Необходимо е ръчно обновление за този тип инсталация.", + "restartAndInstall": "Рестартиране и инсталиране", + "checkForUpdate": "Провери за актуализация", + "manualUpdate": "Ръчно обновяване", + "directDownloadHint": "Или изтеглете съответния инсталаторен формат директно:", + "releaseNotes": "Бележки за изданието", + "readMore": "Прочетете повече", + "noAuthLabel": "Без удостоверяване" }, "analytics": { "title": "Анализ", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Изведено от записаните логове за повиквания около тази заявка", "routeRecommendations": "Препоръки", "routeLimitations": "Ограничения", - "routeNoKnownLimitations": "Няма известни ограничения за това обяснение." + "routeNoKnownLimitations": "Няма известни ограничения за това обяснение.", + "searchAnalyticsLoading": "Зареждане на аналитика за търсене…", + "searchAnalyticsNoData": "Няма налични данни за търсене все още.", + "searchAnalyticsNoDataDescription": "Търсенията ще се появят тук след първото търсене чрез /v1/search.", + "searchAnalyticsToday": "{count} днес", + "searchAnalyticsCachedRequests": "{count} кеширани заявки", + "searchAnalyticsApiCosts": "разходи за търсене на API", + "searchAnalyticsErrors": "{count} грешки", + "searchAnalyticsNoErrors": "Няма грешки", + "searchAnalyticsProviderBreakdown": "Разпределение на доставчиците", + "searchAnalyticsQueries": "запитвания", + "searchAnalyticsEmptyDescription": "Използвайте POST /v1/search, за да започнете маршрутизиране на уеб търсения.", + "searchAnalyticsFreeTier": "Наличен безплатен план: Serper (2,500/месец), Brave (2,000/месец), Exa (1,000/месец), Tavily (1,000/месец) — общо 6,500+ безплатни търсения/месец с автоматично превключване.", + "autoRoutingNoDataAvailable": "Няма налична аналитика за автоматично маршрутизиране. Извършвайте заявки с префикс auto/ за да видите метрики.", + "defaultVariantLabel": "По подразбиране", + "freeTierAvailable": "Наличен безплатен план" }, "apiManager": { "title": "API ключове", @@ -2348,7 +2478,9 @@ "providerCount": "{count} доставчици", "imageToTextBridgeAvailable": "Modality Bridge вече може да описва изображения за модели само с текст. Инлайн игралната площадка ще бъде налична, когато /api/v1/images/understanding бъде реализиран.", "imageToTextBridgeCta": "Конфигурирайте моста Image→Text в настройките на Modality Bridge", - "sttBridgeCta": "Конфигурирайте моста Speech→Text в настройките на Modality Bridge" + "sttBridgeCta": "Конфигурирайте моста Speech→Text в настройките на Modality Bridge", + "existingConnection": "Съществуваща връзка", + "openrouterSttDescription": "Моделите за преобразуване на реч в текст на OpenRouter използват вашата конфигурирана връзка с OpenRouter. Не се изискват отделни удостоверения." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Поставете в:", "copilotReloadInstruction": "След това рестартирайте VS Code и задайте API ключа в полето за въвеждане.", "wireApiChatCompletions": "Завършвания на чат (/chat/completions)", - "wireApiResponses": "API за отговори (/отговори)" + "wireApiResponses": "API за отговори (/отговори)", + "cliproxyapiActionFailed": "Действието не успя", + "cliproxyapiActionSucceeded": "Действието беше успешно", + "cliproxyapiCheckUpdates": "Провери актуализации", + "cliproxyapiDescription": "Fallback на прокси сървър (OAuth на базата на Go)", + "cliproxyapiHealth": "Здраве", + "cliproxyapiHealthy": "Здравословен", + "cliproxyapiInstall": "Инсталирай", + "cliproxyapiNotInstalledValue": "Не е инсталирано", + "cliproxyapiPort": "Порт", + "cliproxyapiRequestFailed": "Заявката не успя", + "cliproxyapiRestart": "Рестартиране", + "cliproxyapiStart": "Започни", + "cliproxyapiStatusError": "Грешка", + "cliproxyapiStatusInstalled": "Инсталирано", + "cliproxyapiStatusNotInstalled": "Не е инсталирано", + "cliproxyapiStatusRunning": "Изпълняване", + "cliproxyapiStatusStopped": "Спряно", + "cliproxyapiStop": "Спри", + "cliproxyapiUnhealthy": "Нездравословен", + "cliproxyapiUnknown": "Неизвестен", + "cliproxyapiUpdate": "Актуализиране", + "cliproxyapiUpdateAvailable": "Налична актуализация: v{current} → v{latest}", + "cliproxyapiVersion": "Версия" }, "combos": { "title": "Комбота", @@ -3236,6 +3391,8 @@ "pricingMissing": "Без ценообразуване", "pricingAvailableShort": "цени", "pricingMissingShort": "без цена", + "fallbackOnlyOnQuotaExhaustion": "Само напред при изчерпване на квотата", + "fallbackOnlyOnQuotaExhaustionShort": "само резервна квота", "warningRoundRobinSingleModel": "Round - robin е най - полезен с поне 2 модела.", "warningCostOptimizedPartialPricing": "Само {priced} от {total} моделите имат ценообразуване. Маршрутизирането може да бъде частично съобразено с разходите.", "warningCostOptimizedNoPricing": "Няма намерени данни за ценообразуване за тази комбинация. Оптимизираният по отношение на разходите маршрут може да е неочакван.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Пакетът режими и теглата остават тук; състоянието на прекъсвача по време на изпълнение остава на страницата „Здраве“.", "emailVisibilityHint": "Имейлите на акаунтите тук следват глобалния превключвател за поверителност.", "emailVisibilityTooltip": "Използвайте иконата с око, за да покажете или скриете имейлите на акаунтите глобално в комбинациите, доставчиците и екраните за квоти.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Стъпка по стъпка (Доставчик → Модел)", + "builderModeGlobal": "Глобално търсене на модел (Персонализирана комбинация)", + "builderGlobalSearchPlaceholder": "Търсене на модели сред всички доставчици (напр. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Добави всичко", + "builderGlobalShortcuts": "Преките пътища:", + "builderGlobalNoResults": "Не е намерен модел за \"{query}\".", + "builderGlobalProviderLabel": "Доставчик:", + "builderGlobalAccountCount": "{count, plural, one {# акаунт} other {# акаунта}}", + "builderGlobalAdded": "Добавено", + "builderGlobalAdd": "Добави", "manualModel": "Ръчен модел", "manualModelInvalid": "Въведете модел във формат доставчик/модел.", "manualModelUnknownProvider": "Неизвестен префикс на доставчик.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Наличност на сесията", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Устойчивостта е изключена", "kimiPresetTitle": "Предварителна настройка за Kimi Coding", "kimiPresetDescription": "Kimi K3 като основен модел (Moonshot API), с автоматично превключване към вашите Kimi Code връзки (kimi-coding, kimi-web), когато са конфигурирани.", - "kimiPresetCta": "Добавяне на предварителна настройка" + "kimiPresetCta": "Добавяне на предварителна настройка", + "intelligentComboCount": "{count, plural, one {# интелигентен комбо} other {# интелигентни комбо}}", + "providersInScope": "{count, plural, one {# доставчик в обхвата} other {# доставчици в обхвата}}", + "savingModePack": "Запазване на {pack}…", + "errorTitle": "Неуспешно зареждане на комбинации", + "errorDescription": "Не успяхме да заредим данните за комбинирането в момента. Проверете връзката си и опитайте отново.", + "errorId": "Идентификатор на грешка: {id}", + "errorRetry": "Опитай отново", + "comboLabel": "Комбо" }, "costs": { "title": "Разходи", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Потребителско име", "obsidianPassword": "Парола", - "obsidianTailscaleHint": "Използвайте вашия Tailscale IP адрес вместо localhost, ако се свързвате от мобилно устройство. И двете устройства трябва да са в една и съща Tailscale мрежа." + "obsidianTailscaleHint": "Използвайте вашия Tailscale IP адрес вместо localhost, ако се свързвате от мобилно устройство. И двете устройства трябва да са в една и съща Tailscale мрежа.", + "cloudSyncNotConfigured": "Облачната синхронизация не е конфигурирана на този инстанция.", + "notionConnect": "Свържи се", + "notionConnectFailed": "Неуспешно свързване", + "notionConnected": "Свързан", + "notionConnectionFailed": "Свързването не успя", + "notionDescription": "Търсете, четете, запитвайте и пишете в Notion чрез маршрутизирани AI модели", + "notionDisconnect": "Изключи", + "notionDisconnectFailed": "Неуспешно прекъсване на връзката", + "notionEnterToken": "Моля, въведете токен за интеграция на Notion", + "notionIntegrationHelp": "Създайте вътрешна интеграция на", + "notionIntegrationToken": "Токен за вътрешна интеграция на Notion", + "notionNotConnected": "Не е свързано", + "notionTokenConfigured": "Токенът е конфигуриран. Инструментите на Notion са налични чрез MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Доставчик / Модел", "noRemoteProviders": "Няма доставчици с конфигуриран API ключ", "selectProviderModel": "Изберете модел", + "customBaseUrlLabel": "Персонализиран базов URL (по избор)", + "customModelIdLabel": "Идентификатор на персонализиран модел (по избор)", + "customEndpointHelp": "Използвайте OpenAI-съвместим /embeddings крайна точка. Локалните крайни точки са разрешени; облачните метаданни целите са блокирани.", + "customEndpointSave": "Приложи персонализиран крайна точка", + "customEndpointInvalid": "Въведете валиден HTTP(S) базов URL и идентификатор на модела, или оставете двете полета празни.", + "customEndpointSaveFailed": "Персонизираният крайна точка за вграждане не можа да бъде запазен.", "staticEnabledLabel": "Активиране на Static Potion", "staticEnabledDesc": "Изтегляне и използване на модела potion-base-8M локално", "transformersEnabledLabel": "Активиране на Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Изчистване...", "cleanNow": "Изчистване сега", "cleanupSuccess": "{count} премахната(и) точка(и)", - "cleanupFailed": "Неуспешно изчистване" + "cleanupFailed": "Неуспешно изчистване", + "hostLabel": "Хост", + "collectionLabel": "Колекция" }, "rerank": { "enableLabel": "Активиране на Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "3-степенна резервна диаграма на OmniRoute", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Настройте безплатни доставчици", + "description": "По желание активирайте избраните доставчици без регистрация. Прегледайте уведомлението и сайта на всеки доставчик, преди да продължите; наличността и лимитите на скоростта се контролират от трети страни.", + "loading": "Зареждане на безплатни доставчици...", + "loadFailed": "Не можа да зареди безплатни доставчици.", + "alreadyConfigured": "Всички допустими безплатни доставчици вече са конфигурирани.", + "reviewProviderSite": "Преглед на сайта на доставчика и условията", + "confirmation": "Прегледах тези трети страни и искам OmniRoute да създаде избраните връзки.", + "setupSelected": "Настройте избраните доставчици", + "settingUp": "Настройване...", + "setupFailed": "Не можа да се настроят избраните доставчици. Нищо съществуващо не беше променено.", + "retryFailed": "Повторете неуспешните доставчици", + "orUseApiKey": "или се свържете с API ключ", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "създадено", + "skipped": "вече конфигурирано", + "failed": "неуспешно" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Задължително. Основен URL адрес на API на доставчика.", "iconUrlLabel": "URL адрес на икона", "iconUrlHint": "По избор. URL адрес на изображение, показвано като икона на този доставчик.", + "iconUrlInvalid": "Невалиден URL на иконата. Използвайте http(s):// или data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Съвместим (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Сесията вече е активна", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Прилагане на авт", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Поставете API ключ…", "zedSaving": "Запазване…", "zedImportAction": "Импортиране", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Активирайте автоматично подновяване на сесията на курсора", + "cursorAgentNudgeBody": "Инсталирайте cursor-agent за автоматично подновяване на сесията — без него, връзките на Cursor изискват периодично ръчно повторно свързване на всеки 24 часа.", + "cursorAgentNudgeDismiss": "Отхвърли", "zedManualImportFailed": "Ръчното импортиране беше неуспешно", "zedManualImportSuccess": "Импортиран е токен за {provider} от Zed", "grokImportTitle": "Импортиране на Grok Build удостоверяване", @@ -5878,7 +6066,6 @@ "friendliai": "Безплатен план за serverless inference — не се изисква кредитна карта", "gemini": "Безплатно завинаги: 1,500 заявки/ден за Gemini 2.5 Flash — без кредитна карта, вземете ключ на aistudio.google.com", "gigachat": "Свържете GigaChat (Sber) с API ключ.", - "github-models": "Създайте GitHub PAT с обхват 'models: read' на github.com/settings/tokens", "gitlab": "Личен токен за достъп на GitLab за публичния Code Suggestions API. Конфигурирайте self-hosted базов URL адрес, когато не използвате gitlab.com.", "gitlawb-gmi": "Вземете своя API ключ от таблото за управление на Gitlawb Opengateway.", "gitlawb": "Вземете своя API ключ от таблото за управление на Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Свържете Kimi Coding със съществуващия OAuth поток.", "kiro": "Безплатен план: 50 кредита/месец (~25K–100K токена). ⚠️ Условията за ползване на Kiro забраняват използването на прокси/инструменти от трети страни.", "codex": "Свързване на OpenAI Codex със съществуващия OAuth поток.", - "qwen": "Свързване на Qwen Code със съществуващия OAuth поток." + "qwen": "Свързване на Qwen Code със съществуващия OAuth поток.", + "github-models": "Създайте GitHub PAT с обхват 'models: read' на github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} приема собствени идентификатори на модела на доставчика. Импортирайте от /models или добавете персонализирани идентификатори за маршрутизиране.", "bedrockModelsDescription": "Моделите на Amazon Bedrock са обхванати от регион на AWS. Импортирайте от /models или добавете идентификатори на модел Bedrock, активирани в избрания регион.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Когато всички конфигурирани връзки са изчерпани (квота, кредити или изтичане), временно използвайте безключовия слой на този доставчик. Изключете, за да пропуснете този доставчик вместо да изпращате анонимни заявки — препоръчително, когато безключовият слой ги отхвърля (401).", "anonymousFallbackEnabled": "Анонимен резервен вариант е активиран за {provider}", "anonymousFallbackDisabled": "Анонимен резервен вариант деактивиран за {provider} — изчерпаните връзки ще пропуснат този доставчик", - "anonymousFallbackUpdateFailed": "Неуспешно обновяване на настройката за анонимен резервен вариант" + "anonymousFallbackUpdateFailed": "Неуспешно обновяване на настройката за анонимен резервен вариант", + "batchDeleteFailed": "Партидното изтриване не успя", + "batchDeleteNetworkError": "Грешка в мрежата по време на партидно изтриване", + "batchUpdateFailed": "Неуспешно партидно обновление", + "batchUpdateNetworkError": "Грешка в мрежата по време на партидно обновление", + "categoryAudio": "Аудио", + "categoryCloudAgent": "Облачна агенция", + "categoryIde": "IDE", + "categoryLocal": "Локален", + "categorySearch": "Търсене", + "categoryWebCookie": "Уеб бисквитка", + "claudeExtraUsageBlockingDisabled": "Блокирането на допълнителното използване на Claude е деактивирано (допълнителното използване е разрешено)", + "claudeExtraUsageBlockingEnabled": "Активирано блокиране на допълнителна употреба на Claude (допълнителната употреба ще бъде блокирана)", + "claudeRoutingPreferenceDisabled": "Моделите Claude без префикс вече не предпочитат Claude Code", + "claudeRoutingPreferenceEnabled": "Моделите Claude без префикс вече предпочитат Claude Code", + "clearMediaFilter": "Изчисти", + "cliproxyRoutingDisabled": "Заявките сега използват нативен OmniRoute (директно)", + "cliproxyRoutingEnabled": "Заявките сега преминават през CLIProxyAPI (по-дълбока емуляция)", + "codexLimitPolicyUpdated": "Политиката за лимит на Codex е актуализирана", + "codexServiceModeUpdated": "Режимът на услугата Codex е актуализиран", + "codexServiceTierActive": "Codex {tier} услугата е активна", + "codexTierFastLabel": "Бързо", + "codexTierFlexLabel": "Флекс", + "commandCodeApplyFailed": "Неуспешно прилагане на командния код auth", + "commandCodeApplyingApproval": "Одобрено от браузъра, прилагане…", + "commandCodeApplyingKey": "Прилагане на одобрен от браузъра ключ…", + "commandCodeApprovalInstructions": "Отворете URL адреса за удостоверяване, одобрете достъпа, след което поставете върнатия ключ/JSON/URL по-долу…", + "commandCodeAuthExpired": "Кодът на командата auth е изтекъл", + "commandCodeConnected": "Командният код е свързан", + "commandCodeConnectionAdded": "Добавена е връзка с командния код", + "commandCodeLinkExpired": "Връзката за командния код е изтекла", + "commandCodeOpeningStudio": "Отваряне на Command Code Studio…", + "commandCodePopupBlocked": "Изскачащите прозорци са блокирани. Моля, разрешете изскачащите прозорци и опитайте отново Command Code Connect.", + "commandCodeStartFailed": "Неуспешно стартиране на Command Code auth", + "connectionDeleted": "Връзката е изтрита", + "connectionFallback": "връзка", + "coolingConnectionsDescription": "Тези връзки върнаха 429 (ограничение на скоростта) при последната си заявка. OmniRoute ще ги пропусне, докато таймерът изтече — не е необходимо ръчно деактивиране.", + "coolingConnectionsTitle": "В момента охлаждане ({count})", + "failedDeleteAlias": "Неуспешно изтриване на псевдоним", + "failedDeleteConnection": "Неуспешно изтриване на връзката", + "failedDistributeProxies": "Неуспешно разпределение на проксита.", + "failedSaveModelEndpointSettings": "Неуспешно запазване на настройки за крайна точка на модела", + "failedUpdateClaudeExtraUsagePolicy": "Неуспешно обновяване на политиката за допълнителна употреба на Claude", + "failedUpdateClaudeRoutingPreference": "Неуспешно обновяване на предпочитанията за маршрутизиране на Claude Code", + "failedUpdateCliproxyRouting": "Неуспешно обновяване на маршрутизацията на CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Неуспешно обновяване на политиката за лимит на Codex", + "failedUpdateCodexServiceMode": "Неуспешно обновяване на режима на услугата Codex", + "filterByMedia": "Медия", + "freeBadge": "Безплатно", + "kimiCodeApiKeyLabel": "Kimi Code API Ключ", + "modelTestFailed": "Тестът на модела не успя", + "modelTestNetworkError": "Грешка в мрежата при тестване на модела", + "networkError": "Мрежова грешка", + "networkErrorDeletingAlias": "Грешка в мрежата при изтриване на псевдоним", + "networkErrorSettingAlias": "Грешка в мрежата при задаване на псевдоним", + "noProvidersMatch": "Няма доставчици, които да отговарят на вашето търсене.", + "noSavedProxies": "Не са намерени запазени проксита. Първо добавете проксита в Настройки → Прокси.", + "pageLoadErrorDescription": "Не успяхме да заредим данните на доставчика в момента. Проверете връзката си и опитайте отново.", + "pageLoadErrorId": "Идентификатор на грешка: {id}", + "pageLoadErrorRetry": "Опитай отново", + "pageLoadErrorTitle": "Неуспешно зареждане на доставчици", + "playgroundTitle": "Игрална площадка", + "providerDetailConnectionFlexActive": "Активен е услугата Codex flex за този връзка", + "providerDetailConnectionPriorityActive": "Активен е приоритетният сервизен слой на Codex за това свързване", + "providerDetailGlobalFlexActive": "Активен е глобалният слой на услугата Codex Flex", + "providerDetailGlobalPriorityActive": "Активен е глобалният слой за приоритетна услуга Codex", + "proxiesDistributed": "Разпределено {assigned} назначение на прокси(s) между {tagLabel}{total} връзка(и).", + "rerankEndpoint": "Преоценка", + "savedModelEndpointSettings": "Настройки на крайна точка на запазен модел", + "searchByModelAria": "Търсене по модел", + "selectSupportedEndpoint": "Изберете поне една поддържана крайна точка", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Настройки", @@ -6460,7 +6719,24 @@ "loadFailed": "Неуспешно зареждане на списъка с абонаменти", "toggleFailed": "Неуспешно превключване на превключвателя", "refreshFailed": "Неуспешно опресняване", - "deleteFailed": "Неуспешно изтриване" + "deleteFailed": "Неуспешно изтриване", + "add": "Добави", + "cancel": "Отмяна", + "configure": "Конфигуриране", + "copyEndpoint": "Копирай крайна точка", + "coreEndpointHint": "Основен крайна точка Подсказка", + "coreNodesHint": "Подсказка за основни възли", + "create": "Създайте", + "deleteConfirm": "Потвърдете Изтриването", + "empty": "Празно", + "globalModeDescription": "Описание на глобален режим", + "localCoreHint": "Локален Ядрен Подсказка", + "nodeSummary": "Резюме на възела", + "providerRequired": "Изисква се доставчик", + "providerRouting": "Маршрутизиране на доставчика", + "refresh": "Обнови", + "refreshInterval": "Интервал за опресняване", + "ruleModeDescription": "Описание на режима на правило" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Изпълнение на автоматично преминаване от зрение към текст (vision-to-text fallback) преди маршрутизиране на заявки за изображения към модели само за текст.", "visionBridgeEnabledLabel": "Активирано", "visionBridgeEnabledDesc": "Превключване на моста преди повикване, който заменя частите от изображения с извлечен текст.", + "visionBridgeRerouteTextOnlyLabel": "Пренасочете модели само с текст", + "visionBridgeRerouteTextOnlyDesc": "Изпратете пълната заявка, включително изображения, до мостовия модел, когато избраният модел няма вход за изображение.", "visionBridgeModel": "Модел мост", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Всеки OmniRoute идентификатор на модел, който поддържа зрение, може да бъде използван тук.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API ключът няма обхват manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Един или повече префикси са насочени към маршрути с възможност за spawn и не могат да бъдат заобиколени.", "GENERIC": "Неуспешно обновяване на настройките за authz." - } + }, + "remove": "Премахни" }, "resilienceBaseCooldownLabel": "Базово изчакване", "scopeLabel": "Обхват", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Тестване на аудио…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} клип(а) транскрибирани от {model}", "modalityBridgeAudioTestNoop": "Audio Bridge не беше активиран (целта може да поддържа аудио, няма свързан STT доставчик или моста е деактивиран)", - "modalityBridgeAudioTestError": "Тестът на звука не успя: {message}" + "modalityBridgeAudioTestError": "Тестът на звука не успя: {message}", + "modelRoutingDescriptionPlaceholder": "Маршрутизирайте моделите Opus към комбинацията frontier", + "cliproxyapiFallbackCodes": "Cliproxyapi Кодове За Резервно Копие", + "cliproxyapiFallbackDescription": "Описание на резервния Cliproxyapi", + "cliproxyapiHealthLabel": "Cliproxyapi Здравословен Етикет", + "cliproxyapiImportFailed": "Cliproxyapi Импортът Не Успя", + "cliproxyapiImportResult": "Резултат от импортиране на Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi Невалиден URL", + "cliproxyapiLifecycleNoticeAfter": "Уведомление за жизнен цикъл на Cliproxyapi След", + "cliproxyapiLifecycleNoticeBefore": "Уведомление за жизнен цикъл на Cliproxyapi Преди", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Уведомление за Животен Цикъл Линк", + "cliproxyapiPortLabel": "Cliproxyapi Порт Етикет", + "cliproxyapiStatusLabel": "Статус на Cliproxyapi", + "cliproxyapiVersionLabel": "Cliproxyapi Версия Етикет", + "collection": "Колекция", + "errorPage": { + "description": "Не успяхме да заредим настройките в момента. Моля, опитайте отново след няколко секунди.", + "errorId": "Идентификатор на грешка: {id}", + "retry": "Опитай отново", + "title": "Неуспешно зареждане на настройките" + }, + "host": "Хост", + "notInstalled": "Не е инсталирано", + "oneproxyActions": "Действия на Oneproxy", + "oneproxyActive": "Oneproxy Активен", + "oneproxyAnonymity": "Oneproxy Анонимност", + "oneproxyCountry": "Oneproxy Държава", + "oneproxyDelete": "Oneproxy Изтриване", + "oneproxyEmpty": "Oneproxy Празен", + "oneproxyHost": "Oneproxy Хост", + "oneproxyLatency": "Oneproxy Закъснение", + "oneproxyProtocol": "Oneproxy Протокол", + "oneproxyQuality": "Oneproxy Качество", + "oneproxySyncFailed": "Синхронизацията не успя: {error}", + "oneproxySyncSuccess": "Синхронизирани {total} проксита ({added} нови, {updated} актуализирани)", + "proxyDocumentationSocks5DescAfter": "Документация за прокси Socks5 Описание След това", + "proxyFreePoolAddProxy": "Добавяне на прокси от безплатния пул", + "proxyFreePoolAdding": "Добавяне на безплатен прокси пул", + "proxyFreePoolSelectProxy": "Избор на прокси от безплатния пул", + "proxyStatusActive": "Статус на прокси Активен", + "proxyStatusInactive": "Статус на прокси Неактивен", + "routingAddEntry": "Добави запис", + "settingSaveFailed": "Записването на настройките не успя", + "settingSaved": "Настройките са запазени", + "skillsmpApiKeyHintAfter": ". Лимит на заявките: {limit} заявки/ден.", + "skillsmpApiKeyHintBefore": "Вземете своя API ключ от", + "syncFailed": "Синхронизацията не успя", + "unhealthy": "Нездравословно", + "oneproxyDescription": "Изтеглете и завъртете безплатни валидирани проксита от платформата на общността 1proxy", + "oneproxySyncing": "Синхронизиране...", + "oneproxySyncNow": "Синхронизирай сега", + "oneproxyClearAll": "Изчисти всичко", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Изчисти всички 1proxy проксита?", + "memorySkillsSkillsmpDescription": "Свържете се с SkillsMP, за да откриете и инсталирате умения от пазара.", + "memorySkillsActiveProviderDescription": "Изберете кой доставчик да използва страницата за умения за търсене и инсталиране.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Пазаруване", + "memorySkillsSkillsmpProviderDescription": "Аутентифициран пазар (използва вашия SkillsMP API ключ).", + "memorySkillsSkillsshProviderTitle": "skills.sh Директория", + "memorySkillsSkillsshProviderDescription": "Доставчик на публична директория (не е необходим API ключ).", + "routingCcBridgeCatalogName": "Съвместим CC мост с Anthropic", + "routingClaudeProviderName": "Клод (OAuth)", + "routingClaudeProviderDescription": "Нативен Claude доставчик с токени, издадени от OAuth.", + "routingCcBridgeName": "Клод-Код Мост", + "routingCcBridgeDescription": "Релейте крайни точки, използвайки API ключове (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Персонализиран доставчик.", + "routingUnknownOpKind": "Непознат вид операция: {kind}", + "routingInvalidJson": "Невалиден JSON: {error}", + "routingConfigMustBeObject": "Конфигурацията трябва да бъде JSON обект", + "routingEnabledMustBeBoolean": "`enabled` трябва да бъде true или false", + "routingPipelineMustBeArray": "`pipeline` трябва да бъде масив от ops", + "routingPipelineTooLong": "Пайплайнът не може да надвишава 50 операции", + "routingOpMissingKind": "Op #{index}: липсва или невалиден `kind`", + "routingOpUnknownKind": "Op #{index}: неизвестен вид \"{kind}\"", + "routingJsonEditorHide": "Скрий JSON редактора", + "routingJsonEditorImportExport": "Импорт / експортиране на JSON", + "routingJsonEditorLabel": "JSON (редактиране и прилагане, или поставяне за импортиране)", + "routingApplyJson": "Приложи JSON", + "routingTransformsFootnote": "Всички трансформационни операции са идемпотентни при повторно изпълнение. Промените влизат в сила незабавно при следващото искане.", + "cliproxyapiUnknown": "Неизвестен", + "cliproxyapiVersion": "Версия", + "cliproxyapiHealth": "Здраве", + "cliproxyapiPort": "Порт", + "qdrantHost": "Хост", + "qdrantCollection": "Колекция" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Пълен", "ultra": "Ултра" } + }, + "modeOptions": { + "default": "По подразбиране", + "off": "Изключено", + "lite": "Лек", + "standard": "Стандартен", + "aggressive": "Агресивен", + "ultra": "Ултра", + "responsesToolOutput": "Изход на инструмента за отговори" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Изпълнява се последен в стека (след като RTK/Caveman изчисти текста, OmniGlyph конвертира остатъка в изображения) и също така работи самостоятелно чрез режим omniglyph. Това е предварителна версия и остава изключена по подразбиране, докато не приключи цялостната валидация.", "saved": "Запазено.", "saveFailed": "Неуспешно запазване.", - "enableAria": "Активиране на енджина OmniGlyph" + "enableAria": "Активиране на енджина OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Вградени услуги", @@ -9127,7 +9500,49 @@ "unableToLoad": "Системните показатели не могат да се заредят", "product": "Продукт", "resources": "Ресурси", - "company": "Компания" + "company": "Компания", + "tokenHealthTooltips": { + "allHealthy": "Всички токени са здрави", + "needsAttention": "Някои токени изискват внимание", + "refreshFailures": "Открити са неуспехи при обновяване на токена", + "unknown": "Статус на здравето неизвестен" + }, + "systemMonitor": { + "metricsAriaLabel": "Системни метрики", + "memory": "Памет", + "memoryShort": "mem", + "uptime": "Наличност", + "ariaLabel": "Системно наблюдение", + "title": "Системен Монитор", + "version": "Версия", + "connections": "Връзки", + "circuitBreakers": "Ключове за прекъсване", + "open": "{count} отворени", + "memoryUsage": "Използване на паметта" + }, + "never": "Никога", + "justNow": "Току-що", + "minutesAgo": "преди {count}м", + "hoursAgo": "преди {count}ч.", + "tokens": "Токени", + "costs": "Разходи", + "autoRefresh": "Автоматично обновяване ({seconds}с)", + "toggleAutoRefresh": "Превключване на автоматично обновяване", + "activeRequests": "Активни Заявки", + "totalRequests": "Общо заявки", + "totalInputTokens": "Общо входящи токени", + "model": "Модел", + "provider": "Доставчик", + "requests": "Заявки", + "lastUsed": "Последно използвано", + "inputTokens": "Входни Токени", + "totalTokens": "Общо токени", + "inputCost": "Разходи за входящи данни", + "outputCost": "Разходи за изхода", + "noUsageData": "Все още няма записано използване. Направете няколко заявки, за да видите данни тук.", + "account": "Акаунт", + "accountLabel": "Акаунт {id}", + "noAccountUsage": "Все още няма записана употреба, специфична за акаунта. Направете заявки, използвайки OAuth акаунти, за да видите данни тук." }, "auth": { "welcome": "Добре дошли", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Нулиране чрез данни на приложението", + "resetViaAppDataDescription": "Изтрийте файла с настройки от директорията на приложението, за да нулирате паролата си:", + "quitDesktopApp": "Напуснете напълно настолното приложение OmniRoute", + "navigateToAppDataDirectory": "Навигирайте до директорията с данни на приложението:", + "checkSystemAppDataFolder": "(Проверете папката с данни на системното приложение)", + "relaunchDesktopFreshSetup": "Рестартирайте настолното приложение OmniRoute — то ще стартира нова настройка", + "alternativeSetPasswordTitle": "Алтернатива: Задайте Нова Парола", + "alternativeSetPasswordDescription": "Задайте нова начална парола чрез файла на средата на сървъра:", + "openServerEnvFilePrefix": "Отвори", + "relaunchDesktopApp": "Презапуснете настолното приложение OmniRoute", + "codexLinkInvalidOrExpired": "Тази връзка е невалидна или е изтекла.", + "codexValidationServerError": "Не можа да се свърже със сървъра, за да валидира тази връзка.", + "codexSaveConnectionError": "Не можа да запази връзката. Връзката може да е изтекла.", + "codexDeviceLoginDisabled": "Входът с код на устройството е деактивиран за този OpenAI акаунт. Активирайте го в настройките за сигурност на ChatGPT (или попитайте администратора на вашето работно пространство).", + "codexAuthorizationTimedOut": "Времето за удостоверяване изтече. Кликнете върху Започнете отново, за да опитате отново.", + "authenticationCancelled": "Аутентификацията беше отменена.", + "unexpectedAuthenticationError": "Неочаквана грешка по време на удостоверяване. Моля, опитайте отново.", + "connectOpenAiCodexTitle": "Свържете OpenAI Codex", + "codexConnectDescription": "Авторизирайте акаунт в ChatGPT, за да завършите настройката на това свързване.", + "validatingCodexLink": "Валидиране на връзка…", + "codexGenerateCodeDescription": "Щракнете по-долу, за да генерирате еднократен код, след което влезте в OpenAI.", + "startCodexFlow": "Започни", + "requestingOpenAiCode": "Изискване на код от OpenAI…", + "codexVerificationInstructions": "1. Отворете страницата за верификация на OpenAI и 2. въведете този код. Тази страница се актуализира автоматично, след като авторизирате.", + "yourCode": "Вашият код", + "openVerificationPage": "Отворете страницата за верификация", + "copyUrlShort": "Копирай URL", + "savingConnection": "Запазване на връзката…", + "codexConnected": "Свързано!", + "codexConnectionRegistered": "Акаунтът Codex беше регистриран. Можете да затворите тази раздел.", + "tryAgain": "Опитай отново", + "traeAuthorizationSuccess": "Trae авторизация ✓", + "traeAuthorizationFailed": "Неуспешна авторизация на Trae", + "closeAuthorizationWindow": "Можете да затворите този прозорец.", + "returnToDashboard": "Върнете се на таблото.", + "resetViaAppData": "Нулиране чрез данни на приложението", + "deleteSettingsToReset": "Изтрийте файла с настройки от директорията на приложението, за да нулирате паролата си:", + "quitAppCompletely": "Излезте напълно от настолното приложение OmniRoute", + "navigateToAppData": "Навигирайте до директорията с данни на приложението", + "checkAppDataFolder": "Проверете папката с данни на системното приложение", + "deleteSettingsJson": "Изтрий", + "relaunchAppFresh": "Рестартирайте настолното приложение OmniRoute — то ще стартира нова настройка", + "alternativeSetPassword": "Алтернатива: Задайте Нова Парола", + "setNewPasswordViaEnv": "Задайте нова начална парола чрез файла на средата на сървъра:", + "openServerEnv": "Отвори", + "inDataDirectory": "в директорията с данни", + "addOrUpdate": "Добавяне или актуализиране", + "deleteAndRelaunch": "Изтрий", + "settingsJson": "settings.json", + "fromDataDir": "от директорията с данни", + "relaunchApp": "Презапуснете настолното приложение OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Готови ли сте да опростите вашата AI инфраструктура?", "ctaDescription": "Присъединете се към разработчици, които рационализират своите AI интеграции с OmniRoute. Отворен код и безплатен за стартиране.", "startFree": "Започнете безплатно", - "readDocumentation": "Прочетете документацията" + "readDocumentation": "Прочетете документацията", + "company": "Компания", + "pricing": "Цени", + "apiReference": "API Референция", + "helpCenter": "Център за помощ", + "about": "За приложението", + "blog": "Блог", + "contact": "Контакт", + "terms": "Условия", + "privacy": "Поверителност", + "license": "Лиценз", + "footerDescription": "Унифицираният интерфейс за съвременна AI инфраструктура. Сигурен, наблюдаем и мащабируем.", + "communityDiscussions": "Обществени Дискусии" }, "docs": { "title": "Документация", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Регистрирайте и управлявайте агенти чрез регистъра на ACP за комуникация между агенти и споделяне на инструменти.", "protocolAcpStep1": "Придвижете се до Табло за управление → Агенти, за да видите регистрирани ACP агенти.", "protocolAcpStep2": "Регистрирайте нови агенти с възможности и конфигурация на крайни точки.", - "protocolAcpStep3": "Използвайте CLI инструменти, за да конфигурирате каналите за комуникация на агента." + "protocolAcpStep3": "Използвайте CLI инструменти, за да конфигурирате каналите за комуникация на агента.", + "metadataTitleTemplate": "%s — Документация на OmniRoute", + "metadataDefaultTitle": "Документация на OmniRoute", + "metadataDescription": "Обширна документация за OmniRoute AI gateway — настройка, API, компресия, разгръщане и още.", + "layoutNavTitle": "OmniRoute Документация", + "layoutHomeLink": "Начало на документацията", + "layoutDashboardLink": "← Назад към таблото", + "homeTitle": "Документация на OmniRoute", + "homeMetadataDescription": "Всичко, от което се нуждаете, за да маршрутизирате, компресирате и мащабирате вашия ИИ — ръководства за настройка, API справочник, компресия, разгръщане и още.", + "homeTwitterDescription": "Всеобхватна документация за OmniRoute AI шлюз", + "homeDescription": "Всичко, от което се нуждаете, за да маршрутизирате, компресирате и мащабирате вашия ИИ", + "homeSearchHint": "Натиснете Ctrl K, за да търсите в документацията", + "featuredQuickStartTitle": "Бързо Започване", + "featuredQuickStartDescription": "Стартирайте OmniRoute за 3 минути", + "featuredAutoComboTitle": "Авто-Комбо Ръководство", + "featuredAutoComboDescription": "Нека OmniRoute избере най-добрия ИИ за вас", + "featuredProvidersTitle": "Ръководство за доставчици", + "featuredProvidersDescription": "Свържете AI доставчици за минути", + "nonTechUsersTitle": "За нетехнически потребители", + "nonTechUsersSubtitle": "Започнете бързо — не е необходимо техническо образование", + "techUsersTitle": "За технически потребители", + "techUsersSubtitle": "Дълбочинно проучване на архитектурата, API и вътрешностите", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Документация", + "apiExplorerMetadataDescription": "Интерактивен API експлорер — опитайте OmniRoute крайни точки на живо с отговори в реално време", + "apiExplorerTitle": "API Изследовател", + "apiExplorerDescription": "Изпробвайте OmniRoute крайни точки на живо. Изберете крайна точка, конфигурирайте заявката си и вижте отговора в реално време.", + "apiExplorerSseStarted": "SSE потокът е стартиран — проверете терминала/devtools за изход в реално време.", + "apiExplorerError": "Грешка: {message}", + "apiExplorerAuth": "автентикация", + "apiExplorerResponseLabel": "Отговор", + "apiExplorerSelectEndpoint": "Изберете крайна точка за проучване", + "apiExplorerChooseApi": "Изберете API от страничната лента, за да видите подробности и да го изпробвате на живо", + "feedbackThanks": "Благодарим ви за обратната връзка!", + "feedbackQuestion": "Беше ли полезна тази страница?", + "pageMetadataTitle": "{title} — OmniRoute Документация", + "pageMetadataDescription": "Документация на OmniRoute: {title}", + "breadcrumb": "Хлебни трохи", + "apiReferenceTable": { + "parameters": "Параметри", + "name": "Име", + "type": "Тип", + "description": "Описание", + "returns": "Връща", + "typePrefix": "Тип:" + } }, "legal": { "privacyPolicy": "Политика за поверителност", @@ -9957,7 +10479,42 @@ "successMessage": "Вашият {providerName} акаунт е свързан.", "done": "Готово", "error": "Връзката е неуспешна", - "tryAgain": "Опитайте отново" + "tryAgain": "Опитайте отново", + "errorSessionIncomplete": "OAuth сесията е непълна (липсва redirect URI или код за проверка). Рестартирайте връзката и опитайте отново.", + "errorExchangeFailed": "Обменът не успя", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Стандартните Google OAuth идентификационни данни работят само на localhost. За отдалечена употреба, конфигурирайте собствените си OAuth идентификационни данни чрез променливи на средата: ANTIGRAVITY_OAUTH_CLIENT_ID и ANTIGRAVITY_OAUTH_CLIENT_SECRET. Вижте раздела в README 'OAuth на отдалечен сървър'.", + "errorSaveFailed": "Записът не беше успешен", + "errorAuthorizationFailed": "Неуспешна авторизация", + "errorAuthorizationTimeout": "Изтичане на времето за авторизация", + "errorRequestFailed": "Заявката не беше успешна", + "errorCallbackServerFailed": "Неуспешно стартиране на сървъра за обратна връзка", + "errorBrowserUnavailable": "OAuth за браузър не е наличен за този доставчик в текущата среда. Използвайте вместо това поддържания метод за удостоверяване.", + "errorStateMismatch": "Несъответствие на OAuth състоянието. Рестартирайте връзката и опитайте отново.", + "errorImportAccessToken": "Неуспешен импорт на токен за достъп", + "errorSessionNotInitialized": "OAuth сесията не е инициализирана. Рестартирайте потока на връзката и опитайте отново.", + "errorNoAuthorizationCode": "Не е намерен код за удостоверяване. Поставете URL адреса за обратен повик или кода за удостоверяване.", + "tabDeviceCode": "Код на устройството", + "tabBrowserLogin": "Вход в браузъра", + "tabImportAuthJson": "Импорт на auth.json", + "tabPasteApiKey": "Поставете API ключа", + "windsurfPasteDescription": "В IDE-то Windsurf / VS Code стартирайте командата \"Windsurf: Provide Auth Token\" от командната палитра (или кликнете върху бутона \"Get Windsurf Authentication Token\" в Jupyter), след което копирайте показания токен и го поставете по-долу. Отварянето на windsurf.com/show-auth-token директно показва само страница \"Redirecting\" — IDE-то трябва да инициира потока.", + "grokAuthJsonDescription": "Поставете ПЪЛНОТО съдържание на ~/.grok/auth.json (не само полето JWT \"key\"). Чистият JWT няма refresh_token, така че връзката умира след изтичане (#7610). Предпочитайте специализирания модал за Импорт на auth.json, когато е наличен.", + "devinDesktopPasteDescription": "Поставете съществуващ ключ на Devin API от удостоверена сесия на Devin. Наличността на експортиране на ключа и стъпките варират в зависимост от версията на Devin и акаунта.", + "devinPasteDescription": "Предоставете вашия WINDSURF_API_KEY (получен чрез `devin auth login`, или чрез командата \"Windsurf: Provide Auth Token\" в Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Ключ / Токен", + "saving": "Записване…", + "saveConnection": "Запази връзката", + "gheDescription": "Въведете основния URL адрес на вашия GitHub Enterprise инстанция (напр. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "Изисква се URL адрес на GitHub Enterprise", + "gitlabDuoSetupTitle": "Настройка на GitLab Duo OAuth", + "gitlabDuoSetupMessage": "GitLab Duo OAuth не е конфигуриран. Регистрирайте OAuth приложение на {applicationsUrl} с URI за пренасочване {redirectUri} и обхвати \"{scopes}\", след което задайте {clientIdEnv} (и по желание {clientSecretEnv}) и рестартирайте.", + "gitlabDuoSetupDescription": "След като приложението е регистрирано и променливите на средата са зададени за този инстанция на OmniRoute, кликнете Продължи, за да започнете OAuth входа.", + "continue": "Продължи" }, "cursorAuthModal": { "title": "Свържете Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Зареждане на още", - "loadingMore": "Зареждане на още..." + "loadingMore": "Зареждане на още...", + "correlationId": "Идентификатор на корелацията", + "group": { + "showAllRows": "Покажи всички редове", + "showLatestPerCorrelation": "Покажи последните по идентификатор на корелация", + "grouped": "Групирани" + }, + "running": "изпълнява се", + "interval": { + "decrease": "Намали интервала", + "title": "Интервал за автоматично опресняване в секунди", + "increase": "Увеличи интервала" + }, + "status": { + "inProgress": "В процес на изпълнение", + "recoveredByRetry": "Възстановено чрез повторен опит", + "goToParent": "Отидете на родителска заявка", + "healedTitle": "Неуспешно, възстановено след {count} опита", + "healed": "излекуван", + "failedTitle": "Всички {count} опити неуспешни", + "failed": "неуспешно", + "pinnedTitle": "Моделът е избран чрез фиксиране на сесията в контекстния кеш", + "pinned": "закрепен" + }, + "attempts": "опити", + "detail": { + "collapse": "Сгъни {title}", + "expand": "Разширете {title}", + "copyTitle": "Копирай {title}", + "copied": "Копирано!", + "copy": "Копирай", + "autoscrollOn": "Автоскрол: включен", + "autoscrollOff": "Автоскрол: изключен", + "payload": { + "clientRawRequest": "Клиентска Сурова Заявка", + "clientRequest": "Заявка от клиента", + "openaiRequest": "OpenAI Заявка", + "providerRequest": "Заявка за доставчик", + "providerResponse": "Отговор на доставчика", + "clientResponse": "Отговор на клиента", + "pipelineError": "Грешка в потока" + }, + "payloadMissing": "Подробният артефакт на полезния товар вече не е наличен за този запис на лог.", + "payloadCorrupt": "Неуспешно парсиране на детайлен артефакт на полезния товар.", + "notAvailable": "N/A", + "semanticCache": "Семантичен (OmniRoute)", + "upstreamCache": "Възходящо (Доставчик)", + "ariaLabel": "Детайли на логовете на заявките", + "completed": "Завършено", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute върна {status}, въпреки че доставчикът върна {provider}", + "previousRequest": "Предишна заявка", + "nextRequest": "Следваща заявка", + "close": "Затвори детайлния модал", + "startedAt": "Започнато в", + "endedAt": "Завършено На", + "duration": "Продължителност", + "model": "Модел", + "provider": "Доставчик", + "account": "Акаунт", + "input": "Вход", + "totalIn": "Общо входящо: {value}", + "cacheRead": "Кеш Четене: {value}", + "cacheWrite": "Кеш Запис: {value}", + "compressed": "Стиснато: {from} → {to} ({percent}% спестено)", + "output": "Изход", + "totalOut": "Обща сума: {value}", + "reasoning": "Обосновка: {value}", + "requestedModel": "Заявеният Модел", + "requestProtocol": "Протокол на заявката", + "cacheSource": "Кеш Източник", + "modelPinning": "Закрепване на модела", + "activeModelPinning": "Активен — модел, избран чрез фиксиране на сесията", + "rotated": "Преместено: {initial} -> {final}", + "apiKey": "API Ключ", + "noApiKey": "Няма API ключ", + "combo": "Комбо", + "error": "Грешка", + "unblockAll": "Разблокирай всичко", + "cleared": "Изчистено", + "unblock": "Разблокирай", + "relatedRequests": "Свързани заявки ({count})", + "current": "текущо", + "detailStatus": "Статус на детайла", + "loadingDetails": "Зареждане на детайли за заявката...", + "providerEventStream": "Доставчик на събития в реално време", + "clientEventStream": "Клиентски Събитийни Потокове", + "eventStream": "Събитийна Стрийминг", + "responsePayloadLegacy": "Payload на отговора (наследство)", + "requestPayloadLegacy": "Payload на заявката (наследство)", + "noPayload": "Няма налични данни за полезен товар за този запис в логовете.", + "correlationId": "Идентификатор на корелацията", + "correlationIdValue": "Идентификатор на корелация: {id}", + "detailedPayloadInfo": "Първо активирайте подробното регистриране, ако искате изгледа на четирите етапа на клиент/доставчик за нови заявки." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} е деактивиран", "providerAdded": "{provider} добавен", "add": "Добави", - "manualApiKey": "Използвайте ръчен API ключ" + "manualApiKey": "Използвайте ръчен API ключ", + "createDahlTokenFailed": "Неуспешно създаване на токен Dahl", + "providerProxy": "Прокси", + "providerProxyConfigureHint": "Конфигурирайте прокси", + "providerProxyTitleConfigured": "Конфигуриран прокси: {host}" }, "gamification": { "leaderboardScopes": { @@ -12040,7 +12695,7 @@ "description": "След синхронизиране на доставчик-модел, регенериране на ~/.codex/*.config.toml профили от каталога на живо. Това никога не променя активната или подразбиращата се конфигурация на Codex и е изключено по подразбиране." }, "OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES": { - "description": "След синхронизиране на доставчик-модел, регенериране на ~/.claude/profiles/{name}/settings.json профили от каталога на живо. Това никога не променя активната или подразбиращата се конфигурация на Claude и е изключено по подразбиране." + "description": "After provider-model synchronization, regenerate ~/.claude/profiles//settings.json profiles from the live catalog. This never changes the active or default Claude configuration and is off by default." }, "OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK": { "description": "Деактивиране на крайната точка за проверка на състоянието на локалния екземпляр." @@ -12201,7 +12856,9 @@ "avoid": "Ограничено от ToS — прегледайте условията", "caution": "Внимание — клаузи за лична употреба / прокси", "ok": "Като цяло разрешителен" - } + }, + "allProviders": "Всички доставчици", + "noApiKeyRequired": "Не е необходим API ключ" }, "providerHealthAutopilot": { "title": "Автопилот за състоянието на доставчиците", @@ -12390,7 +13047,11 @@ "on": "ВКЛ", "off": "ИЗКЛ", "availableProviders": "Налични доставчици ({count})", - "noProviderOverrides": "Без предефинирания — всички активни доставчици ще участват с моделите си по подразбиране" + "noProviderOverrides": "Без предефинирания — всички активни доставчици ще участват с моделите си по подразбиране", + "resetFailed": "Нулирането не успя", + "resetSuccess": "Конфигурацията е нулирана до подразбиране", + "running": "Изпълнява се...", + "testFailed": "Тестът не успя" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) е основополагащият приятел на отворения код на OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Доставчикът не поддържа визуализация за тази заявка за изображение", "capabilityFilter.toolsMismatch": "Доставчикът не поддържа извикване на инструменти", "capabilityFilter.structuredOutputMismatch": "Доставчикът не поддържа структурирано изходно съдържание", - "capabilityFilter.contextWindowMismatch": "Заявката надвишава контекстния прозорец на доставчика" + "capabilityFilter.contextWindowMismatch": "Заявката надвишава контекстния прозорец на доставчика", + "publicSystem": { + "notFound": { + "title": "Страницата не е намерена", + "description": "Страницата, която търсите, не съществува или е преместена.", + "dashboardAriaLabel": "Върнете се на таблото", + "statusAriaLabel": "Отворете страницата за статус на системата", + "systemStatus": "Състояние на системата" + }, + "error": { + "title": "Вътрешна грешка на сървъра", + "description": "Нещо се обърка при обработката на вашето запитване. Нашият екип е уведомлен и работи по решение.", + "errorId": "Идентификатор на грешка: {id}", + "detailsAriaLabel": "Детайли за грешката", + "retryAriaLabel": "Опитайте отново да заредите страницата", + "tryAgain": "Опитай отново", + "dashboardAriaLabel": "Върнете се на таблото", + "statusAriaLabel": "Отворете системния статус", + "systemStatus": "Състояние на системата" + }, + "globalError": { + "title": "Нещо се обърка", + "description": "Настъпи неочаквана грешка. Това е записано и нашият екип ще проведе разследване.", + "detailsAriaLabel": "Детайли за грешката", + "retryAriaLabel": "Опитайте отново да заредите страницата", + "tryAgain": "Опитай отново", + "statusAriaLabel": "Отворете системния статус", + "systemStatus": "Състояние на системата" + }, + "offline": { + "title": "Проблем с връзката", + "description": "OmniRoute в момента не може да достигне мрежата. Проверете интернет връзката си, VPN или прокси настройки.", + "connectionRestored": "Връзката е възстановена", + "offlineModeDetected": "Открит е офлайн режим", + "retryConnection": "Опитайте отново свързването", + "openStatusPage": "Отворете страницата със статус" + }, + "maintenance": { + "title": "Планирана поддръжка", + "description": "Някои услуги временно не са налични, докато се извършва поддръжка. Основното маршрутизиране обикновено остава онлайн, но функциите за управление могат да бъдат влошени.", + "suggestion1": "Опитайте отново след няколко минути.", + "suggestion2": "Проверете текущите индикатори за здравословно състояние и статуса на доставчика, преди да опитате отново.", + "systemStatus": "Преглед на системния статус", + "healthDashboard": "Отворете таблото за управление на здравето" + }, + "status": { + "title": "Системен статус", + "description": "Жив оперативен моментен изглед за основните услуги на OmniRoute.", + "loadingHealth": "Зареждане на здравни метрики...", + "failedToLoad": "Неуспешно зареждане на системното здраве.", + "unableToReachHealth": "Неуспешно свързване с health endpoint. Проверете свързаността и опитайте отново.", + "healthCheckFailed": "Проверка на здравето неуспешна", + "openConnectivityHelp": "Помощ за отворена свързаност", + "maintenanceInfo": "Информация за поддръжка", + "service": "Услуга", + "unknown": "неизвестен", + "notAvailable": "n/a", + "providersTracked": "Проследявани доставчици", + "circuitBreakerState": "Състояние на прекъсвача на доставчика", + "lastUpdate": "Последно обновление: {timestamp}", + "uptimeMinutes": "{minutes}м", + "uptimeHoursMinutes": "{hours}ч {minutes}м" + }, + "statusPages": { + "400": { + "title": "Невалидна заявка", + "description": "Заявката е невалидна или непълна.", + "suggestion1": "Проверете задължителните полета и формата на полезния товар, преди да опитате отново.", + "suggestion2": "Ако използвате API, валидирайте JSON схемата локално.", + "suggestion3": "Ако това продължава да се случва, отворете заявката в Translator Playground, за да инспектирате полезния товар.", + "primaryAction": "Отворете документацията", + "secondaryAction": "Отворете Преводача" + }, + "401": { + "title": "Неупълномощен", + "description": "Необходимо е удостоверяване, за да получите достъп до този ресурс.", + "suggestion1": "Влезте отново и опитайте операцията.", + "suggestion2": "За API повикванията, потвърдете, че Bearer токенът е наличен и валиден.", + "suggestion3": "Ако токенът е бил наскоро сменен, актуализирайте вашите клиентски идентификационни данни.", + "primaryAction": "Отидете на Вход", + "secondaryAction": "Управление на API ключове" + }, + "403": { + "title": "Забранено", + "description": "Вашето искане беше разбрано, но достъпът е отказан поради политика.", + "suggestion1": "Проверете правилата за разрешени/блокирани IP адреси в настройките.", + "suggestion2": "Проверете политиките за модел и бюджет, присвоени на вашия API ключ.", + "suggestion3": "Помолете администратор да предостави необходимия обхват на разрешения.", + "primaryAction": "Помощ за Отворен Достъп", + "secondaryAction": "Отворете Настройки за Сигурност" + }, + "408": { + "title": "Изтичане на времето за заявка", + "description": "Сървърът не получи пълна заявка навреме.", + "suggestion1": "Повторете заявката с по-малък товар.", + "suggestion2": "Проверете стабилността на мрежата си и латентността на VPN/прокси.", + "suggestion3": "За дълги операции активирайте стрийминг или разделете заявката.", + "primaryAction": "Отворете ръководството за крайни точки", + "secondaryAction": "Проверете статуса на мрежата" + }, + "429": { + "title": "Твърде много заявки", + "description": "Надвишени са лимитите за оценка за този клиент, ключ или доставчик.", + "suggestion1": "Изчакайте времето за охлаждане и опитайте отново след предложеното време.", + "suggestion2": "Превключете на комбинация с резервни доставчици.", + "suggestion3": "Настройте профилите за устойчивост/ограничаване на скоростта на доставчика в настройките.", + "primaryAction": "Отворете Настройки за Устойчивост", + "secondaryAction": "Отворете комбинирани опции" + }, + "500": { + "title": "Вътрешна сървърна грешка", + "description": "Възникна неочаквана грешка на сървъра при обработката на вашата заявка.", + "suggestion1": "Опитайте отново след няколко секунди.", + "suggestion2": "Проверете телеметрията за здраве и сървърните журнали за свързани ID на заявки.", + "suggestion3": "Ако проблемът е постоянен, докладвайте проблема с времеви печат и контекст на заявката.", + "primaryAction": "Отворете таблото за управление на здравето", + "secondaryAction": "Отворете журналите" + }, + "502": { + "title": "Лош шлюз", + "description": "Интеграцията с upstream доставчик или шлюз е върнала невалиден отговор.", + "suggestion1": "Опитайте отново с друг доставчик или активен комбиниран маршрут.", + "suggestion2": "Проверете удостоверенията на доставчика и наличността на модела.", + "suggestion3": "Проверете изхода на преводача, ако е включено преобразуване на формата.", + "primaryAction": "Отворете Доставчици", + "secondaryAction": "Отворете Преводача" + }, + "503": { + "title": "Услугата е недостъпна", + "description": "Услугата е временно недостъпна поради поддръжка или влошени зависимости.", + "suggestion1": "Изчакайте момент и опитайте отново.", + "suggestion2": "Проверете известията за поддръжка и статуса на системата.", + "suggestion3": "Използвайте резервни доставчици, ако вашият работен процес е чувствителен към латентност.", + "primaryAction": "Детайли за поддръжка", + "secondaryAction": "Състояние на системата" + } + } + }, + "kiroAuthModal": { + "title": "Свържете {providerLabel}", + "chooseMethod": "Изберете метода за удостоверяване:", + "builderId": "AWS Builder ID", + "builderDescription": "Препоръчва се за повечето потребители. Влезте с AWS акаунта, свързан с {providerLabel}.", + "organization": "Вашата организация (AWS IAM Identity Center)", + "organizationDescription": "Използвайте URL адреса за стартиране на SSO на вашата компания (пример: {url}).", + "googleAccount": "Google акаунт", + "googleDescription": "Влезте с вашия Google акаунт.", + "githubAccount": "GitHub акаунт", + "githubDescription": "Влезте с вашия GitHub акаунт.", + "importToken": "Импорт на токен", + "importDescription": "Поставете рефреш токен, експортиран от {providerLabel}.", + "apiKey": "API Ключ", + "apiKeyDescription": "Поставете дългосрочен {providerLabel} / CodeWhisperer API ключ. Той се съхранява като удостоверение за носител без токен за обновяване; откритията на профили са с най-добри усилия.", + "idcStartUrl": "IDC Начален URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL адрес на AWS IAM Identity Center на вашата организация", + "awsRegion": "AWS Регион", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS регион за вашия Identity Center (по подразбиране: us-east-1)", + "continue": "Продължи", + "back": "Назад", + "autoDetecting": "Автоматично откриване на токен...", + "readingCredentials": "Четене на {providerLabel} удостоверения от кеша на AWS SSO", + "tokenNotDetected": "Токенът {providerLabel} не беше открит автоматично. Моля, поставете ръчно вашия токен за обновяване.", + "refreshToken": "Обновяване на токен", + "tokenPlaceholder": "Токенът ще бъде попълнен автоматично...", + "importing": "Импортиране...", + "apiKeyPlaceholder": "Поставете вашия {providerLabel} API ключ...", + "apiKeyStoredDescription": "Съхранено криптирано като дългосрочен носител на удостоверение. Няма поток за обновяване.", + "apiKeyRegionDescription": "AWS регион за ключа (по подразбиране: us-east-1)", + "validating": "Валидиране...", + "validateAndSaveApiKey": "Валидирайте и запазете API ключа", + "errorAutoDetect": "Не можа да открие токена автоматично", + "errorAutoDetectFailed": "Неуспешно автоматично откриване на токен", + "errorRefreshTokenRequired": "Моля, въведете токен за опресняване", + "errorImportFailed": "Импортът не успя", + "errorApiKeyRequired": "Моля, въведете Kiro API ключ", + "errorApiKeyImportFailed": "Импортът на API ключа не успя", + "errorIdcStartUrlRequired": "Моля, въведете вашия IDC стартов URL" + }, + "kiroSocialOAuthModal": { + "title": "Свържете {providerLabel} чрез {providerName}", + "errorStartAuthorization": "Неуспешно стартиране на авторизацията", + "errorAuthorizationExpired": "Авторизацията изтече. Започнете отново процеса на влизане.", + "errorAuthorizationFailed": "Неуспешна авторизация", + "initializing": "Инициализиране...", + "settingUp": "Настройване на удостоверяване с {providerName}", + "openIncognito": "Отворете тази връзка в Инкогнито прозорец", + "incognitoDescription": "Използвайте инкогнито/частен прозорец, за да избегнете конфликти на сесии с вече съществуващи акаунти.", + "copyLink": "Копирай линк", + "verificationCode": "Код за потвърждение", + "waiting": "Изчакване на разрешение...", + "cancel": "Отмяна", + "successTitle": "Успешно свързано!", + "successMessage": "Вашият {providerLabel} акаунт чрез {providerName} е свързан.", + "done": "Готово", + "errorTitle": "Свързването не успя", + "close": "Затвори" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Неуспешна авторизация", + "errorPopupBlocked": "Изскачащите прозорци са блокирани — разрешете изскачащите прозорци за този сайт или поставете токена ръчно по-долу.", + "errorPopupClosed": "Прозорецът за удостоверяване беше затворен преди да завърши.", + "errorAccessTokenRequired": "Необходим е токен за достъп.", + "errorImportFailed": "Импортът не успя", + "title": "Свържете Trae SOLO", + "authorizeDescription": "Авторизирайте се чрез trae.ai в изскачащ прозорец. Изскачащият прозорец ще се затвори сам, след като токенът бъде импортиран.", + "authorizeImportant": "Важно: трябва да сте влезли в trae.ai в този браузър първо. Страницата за авторизация само потвърдява съществуваща сесия — не може да ви влезе. Ако видите \"Неуспешно влизане\", кликнете \"Отворете solo.trae.ai\", влезте, след това се върнете тук.", + "waitingForAuthorization": "Изчакване на trae.ai…", + "authorizeWithBrowser": "Авторизирайте с браузър", + "openSoloTrae": "Отворете solo.trae.ai", + "orPasteManually": "или поставете токен ръчно", + "manualInstructions": "Влезте в solo.trae.ai, отворете DevTools → Network, изпратете съобщение в чата и копирайте JWT от Authorization: Cloud-IDE-JWT {tokenPlaceholder} заглавката на заявката. Животът на JWT е ~14 дни. Допълнителните полета за идентичност идват от common_params в същото тяло на заявката.", + "accessTokenLabel": "Токен за достъп (Cloud-IDE-JWT)", + "webId": "Уеб ID", + "optional": "по избор", + "bizUserId": "ID на бизнес потребителя", + "userUniqueId": "Потребителски уникален идентификатор", + "scope": "Обхват", + "tenant": "Наемател", + "region": "Регион", + "importing": "Импортиране…", + "importToken": "Импорт на токен", + "cancel": "Отмяна" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Разпределяне...", + "complete": "Завършено", + "defaultLabel": "Разпределете проксита" + } + }, + "providerTest": { + "dialogLabel": "Тест {provider}", + "deprecated": "остарял", + "risk": "рискове", + "close": "Затвори", + "model": "Модел", + "key": "Ключ", + "defaultKey": "по подразбиране", + "clearConversation": "Изчисти разговора", + "clear": "Изчисти", + "tabs": { + "test": "Тест", + "logs": "Логове" + }, + "loadingLogs": "Зареждане на логове…", + "failedToLoadLogs": "Неуспешно зареждане на логовете", + "noLogsYet": "Няма логове все още", + "noLogsDescription": "Изпратете тестово съобщение от раздела Тест — логовете за този доставчик ще се появят тук.", + "openFullLogs": "Отворете страницата с пълните логове", + "live": "На Живо", + "tailingLast": "следене на последните {count}", + "refreshNow": "Обнови сега", + "refresh": "Обнови", + "unknownRequester": "неизвестен заявител", + "fields": { + "timestamp": "Времеви печат", + "status": "Статус", + "duration": "Продължителност", + "model": "Модел", + "requestedModel": "Заявеният модел", + "provider": "Доставчик", + "requester": "Заявител", + "tokens": "Токени" + } + }, + "proxyLog": { + "detailAriaLabel": "Детайли на прокси логовете", + "event": "Прокси Събитие", + "close": "Затвори модала с детайли за прокси", + "time": "Време", + "latency": "Забавяне", + "clientIp": "Клиентски IP", + "proxy": "Прокси", + "direct": "Директен", + "type": "Тип", + "level": "Ниво", + "provider": "Доставчик", + "tlsFingerprint": "TLS отпечатък", + "directNative": "Директен", + "targetUrl": "Целеви URL", + "error": "Грешка", + "configuration": "Конфигурация на прокси" + }, + "requestTimeline": { + "title": "Хронология на заявките", + "modes": { + "follow": "Следвайте", + "followDescription": "Оста се движи наляво, NOW линията остава на 75%", + "now": "Сега", + "nowDescription": "Скочи до текущото време, NOW редът се нулира в центъра", + "pan": "Тиган", + "panDescription": "Плъзнете, за да разгледате, фонът е замразен" + }, + "reset": "Нулиране", + "started": "Започнато", + "ended": "Завършено", + "duration": "Продължителност", + "status": "Статус", + "provider": "Доставчик", + "tokens": "Токени", + "active": "Активен", + "other": "Други", + "tenMinutes": "10мин", + "hour": "час", + "day": "ден", + "unknownModel": "неизвестен", + "pending": "в очакване" + }, + "metadata": { + "compressionTitle": "Компресия", + "compressionDescription": "Конфигурирайте настройки за компресия на контекста, за да намалите използването на токени и разходите.", + "relayTitle": "OmniRoute — Релейни Прокси", + "relayDescription": "Безсървърни релейни прокси крайни точки за вашата AI инфраструктура", + "trafficInspectorTitle": "Трафик Инспектор — OmniRoute", + "trafficInspectorDescription": "Наблюдавайте LLM повиквания + отстранявайте грешки в HTTPS трафика на всяко приложение" + }, + "conductor": { + "title": "Кондуктор — флот на CLI-агенти", + "subtitle": "OmniConductor хъб: изпълнители, опашка за задачи и съвети, на живо", + "runners": "Бегачи", + "tasks": "Задачи", + "colName": "Име", + "colClis": "CLI интерфейси", + "colStatus": "Статус", + "colTask": "Задача", + "colMode": "Режим", + "colRunner": "Изпълнител", + "colSummary": "Резюме", + "online": "онлайн", + "offline": "офлайн", + "draining": "източване", + "hubOffline": "Кондукторският хъб е офлайн или не е конфигуриран (CONDUCTOR_HUB_URL) — показва нищо, а не остарели данни.", + "noRunners": "Няма регистрирани бегачи", + "noTasks": "Няма задачи все още", + "detailTitle": "Детайли на задачата", + "prompt": "Подсказка", + "branch": "Клон", + "fetchHint": "Изтеглете резултата с: git fetch origin {branch}", + "council": "Съвет", + "candidates": "Кандидати", + "cancel": "Отмяна на задачата", + "cancelConfirmTitle": "Отменете тази задача?", + "cancelConfirmMessage": "Хъбът ще прекрати изпълнението на изпълнителя. Това не може да бъде отменено.", + "cancelFailed": "Хъбът отказа анулирането", + "close": "Затвори", + "error": "Грешка", + "faroTitle": "Фаро — говорител на флота", + "faroSubtitle": "Чат и глас, ангажирани в реални събития на флота. Разрушителните команди винаги искат потвърждение.", + "faroEmpty": "Попитайте за флота — напр. \"как е флотът?\"", + "faroPending": "Faro иска потвърждение", + "faroPlaceholder": "говори с Фаро…", + "faroSend": "изпрати", + "faroOffline": "Фаро (говорител) е извън линия", + "yes": "Да", + "no": "Не", + "pushToTalk": "Дръж, за да говориш", + "speakAnswers": "говори отговори", + "voiceModels": "Модели на глас (доставчик/модел на този OmniRoute)", + "voiceIdle": "говори", + "voiceListening": "слушане…", + "voiceThinking": "мисля…", + "voiceSpeaking": "говорене…", + "sttFailed": "Неуспешна транскрипция (проверете модела/доставчика на STT)", + "ttsFailed": "Неуспешна синтеза на реч (проверете модела/доставчика на TTS)", + "micDenied": "Микрофонът е недостъпен или разрешението е отказано" + }, + "cliproxyProviderExposure": { + "title": "Излагане на доставчика", + "description": "Изложете моделите на CLIProxyAPI като цел за маршрутизиране под префикса cliproxyapi/.", + "label": "Изложи като cliproxyapi/...", + "hint": "Когато е активирано, откритите модели се появяват в селекциите на доставчика в OmniRoute.", + "updateFailed": "Неуспешно обновяване (HTTP {status})", + "networkError": "Грешка в мрежата — не можа да актуализира настройката за експозиция на доставчика" + } } - diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index 49da675c0d..ba6c36558d 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -172,6 +172,18 @@ "unselectAll": "নির্বাচন বাতিল করুন", "visibleModels": "দৃশ্যমান", "selectAllConfirm": "এই কম্বোতে {count}টি মডেল যোগ করবেন?", + "testSelectedProviders": "পরীক্ষক প্রদানকারীরা", + "testingSelectedProviders": "পরীক্ষা {done}/{total}...", + "noProvidersSelectedToTest": "প্রথমে নীচে অন্তত একটি প্রদানকারী পরীক্ষা করুন", + "noModelsToTestForProviders": "নির্বাচিত প্রদানকারীদের জন্য পরীক্ষা করার মতো কোনো মডেল নেই", + "testSelectedProvidersResults": "{ok} এর {total} মডেল কাজ করছে", + "selectWorkingModels": "কাজে যুক্ত করুন", + "unselectWorkingModels": "কাজ করছে না", + "noWorkingModelsToSelect": "যোগ করার জন্য কোনো কার্যকর মডেল বাকি নেই", + "providerTestHint": "টিপ: একটি প্রদানকারী পরীক্ষা করুন → পরীক্ষা করুন → কাজ করছে যোগ করুন। আবার ক্লিক করুন অচিহ্নিত করতে।", + "selectAllProviders": "সব প্রদানকারী পরীক্ষা করুন", + "clearProviderSelection": "প্রোভাইডারগুলি আনচেক করুন", + "providersSelectedCount": "{count} প্রদানকারী পরীক্ষা করা হয়েছে", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "আকার", + "toggleNoAuthProvider": "নো-অথরাইজেশন প্রদানকারী টগল করুন", + "loadingModels": "মডেলগুলি লোড হচ্ছে…", + "selectAModel": "একটি মডেল নির্বাচন করুন", + "degraded": "অবনমিত", + "zeroConfigBannerTitle": "জিরো-কনফিগ মোডে চলছে", + "zeroConfigBannerBody": "OmniRoute প্রথম চালু করার সময় স্বয়ংক্রিয়ভাবে নিরাপদ এনক্রিপশন কী তৈরি করে। সেগুলি {dataDir} এ সংরক্ষিত হয়। কোনো পদক্ষেপের প্রয়োজন নেই — আপনার ডেটা এনক্রিপ্ট করা এবং নিরাপদ। কাস্টম কী ব্যবহার করতে, সেই ফাইলে JWT_SECRET এবং STORAGE_ENCRYPTION_KEY যোগ করুন।", + "batchRelativeTimeIn": "{value} তে", + "batchRelativeTimeAgo": "{value} আগে", + "batchDetailsTitle": "ব্যাচের বিস্তারিত", + "batchProgress": "অগ্রগতি", + "batchCompletedCount": "{count} সম্পন্ন", + "batchFailedCount": "{count} ব্যর্থ", + "batchPendingCount": "{count} মুলতুবি", + "batchTimeline": "টাইমলাইন", + "batchTimelineInProgress": "চলমান", + "batchTimelineFinalizing": "চূড়ান্তকরণ", + "batchTimelineCompleted": "সম্পন্ন", + "batchTimelineFailed": "ব্যর্থ হয়েছে", + "batchTimelineExpires": "মেয়াদ শেষ হচ্ছে", + "batchTimelineExpired": "মেয়াদ শেষ হয়েছে", + "batchTimelineCancelling": "বাতিল করা হচ্ছে", + "batchTimelineCancelled": "বাতিল করা হয়েছে", + "batchTokenUsage": "টোকেন ব্যবহারের পরিমাণ", + "batchMetadata": "মেটাডেটা", + "batchFileContents": "ফাইলের বিষয়বস্তু", + "batchFileUsedByCount": "ব্যবহৃত হয়েছে {count, plural, one {# ব্যাচ} other {# ব্যাচ}}", + "batchFilePreview": "পূর্বদর্শন", + "batchFilePreviewTruncated": "প্রথম {shown} লাইন দেখানো হচ্ছে ({total} মোট লাইন)", + "batchFileDownloadFull": "পূর্ণ ফাইল ডাউনলোড করুন" }, "disabled": "নিষ্ক্রিয়", "featureFlagOmnirouteEmergencyFallbackDescription": "বাজেট শেষ হয়ে যাওয়া অনুরোধগুলো জরুরি ফ্রি ফলব্যাক প্রোভাইডার/মডেলে রুট করুন।", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "বিভাজক", "discovery": "ডিসকভারি", "discoverySubtitle": "ফ্রি অ্যাক্সেসের জন্য প্রোভাইডার স্ক্যান করুন", + "conductor": "কন্ডাক্টর", + "conductorSubtitle": "CLI-এজেন্ট ফ্লিট", "resilienceConnections": "সংযোগ স্থিতিস্থাপকতা", "resilienceConnectionsSubtitle": "কুলডাউন, ব্রেকার, লকআউট অবস্থা", "settingsModalityBridge": "মোডালিটি ব্রিজ", - "settingsModalityBridgeSubtitle": "ছবি/অডিও → টেক্সট-শুধু মডেলের জন্য টেক্সট ফ্যালব্যাক" + "settingsModalityBridgeSubtitle": "ছবি/অডিও → টেক্সট-শুধু মডেলের জন্য টেক্সট ফ্যালব্যাক", + "commandPalette": { + "title": "কমান্ড প্যালেট", + "searchPlaceholder": "পৃষ্ঠাগুলি, সেটিংস, টুলগুলি অনুসন্ধান করুন...", + "clearSearch": "সার্চ পরিষ্কার করুন", + "noResults": "কোন ফলাফল নেই", + "navigate": "নেভিগেট", + "open": "খুলুন", + "close": "বন্ধ করুন" + }, + "noResults": "কোন ফলাফল নেই" }, "webhooks": { "title": "ওয়েবহুক", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Settings Update Failed", "sync.token.created": "Sync Token Created", "sync.token.revoked": "Sync Token Revoked" - } + }, + "mcpMetricCalls24h": "কল (২৪ ঘণ্টা)", + "mcpMetricSuccessRate": "সফলতার হার", + "mcpMetricAvgDuration": "গড় স্থায়িত্ব", + "mcpMetricTopTool": "শ্রেষ্ঠ টুল" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "স্বয়ংক্রিয়ভাবে পৃষ্ঠা পুনরায় লোড হচ্ছে...", - "providerTopology": "প্রদানকারী টপোলজি" + "providerTopology": "প্রদানকারী টপোলজি", + "downloadDmg": "DMG ডাউনলোড করুন (macOS)", + "downloadDmgDescription": "OmniRoute ডেস্কটপ অ্যাপের একটি নতুন সংস্করণ উপলব্ধ। আপডেট করতে দয়া করে macOS DMG ইনস্টলার ডাউনলোড এবং ইনস্টল করুন (বর্তমান: v{version})।", + "downloadExe": "EXE ডাউনলোড করুন (Windows)", + "downloadExeDescription": "OmniRoute ডেস্কটপ অ্যাপের একটি নতুন সংস্করণ উপলব্ধ। আপডেট করতে Windows EXE ইনস্টলার ডাউনলোড এবং ইনস্টল করুন (বর্তমান: v{version})।", + "downloadAppImage": "অ্যাপইমেজ ডাউনলোড করুন (লিনাক্স)", + "downloadAppImageDescription": "OmniRoute ডেস্কটপ অ্যাপের একটি নতুন সংস্করণ উপলব্ধ। আপডেট করতে দয়া করে Linux AppImage প্যাকেজটি ডাউনলোড করুন (বর্তমান: v{version})।", + "downloadUpdate": "আপডেট ডাউনলোড করুন", + "downloadUpdateDescription": "OmniRoute ডেস্কটপ অ্যাপের একটি নতুন সংস্করণ উপলব্ধ। আপডেট করতে আপনার সিস্টেমের জন্য সংশ্লিষ্ট অ্যাপ ফরম্যাটটি ডাউনলোড করুন (বর্তমান: v{version})।", + "updateQueued": "v{version} এর জন্য আপডেট কিউড করা হয়েছে।", + "updateDockerRebuilding": "Docker ইমেজ ব্যাকগ্রাউন্ডে পুনর্নির্মাণ হচ্ছে।", + "updateWaitingRestart": "নতুন সংস্করণ সহ OmniRoute পুনরায় চালু হওয়ার জন্য অপেক্ষা করছি।", + "updateInstalling": "v{version} ইনস্টল করা হচ্ছে।", + "updateRunning": "OmniRoute এখন v{version} চালাচ্ছে।", + "updateCompleted": "OmniRoute v{version} এ আপডেট করা হয়েছে।", + "updateDockerStillRebuilding": "Docker ইমেজ এখনও v{version} এর জন্য পুনর্নির্মাণ হচ্ছে।", + "updateInstallingBackground": "পটভূমিতে v{version} ইনস্টল করা হচ্ছে।", + "updateWaitingVersion": "v{version} তে OmniRoute ফিরে আসার জন্য অপেক্ষা করা হচ্ছে।", + "updateDockerStillInProgress": "Docker পুনর্নির্মাণ এখনও চলমান আছে।", + "updateRestarting": "সার্ভিস পুনরায় চালু হচ্ছে। OmniRoute অনলাইনে ফিরে আসার জন্য অপেক্ষা করা হচ্ছে...", + "updateTimeout": "আপডেট শুরু হয়েছে, কিন্তু v{version} টাইমআউটের আগে উপলব্ধ হয়নি। পৃষ্ঠা রিফ্রেশ করুন অথবা সার্ভার লগ পরীক্ষা করুন।", + "updateTimedOut": "v{version} এ আপডেট করতে সময় শেষ হয়েছে।", + "updateStartFailed": "আপডেট শুরু করতে ব্যর্থ হয়েছে।", + "noResponseStream": "কোনো প্রতিক্রিয়া স্ট্রিম পাওয়া যায়নি।", + "updateComplete": "আপডেট সম্পন্ন!", + "updateFailed": "আপডেট ব্যর্থ হয়েছে।", + "updateNetworkError": "নেটওয়ার্ক ত্রুটি — আপডেটের সময় সংযোগ হারিয়ে গেছে।", + "stepInstallPackage": "প্যাকেজ ইনস্টল করুন", + "stepRebuildNativeModules": "নেটিভ মডিউল পুনর্নির্মাণ করুন", + "stepRestartService": "সার্ভিস পুনরায় চালু করুন", + "stepComplete": "সম্পূর্ণ", + "stepError": "ত্রুটি", + "updateCompleteTitle": "আপডেট সম্পন্ন!", + "updateFailedTitle": "আপডেট ব্যর্থ হয়েছে", + "updatingTitle": "OmniRoute আপডেট করা হচ্ছে...", + "reloadNotice": "পৃষ্ঠাটি কয়েক সেকেন্ডের মধ্যে স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে।", + "retryNotice": "দয়া করে আবার চেষ্টা করুন অথবা CLI এর মাধ্যমে ম্যানুয়ালি আপডেট করুন।", + "restartNotice": "এই পৃষ্ঠা বন্ধ করবেন না। সিস্টেমটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে।", + "reloadNow": "এখন রিফ্রেশ করুন", + "closeUpdate": "বন্ধ করুন", + "retryUpdate": "পুনরায় চেষ্টা করুন", + "updateAvailableTitle": "আপডেট উপলব্ধ: v{version}{desktop}", + "desktopAppLabel": "(ডেস্কটপ অ্যাপ)", + "checkingForUpdates": "আপডেট যাচাই করা হচ্ছে...", + "versionAvailableForDownload": "সংস্করণ v{version} ডাউনলোডের জন্য উপলব্ধ।", + "downloadingUpdate": "আপডেট ডাউনলোড হচ্ছে... {percent}% সম্পন্ন।", + "updateDownloaded": "ডাউনলোড সফলভাবে আপডেট হয়েছে! প্রয়োগ করতে ক্লিক করুন পুনরায় শুরু করুন এবং ইনস্টল করুন।", + "autoUpdateFailed": "অটো-আপডেট ব্যর্থ হয়েছে: {reason}.", + "unknownUpdateError": "অজানা ত্রুটি", + "versionAvailableDesktop": "ডেস্কটপ অ্যাপের জন্য সংস্করণ v{version} উপলব্ধ।", + "manualUpdateRequired": "এই ইনস্টলেশন টাইপের জন্য ম্যানুয়াল আপডেট প্রয়োজন।", + "restartAndInstall": "পুনরায় শুরু করুন এবং ইনস্টল করুন", + "checkForUpdate": "আপডেটের জন্য পরীক্ষা করুন", + "manualUpdate": "ম্যানুয়াল আপডেট", + "directDownloadHint": "অথবা সংশ্লিষ্ট ইনস্টলার ফরম্যাটটি সরাসরি ডাউনলোড করুন:", + "releaseNotes": "রিলিজ নোটস", + "readMore": "আরও পড়ুন", + "noAuthLabel": "কোন প্রমাণীকরণ নেই" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "এই অনুরোধের আশেপাশের সংরক্ষিত কল লগ থেকে অনুমান করা হয়েছে", "routeRecommendations": "সুপারিশসমূহ", "routeLimitations": "সীমাবদ্ধতাসমূহ", - "routeNoKnownLimitations": "এই ব্যাখ্যার জন্য কোনো পরিচিত সীমাবদ্ধতা নেই।" + "routeNoKnownLimitations": "এই ব্যাখ্যার জন্য কোনো পরিচিত সীমাবদ্ধতা নেই।", + "searchAnalyticsLoading": "সার্চ অ্যানালিটিক্স লোড হচ্ছে…", + "searchAnalyticsNoData": "এখনো কোনো অনুসন্ধান ডেটা উপলব্ধ নেই।", + "searchAnalyticsNoDataDescription": "প্রথম অনুসন্ধানের পর অনুসন্ধান অনুরোধগুলি এখানে প্রদর্শিত হবে /v1/search এর মাধ্যমে।", + "searchAnalyticsToday": "{count} আজ", + "searchAnalyticsCachedRequests": "{count} ক্যাশ করা অনুরোধ", + "searchAnalyticsApiCosts": "সার্চ API খরচ", + "searchAnalyticsErrors": "{count} ত্রুটি", + "searchAnalyticsNoErrors": "কোন ত্রুটি নেই", + "searchAnalyticsProviderBreakdown": "প্রদাতা বিশ্লেষণ", + "searchAnalyticsQueries": "অনুসন্ধানগুলি", + "searchAnalyticsEmptyDescription": "POST /v1/search ব্যবহার করে ওয়েব অনুসন্ধান শুরু করুন।", + "searchAnalyticsFreeTier": "ফ্রি টিয়ার উপলব্ধ: Serper (2,500/মাস), Brave (2,000/মাস), Exa (1,000/মাস), Tavily (1,000/মাস) — মোট 6,500+ ফ্রি সার্চ/মাস স্বয়ংক্রিয় ফেইলওভারের সাথে।", + "autoRoutingNoDataAvailable": "কোনও অটো-রাউটিং বিশ্লেষণ উপলব্ধ নেই। মেট্রিক্স দেখতে অটো/ পূর্বসূরি ব্যবহার করে অনুরোধ করুন।", + "defaultVariantLabel": "ডিফল্ট", + "freeTierAvailable": "ফ্রি টিয়ার উপলব্ধ" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count}টি প্রোভাইডার", "imageToTextBridgeAvailable": "মোডালিটি ব্রিজ এখন টেক্সট-শুধু মডেলের জন্য চিত্র বর্ণনা করতে পারে। /api/v1/images/understanding বাস্তবায়িত হলে ইনলাইন প্লেগ্রাউন্ড উপলব্ধ হবে।", "imageToTextBridgeCta": "Modality Bridge সেটিংসে Image→Text ব্রিজ কনফিগার করুন", - "sttBridgeCta": "Modality Bridge সেটিংসে Speech→Text ব্রিজ কনফিগার করুন" + "sttBridgeCta": "Modality Bridge সেটিংসে Speech→Text ব্রিজ কনফিগার করুন", + "existingConnection": "বিদ্যমান সংযোগ", + "openrouterSttDescription": "OpenRouter স্পিচ-টু-টেক্সট মডেলগুলি আপনার কনফিগার করা OpenRouter সংযোগ ব্যবহার করে। আলাদা কোনো শংসাপত্রের প্রয়োজন নেই।" }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "এতে পেস্ট করুন:", "copilotReloadInstruction": "তারপর VS Code রিলোড করুন এবং ইনপুট প্রম্পটে API কী সেট করুন।", "wireApiChatCompletions": "চ্যাট সমাপ্তি (/চ্যাট/সম্পূর্ণতা)", - "wireApiResponses": "প্রতিক্রিয়া API (/প্রতিক্রিয়া)" + "wireApiResponses": "প্রতিক্রিয়া API (/প্রতিক্রিয়া)", + "cliproxyapiActionFailed": "কার্য সম্পন্ন হয়নি", + "cliproxyapiActionSucceeded": "কার্য সফল হয়েছে", + "cliproxyapiCheckUpdates": "আপডেট পরীক্ষা করুন", + "cliproxyapiDescription": "আপস্ট্রিম প্রক্সি ফFallback (Go-ভিত্তিক OAuth)", + "cliproxyapiHealth": "স্বাস্থ্য", + "cliproxyapiHealthy": "স্বাস্থ্যকর", + "cliproxyapiInstall": "ইনস্টল করুন", + "cliproxyapiNotInstalledValue": "ইনস্টল করা হয়নি", + "cliproxyapiPort": "পোর্ট", + "cliproxyapiRequestFailed": "অনুরোধ ব্যর্থ হয়েছে", + "cliproxyapiRestart": "পুনরায় শুরু করুন", + "cliproxyapiStart": "শুরু করুন", + "cliproxyapiStatusError": "ত্রুটি", + "cliproxyapiStatusInstalled": "ইনস্টল করা হয়েছে", + "cliproxyapiStatusNotInstalled": "ইনস্টল করা হয়নি", + "cliproxyapiStatusRunning": "চালানো", + "cliproxyapiStatusStopped": "বিরত হয়েছে", + "cliproxyapiStop": "বিরতি", + "cliproxyapiUnhealthy": "অস্বাস্থ্যকর", + "cliproxyapiUnknown": "অজানা", + "cliproxyapiUpdate": "আপডেট", + "cliproxyapiUpdateAvailable": "আপডেট উপলব্ধ: v{current} → v{latest}", + "cliproxyapiVersion": "সংস্করণ" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "কেবল কোটা শেষ হলে অগ্রসর হন", + "fallbackOnlyOnQuotaExhaustionShort": "কোটার-শুধুমাত্র ব্যাকআপ", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "মোড প্যাক এবং ওয়েটিং এখানে থাকে; ব্রেকার রানটাইম স্টেট Health পেজে থাকে।", "emailVisibilityHint": "এখানকার অ্যাকাউন্ট ইমেলগুলো গ্লোবাল প্রাইভেসি টগল অনুসরণ করে।", "emailVisibilityTooltip": "কম্বো, প্রোভাইডার এবং কোটা স্ক্রিন জুড়ে গ্লোবালভাবে অ্যাকাউন্ট ইমেলগুলো দেখাতে বা লুকাতে চোখের আইকনটি ব্যবহার করুন।", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "ধাপে ধাপে (প্রোভাইডার → মডেল)", + "builderModeGlobal": "গ্লোবাল মডেল সার্চ (কাস্টম কম্বো)", + "builderGlobalSearchPlaceholder": "সব প্রদানকারীর মধ্যে মডেলগুলি অনুসন্ধান করুন (যেমন opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "সব যোগ করুন", + "builderGlobalShortcuts": "শর্টকাট:", + "builderGlobalNoResults": "\"{query}\" এর জন্য কোন মডেল পাওয়া যায়নি।", + "builderGlobalProviderLabel": "প্রদানকারী:", + "builderGlobalAccountCount": "{count, plural, one {# অ্যাকাউন্ট} other {# অ্যাকাউন্ট}}", + "builderGlobalAdded": "যোগ করা হয়েছে", + "builderGlobalAdd": "যোগ করুন", "manualModel": "ম্যানুয়াল মডেল", "manualModelInvalid": "provider/model হিসেবে একটি মডেল লিখুন।", "manualModelUnknownProvider": "অজানা প্রোভাইডার প্রিফিক্স।", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "সেশন উপলব্ধতা", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "স্টিকিনেস বন্ধ", "kimiPresetTitle": "Kimi Coding প্রিসেট", "kimiPresetDescription": "প্রধান মডেল হিসেবে Kimi K3 (Moonshot API), কনফিগার করা থাকলে আপনার Kimi Code কানেকশনগুলোতে (kimi-coding, kimi-web) অটোমেটিক ফলব্যাক সহ।", - "kimiPresetCta": "প্রিসেট যোগ করুন" + "kimiPresetCta": "প্রিসেট যোগ করুন", + "intelligentComboCount": "{count, plural, one {# বুদ্ধিমান কম্বো} other {# বুদ্ধিমান কম্বোগুলি}}", + "providersInScope": "{count, plural, one {# প্রদানকারী পরিধিতে} other {# প্রদানকারীরা পরিধিতে}}", + "savingModePack": "সংরক্ষণ করা হচ্ছে {pack}…", + "errorTitle": "কম্বো লোড করতে ব্যর্থ হয়েছে", + "errorDescription": "আমরা এখন কম্বো ডেটা লোড করতে পারিনি। আপনার সংযোগ পরীক্ষা করুন এবং আবার চেষ্টা করুন।", + "errorId": "ত্রুটি আইডি: {id}", + "errorRetry": "পুনরায় চেষ্টা করুন", + "comboLabel": "কম্বো" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "ব্যবহারকারীর নাম", "obsidianPassword": "পাসওয়ার্ড", - "obsidianTailscaleHint": "মোবাইল থেকে সংযোগ করার সময় localhost-এর পরিবর্তে আপনার Tailscale IP ব্যবহার করুন। উভয় ডিভাইস অবশ্যই একই Tailscale নেটওয়ার্কে থাকতে হবে।" + "obsidianTailscaleHint": "মোবাইল থেকে সংযোগ করার সময় localhost-এর পরিবর্তে আপনার Tailscale IP ব্যবহার করুন। উভয় ডিভাইস অবশ্যই একই Tailscale নেটওয়ার্কে থাকতে হবে।", + "cloudSyncNotConfigured": "এই ইনস্ট্যান্সে ক্লাউড সিঙ্ক কনফিগার করা হয়নি।", + "notionConnect": "সংযোগ করুন", + "notionConnectFailed": "সংযোগ করতে ব্যর্থ হয়েছে", + "notionConnected": "সংযুক্ত", + "notionConnectionFailed": "সংযোগ ব্যর্থ হয়েছে", + "notionDescription": "Notion এর মাধ্যমে রাউটেড AI মডেলগুলোর মাধ্যমে অনুসন্ধান করুন, পড়ুন, প্রশ্ন করুন এবং লিখুন", + "notionDisconnect": "সংযোগ বিচ্ছিন্ন করুন", + "notionDisconnectFailed": "সংযোগ বিচ্ছিন্ন করতে ব্যর্থ হয়েছে", + "notionEnterToken": "দয়া করে একটি Notion ইন্টিগ্রেশন টোকেন প্রবেশ করুন", + "notionIntegrationHelp": "একটি অভ্যন্তরীণ ইন্টিগ্রেশন তৈরি করুন at", + "notionIntegrationToken": "নোটশন অভ্যন্তরীণ ইন্টিগ্রেশন টোকেন", + "notionNotConnected": "সংযুক্ত নয়", + "notionTokenConfigured": "টোকেন কনফিগার করা হয়েছে। Notion টুলগুলি MCP এর মাধ্যমে উপলব্ধ।" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "প্রোভাইডার / মডেল", "noRemoteProviders": "কনফিগার করা API কী সহ কোনো প্রোভাইডার নেই", "selectProviderModel": "একটি মডেল নির্বাচন করুন", + "customBaseUrlLabel": "কাস্টম বেস URL (ঐচ্ছিক)", + "customModelIdLabel": "কাস্টম মডেল আইডি (ঐচ্ছিক)", + "customEndpointHelp": "একটি OpenAI-সঙ্গত /embeddings এন্ডপয়েন্ট ব্যবহার করুন। স্থানীয় এন্ডপয়েন্টগুলি অনুমোদিত; ক্লাউড মেটাডেটা লক্ষ্যগুলি ব্লক করা হয়েছে।", + "customEndpointSave": "কাস্টম এন্ডপয়েন্ট প্রয়োগ করুন", + "customEndpointInvalid": "একটি বৈধ HTTP(S) বেস URL এবং একটি মডেল ID প্রবেশ করুন, অথবা উভয় ক্ষেত্রই খালি রাখুন।", + "customEndpointSaveFailed": "কাস্টম এম্বেডিং এন্ডপয়েন্ট সংরক্ষণ করা যায়নি।", "staticEnabledLabel": "Static Potion সক্ষম করুন", "staticEnabledDesc": "স্থানীয়ভাবে potion-base-8M মডেল ডাউনলোড এবং ব্যবহার করুন", "transformersEnabledLabel": "Enable Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "পরিষ্কার করা হচ্ছে...", "cleanNow": "এখনই পরিষ্কার করুন", "cleanupSuccess": "{count}টি পয়েন্ট সরানো হয়েছে", - "cleanupFailed": "পরিষ্কার করা ব্যর্থ হয়েছে" + "cleanupFailed": "পরিষ্কার করা ব্যর্থ হয়েছে", + "hostLabel": "হোস্ট", + "collectionLabel": "সংগ্রহ" }, "rerank": { "enableLabel": "Rerank সক্ষম করুন", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-স্তরের ফলব্যাক ডায়াগ্রাম", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "ফ্রি প্রোভাইডার সেট আপ করুন", + "description": "বিকল্পভাবে নির্বাচিত কোন-সাইনআপ প্রদানকারীদের সক্ষম করুন। এগিয়ে যাওয়ার আগে প্রতিটি প্রদানকারীর বিজ্ঞপ্তি এবং সাইট পর্যালোচনা করুন; উপলব্ধতা এবং হার সীমা তৃতীয় পক্ষ দ্বারা নিয়ন্ত্রিত।", + "loading": "ফ্রি প্রোভাইডার লোড হচ্ছে...", + "loadFailed": "মুক্ত প্রদানকারীরা লোড করা যায়নি।", + "alreadyConfigured": "সমস্ত যোগ্য ফ্রি প্রদানকারী ইতিমধ্যে কনফিগার করা হয়েছে।", + "reviewProviderSite": "প্রদানকারী সাইট এবং শর্তাবলী পর্যালোচনা করুন", + "confirmation": "আমি এই তৃতীয় পক্ষের প্রদানকারীদের পর্যালোচনা করেছি এবং OmniRoute-কে নির্বাচিত সংযোগগুলি তৈরি করতে চাই।", + "setupSelected": "নির্বাচিত প্রদানকারীদের সেট আপ করুন", + "settingUp": "সেটিং আপ হচ্ছে...", + "setupFailed": "নির্বাচিত প্রদানকারীদের সেট আপ করা যায়নি। বিদ্যমান কিছুই পরিবর্তিত হয়নি।", + "retryFailed": "ব্যর্থ প্রদানকারীদের পুনরায় চেষ্টা করুন", + "orUseApiKey": "অথবা একটি API কী দিয়ে সংযোগ করুন", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "তৈরি করা হয়েছে", + "skipped": "আগে থেকেই কনফিগার করা আছে", + "failed": "ব্যর্থ" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "আইকন URL", "iconUrlHint": "ঐচ্ছিক। এই প্রদানকারীর আইকন হিসেবে দেখানোর জন্য ছবির URL।", + "iconUrlInvalid": "অবৈধ আইকন URL। একটি http(s):// অথবা data:image/*;base64 URL ব্যবহার করুন।", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "এই প্রদানকারীর মডেলগুলি claude/<provider>/<model> মিরর আইডির অধীনে বিজ্ঞাপন দিন যাতে Claude Code-এর গেটওয়ে মডেল আবিষ্কার সেগুলি তালিকাভুক্ত করতে পারে। ডিফল্টভাবে বন্ধ — এটি সক্ষম করা হলে সমস্ত ক্লায়েন্টের জন্য ক্যাটালগের এন্ট্রি দ্বিগুণ হয়।", "ccAliasProviderLevelLabel": "প্রদানকারী ডিফল্ট", "ccAliasModelOverridesLabel": "প্রতি-মডেল ওভাররাইডস", - "ccAliasModelOverrideAriaLabel": "{name} এর জন্য ওভাররাইড", + "ccAliasModelOverrideAriaLabel": "{modelId} এর জন্য ওভাররাইড", "ccAliasStateInherit": "উত্তরাধিকারী", "ccAliasStateOn": "চালু", "ccAliasStateOff": "বন্ধ", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "সেশন ইতিমধ্যে বর্তমান", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "প্রমাণীকরণ প্রয়োগ করুন", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API কী পেস্ট করুন…", "zedSaving": "সেভ করা হচ্ছে…", "zedImportAction": "ইম্পোর্ট করুন", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "স্বয়ংক্রিয় কার্সর সেশন নবীকরণ সক্ষম করুন", + "cursorAgentNudgeBody": "স্বয়ংক্রিয় সেশন নবীকরণের জন্য cursor-agent ইনস্টল করুন — এর ছাড়া, Cursor সংযোগগুলি প্রতি 24 ঘন্টায় প্রায় সময় সময়কালীন ম্যানুয়াল পুনঃসংযোগের প্রয়োজন।", + "cursorAgentNudgeDismiss": "অবহেলা করুন", "zedManualImportFailed": "ম্যানুয়াল ইম্পোর্ট ব্যর্থ হয়েছে", "zedManualImportSuccess": "Zed থেকে {provider} টোকেন ইম্পোর্ট করা হয়েছে", "grokImportTitle": "Grok Build Auth ইম্পোর্ট করুন", @@ -5878,7 +6066,6 @@ "friendliai": "সার্ভারলেস ইনফারেন্সের জন্য ফ্রি টিয়ার — কোনো ক্রেডিট কার্ডের প্রয়োজন নেই", "gemini": "চিরকালের জন্য ফ্রি: Gemini 2.5 Flash-এর জন্য প্রতিদিন 1,500টি রিকোয়েস্ট — কোনো ক্রেডিট কার্ড লাগবে না, aistudio.google.com থেকে কী পান", "gigachat": "একটি API কী দিয়ে GigaChat (Sber) কানেক্ট করুন।", - "github-models": "github.com/settings/tokens-এ 'models: read' স্কোপ সহ একটি GitHub PAT তৈরি করুন", "gitlab": "পাবলিক Code Suggestions API-এর জন্য GitLab পার্সোনাল অ্যাক্সেস টোকেন। gitlab.com ব্যবহার না করার সময় একটি সেলফ-হোস্টেড বেস URL কনফিগার করুন।", "gitlawb-gmi": "Gitlawb Opengateway ড্যাশবোর্ড থেকে আপনার API কী পান।", "gitlawb": "Gitlawb Opengateway ড্যাশবোর্ড থেকে আপনার API কী পান।", @@ -6017,7 +6204,8 @@ "kimi-coding": "বিদ্যমান OAuth ফ্লো দিয়ে Kimi Coding সংযুক্ত করুন।", "kiro": "ফ্রি টিয়ার: 50 ক্রেডিট/মাস (~25K–100K টোকেন)। ⚠️ Kiro ToS তৃতীয় পক্ষের প্রক্সি/হারনেস ব্যবহার নিষিদ্ধ করে।", "codex": "বিদ্যমান OAuth ফ্লো-এর সাথে OpenAI Codex সংযুক্ত করুন।", - "qwen": "বিদ্যমান OAuth ফ্লো-এর সাথে Qwen Code সংযুক্ত করুন।" + "qwen": "বিদ্যমান OAuth ফ্লো-এর সাথে Qwen Code সংযুক্ত করুন।", + "github-models": "github.com/settings/tokens-এ 'models: read' স্কোপ সহ একটি GitHub PAT তৈরি করুন" }, "passthroughModelsDescription": "{provider} প্রদানকারী-নেটিভ মডেল আইডি গ্রহণ করে। /মডেল থেকে আমদানি করুন বা রাউটিং এর জন্য কাস্টম আইডি যোগ করুন।", "bedrockModelsDescription": "অ্যামাজন বেডরক মডেলগুলি AWS অঞ্চল দ্বারা স্কোপ করা হয়েছে৷ /মডেল থেকে আমদানি করুন বা নির্বাচিত অঞ্চলে সক্ষম বেডরক মডেল আইডি যোগ করুন।", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "পার্টনার লিঙ্ক — আপনার কোনো অতিরিক্ত খরচ ছাড়াই OmniRoute-কে সমর্থন করে", "anonymousFallbackTitle": "অজ্ঞাত ফালব্যাক", "anonymousFallbackDesc": "যখন সমস্ত কনফিগার করা সংযোগ শেষ হয়ে যায় (কোটা, ক্রেডিট, বা মেয়াদ শেষ), এই প্রদানকারীর কীবিহীন স্তরটি অস্থায়ীভাবে ব্যবহার করুন। অজ্ঞাত অনুরোধ পাঠানোর পরিবর্তে এই প্রদানকারীটি বাদ দিতে বন্ধ করুন — যখন কীবিহীন স্তর সেগুলি প্রত্যাখ্যান করে (401) তখন এটি সুপারিশ করা হয়।", - "anonymousFallbackEnabled": "{name} এর জন্য অজ্ঞাত ফFallback সক্রিয় করা হয়েছে", + "anonymousFallbackEnabled": "{provider} এর জন্য অজ্ঞাত ফFallback সক্রিয় করা হয়েছে", "anonymousFallbackDisabled": "{provider} এর জন্য অজ্ঞাত ফ্যালব্যাক নিষ্ক্রিয় — শেষ হওয়া সংযোগগুলি এই প্রদানকারীকে বাদ দেবে", - "anonymousFallbackUpdateFailed": "গোপন ফallback সেটিং আপডেট করতে ব্যর্থ হয়েছে" + "anonymousFallbackUpdateFailed": "গোপন ফallback সেটিং আপডেট করতে ব্যর্থ হয়েছে", + "batchDeleteFailed": "ব্যাচ মুছে ফেলা ব্যর্থ হয়েছে", + "batchDeleteNetworkError": "ব্যাচ মুছে ফেলার সময় নেটওয়ার্ক ত্রুটি", + "batchUpdateFailed": "ব্যাচ আপডেট ব্যর্থ হয়েছে", + "batchUpdateNetworkError": "ব্যাচ আপডেটের সময় নেটওয়ার্ক ত্রুটি", + "categoryAudio": "অডিও", + "categoryCloudAgent": "ক্লাউড এজেন্ট", + "categoryIde": "আইডিই", + "categoryLocal": "স্থানীয়", + "categorySearch": "অনুসন্ধান", + "categoryWebCookie": "ওয়েব কুকি", + "claudeExtraUsageBlockingDisabled": "Claude অতিরিক্ত ব্যবহার ব্লক করা নিষ্ক্রিয় (অতিরিক্ত ব্যবহার অনুমোদিত)", + "claudeExtraUsageBlockingEnabled": "Claude অতিরিক্ত ব্যবহার ব্লক করা হয়েছে (অতিরিক্ত ব্যবহার ব্লক করা হবে)", + "claudeRoutingPreferenceDisabled": "অপ্রিফিক্সড ক্লড মডেলগুলি আর ক্লড কোডকে প্রাধান্য দেয় না", + "claudeRoutingPreferenceEnabled": "অপ্রিফিক্সড ক্লড মডেলগুলি এখন ক্লড কোডকে অগ্রাধিকার দেয়", + "clearMediaFilter": "পরিষ্কার করুন", + "cliproxyRoutingDisabled": "অনুরোধগুলি এখন নেটিভ OmniRoute (সরাসরি) ব্যবহার করে", + "cliproxyRoutingEnabled": "এখন অনুরোধগুলি CLIProxyAPI (গভীর এমুলেশন) এর মাধ্যমে রুট করা হয়", + "codexLimitPolicyUpdated": "কোডেক্স সীমা নীতি আপডেট করা হয়েছে", + "codexServiceModeUpdated": "কোডেক্স সার্ভিস মোড আপডেট করা হয়েছে", + "codexServiceTierActive": "Codex {tier} সার্ভিস টিয়ার সক্রিয় আছে", + "codexTierFastLabel": "দ্রুত", + "codexTierFlexLabel": "ফ্লেক্স", + "commandCodeApplyFailed": "কমান্ড কোড প্রমাণীকরণ প্রয়োগ করতে ব্যর্থ হয়েছে", + "commandCodeApplyingApproval": "ব্রাউজার অনুমোদিত, প্রয়োগ করা হচ্ছে…", + "commandCodeApplyingKey": "ব্রাউজার-অনুমোদিত কী প্রয়োগ করা হচ্ছে…", + "commandCodeApprovalInstructions": "অথরাইজেশন URL খুলুন, অ্যাক্সেস অনুমোদন করুন, তারপর নিচে ফেরত দেওয়া কী/JSON/URL পেস্ট করুন…", + "commandCodeAuthExpired": "কমান্ড কোড প্রমাণীকরণ মেয়াদ শেষ হয়েছে", + "commandCodeConnected": "কমান্ড কোড সংযুক্ত হয়েছে", + "commandCodeConnectionAdded": "কমান্ড কোড সংযোগ যোগ করা হয়েছে", + "commandCodeLinkExpired": "কমান্ড কোডের লিঙ্ক মেয়াদ শেষ হয়ে গেছে", + "commandCodeOpeningStudio": "কমান্ড কোড স্টুডিও খুলছে…", + "commandCodePopupBlocked": "পপআপ ব্লক করা হয়েছে। দয়া করে পপআপগুলি অনুমোদন করুন এবং আবার Command Code Connect চেষ্টা করুন।", + "commandCodeStartFailed": "Command Code auth শুরু করতে ব্যর্থ হয়েছে", + "connectionDeleted": "সংযোগ মুছে ফেলা হয়েছে", + "connectionFallback": "সংযোগ", + "coolingConnectionsDescription": "এই সংযোগগুলি তাদের শেষ অনুরোধে 429 (রেট-লিমিট) ফিরিয়ে দিয়েছে। OmniRoute সেগুলি সময়সীমা শেষ হওয়া পর্যন্ত বাদ দেবে — কোন ম্যানুয়াল নিষ্ক্রিয়করণ প্রয়োজন নেই।", + "coolingConnectionsTitle": "বর্তমানে শীতলকরণ ({count})", + "failedDeleteAlias": "অ্যালিয়াস মুছতে ব্যর্থ হয়েছে", + "failedDeleteConnection": "সংযোগ মুছতে ব্যর্থ হয়েছে", + "failedDistributeProxies": "প্রক্সি বিতরণ করতে ব্যর্থ হয়েছে।", + "failedSaveModelEndpointSettings": "মডেল এন্ডপয়েন্ট সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে", + "failedUpdateClaudeExtraUsagePolicy": "Claude অতিরিক্ত-ব্যবহার নীতি আপডেট করতে ব্যর্থ হয়েছে", + "failedUpdateClaudeRoutingPreference": "Claude কোড রাউটিং পছন্দ আপডেট করতে ব্যর্থ হয়েছে", + "failedUpdateCliproxyRouting": "CLIProxyAPI রাউটিং আপডেট করতে ব্যর্থ হয়েছে", + "failedUpdateCodexLimitPolicy": "Codex সীমা নীতি আপডেট করতে ব্যর্থ হয়েছে", + "failedUpdateCodexServiceMode": "Codex সার্ভিস মোড আপডেট করতে ব্যর্থ হয়েছে", + "filterByMedia": "মিডিয়া", + "freeBadge": "মুক্ত", + "kimiCodeApiKeyLabel": "কিমি কোড এপিআই কী", + "modelTestFailed": "মডেল পরীক্ষায় ব্যর্থ হয়েছে", + "modelTestNetworkError": "নেটওয়ার্ক ত্রুটি পরীক্ষার মডেল", + "networkError": "নেটওয়ার্ক ত্রুটি", + "networkErrorDeletingAlias": "অ্যালিয়াস মুছে ফেলার সময় নেটওয়ার্ক ত্রুটি", + "networkErrorSettingAlias": "অ্যালিয়াস সেট করার সময় নেটওয়ার্ক ত্রুটি", + "noProvidersMatch": "আপনার অনুসন্ধানের সাথে মেলানো কোনো প্রদানকারী নেই।", + "noSavedProxies": "কোনো সংরক্ষিত প্রক্সি পাওয়া যায়নি। প্রথমে সেটিংস → প্রক্সিতে প্রক্সি যোগ করুন।", + "pageLoadErrorDescription": "আমরা এখন প্রোভাইডার ডেটা লোড করতে পারিনি। আপনার সংযোগ পরীক্ষা করুন এবং আবার চেষ্টা করুন।", + "pageLoadErrorId": "ত্রুটি আইডি: {id}", + "pageLoadErrorRetry": "পুনরায় চেষ্টা করুন", + "pageLoadErrorTitle": "প্রোভাইডারগুলি লোড করতে ব্যর্থ হয়েছে", + "playgroundTitle": "প্লেগ্রাউন্ড", + "providerDetailConnectionFlexActive": "এই সংযোগের জন্য Codex flex পরিষেবা স্তর সক্রিয় রয়েছে", + "providerDetailConnectionPriorityActive": "কোডেক্স প্রায়োরিটি সার্ভিস টিয়ার এই সংযোগের জন্য সক্রিয় রয়েছে", + "providerDetailGlobalFlexActive": "গ্লোবাল কোডেক্স ফ্লেক্স সার্ভিস টিয়ার সক্রিয় আছে", + "providerDetailGlobalPriorityActive": "গ্লোবাল কোডেক্স প্রাধান্য সেবা স্তর সক্রিয় আছে", + "proxiesDistributed": "Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", + "rerankEndpoint": "পুনর্‌ক্রমবিন্যাস", + "savedModelEndpointSettings": "সংরক্ষিত মডেল এন্ডপয়েন্ট সেটিংস", + "searchByModelAria": "মডেল দ্বারা অনুসন্ধান করুন", + "selectSupportedEndpoint": "কমপক্ষে একটি সমর্থিত এন্ডপয়েন্ট নির্বাচন করুন", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "সদস্যতা তালিকা লোড করতে ব্যর্থ হয়েছে", "toggleFailed": "সুইচ টগল করতে ব্যর্থ হয়েছে৷", "refreshFailed": "রিফ্রেশ করতে ব্যর্থ হয়েছে", - "deleteFailed": "মুছে ফেলতে ব্যর্থ হয়েছে৷" + "deleteFailed": "মুছে ফেলতে ব্যর্থ হয়েছে৷", + "add": "যোগ করুন", + "cancel": "বাতিল করুন", + "configure": "কনফিগার করুন", + "copyEndpoint": "এন্ডপয়েন্ট কপি করুন", + "coreEndpointHint": "কোর এন্ডপয়েন্ট হিন্ট", + "coreNodesHint": "কোর নোডস হিন্ট", + "create": "তৈরি করুন", + "deleteConfirm": "মুছে ফেলার নিশ্চিতকরণ", + "empty": "খালি", + "globalModeDescription": "গ্লোবাল মোড বর্ণনা", + "localCoreHint": "স্থানীয় কোর সূচনা", + "nodeSummary": "নোড সারসংক্ষেপ", + "providerRequired": "প্রদানকারী প্রয়োজন", + "providerRouting": "প্রোভাইডার রাউটিং", + "refresh": "রিফ্রেশ", + "refreshInterval": "রিফ্রেশ ইন্টারভ্যাল", + "ruleModeDescription": "নিয়ম মোড বর্ণনা" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "ইমেজ অনুরোধগুলো শুধুমাত্র-টেক্সট মডেলগুলোতে রুট করার আগে একটি স্বয়ংক্রিয় ভিশন-টু-টেক্সট (vision-to-text) ফলব্যাক চালান।", "visionBridgeEnabledLabel": "সক্ষম করা হয়েছে", "visionBridgeEnabledDesc": "প্রি-কল ব্রিজটি টগল করুন যা ইমেজের অংশগুলোকে এক্সট্র্যাক্ট করা টেক্সট দিয়ে প্রতিস্থাপন করে।", + "visionBridgeRerouteTextOnlyLabel": "টেক্সট-শুধু মডেলগুলি পুনঃনির্দেশ করুন", + "visionBridgeRerouteTextOnlyDesc": "নির্বাচিত মডেলের কোনো ইমেজ ইনপুট না থাকলে, ইমেজসহ সম্পূর্ণ অনুরোধটি ব্রিজ মডেলে পাঠান।", "visionBridgeModel": "সেতু মডেল", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "ভিশন সমর্থন করে এমন যেকোনো OmniRoute মডেল আইডি এখানে ব্যবহার করা যেতে পারে।", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API কী-তে manage স্কোপ নেই।", "BYPASS_PREFIX_NOT_ALLOWED": "এক বা একাধিক প্রিফিক্স স্পন-সক্ষম রুটকে লক্ষ্য করে এবং এড়ানো যাবে না।", "GENERIC": "authz সেটিংস আপডেট করতে ব্যর্থ হয়েছে।" - } + }, + "remove": "অপসারণ করুন" }, "resilienceBaseCooldownLabel": "বেস কুলডাউন", "scopeLabel": "ব্যাপ্তি", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "অডিও পরীক্ষা করা হচ্ছে…", "modalityBridgeAudioTestOk": "অডিও ব্রিজ ঠিক আছে — {count} ক্লিপ(গুলি) {model} দ্বারা ট্রান্সক্রাইব করা হয়েছে", "modalityBridgeAudioTestNoop": "অডিও ব্রিজ সক্রিয় হয়নি (লক্ষ্য অডিও সমর্থন করতে পারে, কোন STT প্রদানকারী সংযুক্ত নয়, অথবা ব্রিজ নিষ্ক্রিয় রয়েছে)", - "modalityBridgeAudioTestError": "অডিও পরীক্ষা ব্যর্থ: {message}" + "modalityBridgeAudioTestError": "অডিও পরীক্ষা ব্যর্থ: {message}", + "modelRoutingDescriptionPlaceholder": "ফ্রন্টিয়ার কম্বোর জন্য রুট অপাস মডেলগুলি", + "cliproxyapiFallbackCodes": "Cliproxyapi ফ্যালব্যাক কোডস", + "cliproxyapiFallbackDescription": "ক্লিপ্রক্সি এপিআই ফ্যালব্যাক বর্ণনা", + "cliproxyapiHealthLabel": "ক্লিপ্রক্সি এপিআই স্বাস্থ্য লেবেল", + "cliproxyapiImportFailed": "Cliproxyapi আমদানি ব্যর্থ হয়েছে", + "cliproxyapiImportResult": "Cliproxyapi আমদানি ফলাফল", + "cliproxyapiInvalidUrl": "Cliproxyapi অবৈধ URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi লাইফসাইকেল নোটিশ পরে", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi লাইফসাইকেল নোটিশ আগে", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi লাইফসাইকেল নোটিশ লিঙ্ক", + "cliproxyapiPortLabel": "ক্লিপ্রক্সি এপিআই পোর্ট লেবেল", + "cliproxyapiStatusLabel": "ক্লিপ্রক্সি এপিআই স্ট্যাটাস লেবেল", + "cliproxyapiVersionLabel": "ক্লিপ্রক্সি এপিআই সংস্করণ লেবেল", + "collection": "সংগ্রহ", + "errorPage": { + "description": "আমরা এখন সেটিংস লোড করতে পারিনি। দয়া করে কয়েক সেকেন্ড পরে আবার চেষ্টা করুন।", + "errorId": "ত্রুটি আইডি: {id}", + "retry": "পুনরায় চেষ্টা করুন", + "title": "সেটিংস লোড করতে ব্যর্থ হয়েছে" + }, + "host": "হোস্ট", + "notInstalled": "ইনস্টল করা হয়নি", + "oneproxyActions": "ওনপ্রক্সি অ্যাকশনস", + "oneproxyActive": "Oneproxy সক্রিয়", + "oneproxyAnonymity": "ওনপ্রক্সি অ্যানোনিমিটি", + "oneproxyCountry": "ওনপ্রক্সি দেশ", + "oneproxyDelete": "Oneproxy মুছুন", + "oneproxyEmpty": "Oneproxy খালি", + "oneproxyHost": "ওনপ্রক্সি হোস্ট", + "oneproxyLatency": "ওনপ্রক্সি লেটেন্সি", + "oneproxyProtocol": "ওনপ্রক্সি প্রোটোকল", + "oneproxyQuality": "ওনপ্রক্সি গুণমান", + "oneproxySyncFailed": "সিঙ্ক ব্যর্থ: {error}", + "oneproxySyncSuccess": "সিঙ্ক করা হয়েছে {total} প্রক্সি ({added} নতুন, {updated} আপডেট করা)", + "proxyDocumentationSocks5DescAfter": "প্রক্সি ডকুমেন্টেশন Socks5 বর্ণনা পরে", + "proxyFreePoolAddProxy": "প্রক্সি ফ্রি পুল যোগ করুন", + "proxyFreePoolAdding": "প্রক্সি ফ্রি পুল যোগ করা", + "proxyFreePoolSelectProxy": "প্রক্সি মুক্ত পুল নির্বাচন করুন", + "proxyStatusActive": "প্রক্সি স্ট্যাটাস সক্রিয়", + "proxyStatusInactive": "প্রক্সি স্ট্যাটাস নিষ্ক্রিয়", + "routingAddEntry": "এন্ট্রি যোগ করুন", + "settingSaveFailed": "সেটিংস সংরক্ষণ ব্যর্থ হয়েছে", + "settingSaved": "সেটিংস সংরক্ষিত হয়েছে", + "skillsmpApiKeyHintAfter": ". রেট সীমা: {limit} অনুরোধ/দিন।", + "skillsmpApiKeyHintBefore": "আপনার API কী পান থেকে", + "syncFailed": "সিঙ্ক ব্যর্থ হয়েছে", + "unhealthy": "অস্বাস্থ্যকর", + "oneproxyDescription": "1proxy কমিউনিটি প্ল্যাটফর্ম থেকে ফ্রি ভ্যালিডেটেড প্রক্সি সংগ্রহ করুন এবং রোটেট করুন", + "oneproxySyncing": "সিঙ্ক হচ্ছে...", + "oneproxySyncNow": "এখন সিঙ্ক করুন", + "oneproxyClearAll": "সব পরিষ্কার করুন", + "oneproxyGoogle": "গুগল", + "oneproxyClearAllConfirm": "সব 1proxy প্রোক্সি মুছে ফেলুন?", + "memorySkillsSkillsmpDescription": "SkillsMP-এ সংযোগ করুন যাতে মার্কেটপ্লেস থেকে দক্ষতা আবিষ্কার এবং ইনস্টল করতে পারেন।", + "memorySkillsActiveProviderDescription": "নির্বাচন করুন কোন প্রদানকারী স্কিলস পৃষ্ঠা অনুসন্ধান এবং ইনস্টল করার জন্য ব্যবহার করে।", + "memorySkillsSkillsmpProviderTitle": "SkillsMP মার্কেটপ্লেস", + "memorySkillsSkillsmpProviderDescription": "প্রমাণিত মার্কেটপ্লেস (আপনার SkillsMP API কী ব্যবহার করে)।", + "memorySkillsSkillsshProviderTitle": "skills.sh ডিরেক্টরি", + "memorySkillsSkillsshProviderDescription": "পাবলিক ডিরেক্টরি প্রদানকারী (কোনও API কী প্রয়োজন নেই)।", + "routingCcBridgeCatalogName": "অ্যানথ্রোপিক-সঙ্গত সিসি ব্রিজ", + "routingClaudeProviderName": "ক্লড (OAuth)", + "routingClaudeProviderDescription": "OAuth-জারি করা টোকেন সহ নেটিভ ক্লড প্রদানকারী।", + "routingCcBridgeName": "ক্লড-কোড ব্রিজ", + "routingCcBridgeDescription": "API কী ব্যবহার করে রিলে এন্ডপয়েন্টগুলি (anthropic-compatible-cc-*)।", + "routingCustomProviderDescription": "কাস্টম প্রদানকারী।", + "routingUnknownOpKind": "অজানা অপ প্রকার: {kind}", + "routingInvalidJson": "অবৈধ JSON: {error}", + "routingConfigMustBeObject": "কনফিগারেশন একটি JSON অবজেক্ট হতে হবে", + "routingEnabledMustBeBoolean": "`enabled` সত্য বা মিথ্যা হতে হবে", + "routingPipelineMustBeArray": "`pipeline` একটি ops এর অ্যারে হতে হবে", + "routingPipelineTooLong": "পাইপলাইন ৫০টি অপসের বেশি হতে পারে না", + "routingOpMissingKind": "অপ #{index}: অনুপস্থিত বা অবৈধ `kind`", + "routingOpUnknownKind": "অপ #{index}: অজানা প্রকার \"{kind}\"", + "routingJsonEditorHide": "JSON সম্পাদক লুকান", + "routingJsonEditorImportExport": "JSON আমদানি / রপ্তানি", + "routingJsonEditorLabel": "JSON (সম্পাদনা করুন এবং প্রয়োগ করুন, অথবা আমদানি করতে পেস্ট করুন)", + "routingApplyJson": "JSON প্রয়োগ করুন", + "routingTransformsFootnote": "সমস্ত ট্রান্সফর্ম অপারেশন পুনরায় চালানোর সময় আইডেম্পোটেন্ট। পরিবর্তনগুলি পরবর্তী অনুরোধে অবিলম্বে কার্যকর হয়।", + "cliproxyapiUnknown": "অজানা", + "cliproxyapiVersion": "সংস্করণ", + "cliproxyapiHealth": "স্বাস্থ্য", + "cliproxyapiPort": "পোর্ট", + "qdrantHost": "হোস্ট", + "qdrantCollection": "সংগ্রহ" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "ফুল", "ultra": "আল্ট্রা" } + }, + "modeOptions": { + "default": "ডিফল্ট", + "off": "বন্ধ", + "lite": "লাইট", + "standard": "মানক", + "aggressive": "আক্রমণাত্মক", + "ultra": "আল্ট্রা", + "responsesToolOutput": "প্রতিক্রিয়া টুল আউটপুট" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "স্ট্যাকের সবার শেষে চলে (RTK/Caveman টেক্সট পরিষ্কার করার পর, OmniGlyph বাকি অংশকে ইমেজে রূপান্তর করে) এবং omniglyph মোডের মাধ্যমে এককভাবেও চলে। এটি একটি প্রিভিউ এবং এন্ড-টু-এন্ড যাচাইকরণ সম্পন্ন না হওয়া পর্যন্ত ডিফল্টরূপে বন্ধ থাকবে।", "saved": "সংরক্ষিত হয়েছে।", "saveFailed": "সংরক্ষণ করা যায়নি।", - "enableAria": "OmniGlyph ইঞ্জিনটি সক্রিয় করুন" + "enableAria": "OmniGlyph ইঞ্জিনটি সক্রিয় করুন", + "title": "OmniGlyph" }, "embeddedServices": { "title": "এমবেডেড সেবাসমূহ", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "সব টোকেন স্বাস্থ্যকর", + "needsAttention": "কিছু টোকেনের যত্ন নেওয়া প্রয়োজন", + "refreshFailures": "টোকেন রিফ্রেশ ব্যর্থতা সনাক্ত করা হয়েছে", + "unknown": "স্বাস্থ্য স্থিতি অজানা" + }, + "systemMonitor": { + "metricsAriaLabel": "সিস্টেম মেট্রিক্স", + "memory": "মেমরি", + "memoryShort": "মেম", + "uptime": "অপেক্ষাকৃত সময়", + "ariaLabel": "সিস্টেম মনিটরিং", + "title": "সিস্টেম মনিটর", + "version": "সংস্করণ", + "connections": "সংযোগগুলি", + "circuitBreakers": "সার্কিট ব্রেকারস", + "open": "{count} খোলা", + "memoryUsage": "মেমরি ব্যবহার" + }, + "never": "কখনোই", + "justNow": "এখনই", + "minutesAgo": "{count}ম আগে", + "hoursAgo": "{count} ঘন্টা আগে", + "tokens": "টোকেনস", + "costs": "খরচ", + "autoRefresh": "অটো রিফ্রেশ ({seconds}s)", + "toggleAutoRefresh": "অটো রিফ্রেশ টগল করুন", + "activeRequests": "সক্রিয় অনুরোধসমূহ", + "totalRequests": "মোট অনুরোধসমূহ", + "totalInputTokens": "মোট ইনপুট টোকেন", + "model": "মডেল", + "provider": "প্রদানকারী", + "requests": "অনুরোধসমূহ", + "lastUsed": "শেষ ব্যবহার করা হয়েছে", + "inputTokens": "ইনপুট টোকেনসমূহ", + "totalTokens": "মোট টোকেন", + "inputCost": "ইনপুট খরচ", + "outputCost": "আউটপুট খরচ", + "noUsageData": "এখনো কোনো ব্যবহার রেকর্ড করা হয়নি। এখানে ডেটা দেখতে কিছু অনুরোধ করুন।", + "account": "অ্যাকাউন্ট", + "accountLabel": "অ্যাকাউন্ট {id}", + "noAccountUsage": "এখনো কোনো অ্যাকাউন্ট-নির্দিষ্ট ব্যবহার রেকর্ড করা হয়নি। এখানে ডেটা দেখতে OAuth অ্যাকাউন্ট ব্যবহার করে অনুরোধ করুন।" }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "অ্যাপ ডেটার মাধ্যমে রিসেট করুন", + "resetViaAppDataDescription": "অ্যাপ ডেটা ডিরেক্টরি থেকে সেটিংস ফাইলটি মুছে ফেলুন আপনার পাসওয়ার্ড রিসেট করতে:", + "quitDesktopApp": "OmniRoute ডেস্ক অ্যাপটি সম্পূর্ণরূপে বন্ধ করুন", + "navigateToAppDataDirectory": "অ্যাপ ডেটা ডিরেক্টরিতে যান:", + "checkSystemAppDataFolder": "(আপনার সিস্টেম অ্যাপ ডেটা ফোল্ডারটি চেক করুন)", + "relaunchDesktopFreshSetup": "OmniRoute ডেস্ক অ্যাপটি পুনরায় চালু করুন — এটি নতুন সেটআপ শুরু করবে", + "alternativeSetPasswordTitle": "বিকল্প: নতুন পাসওয়ার্ড সেট করুন", + "alternativeSetPasswordDescription": "সার্ভার পরিবেশ ফাইলের মাধ্যমে একটি নতুন প্রাথমিক পাসওয়ার্ড সেট করুন:", + "openServerEnvFilePrefix": "খুলুন", + "relaunchDesktopApp": "OmniRoute ডেস্কটপ অ্যাপটি পুনরায় চালু করুন", + "codexLinkInvalidOrExpired": "এই লিঙ্কটি অবৈধ বা মেয়াদ শেষ হয়ে গেছে।", + "codexValidationServerError": "এই লিঙ্কটি যাচাই করার জন্য সার্ভারের সাথে সংযোগ করা যায়নি।", + "codexSaveConnectionError": "সংযোগ সংরক্ষণ করা যায়নি। লিঙ্কটি হয়তো মেয়াদ শেষ হয়ে গেছে।", + "codexDeviceLoginDisabled": "এই OpenAI অ্যাকাউন্টের জন্য ডিভাইস কোড লগইন নিষ্ক্রিয় করা হয়েছে। এটি ChatGPT নিরাপত্তা সেটিংসে সক্রিয় করুন (অথবা আপনার কর্মস্থলের প্রশাসকের কাছে জিজ্ঞাসা করুন)।", + "codexAuthorizationTimedOut": "অধিকারপ্রাপ্তির সময়সীমা শেষ হয়ে গেছে। পুনরায় চেষ্টা করতে আবার শুরু করতে ক্লিক করুন।", + "authenticationCancelled": "প্রমাণীকরণ বাতিল করা হয়েছে।", + "unexpectedAuthenticationError": "প্রমাণীকরণের সময় অপ্রত্যাশিত ত্রুটি। দয়া করে আবার চেষ্টা করুন।", + "connectOpenAiCodexTitle": "OpenAI Codex সংযুক্ত করুন", + "codexConnectDescription": "এই সংযোগটি সম্পূর্ণ করতে একটি ChatGPT অ্যাকাউন্ট অনুমোদন করুন।", + "validatingCodexLink": "লিঙ্ক যাচাই করা হচ্ছে…", + "codexGenerateCodeDescription": "নীচে ক্লিক করুন একটি এককালীন কোড তৈরি করতে, তারপর OpenAI-তে সাইন ইন করুন।", + "startCodexFlow": "শুরু করুন", + "requestingOpenAiCode": "OpenAI থেকে কোডের জন্য অনুরোধ করা হচ্ছে…", + "codexVerificationInstructions": "1. OpenAI যাচাইকরণ পৃষ্ঠা খুলুন এবং 2. এই কোডটি প্রবেশ করুন। আপনি অনুমোদন করার পর এই পৃষ্ঠা স্বয়ংক্রিয়ভাবে আপডেট হয়।", + "yourCode": "আপনার কোড", + "openVerificationPage": "যাচাইকরণ পৃষ্ঠা খুলুন", + "copyUrlShort": "URL কপি করুন", + "savingConnection": "সংযোগ সংরক্ষণ করা হচ্ছে…", + "codexConnected": "সংযুক্ত!", + "codexConnectionRegistered": "Codex অ্যাকাউন্ট নিবন্ধিত হয়েছে। আপনি এই ট্যাবটি বন্ধ করতে পারেন।", + "tryAgain": "আবার চেষ্টা করুন", + "traeAuthorizationSuccess": "ট্রেই অথরাইজেশন ✓", + "traeAuthorizationFailed": "Trae অনুমোদন ব্যর্থ হয়েছে", + "closeAuthorizationWindow": "আপনি এই উইন্ডোটি বন্ধ করতে পারেন।", + "returnToDashboard": "ড্যাশবোর্ডে ফিরে যান।", + "resetViaAppData": "অ্যাপ ডেটা দ্বারা রিসেট করুন", + "deleteSettingsToReset": "অ্যাপ ডেটা ডিরেক্টরি থেকে সেটিংস ফাইলটি মুছে ফেলুন আপনার পাসওয়ার্ড রিসেট করতে:", + "quitAppCompletely": "OmniRoute ডেস্কটপ অ্যাপটি সম্পূর্ণরূপে বন্ধ করুন", + "navigateToAppData": "অ্যাপ ডেটা ডিরেক্টরিতে নেভিগেট করুন", + "checkAppDataFolder": "আপনার সিস্টেম অ্যাপ ডেটা ফোল্ডারটি পরীক্ষা করুন", + "deleteSettingsJson": "মুছে ফেলুন", + "relaunchAppFresh": "OmniRoute ডেস্ক অ্যাপটি পুনরায় চালু করুন — এটি নতুন সেটআপ শুরু করবে", + "alternativeSetPassword": "বিকল্প: নতুন পাসওয়ার্ড সেট করুন", + "setNewPasswordViaEnv": "সার্ভার পরিবেশ ফাইলের মাধ্যমে একটি নতুন প্রাথমিক পাসওয়ার্ড সেট করুন:", + "openServerEnv": "খুলুন", + "inDataDirectory": "ডেটা ডিরেক্টরিতে", + "addOrUpdate": "যোগ করুন বা আপডেট করুন", + "deleteAndRelaunch": "মুছে ফেলুন", + "settingsJson": "settings.json", + "fromDataDir": "ডেটা ডিরেক্টরি থেকে", + "relaunchApp": "OmniRoute ডেস্কটপ অ্যাপটি পুনরায় চালু করুন" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "কোম্পানি", + "pricing": "মূল্য নির্ধারণ", + "apiReference": "এপিআই রেফারেন্স", + "helpCenter": "সাহায্য কেন্দ্র", + "about": "সম্পর্কিত", + "blog": "ব্লগ", + "contact": "যোগাযোগ", + "terms": "শর্তাবলী", + "privacy": "গোপনীয়তা", + "license": "লাইসেন্স", + "footerDescription": "আধুনিক AI অবকাঠামোর জন্য একক ইন্টারফেস। নিরাপদ, পর্যবেক্ষণযোগ্য এবং স্কেলযোগ্য।", + "communityDiscussions": "কমিউনিটি আলোচনা" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute ডকস", + "metadataDefaultTitle": "OmniRoute ডকুমেন্টেশন", + "metadataDescription": "OmniRoute AI গেটওয়ের জন্য ব্যাপক ডকুমেন্টেশন — সেটআপ, API, সংকোচন, মোতায়েন, এবং আরও অনেক কিছু।", + "layoutNavTitle": "OmniRoute ডকস", + "layoutHomeLink": "ডক্স হোম", + "layoutDashboardLink": "← ড্যাশবোর্ডে ফিরে যান", + "homeTitle": "OmniRoute ডকুমেন্টেশন", + "homeMetadataDescription": "আপনার AI রাউট, কম্প্রেস, এবং স্কেল করার জন্য আপনার যা কিছু প্রয়োজন — সেটআপ গাইড, API রেফারেন্স, কম্প্রেশন, ডিপ্লয়মেন্ট, এবং আরও অনেক কিছু।", + "homeTwitterDescription": "OmniRoute AI গেটওয়ের জন্য ব্যাপক ডকস", + "homeDescription": "আপনার AI রাউট, সংকুচিত এবং স্কেল করার জন্য আপনার যা কিছু প্রয়োজন", + "homeSearchHint": "ডকুমেন্টগুলি অনুসন্ধান করতে Ctrl K চাপুন", + "featuredQuickStartTitle": "দ্রুত শুরু", + "featuredQuickStartDescription": "৩ মিনিটের মধ্যে OmniRoute চালু করুন", + "featuredAutoComboTitle": "অটো-কম্বো গাইড", + "featuredAutoComboDescription": "OmniRoute আপনার জন্য সেরা AI নির্বাচন করতে দিন", + "featuredProvidersTitle": "প্রোভাইডারস গাইড", + "featuredProvidersDescription": "মিনিটের মধ্যে AI প্রদানকারীদের সংযুক্ত করুন", + "nonTechUsersTitle": "অপ্রযুক্তিগত ব্যবহারকারীদের জন্য", + "nonTechUsersSubtitle": "দ্রুত শুরু করুন — কোন প্রযুক্তিগত পটভূমির প্রয়োজন নেই", + "techUsersTitle": "প্রযুক্তি ব্যবহারকারীদের জন্য", + "techUsersSubtitle": "স্থাপত্য, API এবং অভ্যন্তরীণ সম্পর্কে গভীরভাবে জানুন", + "apiExplorerMetadataTitle": "এপিআই এক্সপ্লোরার — ওমনি রুট ডক্স", + "apiExplorerMetadataDescription": "ইন্টারেক্টিভ API এক্সপ্লোরার — বাস্তব সময়ের প্রতিক্রিয়ার সাথে OmniRoute এন্ডপয়েন্টগুলি লাইভ চেষ্টা করুন", + "apiExplorerTitle": "এপিআই এক্সপ্লোরার", + "apiExplorerDescription": "OmniRoute এন্ডপয়েন্টগুলি লাইভ চেষ্টা করুন। একটি এন্ডপয়েন্ট নির্বাচন করুন, আপনার অনুরোধ কনফিগার করুন, এবং বাস্তব সময়ে প্রতিক্রিয়া দেখুন।", + "apiExplorerSseStarted": "SSE স্ট্রিম শুরু হয়েছে — রিয়েল-টাইম আউটপুটের জন্য টার্মিনাল/devtools চেক করুন।", + "apiExplorerError": "ত্রুটি: {message}", + "apiExplorerAuth": "প্রমাণীকরণ", + "apiExplorerResponseLabel": "প্রতিক্রিয়া", + "apiExplorerSelectEndpoint": "একটি এন্ডপয়েন্ট নির্বাচন করুন যা আপনি অনুসন্ধান করতে চান", + "apiExplorerChooseApi": "সাইডবার থেকে একটি API নির্বাচন করুন বিস্তারিত দেখতে এবং লাইভ চেষ্টা করতে", + "feedbackThanks": "আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ!", + "feedbackQuestion": "এই পৃষ্ঠা কি সহায়ক ছিল?", + "pageMetadataTitle": "{title} — OmniRoute ডকস", + "pageMetadataDescription": "OmniRoute ডকুমেন্টেশন: {title}", + "breadcrumb": "ব্রেডক্রাম্ব", + "apiReferenceTable": { + "parameters": "প্যারামিটারগুলি", + "name": "নাম", + "type": "টাইপ", + "description": "বিবরণ", + "returns": "ফিরিয়ে দেয়", + "typePrefix": "টাইপ:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth সেশন অসম্পূর্ণ (পুনঃনির্দেশ URI বা কোড যাচাইকরণ অনুপস্থিত)। সংযোগটি পুনরায় শুরু করুন এবং আবার চেষ্টা করুন।", + "errorExchangeFailed": "বিনিময় ব্যর্থ হয়েছে", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: ডিফল্ট Google OAuth শংসাপত্রগুলি শুধুমাত্র localhost-এ কাজ করে। দূরবর্তী ব্যবহারের জন্য, পরিবেশ ভেরিয়েবলগুলির মাধ্যমে আপনার নিজস্ব OAuth শংসাপত্র কনফিগার করুন: ANTIGRAVITY_OAUTH_CLIENT_ID এবং ANTIGRAVITY_OAUTH_CLIENT_SECRET। README বিভাগের 'দূরবর্তী সার্ভারে OAuth' দেখুন।", + "errorSaveFailed": "সংরক্ষণ ব্যর্থ হয়েছে", + "errorAuthorizationFailed": "অনুমোদন ব্যর্থ হয়েছে", + "errorAuthorizationTimeout": "অনুমোদন সময়সীমা", + "errorRequestFailed": "অনুরোধ ব্যর্থ হয়েছে", + "errorCallbackServerFailed": "কলব্যাক সার্ভার শুরু করতে ব্যর্থ হয়েছে", + "errorBrowserUnavailable": "বর্তমান পরিবেশে এই প্রদানকারীর জন্য ব্রাউজার OAuth উপলব্ধ নয়। পরিবর্তে সমর্থিত প্রমাণীকরণ পদ্ধতি ব্যবহার করুন।", + "errorStateMismatch": "OAuth রাষ্ট্রের অমিল। সংযোগ পুনরায় শুরু করুন এবং আবার চেষ্টা করুন।", + "errorImportAccessToken": "অ্যাক্সেস টোকেন আমদানি করতে ব্যর্থ হয়েছে", + "errorSessionNotInitialized": "OAuth সেশন শুরু করা হয়নি। সংযোগ প্রবাহ পুনরায় শুরু করুন এবং আবার চেষ্টা করুন।", + "errorNoAuthorizationCode": "কোনও অনুমোদন কোড পাওয়া যায়নি। কলব্যাক URL অথবা অনুমোদন কোড পেস্ট করুন।", + "tabDeviceCode": "ডিভাইস কোড", + "tabBrowserLogin": "ব্রাউজার লগইন", + "tabImportAuthJson": "auth.json আমদানি করুন", + "tabPasteApiKey": "এপিআই কী পেস্ট করুন", + "windsurfPasteDescription": "Windsurf / VS Code IDE-তে, কমান্ড প্যালেট থেকে \"Windsurf: Provide Auth Token\" কমান্ডটি চালান (অথবা Jupyter \"Get Windsurf Authentication Token\" বোতামে ক্লিক করুন), তারপর প্রদর্শিত টোকেনটি কপি করে নিচে পেস্ট করুন। সরাসরি windsurf.com/show-auth-token খুললে শুধুমাত্র একটি \"Redirecting\" পৃষ্ঠা দেখা যাবে — IDE-কে প্রবাহটি শুরু করতে হবে।", + "grokAuthJsonDescription": "~/.grok/auth.json এর সম্পূর্ণ বিষয়বস্তু পেস্ট করুন (শুধু JWT \"key\" ক্ষেত্র নয়)। একটি খালি JWT এর refresh_token নেই, তাই মেয়াদ শেষ হওয়ার পরে সংযোগ বন্ধ হয়ে যায় (#7610)। উপলব্ধ থাকলে নিবেদিত Import auth.json মডালটি ব্যবহার করতে অগ্রাধিকার দিন।", + "devinDesktopPasteDescription": "একটি প্রমাণীকৃত Devin সেশনের থেকে বিদ্যমান Devin API কী পেস্ট করুন। কী রপ্তানি করার প্রাপ্যতা এবং পদক্ষেপগুলি Devin সংস্করণ এবং অ্যাকাউন্ট অনুযায়ী পরিবর্তিত হয়।", + "devinPasteDescription": "আপনার WINDSURF_API_KEY প্রদান করুন (যা `devin auth login` এর মাধ্যমে অথবা Windsurf IDE \"Windsurf: Provide Auth Token\" কমান্ডের মাধ্যমে প্রাপ্ত)।", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "এপিআই কী / টোকেন", + "saving": "সংরক্ষণ হচ্ছে…", + "saveConnection": "সংযোগ সংরক্ষণ করুন", + "gheDescription": "আপনার GitHub Enterprise ইনস্ট্যান্সের বেস URL প্রবেশ করুন (যেমন https://ghe.yourcompany.com)।", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL প্রয়োজন", + "gitlabDuoSetupTitle": "GitLab Duo OAuth সেটআপ", + "gitlabDuoSetupMessage": "GitLab Duo OAuth কনফিগার করা হয়নি। {applicationsUrl} এ একটি OAuth অ্যাপ্লিকেশন নিবন্ধন করুন যার রিডাইরেক্ট URI {redirectUri} এবং স্কোপগুলি \"{scopes}\"। তারপর {clientIdEnv} (এবং ঐচ্ছিকভাবে {clientSecretEnv}) সেট করুন এবং পুনরায় চালু করুন।", + "gitlabDuoSetupDescription": "অ্যাপ্লিকেশন নিবন্ধিত হওয়ার পর এবং এই OmniRoute উদাহরণে env vars সেট করার পর, OAuth লগইন শুরু করতে Continue ক্লিক করুন।", + "continue": "চালিয়ে যান" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "আরও লোড করুন", - "loadingMore": "আরও লোড হচ্ছে..." + "loadingMore": "আরও লোড হচ্ছে...", + "correlationId": "সংযোগ আইডি", + "group": { + "showAllRows": "সব সারি দেখান", + "showLatestPerCorrelation": "সর্বশেষ প্রদর্শন করুন প্রতি সম্পর্ক আইডি", + "grouped": "গ্রুপবদ্ধ" + }, + "running": "চালানো", + "interval": { + "decrease": "ইন্টারভ্যাল কমান", + "title": "Auto-refresh সময়সীমা সেকেন্ডে", + "increase": "ইন্টারভ্যাল বাড়ান" + }, + "status": { + "inProgress": "চলমান", + "recoveredByRetry": "পুনরায় চেষ্টা করে পুনরুদ্ধার করা হয়েছে", + "goToParent": "মাতৃ অনুরোধে যান", + "healedTitle": "ব্যর্থ, {count} বার পুনরুদ্ধারের পর সফল হয়েছে", + "healed": "সুস্থ", + "failedTitle": "সব {count} প্রচেষ্টা ব্যর্থ হয়েছে", + "failed": "ব্যর্থ", + "pinnedTitle": "প্রসঙ্গ-ক্যাশ সেশন পিনিং দ্বারা নির্বাচিত মডেল", + "pinned": "পিন করা" + }, + "attempts": "চেষ্টা", + "detail": { + "collapse": "{title} সংকুচিত করুন", + "expand": "{title} সম্প্রসারিত করুন", + "copyTitle": "কপি {title}", + "copied": "কপি করা হয়েছে!", + "copy": "কপি করুন", + "autoscrollOn": "অটোস্ক্রল: চালু", + "autoscrollOff": "অটোস্ক্রোল: বন্ধ", + "payload": { + "clientRawRequest": "ক্লায়েন্ট কাঁচা অনুরোধ", + "clientRequest": "ক্লায়েন্টের অনুরোধ", + "openaiRequest": "OpenAI অনুরোধ", + "providerRequest": "প্রদানকারী অনুরোধ", + "providerResponse": "প্রদাতা প্রতিক্রিয়া", + "clientResponse": "ক্লায়েন্ট প্রতিক্রিয়া", + "pipelineError": "পাইপলাইন ত্রুটি" + }, + "payloadMissing": "এই লগ এন্ট্রির জন্য বিস্তারিত পেলোড আর্টিফ্যাক্ট আর উপলব্ধ নেই।", + "payloadCorrupt": "বিস্তারিত পেলোড আর্টিফ্যাক্ট পার্স করা যায়নি।", + "notAvailable": "N/A", + "semanticCache": "সেমান্টিক (OmniRoute)", + "upstreamCache": "আপস্ট্রিম (প্রোভাইডার)", + "ariaLabel": "অনুরোধ লগ বিস্তারিত", + "completed": "সম্পন্ন", + "upstreamStatus": "আপস্ট্রিম: {status}", + "statusDiscrepancy": "OmniRoute {status} ফেরত দিয়েছে যদিও প্রদানকারী {provider} ফেরত দিয়েছে", + "previousRequest": "পূর্ববর্তী অনুরোধ", + "nextRequest": "পরবর্তী অনুরোধ", + "close": "বিস্তারিত মডাল বন্ধ করুন", + "startedAt": "শুরু হয়েছে", + "endedAt": "শেষ হয়েছে", + "duration": "স্থায়িত্ব", + "model": "মডেল", + "provider": "প্রদানকারী", + "account": "অ্যাকাউন্ট", + "input": "ইনপুট", + "totalIn": "মোট ইন: {value}", + "cacheRead": "ক্যাশ পড়ুন: {value}", + "cacheWrite": "ক্যাশে লেখুন: {value}", + "compressed": "সংকুচিত: {from} → {to} ({percent}% সঞ্চয়)", + "output": "আউটপুট", + "totalOut": "মোট আউট: {value}", + "reasoning": "কারণ: {value}", + "requestedModel": "অনুরোধ করা মডেল", + "requestProtocol": "রেক প্রোটোকল", + "cacheSource": "ক্যাশ সোর্স", + "modelPinning": "মডেল পিনিং", + "activeModelPinning": "সক্রিয় — সেশন পিনিংয়ের মাধ্যমে মডেল নির্বাচিত", + "rotated": "ঘুরানো: {initial} -> {final}", + "apiKey": "এপিআই কী", + "noApiKey": "কোন API কী নেই", + "combo": "কম্বো", + "error": "ত্রুটি", + "unblockAll": "সব আনব্লক করুন", + "cleared": "মুছে ফেলা হয়েছে", + "unblock": "অবরোধ অপসারণ করুন", + "relatedRequests": "সম্পর্কিত অনুরোধসমূহ ({count})", + "current": "বর্তমান", + "detailStatus": "বিস্তারিত স্থিতি", + "loadingDetails": "অনুরোধের বিস্তারিত লোড হচ্ছে...", + "providerEventStream": "প্রোভাইডার ইভেন্ট স্ট্রিম", + "clientEventStream": "ক্লায়েন্ট ইভেন্ট স্ট্রিম", + "eventStream": "ইভেন্ট স্ট্রিম", + "responsePayloadLegacy": "প্রতিক্রিয়া পে-লোড (লিগ্যাসি)", + "requestPayloadLegacy": "অনুরোধ পে-লোড (লিগ্যাসি)", + "noPayload": "এই লগ এন্ট্রির জন্য কোনো পেলোড ডেটা উপলব্ধ নেই।", + "correlationId": "সংযোগ আইডি", + "correlationIdValue": "সংযোগ আইডি: {id}", + "detailedPayloadInfo": "নতুন অনুরোধের জন্য চার-পর্যায়ের ক্লায়েন্ট/প্রদানকারী পে-লোড ভিউ পেতে হলে প্রথমে বিস্তারিত লগিং সক্ষম করুন।" + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} disabled", "providerAdded": "{provider} যোগ করা হয়েছে", "add": "যোগ করুন", - "manualApiKey": "একটি ম্যানুয়াল API কী ব্যবহার করুন" + "manualApiKey": "একটি ম্যানুয়াল API কী ব্যবহার করুন", + "createDahlTokenFailed": "Dahl টোকেন তৈরি করতে ব্যর্থ হয়েছে", + "providerProxy": "প্রক্সি", + "providerProxyConfigureHint": "প্রক্সি কনফিগার করুন", + "providerProxyTitleConfigured": "প্রক্সি কনফিগার করা হয়েছে: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-সীমাবদ্ধ — শর্তাবলী পর্যালোচনা করুন", "caution": "সতর্কতা — ব্যক্তিগত-ব্যবহার / প্রক্সি শর্তাবলী", "ok": "সাধারণত অনুমতিমূলক" - } + }, + "allProviders": "সমস্ত প্রদানকারী", + "noApiKeyRequired": "কোনও API কী প্রয়োজন নেই" }, "providerHealthAutopilot": { "title": "প্রোভাইডার হেলথ অটোপাইলট", @@ -12390,7 +13047,11 @@ "on": "চালু", "off": "বন্ধ", "availableProviders": "উপলব্ধ প্রোভাইডার ({count})", - "noProviderOverrides": "কোনো ওভাররাইড নেই — সমস্ত সক্রিয় প্রোভাইডার তাদের ডিফল্ট মডেল নিয়ে অংশগ্রহণ করবে" + "noProviderOverrides": "কোনো ওভাররাইড নেই — সমস্ত সক্রিয় প্রোভাইডার তাদের ডিফল্ট মডেল নিয়ে অংশগ্রহণ করবে", + "resetFailed": "রিসেট ব্যর্থ হয়েছে", + "resetSuccess": "কনফিগারেশন ডিফল্টে রিসেট করা হয়েছে", + "running": "চালানো হচ্ছে...", + "testFailed": "পরীক্ষা ব্যর্থ হয়েছে" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) হল OmniRoute-এর প্রতিষ্ঠাতা ওপেন সোর্স বন্ধু", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "এই চিত্রের অনুরোধের জন্য প্রদানকারী ভিশন সমর্থন করে না", "capabilityFilter.toolsMismatch": "প্রদানকারী টুল কলিং সমর্থন করে না", "capabilityFilter.structuredOutputMismatch": "প্রোভাইডার স্ট্রাকচারড আউটপুট সমর্থন করে না", - "capabilityFilter.contextWindowMismatch": "অনুরোধটি প্রদানকারীর প্রসঙ্গ উইন্ডো অতিক্রম করেছে" + "capabilityFilter.contextWindowMismatch": "অনুরোধটি প্রদানকারীর প্রসঙ্গ উইন্ডো অতিক্রম করেছে", + "publicSystem": { + "notFound": { + "title": "পৃষ্ঠা পাওয়া যায়নি", + "description": "আপনি যে পৃষ্ঠাটি খুঁজছেন তা বিদ্যমান নেই বা স্থানান্তরিত হয়েছে।", + "dashboardAriaLabel": "ড্যাশবোর্ডে ফিরে যান", + "statusAriaLabel": "সিস্টেম স্ট্যাটাস পৃষ্ঠা খুলুন", + "systemStatus": "সিস্টেম স্ট্যাটাস" + }, + "error": { + "title": "অভ্যন্তরীণ সার্ভার ত্রুটি", + "description": "আপনার অনুরোধ প্রক্রিয়া করার সময় কিছু ভুল হয়েছে। আমাদের দলকে জানানো হয়েছে এবং তারা একটি সমাধানের উপর কাজ করছে।", + "errorId": "ত্রুটি আইডি: {id}", + "detailsAriaLabel": "ত্রুটি বিবরণ", + "retryAriaLabel": "পৃষ্ঠাটি পুনরায় লোড করার চেষ্টা করুন", + "tryAgain": "পুনরায় চেষ্টা করুন", + "dashboardAriaLabel": "ড্যাশবোর্ডে ফিরে যান", + "statusAriaLabel": "সিস্টেম স্ট্যাটাস খুলুন", + "systemStatus": "সিস্টেম স্ট্যাটাস" + }, + "globalError": { + "title": "কিছু ভুল হয়েছে", + "description": "একটি অপ্রত্যাশিত ত্রুটি ঘটেছে। এটি লগ করা হয়েছে এবং আমাদের দল তদন্ত করবে।", + "detailsAriaLabel": "ত্রুটি বিবরণ", + "retryAriaLabel": "পৃষ্ঠাটি পুনরায় লোড করার চেষ্টা করুন", + "tryAgain": "পুনরায় চেষ্টা করুন", + "statusAriaLabel": "সিস্টেম স্ট্যাটাস খুলুন", + "systemStatus": "সিস্টেম স্ট্যাটাস" + }, + "offline": { + "title": "সংযোগের সমস্যা", + "description": "OmniRoute বর্তমানে নেটওয়ার্কে পৌঁছাতে পারছে না। আপনার ইন্টারনেট, VPN, বা প্রক্সি সেটিংস পরীক্ষা করুন।", + "connectionRestored": "সংযোগ পুনরুদ্ধার করা হয়েছে", + "offlineModeDetected": "অফলাইন মোড সনাক্ত করা হয়েছে", + "retryConnection": "সংযোগ পুনরায় চেষ্টা করুন", + "openStatusPage": "স্ট্যাটাস পৃষ্ঠা খুলুন" + }, + "maintenance": { + "title": "নির্ধারিত রক্ষণাবেক্ষণ", + "description": "কিছু পরিষেবা সাময়িকভাবে অপ্রাপ্য যখন রক্ষণাবেক্ষণ চলছে। মূল রাউটিং সাধারণত অনলাইনে থাকে, তবে ব্যবস্থাপনা বৈশিষ্ট্যগুলি অবনমিত হতে পারে।", + "suggestion1": "কিছু মিনিট পরে আবার চেষ্টা করুন।", + "suggestion2": "পুনরায় চেষ্টা করার আগে বর্তমান স্বাস্থ্য সূচক এবং প্রদানকারীর স্থিতি পরীক্ষা করুন।", + "systemStatus": "সিস্টেম স্ট্যাটাস দেখুন", + "healthDashboard": "স্বাস্থ্য ড্যাশবোর্ড খুলুন" + }, + "status": { + "title": "সিস্টেম স্ট্যাটাস", + "description": "OmniRoute কোর সার্ভিসের জন্য লাইভ অপারেশনাল স্ন্যাপশট।", + "loadingHealth": "স্বাস্থ্য মেট্রিকস লোড হচ্ছে...", + "failedToLoad": "সিস্টেম স্বাস্থ্য লোড করতে ব্যর্থ।", + "unableToReachHealth": "স্বাস্থ্য এন্ডপয়েন্টে পৌঁছানো যাচ্ছে না। সংযোগ পরীক্ষা করুন এবং পুনরায় চেষ্টা করুন।", + "healthCheckFailed": "স্বাস্থ্য পরীক্ষা ব্যর্থ হয়েছে", + "openConnectivityHelp": "ওপেন কানেক্টিভিটি সহায়তা", + "maintenanceInfo": "রক্ষণাবেক্ষণ তথ্য", + "service": "সেবা", + "unknown": "অজানা", + "notAvailable": "n/a", + "providersTracked": "প্রদানকারীরা ট্র্যাক করা হয়েছে", + "circuitBreakerState": "প্রোভাইডার সার্কিট ব্রেকার অবস্থান", + "lastUpdate": "শেষ আপডেট: {timestamp}", + "uptimeMinutes": "{minutes}ম", + "uptimeHoursMinutes": "{hours}ঘণ্টা {minutes}মিনিট" + }, + "statusPages": { + "400": { + "title": "খারাপ অনুরোধ", + "description": "অনুরোধের পে-লোডটি অবৈধ বা অসম্পূর্ণ।", + "suggestion1": "পুনরায় চেষ্টা করার আগে প্রয়োজনীয় ক্ষেত্র এবং পে লোড ফরম্যাট পর্যালোচনা করুন।", + "suggestion2": "যদি আপনি API ব্যবহার করছেন, তবে স্থানীয়ভাবে JSON স্কিমা যাচাই করুন।", + "suggestion3": "যদি এটি ঘটতে থাকে, তাহলে পে-লোড পরিদর্শনের জন্য Translator Playground-এ অনুরোধটি খুলুন।", + "primaryAction": "ডকুমেন্টেশন খুলুন", + "secondaryAction": "ট্রান্সলেটর খুলুন" + }, + "401": { + "title": "অননুমোদিত", + "description": "এই সম্পদে প্রবেশ করতে প্রমাণীকরণ প্রয়োজন।", + "suggestion1": "পুনরায় সাইন ইন করুন এবং অপারেশনটি পুনরায় চেষ্টা করুন।", + "suggestion2": "API কলের জন্য, নিশ্চিত করুন যে Bearer টোকেন উপস্থিত এবং বৈধ।", + "suggestion3": "যদি টোকেনটি সম্প্রতি রোটেট করা হয়, আপনার ক্লায়েন্ট শংসাপত্রগুলি আপডেট করুন।", + "primaryAction": "লগইনে যান", + "secondaryAction": "এপিআই কী পরিচালনা করুন" + }, + "403": { + "title": "নিষিদ্ধ", + "description": "আপনার অনুরোধটি বোঝা হয়েছে, কিন্তু নীতির দ্বারা প্রবেশাধিকার অস্বীকৃত।", + "suggestion1": "সেটিংসে IP অনুমতি তালিকা/ব্লক তালিকা নিয়ম পরীক্ষা করুন।", + "suggestion2": "আপনার API কী-এর জন্য নির্ধারিত মডেল এবং বাজেট নীতিগুলি যাচাই করুন।", + "suggestion3": "একজন প্রশাসকের কাছে প্রয়োজনীয় অনুমতি পরিধি প্রদান করার জন্য অনুরোধ করুন।", + "primaryAction": "ওপেন অ্যাক্সেস সহায়তা", + "secondaryAction": "নিরাপত্তা সেটিংস খুলুন" + }, + "408": { + "title": "অনুরোধের সময়সীমা শেষ হয়েছে", + "description": "সার্ভার সময়মতো একটি সম্পূর্ণ অনুরোধ গ্রহণ করেনি।", + "suggestion1": "ছোট পে-লোড সহ অনুরোধটি পুনরায় চেষ্টা করুন।", + "suggestion2": "আপনার নেটওয়ার্ক স্থিতিশীলতা এবং VPN/প্রক্সি লেটেন্সি পরীক্ষা করুন।", + "suggestion3": "দীর্ঘ অপারেশনের জন্য, স্ট্রিমিং সক্ষম করুন অথবা অনুরোধটি বিভক্ত করুন।", + "primaryAction": "এন্ডপয়েন্ট গাইড খুলুন", + "secondaryAction": "নেটওয়ার্ক স্থিতি পরীক্ষা করুন" + }, + "429": { + "title": "অতিরিক্ত অনুরোধসমূহ", + "description": "এই ক্লায়েন্ট, কী, বা প্রদানকারীর জন্য রেট সীমা অতিক্রম করা হয়েছে।", + "suggestion1": "কুলডাউন শেষ হওয়ার জন্য অপেক্ষা করুন এবং প্রস্তাবিত সময়ের পরে আবার চেষ্টা করুন।", + "suggestion2": "ফলব্যাক প্রদানকারীদের সাথে একটি কম্বোতে স্যুইচ করুন।", + "suggestion3": "সেটিংসে প্রদানকারী স্থিতিশীলতা/হার-সীমা প্রোফাইলগুলি সমন্বয় করুন।", + "primaryAction": "রেজিলিয়েন্স সেটিংস খুলুন", + "secondaryAction": "ওপেন কম্বোস" + }, + "500": { + "title": "অভ্যন্তরীণ সার্ভার ত্রুটি", + "description": "আপনার অনুরোধ প্রক্রিয়া করার সময় একটি অপ্রত্যাশিত সার্ভার-সাইড ত্রুটি ঘটেছে।", + "suggestion1": "কিছু সেকেন্ড পর একবার আবার চেষ্টা করুন।", + "suggestion2": "স্বাস্থ্য টেলিমেট্রি এবং সার্ভার লগগুলি সম্পর্কিত অনুরোধ আইডির জন্য পরীক্ষা করুন।", + "suggestion3": "যদি স্থায়ী হয়, তাহলে টাইমস্ট্যাম্প এবং অনুরোধের প্রসঙ্গ সহ সমস্যাটি রিপোর্ট করুন।", + "primaryAction": "স্বাস্থ্য ড্যাশবোর্ড খুলুন", + "secondaryAction": "লগ খুলুন" + }, + "502": { + "title": "খারাপ গেটওয়ে", + "description": "আপস্ট্রিম প্রদানকারী বা গেটওয়ে ইন্টিগ্রেশন একটি অবৈধ প্রতিক্রিয়া ফিরিয়ে দিয়েছে।", + "suggestion1": "অন্য প্রদানকারী বা সক্রিয় কম্বো রুট দিয়ে পুনরায় চেষ্টা করুন।", + "suggestion2": "প্রদানকারী পরিচয়পত্র এবং মডেল উপলব্ধতা পরীক্ষা করুন।", + "suggestion3": "ফরম্যাট রূপান্তর জড়িত থাকলে অনুবাদক আউটপুট পরিদর্শন করুন।", + "primaryAction": "প্রদানকারীরা খুলুন", + "secondaryAction": "ট্রান্সলেটর খুলুন" + }, + "503": { + "title": "সেবা উপলব্ধ নেই", + "description": "সার্ভিসটি রক্ষণাবেক্ষণ বা অবনমিত নির্ভরশীলতার কারণে সাময়িকভাবে অপ্রাপ্য।", + "suggestion1": "একটি মুহূর্ত অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।", + "suggestion2": "রক্ষণাবেক্ষণের বিজ্ঞপ্তি এবং সিস্টেমের অবস্থা পরীক্ষা করুন।", + "suggestion3": "আপনার ওয়ার্কফ্লো যদি লেটেন্সি-সংবেদনশীল হয় তবে ফ্যালব্যাক প্রদানকারীদের ব্যবহার করুন।", + "primaryAction": "রক্ষণাবেক্ষণ বিবরণ", + "secondaryAction": "সিস্টেম স্ট্যাটাস" + } + } + }, + "kiroAuthModal": { + "title": "সংযুক্ত করুন {providerLabel}", + "chooseMethod": "আপনার প্রমাণীকরণ পদ্ধতি নির্বাচন করুন:", + "builderId": "AWS বিল্ডার আইডি", + "builderDescription": "অধিকাংশ ব্যবহারকারীর জন্য সুপারিশ করা হয়েছে। {providerLabel} এর সাথে সংযুক্ত AWS অ্যাকাউন্টে সাইন ইন করুন।", + "organization": "আপনার সংগঠন (AWS IAM পরিচয় কেন্দ্র)", + "organizationDescription": "আপনার কোম্পানির SSO শুরু URL ব্যবহার করুন (উদাহরণ: {url})।", + "googleAccount": "গুগল অ্যাকাউন্ট", + "googleDescription": "আপনার Google অ্যাকাউন্টের সাথে লগইন করুন।", + "githubAccount": "গিটহাব অ্যাকাউন্ট", + "githubDescription": "আপনার GitHub অ্যাকাউন্টের সাথে লগইন করুন।", + "importToken": "টোকেন আমদানি করুন", + "importDescription": "{providerLabel} থেকে রপ্তানি করা একটি রিফ্রেশ টোকেন পেস্ট করুন।", + "apiKey": "এপিআই কী", + "apiKeyDescription": "একটি দীর্ঘমেয়াদী {providerLabel} / CodeWhisperer API কী পেস্ট করুন। এটি একটি বেয়ারার শংসাপত্র হিসেবে সংরক্ষিত হয় যার কোন রিফ্রেশ টোকেন নেই; প্রোফাইল আবিষ্কার সর্বোচ্চ প্রচেষ্টার ভিত্তিতে।", + "idcStartUrl": "আইডিসি স্টার্ট ইউআরএল", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "আপনার সংস্থার AWS IAM পরিচয় কেন্দ্রের URL", + "awsRegion": "AWS অঞ্চল", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "আপনার পরিচয় কেন্দ্রের জন্য AWS অঞ্চল (ডিফল্ট: us-east-1)", + "continue": "চালিয়ে যান", + "back": "পিছনে", + "autoDetecting": "টোকেন স্বয়ংক্রিয়ভাবে সনাক্ত করা হচ্ছে...", + "readingCredentials": "AWS SSO ক্যাশ থেকে {providerLabel} শংসাপত্র পড়া হচ্ছে", + "tokenNotDetected": "{providerLabel} টোকেন স্বয়ংক্রিয়ভাবে সনাক্ত করা হয়নি। দয়া করে আপনার রিফ্রেশ টোকেন ম্যানুয়ালি পেস্ট করুন।", + "refreshToken": "রিফ্রেশ টোকেন", + "tokenPlaceholder": "টোকেন স্বয়ংক্রিয়ভাবে পূরণ হবে...", + "importing": "আমদানি হচ্ছে...", + "apiKeyPlaceholder": "আপনার {providerLabel} API কী পেস্ট করুন...", + "apiKeyStoredDescription": "দীর্ঘকালীন বেয়ারার শংসাপত্র হিসেবে সংরক্ষিত এনক্রিপ্টেড। রিফ্রেশ প্রবাহ নেই।", + "apiKeyRegionDescription": "কীটির জন্য AWS অঞ্চল (ডিফল্ট: us-east-1)", + "validating": "যাচাই করা হচ্ছে...", + "validateAndSaveApiKey": "এপিআই কী যাচাই করুন এবং সংরক্ষণ করুন", + "errorAutoDetect": "টোকেন স্বয়ংক্রিয়ভাবে সনাক্ত করা যায়নি", + "errorAutoDetectFailed": "টোকেন স্বয়ংক্রিয়ভাবে সনাক্ত করতে ব্যর্থ হয়েছে", + "errorRefreshTokenRequired": "দয়া করে একটি রিফ্রেশ টোকেন প্রবেশ করুন", + "errorImportFailed": "আমদানি ব্যর্থ হয়েছে", + "errorApiKeyRequired": "দয়া করে একটি Kiro API কী প্রবেশ করুন", + "errorApiKeyImportFailed": "এপিআই কী আমদানি ব্যর্থ হয়েছে", + "errorIdcStartUrlRequired": "দয়া করে আপনার IDC শুরু URL প্রবেশ করুন" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} কে {providerName} এর মাধ্যমে সংযুক্ত করুন", + "errorStartAuthorization": "অনুমোদন শুরু করতে ব্যর্থ হয়েছে", + "errorAuthorizationExpired": "অনুমোদন মেয়াদ শেষ হয়েছে। আবার লগইন প্রক্রিয়া শুরু করুন।", + "errorAuthorizationFailed": "অনুমোদন ব্যর্থ হয়েছে", + "initializing": "প্রাথমিককরণ হচ্ছে...", + "settingUp": "{providerName} প্রমাণীকরণ সেট আপ করা হচ্ছে", + "openIncognito": "এই লিঙ্কটি একটি ইনকগনিটো উইন্ডোতে খুলুন", + "incognitoDescription": "একটি ইনকগনিটো/প্রাইভেট উইন্ডো ব্যবহার করুন বিদ্যমান অ্যাকাউন্টগুলির সাথে সেশন সংঘর্ষ এড়াতে।", + "copyLink": "লিঙ্ক কপি করুন", + "verificationCode": "যাচাইকরণ কোড", + "waiting": "অনুমোদনের জন্য অপেক্ষা করা হচ্ছে...", + "cancel": "বাতিল করুন", + "successTitle": "সফলভাবে সংযুক্ত!", + "successMessage": "আপনার {providerLabel} অ্যাকাউন্ট {providerName} এর মাধ্যমে সংযুক্ত হয়েছে।", + "done": "সম্পন্ন", + "errorTitle": "সংযোগ ব্যর্থ হয়েছে", + "close": "বন্ধ করুন" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "অনুমোদন ব্যর্থ হয়েছে", + "errorPopupBlocked": "পপআপ ব্লক করা হয়েছে — এই সাইটের জন্য পপআপ অনুমোদন করুন, অথবা নিচে টোকেনটি ম্যানুয়ালি পেস্ট করুন।", + "errorPopupClosed": "অনুমোদন উইন্ডো সম্পূর্ণ করার আগে বন্ধ হয়ে গেছে।", + "errorAccessTokenRequired": "অ্যাক্সেস টোকেন প্রয়োজন।", + "errorImportFailed": "আমদানি ব্যর্থ হয়েছে", + "title": "Connect Trae SOLO", + "authorizeDescription": "একটি পপআপে trae.ai এর মাধ্যমে অনুমোদন করুন। টোকেন আমদানি হলে পপআপটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে।", + "authorizeImportant": "গুরুতর: আপনাকে প্রথমে trae.aiএই ব্রাউজারে লগ ইন করতে হবে। অনুমোদন পৃষ্ঠা কেবল একটি বিদ্যমান সেশন নিশ্চিত করে — এটি আপনাকে লগ ইন করতে পারে না। যদি আপনি \"লগইন ব্যর্থ\" দেখেন, \"solo.trae.ai খুলুন\" এ ক্লিক করুন, লগ ইন করুন, তারপর এখানে ফিরে আসুন।", + "waitingForAuthorization": "trae.ai এর জন্য অপেক্ষা করা হচ্ছে…", + "authorizeWithBrowser": "ব্রাউজারের মাধ্যমে অনুমোদন করুন", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "অথবা একটি টোকেন ম্যানুয়ালি পেস্ট করুন", + "manualInstructions": "solo.trae.ai এ সাইন ইন করুন, DevTools → Network খুলুন, যেকোনো চ্যাট বার্তা পাঠান, এবং Authorization: Cloud-IDE-JWT {tokenPlaceholder} অনুরোধ হেডার থেকে JWT কপি করুন। JWT এর আয়ু ~14 দিন। ঐচ্ছিক পরিচয় ক্ষেত্রগুলি একই অনুরোধের শরীরে common_params থেকে আসে।", + "accessTokenLabel": "অ্যাক্সেস টোকেন (Cloud-IDE-JWT)", + "webId": "ওয়েব আইডি", + "optional": "ঐচ্ছিক", + "bizUserId": "বিজ ব্যবহারকারী আইডি", + "userUniqueId": "ব্যবহারকারীর অনন্য আইডি", + "scope": "স্কোপ", + "tenant": "ভাড়াটিয়া", + "region": "অঞ্চল", + "importing": "আমদানি হচ্ছে…", + "importToken": "টোকেন আমদানি করুন", + "cancel": "বাতিল করুন" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "বিতরণ করা হচ্ছে...", + "complete": "সম্পূর্ণ", + "defaultLabel": "প্রক্সি বিতরণ করুন" + } + }, + "providerTest": { + "dialogLabel": "পরীক্ষা {provider}", + "deprecated": "অবহেলিত", + "risk": "ঝুঁকি", + "close": "বন্ধ করুন", + "model": "মডেল", + "key": "কী", + "defaultKey": "ডিফল্ট", + "clearConversation": "আলাপ পরিষ্কার করুন", + "clear": "পরিষ্কার করুন", + "tabs": { + "test": "পরীক্ষা", + "logs": "লগগুলি" + }, + "loadingLogs": "লগগুলি লোড হচ্ছে…", + "failedToLoadLogs": "লগগুলি লোড করতে ব্যর্থ হয়েছে", + "noLogsYet": "এখনো কোনো লগ নেই", + "noLogsDescription": "Test ট্যাব থেকে একটি পরীক্ষামূলক বার্তা পাঠান — এই প্রদানকারীর জন্য লগগুলি এখানে প্রদর্শিত হবে।", + "openFullLogs": "পূর্ণ লগ পৃষ্ঠা খুলুন", + "live": "লাইভ", + "tailingLast": "শেষ {count} দেখানো হচ্ছে", + "refreshNow": "এখন রিফ্রেশ করুন", + "refresh": "রিফ্রেশ", + "unknownRequester": "অজানা অনুরোধকারী", + "fields": { + "timestamp": "টাইমস্ট্যাম্প", + "status": "স্থিতি", + "duration": "কালসীমা", + "model": "মডেল", + "requestedModel": "অনুরোধ করা মডেল", + "provider": "প্রদানকারী", + "requester": "অনুরোধকারী", + "tokens": "টোকেনস" + } + }, + "proxyLog": { + "detailAriaLabel": "প্রক্সি লগের বিস্তারিত", + "event": "প্রক্সি ইভেন্ট", + "close": "প্রক্সি বিস্তারিত মডাল বন্ধ করুন", + "time": "সময়", + "latency": "লেটেন্সি", + "clientIp": "ক্লায়েন্ট আইপি", + "proxy": "প্রক্সি", + "direct": "সরাসরি", + "type": "টাইপ", + "level": "স্তর", + "provider": "প্রদানকারী", + "tlsFingerprint": "TLS ফিঙ্গারপ্রিন্ট", + "directNative": "সরাসরি", + "targetUrl": "লক্ষ্য URL", + "error": "ত্রুটি", + "configuration": "প্রক্সি কনফিগারেশন" + }, + "requestTimeline": { + "title": "অনুরোধের সময়রেখা", + "modes": { + "follow": "অনুসরণ করুন", + "followDescription": "অক্ষটি বাম দিকে স্ক্রল করে, NOW লাইন 75% এ থাকে", + "now": "এখন", + "nowDescription": "বর্তমান সময়ে ঝাঁপ দিন, NOW লাইন কেন্দ্রে পুনরায় সেট হয়", + "pan": "প্যান", + "panDescription": "টানুন অনুসন্ধান করতে, পটভূমি জমে গেছে" + }, + "reset": "পুনরায় সেট করুন", + "started": "শুরু হয়েছে", + "ended": "শেষ হয়েছে", + "duration": "কালকালীন", + "status": "স্থিতি", + "provider": "প্রদানকারী", + "tokens": "টোকেনস", + "active": "সক্রিয়", + "other": "অন্যান্য", + "tenMinutes": "১০মিনিট", + "hour": "ঘণ্টা", + "day": "দিন", + "unknownModel": "অজানা", + "pending": "মুলতুবি" + }, + "metadata": { + "compressionTitle": "সংকোচন", + "compressionDescription": "টোকেন ব্যবহার এবং খরচ কমাতে প্রসঙ্গ সংকোচন সেটিংস কনফিগার করুন।", + "relayTitle": "OmniRoute — রিলে প্রক্সি", + "relayDescription": "আপনার AI অবকাঠামোর জন্য সার্ভারলেস রিলে প্রক্সি এন্ডপয়েন্টগুলি", + "trafficInspectorTitle": "ট্রাফিক পরিদর্শক — ওমনি রুট", + "trafficInspectorDescription": "এলএলএম কলগুলি পর্যবেক্ষণ করুন + যেকোনো অ্যাপ্লিকেশনের HTTPS ট্রাফিক ডিবাগ করুন" + }, + "conductor": { + "title": "কনডাক্টর — CLI-এজেন্ট ফ্লিট", + "subtitle": "OmniConductor হাব: রানার, টাস্ক কিউ এবং কাউন্সিল, লাইভ", + "runners": "রানারস", + "tasks": "কাজগুলি", + "colName": "নাম", + "colClis": "সিএলআইগুলি", + "colStatus": "স্থিতি", + "colTask": "কাজ", + "colMode": "মোড", + "colRunner": "রানার", + "colSummary": "সারসংক্ষেপ", + "online": "অনলাইনে", + "offline": "অফলাইন", + "draining": "নিষ্কাশন", + "hubOffline": "কনডাক্টর হাব অফলাইন বা কনফিগার করা হয়নি (CONDUCTOR_HUB_URL) — পুরনো ডেটার পরিবর্তে কিছুই দেখাচ্ছে না।", + "noRunners": "কোনো রানার নিবন্ধিত নয়", + "noTasks": "এখনো কোনো কাজ নেই", + "detailTitle": "কাজের বিস্তারিত", + "prompt": "প্রম্পট", + "branch": "শাখা", + "fetchHint": "ফলাফল আনতে: git fetch origin {branch}", + "council": "পরিষদ", + "candidates": "প্রার্থীগণ", + "cancel": "কাজ বাতিল করুন", + "cancelConfirmTitle": "এই কাজটি বাতিল করবেন?", + "cancelConfirmMessage": "হাবটি রানারে কার্যকরীতা বন্ধ করে দেবে। এটি পূর্বাবস্থায় ফিরিয়ে নেওয়া যাবে না।", + "cancelFailed": "হাব বাতিলের অনুরোধ প্রত্যাখ্যান করেছে", + "close": "বন্ধ করুন", + "error": "ত্রুটি", + "faroTitle": "ফারো — নৌবহরের মুখপাত্র", + "faroSubtitle": "চ্যাট এবং ভয়েস, বাস্তব ফ্লিট ইভেন্টে ভিত্তি করে। ধ্বংসাত্মক কমান্ডগুলি সর্বদা নিশ্চিতকরণের জন্য জিজ্ঞাসা করে।", + "faroEmpty": "বহর সম্পর্কে জিজ্ঞাসা করুন — উদাহরণস্বরূপ \"বহর কেমন আছে?\"", + "faroPending": "ফারো নিশ্চিতকরণের জন্য জিজ্ঞাসা করছে", + "faroPlaceholder": "ফারোর সাথে কথা বলুন…", + "faroSend": "পাঠান", + "faroOffline": "ফারো (প্রতিনিধি) অফলাইনে রয়েছে", + "yes": "হ্যাঁ", + "no": "না", + "pushToTalk": "কথা বলার জন্য ধরে রাখুন", + "speakAnswers": "উত্তর বলুন", + "voiceModels": "ভয়েস মডেল (এই OmniRoute এর প্রদানকারী/মডেল)", + "voiceIdle": "কথা বলুন", + "voiceListening": "শোনা হচ্ছে…", + "voiceThinking": "চিন্তা করছি…", + "voiceSpeaking": "কথা বলছি…", + "sttFailed": "ট্রান্সক্রিপশন ব্যর্থ হয়েছে (STT মডেল/প্রদানকারী পরীক্ষা করুন)", + "ttsFailed": "স্পিচ সিন্থেসিস ব্যর্থ হয়েছে (TTS মডেল/প্রদানকারী পরীক্ষা করুন)", + "micDenied": "মাইক্রোফোন উপলব্ধ নয় বা অনুমতি অস্বীকৃত" + }, + "cliproxyProviderExposure": { + "title": "প্রদানকারী এক্সপোজার", + "description": "cliproxyapi/ প্রিফিক্সের অধীনে একটি রাউটিং টার্গেট হিসেবে CLIProxyAPI মডেলগুলি প্রকাশ করুন।", + "label": "cliproxyapi/... হিসেবে প্রকাশ করুন", + "hint": "যখন সক্ষম করা হয়, আবিষ্কৃত মডেলগুলি OmniRoute জুড়ে প্রদানকারী নির্বাচনে প্রদর্শিত হয়।", + "updateFailed": "আপডেট করতে ব্যর্থ (HTTP {status})", + "networkError": "নেটওয়ার্ক ত্রুটি — প্রদানকারী এক্সপোজার সেটিং আপডেট করা যায়নি" + } } - diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 46cdd47710..6e00f861a6 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -172,6 +172,18 @@ "unselectAll": "Zrušit výběr", "visibleModels": "viditelné", "selectAllConfirm": "Přidat {count} modelů do této kombinace?", + "testSelectedProviders": "Testovací poskytovatelé", + "testingSelectedProviders": "Testování {done}/{total}...", + "noProvidersSelectedToTest": "Nejprve zkontrolujte alespoň jednoho poskytovatele níže", + "noModelsToTestForProviders": "Žádné modely k testování pro vybrané poskytovatele", + "testSelectedProvidersResults": "{ok} z {total} modelů funguje", + "selectWorkingModels": "Přidat pracovní", + "unselectWorkingModels": "Zrušit výběr pracovního", + "noWorkingModelsToSelect": "Žádné pracovní modely k přidání.", + "providerTestHint": "Tip: zkontrolujte poskytovatele → Test → Přidat funkční. Klikněte znovu pro zrušení výběru.", + "selectAllProviders": "Zkontrolovat všechny poskytovatele", + "clearProviderSelection": "Zrušit zaškrtnutí poskytovatelů", + "providersSelectedCount": "Zkontrolováno {count} poskytovatelů", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Velikost", + "toggleNoAuthProvider": "Přepnout poskytovatele bez autentizace", + "loadingModels": "Načítání modelů…", + "selectAModel": "Vyberte model", + "degraded": "Degradovaný", + "zeroConfigBannerTitle": "Běží v režimu bez konfigurace", + "zeroConfigBannerBody": "OmniRoute automaticky vygeneroval bezpečné šifrovací klíče při prvním spuštění. Tyto klíče jsou uloženy v {dataDir}. Není potřeba žádná akce — vaše data jsou šifrována a bezpečná. Chcete-li použít vlastní klíče, přidejte JWT_SECRET a STORAGE_ENCRYPTION_KEY do tohoto souboru.", + "batchRelativeTimeIn": "v {value}", + "batchRelativeTimeAgo": "před {value}", + "batchDetailsTitle": "Podrobnosti o dávce", + "batchProgress": "Pokrok", + "batchCompletedCount": "{count} dokončeno", + "batchFailedCount": "{count} selhalo", + "batchPendingCount": "{count} čekající", + "batchTimeline": "Časová osa", + "batchTimelineInProgress": "Probíhá", + "batchTimelineFinalizing": "Finalizace", + "batchTimelineCompleted": "Dokončeno", + "batchTimelineFailed": "Selhalo", + "batchTimelineExpires": "Vyprší", + "batchTimelineExpired": "Vypršelo", + "batchTimelineCancelling": "Rušení", + "batchTimelineCancelled": "Zrušeno", + "batchTokenUsage": "Použití tokenu", + "batchMetadata": "Metadata", + "batchFileContents": "Obsah souboru", + "batchFileUsedByCount": "Použito {count, plural, one {# dávka} other {# dávky}}", + "batchFilePreview": "Náhled", + "batchFilePreviewTruncated": "Zobrazuji prvních {shown} řádků ({total} celkem řádků)", + "batchFileDownloadFull": "Stáhnout celý soubor" }, "disabled": "Zakázáno", "featureFlagOmnirouteEmergencyFallbackDescription": "Směrovat požadavky s vyčerpaným rozpočtem na nouzového bezplatného záložního poskytovatele/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Oddělovač", "discovery": "Objevování", "discoverySubtitle": "Skenovat poskytovatele pro bezplatný přístup", + "conductor": "Konduktor", + "conductorSubtitle": "CLI-agent flotila", "resilienceConnections": "Odolnost Připojení", "resilienceConnectionsSubtitle": "Cooldown, jistič, stav uzamčení", "settingsModalityBridge": "Modální Most", - "settingsModalityBridgeSubtitle": "Obrázek/audio → textový fallback pro modely pouze s textem" + "settingsModalityBridgeSubtitle": "Obrázek/audio → textový fallback pro modely pouze s textem", + "commandPalette": { + "title": "Příkazová paleta", + "searchPlaceholder": "Hledat stránky, nastavení, nástroje...", + "clearSearch": "Vymazat hledání", + "noResults": "Žádné výsledky", + "navigate": "navigovat", + "open": "otevřít", + "close": "zavřít" + }, + "noResults": "Žádné výsledky" }, "webhooks": { "title": "Webhooky", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Aktualizace nastavení se nezdařila", "sync.token.created": "Synchronizační token vytvořen", "sync.token.revoked": "Synchronizační token odvolán" - } + }, + "mcpMetricCalls24h": "Hovory (24h)", + "mcpMetricSuccessRate": "Úspěšnost", + "mcpMetricAvgDuration": "Průměrná doba", + "mcpMetricTopTool": "Nejlepší nástroj" }, "themesPage": { "title": "Motivy", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "K dispozici je nová verze. Kliknutím aktualizujte.", "updateStarted": "Aktualizace začala...", "reloadingPageAutomatically": "Automatické opětovné načítání stránky...", - "providerTopology": "Topologie poskytovatele" + "providerTopology": "Topologie poskytovatele", + "downloadDmg": "Stáhnout DMG (macOS)", + "downloadDmgDescription": "Nová verze desktopové aplikace OmniRoute je k dispozici. Prosím, stáhněte a nainstalujte macOS DMG instalátor pro aktualizaci (aktuální: v{version}).", + "downloadExe": "Stáhnout EXE (Windows)", + "downloadExeDescription": "Nová verze desktopové aplikace OmniRoute je k dispozici. Prosím, stáhněte a nainstalujte Windows EXE instalační program pro aktualizaci (aktuální: v{version}).", + "downloadAppImage": "Stáhnout AppImage (Linux)", + "downloadAppImageDescription": "Nová verze desktopové aplikace OmniRoute je k dispozici. Prosím, stáhněte si balíček Linux AppImage pro aktualizaci (aktuální: v{version}).", + "downloadUpdate": "Stáhnout aktualizaci", + "downloadUpdateDescription": "Nová verze desktopové aplikace OmniRoute je k dispozici. Prosím, stáhněte si příslušný formát aplikace pro váš systém, abyste provedli aktualizaci (aktuální: v{version}).", + "updateQueued": "Čekající aktualizace na v{version}.", + "updateDockerRebuilding": "Docker obraz se znovu vytváří na pozadí.", + "updateWaitingRestart": "Čekání na restart OmniRoute s novou verzí.", + "updateInstalling": "Instalace v{version}.", + "updateRunning": "OmniRoute nyní běží na verzi v{version}.", + "updateCompleted": "OmniRoute byl aktualizován na v{version}.", + "updateDockerStillRebuilding": "Docker image se stále přestavuje pro v{version}.", + "updateInstallingBackground": "Instalace v{version} na pozadí.", + "updateWaitingVersion": "Čekání na obnovení OmniRoute na v{version}.", + "updateDockerStillInProgress": "Docker rebuild stále probíhá.", + "updateRestarting": "Probíhá restart služby. Čekám, až se OmniRoute znovu připojí...", + "updateTimeout": "Aktualizace byla zahájena, ale v{version} nebyla k dispozici před vypršením časového limitu. Obnovte stránku nebo zkontrolujte serverové protokoly.", + "updateTimedOut": "Časový limit pro aktualizaci na v{version} vypršel.", + "updateStartFailed": "Nepodařilo se spustit aktualizaci.", + "noResponseStream": "Nebyla přijata žádná odpovědní stream.", + "updateComplete": "Aktualizace dokončena!", + "updateFailed": "Aktualizace se nezdařila.", + "updateNetworkError": "Chyba sítě — připojení ztraceno během aktualizace.", + "stepInstallPackage": "Nainstalovat balíček", + "stepRebuildNativeModules": "Přestavět Nativní Moduly", + "stepRestartService": "Restartovat službu", + "stepComplete": "Dokončit", + "stepError": "Chyba", + "updateCompleteTitle": "Aktualizace dokončena!", + "updateFailedTitle": "Aktualizace se nezdařila", + "updatingTitle": "Aktualizace OmniRoute...", + "reloadNotice": "Stránka se automaticky znovu načte za několik sekund.", + "retryNotice": "Prosím zkuste to znovu nebo aktualizujte ručně pomocí CLI.", + "restartNotice": "Tuto stránku nezavírejte. Systém se automaticky restartuje.", + "reloadNow": "Obnovit nyní", + "closeUpdate": "Zavřít", + "retryUpdate": "Zkusit znovu", + "updateAvailableTitle": "Aktualizace k dispozici: v{version}{desktop}", + "desktopAppLabel": "(Desktopová aplikace)", + "checkingForUpdates": "Kontrola aktualizací...", + "versionAvailableForDownload": "Verze v{version} je k dispozici ke stažení.", + "downloadingUpdate": "Stahování aktualizace... {percent}% dokončeno.", + "updateDownloaded": "Aktualizace byla úspěšně stažena! Klikněte na Restartovat a nainstalovat, aby se použila.", + "autoUpdateFailed": "Automatická aktualizace selhala: {reason}.", + "unknownUpdateError": "Neznámá chyba", + "versionAvailableDesktop": "Verze v{version} je k dispozici pro desktopovou aplikaci.", + "manualUpdateRequired": "Pro tuto instalační variantu je vyžadováno ruční aktualizace.", + "restartAndInstall": "Restartovat a Nainstalovat", + "checkForUpdate": "Zkontrolovat aktualizaci", + "manualUpdate": "Ruční aktualizace", + "directDownloadHint": "Nebo stáhněte příslušný formát instalátoru přímo:", + "releaseNotes": "Poznámky k vydání", + "readMore": "Přečíst více", + "noAuthLabel": "Žádná autentizace" }, "analytics": { "title": "Analytika", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Odvozeno z trvalých protokolů volání kolem tohoto požadavku", "routeRecommendations": "Doporučení", "routeLimitations": "Omezení", - "routeNoKnownLimitations": "Pro toto vysvětlení nejsou známa žádná omezení." + "routeNoKnownLimitations": "Pro toto vysvětlení nejsou známa žádná omezení.", + "searchAnalyticsLoading": "Načítání analytiky vyhledávání…", + "searchAnalyticsNoData": "Žádná data pro vyhledávání zatím nejsou k dispozici.", + "searchAnalyticsNoDataDescription": "Vyhledávací dotazy se zde zobrazí po prvním vyhledávání pomocí /v1/search.", + "searchAnalyticsToday": "{count} dnes", + "searchAnalyticsCachedRequests": "{count} uložených požadavků", + "searchAnalyticsApiCosts": "náklady na vyhledávací API", + "searchAnalyticsErrors": "{count} chyb", + "searchAnalyticsNoErrors": "Žádné chyby", + "searchAnalyticsProviderBreakdown": "Rozpis poskytovatelů", + "searchAnalyticsQueries": "dotazy", + "searchAnalyticsEmptyDescription": "Použijte POST /v1/search k zahájení směrování webových vyhledávání.", + "searchAnalyticsFreeTier": "Dostupný bezplatný tarif: Serper (2 500/měsíc), Brave (2 000/měsíc), Exa (1 000/měsíc), Tavily (1 000/měsíc) — celkem 6 500+ bezplatných vyhledávání/měsíc s automatickým přepnutím.", + "autoRoutingNoDataAvailable": "Žádné analýzy automatického směrování nejsou k dispozici. Pro zobrazení metrik použijte předponu auto/.", + "defaultVariantLabel": "Výchozí", + "freeTierAvailable": "K dispozici je bezplatný tarif" }, "apiManager": { "title": "API Klíče", @@ -2186,7 +2316,7 @@ "regenerateConfirm": "Jste si jisti, že chcete znovu vygenerovat tento klíč API? Starý klíč bude okamžitě zneplatněn.", "failedRegenerateKey": "Klíč API se nepodařilo znovu vytvořit", "failedRegenerateKeyRetry": "Klíč API se nepodařilo znovu vytvořit. Zkuste to prosím znovu.", - "model": "{count, plural, one {# model} other {# modelů}}", + "model": "{count} model", "models": "{count} modelů", "permissionsTitle": "Oprávnění: {name}", "allowAllDesc": "Tento klíč umožňuje přístup ke všem dostupným modelům.", @@ -2348,7 +2478,9 @@ "providerCount": "{count} poskytovatelů", "imageToTextBridgeAvailable": "Modality Bridge nyní dokáže popisovat obrázky pro modely pouze s textem. Inline hřiště bude k dispozici, když bude implementováno /api/v1/images/understanding.", "imageToTextBridgeCta": "Nakonfigurujte most Image→Text v nastavení Modality Bridge", - "sttBridgeCta": "Nastavte most Řeč→Text v nastavení Modality Bridge" + "sttBridgeCta": "Nastavte most Řeč→Text v nastavení Modality Bridge", + "existingConnection": "Existující připojení", + "openrouterSttDescription": "Modely převodu řeči na text OpenRouter používají vaše nakonfigurované připojení OpenRouter. Není vyžadováno žádné samostatné pověření." }, "search": { "searchQuery": "Vyhledávací dotaz", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Vložit do:", "copilotReloadInstruction": "Poté znovu načtěte VS Code a nastavte klíč API ve vstupním poli.", "wireApiChatCompletions": "Dokončení chatu (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Akce selhala", + "cliproxyapiActionSucceeded": "Akce byla úspěšná", + "cliproxyapiCheckUpdates": "Zkontrolovat aktualizace", + "cliproxyapiDescription": "Záložní proxy server (OAuth založený na Go)", + "cliproxyapiHealth": "Zdraví", + "cliproxyapiHealthy": "Zdravý", + "cliproxyapiInstall": "Nainstalovat", + "cliproxyapiNotInstalledValue": "Není nainstalováno", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Žádost selhala", + "cliproxyapiRestart": "Restartovat", + "cliproxyapiStart": "Začít", + "cliproxyapiStatusError": "Chyba", + "cliproxyapiStatusInstalled": "Nainstalováno", + "cliproxyapiStatusNotInstalled": "Není nainstalováno", + "cliproxyapiStatusRunning": "Běží", + "cliproxyapiStatusStopped": "Zastaveno", + "cliproxyapiStop": "Zastavit", + "cliproxyapiUnhealthy": "Nezdravé", + "cliproxyapiUnknown": "Neznámý", + "cliproxyapiUpdate": "Aktualizovat", + "cliproxyapiUpdateAvailable": "K dispozici je aktualizace: v{current} → v{latest}", + "cliproxyapiVersion": "Verze" }, "combos": { "title": "Komba", @@ -3236,6 +3391,8 @@ "pricingMissing": "Žádné ceny", "pricingAvailableShort": "cena", "pricingMissingShort": "bez ceny", + "fallbackOnlyOnQuotaExhaustion": "Pokračujte pouze při vyčerpání kvóty", + "fallbackOnlyOnQuotaExhaustionShort": "pouze záložní kvóta", "warningRoundRobinSingleModel": "Round-robin je nejužitečnější s alespoň 2 modely.", "warningCostOptimizedPartialPricing": "Jen {priced} z {total} modelů má stanovenu cenu. Směrování může být částečně zohledněno s ohledem na cenu.", "warningCostOptimizedNoPricing": "Pro toto kombo nebyly nalezeny žádné cenové údaje. Optimalizace nákladů může vést k neočekávanému směrování.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Sada režimů a vážení zůstávají zde; provozní stav jističe zůstává na stránce Stav.", "emailVisibilityHint": "E-maily účtů se zde řídí globálním přepínačem soukromí.", "emailVisibilityTooltip": "Pomocí ikony oka můžete globálně zobrazit nebo skrýt e-maily účtů v kombinacích, poskytovatelích a na obrazovkách kvót.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Krok za krokem (Poskytovatel → Model)", + "builderModeGlobal": "Globální vyhledávání modelů (Vlastní kombinace)", + "builderGlobalSearchPlaceholder": "Hledejte modely napříč všemi poskytovateli (např. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Přidat vše", + "builderGlobalShortcuts": "Klávesové zkratky:", + "builderGlobalNoResults": "Žádný model nebyl nalezen pro \"{query}\".", + "builderGlobalProviderLabel": "Poskytovatel:", + "builderGlobalAccountCount": "{count, plural, one {# účet} other {# účtů}}", + "builderGlobalAdded": "Přidáno", + "builderGlobalAdd": "Přidat", "manualModel": "Ruční model", "manualModelInvalid": "Zadejte model ve formátu poskytovatel/model.", "manualModelUnknownProvider": "Neznámý prefix poskytovatele.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Dostupnost relace", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stálost relace vypnuta", "kimiPresetTitle": "Předvolba Kimi Coding", "kimiPresetDescription": "Kimi K3 jako primární model (Moonshot API) s automatickým záložním řešením na vaše připojení Kimi Code (kimi-coding, kimi-web), pokud jsou nakonfigurována.", - "kimiPresetCta": "Přidat předvolbu" + "kimiPresetCta": "Přidat předvolbu", + "intelligentComboCount": "{count, plural, one {# inteligentní kombinace} other {# inteligentních kombinací}}", + "providersInScope": "{count, plural, one {# poskytovatel v rozsahu} other {# poskytovatelé v rozsahu}}", + "savingModePack": "Ukládání {pack}…", + "errorTitle": "Nepodařilo se načíst kombinace", + "errorDescription": "Nyní se nám nepodařilo načíst data pro kombinaci. Zkontrolujte své připojení a zkuste to znovu.", + "errorId": "Chyba ID: {id}", + "errorRetry": "Zkusit znovu", + "comboLabel": "Kombinace" }, "costs": { "title": "Náklady", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Uživatelské jméno", "obsidianPassword": "Heslo", - "obsidianTailscaleHint": "Pokud se připojujete z mobilu, použijte svou Tailscale IP místo localhost. Obě zařízení musí být ve stejné síti Tailscale." + "obsidianTailscaleHint": "Pokud se připojujete z mobilu, použijte svou Tailscale IP místo localhost. Obě zařízení musí být ve stejné síti Tailscale.", + "cloudSyncNotConfigured": "Cloud sync není na této instanci nakonfigurován.", + "notionConnect": "Připojit", + "notionConnectFailed": "Nepodařilo se připojit", + "notionConnected": "Připojeno", + "notionConnectionFailed": "Připojení se nezdařilo", + "notionDescription": "Hledejte, čtěte, dotazujte se a pište do Notion prostřednictvím směrovaných AI modelů", + "notionDisconnect": "Odpojit", + "notionDisconnectFailed": "Nepodařilo se odpojit", + "notionEnterToken": "Zadejte token pro integraci Notion", + "notionIntegrationHelp": "Vytvořte interní integraci na", + "notionIntegrationToken": "Notion Interní Integrační Token", + "notionNotConnected": "Nepřipojeno", + "notionTokenConfigured": "Token byl nakonfigurován. Nástroje Notion jsou k dispozici prostřednictvím MCP." }, "endpoints": { "tabProxy": "Koncová Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Model", "noRemoteProviders": "No providers with configured API key", "selectProviderModel": "Select a model", + "customBaseUrlLabel": "Vlastní základní URL (volitelné)", + "customModelIdLabel": "ID vlastního modelu (volitelné)", + "customEndpointHelp": "Použijte OpenAI-kompatibilní /embeddings koncový bod. Místní koncové body jsou povoleny; cíle cloudových metadat jsou blokovány.", + "customEndpointSave": "Použít vlastní koncový bod", + "customEndpointInvalid": "Zadejte platnou základní URL HTTP(S) a ID modelu, nebo nechte obě pole prázdná.", + "customEndpointSaveFailed": "Vlastní koncový bod pro vložení se nepodařilo uložit.", "staticEnabledLabel": "Enable Static Potion", "staticEnabledDesc": "Download and use potion-base-8M model locally", "transformersEnabledLabel": "Enable Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Čištění...", "cleanNow": "Vyčistit nyní", "cleanupSuccess": "{count} bod(ů) odebráno", - "cleanupFailed": "Čištění se nezdařilo" + "cleanupFailed": "Čištění se nezdařilo", + "hostLabel": "Host", + "collectionLabel": "Kolekce" }, "rerank": { "enableLabel": "Povolit Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Třívrstvý záložní diagram OmniRoute", "apiKeyMgmt": "Správa API klíčů", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Nastavit bezplatné poskytovatele", + "description": "Volitelně povolte vybrané poskytovatele bez registrace. Před pokračováním si prohlédněte oznámení a web každého poskytovatele; dostupnost a limity rychlosti jsou řízeny třetími stranami.", + "loading": "Načítání bezplatných poskytovatelů...", + "loadFailed": "Nelze načíst volné poskytovatele.", + "alreadyConfigured": "Všechny způsobilé bezplatné poskytovatele jsou již nakonfigurováni.", + "reviewProviderSite": "Zkontrolujte web poskytovatele a podmínky", + "confirmation": "Prozkoumal jsem tyto třetí strany a chci, aby OmniRoute vytvořil vybraná spojení.", + "setupSelected": "Nastavit vybrané poskytovatele", + "settingUp": "Nastavuje se...", + "setupFailed": "Nepodařilo se nastavit vybrané poskytovatele. Nic stávajícího nebylo změněno.", + "retryFailed": "Zkusit znovu selhané poskytovatele", + "orUseApiKey": "nebo se připojte pomocí API klíče", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "vytvořeno", + "skipped": "již nakonfigurováno", + "failed": "neúspěšné" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Povinně. Základní API URL poskytovatele.", "iconUrlLabel": "URL ikony", "iconUrlHint": "Volitelné. URL obrázku zobrazeného jako ikona tohoto poskytovatele.", + "iconUrlInvalid": "Neplatná URL ikony. Použijte http(s):// nebo data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibilní (produkční)", "tokenRefreshed": "Token úspěšně obnoven", "tokenRefreshFailed": "Obnovení tokenu selhalo", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Relace je již aktuální", "applyCodexAuthLocal": "Použít autorizaci", "exportCodexAuthFile": "Export autorizace", "applyClaudeAuthLocal": "Použít autorizaci", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Vložit klíč API…", "zedSaving": "Ukládání…", "zedImportAction": "Importovat", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Povolit automatické obnovení relace kurzoru", + "cursorAgentNudgeBody": "Nainstalujte cursor-agent pro automatické obnovení relace — bez něj je třeba Cursor připojení periodicky ručně obnovovat přibližně každých 24 hodin.", + "cursorAgentNudgeDismiss": "Zavřít", "zedManualImportFailed": "Ruční import se nezdařil", "zedManualImportSuccess": "Byl importován token {provider} ze Zedu", "grokImportTitle": "Importovat ověření Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Bezplatná úroveň pro serverless inferenci – není vyžadována platební karta", "gemini": "Navždy zdarma: 1 500 požadavků/den pro Gemini 2.5 Flash – bez platební karty, klíč získáte na aistudio.google.com", "gigachat": "Připojte GigaChat (Sber) pomocí API klíče.", - "github-models": "Vytvořte GitHub PAT s rozsahem 'models: read' na github.com/settings/tokens", "gitlab": "Osobní přístupový token (PAT) GitLab pro veřejné rozhraní API Code Suggestions. Pokud nepoužíváte gitlab.com, nakonfigurujte vlastní základní URL.", "gitlawb-gmi": "Získejte svůj API klíč z nástěnky Gitlawb Opengateway.", "gitlawb": "Získejte svůj API klíč z nástěnky Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Připojte Kimi Coding pomocí stávajícího toku OAuth.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Připojit OpenAI Codex pomocí stávajícího toku OAuth.", - "qwen": "Připojit Qwen Code pomocí stávajícího toku OAuth." + "qwen": "Připojit Qwen Code pomocí stávajícího toku OAuth.", + "github-models": "Vytvořte GitHub PAT s rozsahem 'models: read' na github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} přijímá ID modelu nativního poskytovatele. Importujte z /models nebo přidejte vlastní ID pro směrování.", "bedrockModelsDescription": "Modely Amazon Bedrock jsou vymezeny podle regionu AWS. Importujte z /models nebo přidejte ID modelu Bedrock povolené ve vybrané oblasti.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Když jsou všechny nakonfigurované připojení vyčerpány (kvóta, kredity nebo expirace), dočasně použijte bezklíčovou úroveň tohoto poskytovatele. Vypněte, abyste tohoto poskytovatele přeskočili místo odesílání anonymních požadavků — doporučeno, když bezklíčová úroveň je odmítá (401).", "anonymousFallbackEnabled": "Anonymní záložní možnost povolena pro {provider}", "anonymousFallbackDisabled": "Anonymní záložní možnost zakázána pro {provider} — vyčerpané připojení tuto službu přeskočí", - "anonymousFallbackUpdateFailed": "Nepodařilo se aktualizovat nastavení anonymního záložního režimu" + "anonymousFallbackUpdateFailed": "Nepodařilo se aktualizovat nastavení anonymního záložního režimu", + "batchDeleteFailed": "Hromadné odstranění selhalo", + "batchDeleteNetworkError": "Chyba sítě během hromadného mazání", + "batchUpdateFailed": "Hromadná aktualizace selhala", + "batchUpdateNetworkError": "Chyba sítě během hromadné aktualizace", + "categoryAudio": "Zvuk", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Místní", + "categorySearch": "Hledat", + "categoryWebCookie": "Webová cookie", + "claudeExtraUsageBlockingDisabled": "Blokování nadměrného používání Claude je zakázáno (nadměrné používání je povoleno)", + "claudeExtraUsageBlockingEnabled": "Blokování nadměrného používání Claude je povoleno (nadměrné používání bude zablokováno)", + "claudeRoutingPreferenceDisabled": "Modely Claude bez předpony již nedávají přednost Claude Code", + "claudeRoutingPreferenceEnabled": "Modely Claude bez předpony nyní preferují Claude Code", + "clearMediaFilter": "Vymazat", + "cliproxyRoutingDisabled": "Žádosti nyní používají nativní OmniRoute (přímé)", + "cliproxyRoutingEnabled": "Požadavky nyní procházejí přes CLIProxyAPI (hlubší emulace)", + "codexLimitPolicyUpdated": "Politika limitu Codex byla aktualizována", + "codexServiceModeUpdated": "Režim služby Codex byl aktualizován", + "codexServiceTierActive": "Služební úroveň Codex {tier} je aktivní", + "codexTierFastLabel": "Rychlý", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Nepodařilo se použít příkazový kód auth", + "commandCodeApplyingApproval": "Prohlížeč schválen, aplikuji…", + "commandCodeApplyingKey": "Používání klíče schváleného prohlížečem…", + "commandCodeApprovalInstructions": "Otevřete auth URL, schvalte přístup a poté vložte vrácený klíč/JSON/URL níže…", + "commandCodeAuthExpired": "Kód příkazu auth vypršel", + "commandCodeConnected": "Příkaz Code připojený", + "commandCodeConnectionAdded": "Připojení příkazu Code bylo přidáno", + "commandCodeLinkExpired": "Odkaz na příkazový kód vypršel", + "commandCodeOpeningStudio": "Otevírám Command Code Studio…", + "commandCodePopupBlocked": "Vyskakovací okno bylo zablokováno. Prosím, povolte vyskakovací okna a zkuste příkaz Code Connect znovu.", + "commandCodeStartFailed": "Nepodařilo se spustit příkaz Code auth", + "connectionDeleted": "Připojení bylo smazáno", + "connectionFallback": "připojení", + "coolingConnectionsDescription": "Tyto připojení vrátily 429 (omezení rychlosti) při posledním požadavku. OmniRoute je přeskočí, dokud nevyprší časovač — není potřeba manuální deaktivace.", + "coolingConnectionsTitle": "Aktuálně chlazení ({count})", + "failedDeleteAlias": "Nepodařilo se smazat alias", + "failedDeleteConnection": "Nepodařilo se smazat připojení", + "failedDistributeProxies": "Nepodařilo se rozdělit proxy.", + "failedSaveModelEndpointSettings": "Nepodařilo se uložit nastavení koncového bodu modelu", + "failedUpdateClaudeExtraUsagePolicy": "Nepodařilo se aktualizovat politiku nadměrného používání Claude", + "failedUpdateClaudeRoutingPreference": "Nepodařilo se aktualizovat preference směrování kódu Claude", + "failedUpdateCliproxyRouting": "Nepodařilo se aktualizovat směrování CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Nepodařilo se aktualizovat politiku limitu Codex", + "failedUpdateCodexServiceMode": "Nepodařilo se aktualizovat režim služby Codex", + "filterByMedia": "Média", + "freeBadge": "Zdarma", + "kimiCodeApiKeyLabel": "Kimi Code API Klíč", + "modelTestFailed": "Test modelu selhal", + "modelTestNetworkError": "Chyba sítě při testování modelu", + "networkError": "Chyba sítě", + "networkErrorDeletingAlias": "Chyba sítě při odstraňování aliasu", + "networkErrorSettingAlias": "Chyba sítě při nastavování aliasu", + "noProvidersMatch": "Žádní poskytovatelé neodpovídají vašemu vyhledávání.", + "noSavedProxies": "Žádné uložené proxy nebyly nalezeny. Nejprve přidejte proxy v Nastavení → Proxy.", + "pageLoadErrorDescription": "Nyní se nám nepodařilo načíst data poskytovatele. Zkontrolujte své připojení a zkuste to znovu.", + "pageLoadErrorId": "Chyba ID: {id}", + "pageLoadErrorRetry": "Zkusit znovu", + "pageLoadErrorTitle": "Nepodařilo se načíst poskytovatele", + "playgroundTitle": "Hřiště", + "providerDetailConnectionFlexActive": "Úroveň služby Codex flex je aktivní pro toto připojení", + "providerDetailConnectionPriorityActive": "Úroveň prioritní služby Codex je aktivní pro toto připojení", + "providerDetailGlobalFlexActive": "Globální úroveň služby Codex flex je aktivní", + "providerDetailGlobalPriorityActive": "Globální úroveň prioritní služby Codex je aktivní", + "proxiesDistributed": "Distribuované {assigned} přiřazení proxy napříč {tagLabel}{total} připojeními.", + "rerankEndpoint": "Znovu seřadit", + "savedModelEndpointSettings": "Nastavení koncového bodu uloženého modelu", + "searchByModelAria": "Hledat podle modelu", + "selectSupportedEndpoint": "Vyberte alespoň jeden podporovaný koncový bod", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Nastavení", @@ -6460,7 +6719,24 @@ "loadFailed": "Nepodařilo se načíst seznam odběrů", "toggleFailed": "Přepnutí přepínače se nezdařilo", "refreshFailed": "Obnovení se nezdařilo", - "deleteFailed": "Smazání se nezdařilo" + "deleteFailed": "Smazání se nezdařilo", + "add": "Přidat", + "cancel": "Zrušit", + "configure": "Konfigurovat", + "copyEndpoint": "Kopírovat koncový bod", + "coreEndpointHint": "Nápověda k Hlavnímu Endpointu", + "coreNodesHint": "Nápověda k Hlavním Uzlům", + "create": "Vytvořit", + "deleteConfirm": "Potvrzení smazání", + "empty": "Prázdné", + "globalModeDescription": "Popis globálního režimu", + "localCoreHint": "Místní jádro nápovědy", + "nodeSummary": "Shrnutí uzlu", + "providerRequired": "Poskytovatel je vyžadován", + "providerRouting": "Směrování poskytovatele", + "refresh": "Obnovit", + "refreshInterval": "Interval Obnovování", + "ruleModeDescription": "Popis režimu pravidel" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Před směrováním požadavků s obrázky na čistě textové modely spustit automatický záložní převod obrazu na text.", "visionBridgeEnabledLabel": "Povoleno", "visionBridgeEnabledDesc": "Přepnout přemostění před voláním, které nahrazuje obrazové části extrahovaným textem.", + "visionBridgeRerouteTextOnlyLabel": "Přesměrovat modely pouze pro text", + "visionBridgeRerouteTextOnlyDesc": "Odešlete kompletní požadavek, včetně obrázků, na mostový model, když vybraný model nemá vstup pro obrázky.", "visionBridgeModel": "Model mostu", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Zde lze použít jakékoli ID modelu OmniRoute, které podporuje vision.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Klíči API chybí oprávnění manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Jeden nebo více prefixů cílí na trasy podporující spawn a nelze je obejít.", "GENERIC": "Nepodařilo se aktualizovat nastavení authz." - } + }, + "remove": "Odstranit" }, "resilienceBaseCooldownLabel": "Základní cooldown", "scopeLabel": "Rozsah", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testování zvuku…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip(y) přepsány pomocí {model}", "modalityBridgeAudioTestNoop": "Audio Bridge se nepodařilo aktivovat (cílové zařízení může podporovat audio, žádný poskytovatel STT není připojen, nebo je most deaktivován)", - "modalityBridgeAudioTestError": "Test zvuku selhal: {message}" + "modalityBridgeAudioTestError": "Test zvuku selhal: {message}", + "modelRoutingDescriptionPlaceholder": "Smerujte modely Opus na kombinaci frontier", + "cliproxyapiFallbackCodes": "Cliproxyapi Záložní Kódy", + "cliproxyapiFallbackDescription": "Popis záložního režimu Cliproxyapi", + "cliproxyapiHealthLabel": "Zdraví Cliproxyapi", + "cliproxyapiImportFailed": "Cliproxyapi Import Neúspěšný", + "cliproxyapiImportResult": "Výsledek importu Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi Neplatná URL", + "cliproxyapiLifecycleNoticeAfter": "Oznámení o životním cyklu Cliproxyapi Po", + "cliproxyapiLifecycleNoticeBefore": "Oznámení o životním cyklu Cliproxyapi Před", + "cliproxyapiLifecycleNoticeLink": "Odkaz na Oznámení o Životním Cyklu Cliproxyapi", + "cliproxyapiPortLabel": "Port štítku Cliproxyapi", + "cliproxyapiStatusLabel": "Stav štítku Cliproxyapi", + "cliproxyapiVersionLabel": "Verze Cliproxyapi", + "collection": "Kolekce", + "errorPage": { + "description": "Nastavení se momentálně nepodařilo načíst. Zkuste to prosím za několik sekund.", + "errorId": "Chyba ID: {id}", + "retry": "Zkusit znovu", + "title": "Nepodařilo se načíst nastavení" + }, + "host": "Host", + "notInstalled": "Není nainstalováno", + "oneproxyActions": "Akce Oneproxy", + "oneproxyActive": "Oneproxy Aktivní", + "oneproxyAnonymity": "Anonymita Oneproxy", + "oneproxyCountry": "JednoProxy Země", + "oneproxyDelete": "Oneproxy Smazat", + "oneproxyEmpty": "Oneproxy Prázdný", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latence", + "oneproxyProtocol": "Oneproxy Protokol", + "oneproxyQuality": "Kvalita Oneproxy", + "oneproxySyncFailed": "Synchronizace se nezdařila: {error}", + "oneproxySyncSuccess": "Synchronizováno {total} proxy ({added} nové, {updated} aktualizované)", + "proxyDocumentationSocks5DescAfter": "Dokumentace proxy Socks5 Popis Po", + "proxyFreePoolAddProxy": "Přidat proxy do bezplatného poolu", + "proxyFreePoolAdding": "Přidání proxy zdarma do poolu", + "proxyFreePoolSelectProxy": "Výběr proxy z bezplatného poolu", + "proxyStatusActive": "Stav proxy Aktivní", + "proxyStatusInactive": "Stav proxy neaktivní", + "routingAddEntry": "Přidat položku", + "settingSaveFailed": "Uložení nastavení se nezdařilo", + "settingSaved": "Nastavení Uloženo", + "skillsmpApiKeyHintAfter": ". Limity požadavků: {limit} požadavků/den.", + "skillsmpApiKeyHintBefore": "Získejte svůj API klíč z", + "syncFailed": "Synchronizace selhala", + "unhealthy": "Nezdravé", + "oneproxyDescription": "Získejte a otáčejte volné validované proxy ze platformy komunity 1proxy", + "oneproxySyncing": "Synchronizuji...", + "oneproxySyncNow": "Synchronizovat nyní", + "oneproxyClearAll": "Vymazat vše", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Smazat všechny 1proxy proxy?", + "memorySkillsSkillsmpDescription": "Připojte se k SkillsMP a objevte a nainstalujte dovednosti z tržiště.", + "memorySkillsActiveProviderDescription": "Vyberte, kterého poskytovatele používá stránka Dovednosti pro vyhledávání a instalaci.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Tržiště", + "memorySkillsSkillsmpProviderDescription": "Autentizovaný trh (používá váš klíč API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "adresář skills.sh", + "memorySkillsSkillsshProviderDescription": "Poskytovatel veřejného adresáře (není vyžadován žádný API klíč).", + "routingCcBridgeCatalogName": "Most kompatibilní CC most", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Nativní poskytovatel Claude s tokeny vydanými OAuth.", + "routingCcBridgeName": "Claude-Code Most", + "routingCcBridgeDescription": "Přeposílejte koncové body pomocí API klíčů (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Vlastní poskytovatel.", + "routingUnknownOpKind": "Neznámý typ operace: {kind}", + "routingInvalidJson": "Neplatný JSON: {error}", + "routingConfigMustBeObject": "Konfigurace musí být JSON objekt", + "routingEnabledMustBeBoolean": "`enabled` musí být pravda nebo nepravda", + "routingPipelineMustBeArray": "`pipeline` musí být pole ops", + "routingPipelineTooLong": "Pipeline nemůže překročit 50 operací", + "routingOpMissingKind": "Op #{index}: chybí nebo je neplatný `kind`", + "routingOpUnknownKind": "Op #{index}: neznámý typ \"{kind}\"", + "routingJsonEditorHide": "Skrýt editor JSON", + "routingJsonEditorImportExport": "Import / export JSON", + "routingJsonEditorLabel": "JSON (upravit a použít, nebo vložit pro import)", + "routingApplyJson": "Použít JSON", + "routingTransformsFootnote": "Všechny transformační operace jsou idempotentní při opětovném spuštění. Změny se projeví okamžitě při další žádosti.", + "cliproxyapiUnknown": "Neznámý", + "cliproxyapiVersion": "Verze", + "cliproxyapiHealth": "Zdraví", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Kolekce" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Plná", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Výchozí", + "off": "Vypnuto", + "lite": "Lite", + "standard": "Standardní", + "aggressive": "Agresivní", + "ultra": "Ultra", + "responsesToolOutput": "Výstup nástroje odpovědí" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Spouští se jako poslední v zásobníku (poté, co RTK/Caveman vyčistí text a OmniGlyph převede zbytek na obrázky) a běží také samostatně v režimu omniglyph. Toto je náhled a ve výchozím nastavení zůstává vypnutý, dokud nebude dokončeno end-to-end ověření.", "saved": "Uloženo.", "saveFailed": "Nepodařilo se uložit.", - "enableAria": "Povolit engine OmniGlyph" + "enableAria": "Povolit engine OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Vestavěné služby", @@ -8745,7 +9118,7 @@ "resultFailed": "Nepodařilo se", "expandResult": "Rozbalte podrobnosti o výsledku", "collapseResult": "Sbalit podrobnosti výsledku", - "detailsContains": "Obsahuje: \"{termín}\"", + "detailsContains": "Contains: \"{term}\"", "detailsRegex": "Regex: {pattern}", "detailsExpected": "Očekáváno: \"{expected}\"", "expectedOutputLabel": "Očekávaný výstup", @@ -9127,7 +9500,49 @@ "unableToLoad": "Nelze načíst systémové metriky", "product": "Produkt", "resources": "Zdroje", - "company": "Společnost" + "company": "Společnost", + "tokenHealthTooltips": { + "allHealthy": "Všechny tokeny jsou zdravé", + "needsAttention": "Některé tokeny potřebují pozornost", + "refreshFailures": "Byly zjištěny chyby při obnovení tokenu", + "unknown": "Zdravotní stav neznámý" + }, + "systemMonitor": { + "metricsAriaLabel": "Systémové metriky", + "memory": "Paměť", + "memoryShort": "mem", + "uptime": "Dostupnost", + "ariaLabel": "Sledování systému", + "title": "Systémový Monitor", + "version": "Verze", + "connections": "Připojení", + "circuitBreakers": "Jističe", + "open": "{count} otevřeno", + "memoryUsage": "Využití paměti" + }, + "never": "Nikdy", + "justNow": "Právě teď", + "minutesAgo": "před {count}m", + "hoursAgo": "před {count}h", + "tokens": "Tokeny", + "costs": "Náklady", + "autoRefresh": "Automatické obnovení ({seconds}s)", + "toggleAutoRefresh": "Přepnout automatické obnovení", + "activeRequests": "Aktivní požadavky", + "totalRequests": "Celkový počet požadavků", + "totalInputTokens": "Celkový počet vstupních tokenů", + "model": "Model", + "provider": "Poskytovatel", + "requests": "Žádosti", + "lastUsed": "Naposledy Použito", + "inputTokens": "Vstupní tokeny", + "totalTokens": "Celkové tokeny", + "inputCost": "Náklady na vstup", + "outputCost": "Náklady na výstup", + "noUsageData": "Zatím nebyla zaznamenána žádná použití. Pro zobrazení dat zde proveďte nějaké požadavky.", + "account": "Účet", + "accountLabel": "Účet {id}", + "noAccountUsage": "Žádné údaje o používání specifické pro účet zatím nebyly zaznamenány. Pro zobrazení dat zde provádějte požadavky pomocí účtů OAuth." }, "auth": { "welcome": "Vítejte", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Obnovit přes data aplikace", + "resetViaAppDataDescription": "Odstraňte soubor nastavení z adresáře dat aplikace pro resetování vašeho hesla:", + "quitDesktopApp": "Úplně ukončete desktopovou aplikaci OmniRoute", + "navigateToAppDataDirectory": "Přejděte do adresáře s daty aplikace:", + "checkSystemAppDataFolder": "(Zkontrolujte složku s daty aplikace systému)", + "relaunchDesktopFreshSetup": "Znovu spusťte desktopovou aplikaci OmniRoute — spustí se nové nastavení", + "alternativeSetPasswordTitle": "Alternativa: Nastavit Nové Heslo", + "alternativeSetPasswordDescription": "Nastavte nové počáteční heslo prostřednictvím souboru prostředí serveru:", + "openServerEnvFilePrefix": "Otevřít", + "relaunchDesktopApp": "Znovu spusťte desktopovou aplikaci OmniRoute", + "codexLinkInvalidOrExpired": "Tento odkaz je neplatný nebo vypršel.", + "codexValidationServerError": "Nepodařilo se připojit k serveru pro ověření tohoto odkazu.", + "codexSaveConnectionError": "Nepodařilo se uložit připojení. Odkaz mohl vypršet.", + "codexDeviceLoginDisabled": "Přihlášení pomocí kódu zařízení je pro tento účet OpenAI zakázáno. Povolte to v nastavení zabezpečení ChatGPT (nebo se obraťte na správce vaší pracovní skupiny).", + "codexAuthorizationTimedOut": "Autorizace vypršela. Klikněte na Začít znovu pro opakování.", + "authenticationCancelled": "Ověření bylo zrušeno.", + "unexpectedAuthenticationError": "Neočekávaná chyba během ověřování. Zkuste to prosím znovu.", + "connectOpenAiCodexTitle": "Připojit OpenAI Codex", + "codexConnectDescription": "Autorizujte účet ChatGPT, abyste dokončili nastavení tohoto připojení.", + "validatingCodexLink": "Ověřování odkazu…", + "codexGenerateCodeDescription": "Klikněte níže pro vygenerování jednorázového kódu, poté se přihlaste do OpenAI.", + "startCodexFlow": "Začít", + "requestingOpenAiCode": "Žádám o kód od OpenAI…", + "codexVerificationInstructions": "1. Otevřete ověřovací stránku OpenAI a 2. zadejte tento kód. Tato stránka se automaticky aktualizuje, jakmile autorizujete.", + "yourCode": "Váš kód", + "openVerificationPage": "Otevřít ověřovací stránku", + "copyUrlShort": "Kopírovat URL", + "savingConnection": "Ukládání připojení…", + "codexConnected": "Připojeno!", + "codexConnectionRegistered": "Účet Codex byl zaregistrován. Můžete zavřít tuto kartu.", + "tryAgain": "Zkus to znovu", + "traeAuthorizationSuccess": "Trae autorizace ✓", + "traeAuthorizationFailed": "Trae autorizace selhala", + "closeAuthorizationWindow": "Toto okno můžete zavřít.", + "returnToDashboard": "Vraťte se na řídicí panel.", + "resetViaAppData": "Obnovit přes data aplikace", + "deleteSettingsToReset": "Odstraňte soubor nastavení z adresáře dat aplikace, abyste resetovali své heslo:", + "quitAppCompletely": "Úplně ukončete desktopovou aplikaci OmniRoute", + "navigateToAppData": "Přejděte do adresáře s daty aplikace", + "checkAppDataFolder": "Zkontrolujte složku s daty aplikací systému", + "deleteSettingsJson": "Smazat", + "relaunchAppFresh": "Znovu spusťte desktopovou aplikaci OmniRoute — spustí se nové nastavení", + "alternativeSetPassword": "Alternativa: Nastavit Nové Heslo", + "setNewPasswordViaEnv": "Nastavte nové počáteční heslo prostřednictvím souboru prostředí serveru:", + "openServerEnv": "Otevřít", + "inDataDirectory": "v datovém adresáři", + "addOrUpdate": "Přidat nebo aktualizovat", + "deleteAndRelaunch": "Smazat", + "settingsJson": "settings.json", + "fromDataDir": "z datového adresáře", + "relaunchApp": "Znovu spusťte desktopovou aplikaci OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Jste připraveni zjednodušit svou AI infrastrukturu?", "ctaDescription": "Přidejte se k vývojářům, kteří zefektivňují AI integraci pomocí OmniRoute. Open source a zdarma ke stažení.", "startFree": "Začít zdarma", - "readDocumentation": "Přečíst dokumentaci" + "readDocumentation": "Přečíst dokumentaci", + "company": "Společnost", + "pricing": "Cenové možnosti", + "apiReference": "API Referenční Příručka", + "helpCenter": "Centrum Nápovědy", + "about": "O aplikaci", + "blog": "Blog", + "contact": "Kontakt", + "terms": "Podmínky", + "privacy": "Ochrana soukromí", + "license": "Licence", + "footerDescription": "Unifikované rozhraní pro moderní AI infrastrukturu. Bezpečné, pozorovatelné a škálovatelné.", + "communityDiscussions": "Diskuze v komunitě" }, "docs": { "title": "Dokumentace", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Zaregistrujte a spravujte agenty prostřednictvím registru AKT pro komunikaci mezi agenty a sdílení nástrojů.", "protocolAcpStep1": "Chcete-li zobrazit registrované agenty AKT, přejděte na Dashboard → Agents.", "protocolAcpStep2": "Zaregistrujte nové agenty se schopnostmi a konfigurací koncových bodů.", - "protocolAcpStep3": "Ke konfiguraci komunikačních kanálů agentů použijte nástroje CLI." + "protocolAcpStep3": "Ke konfiguraci komunikačních kanálů agentů použijte nástroje CLI.", + "metadataTitleTemplate": "%s — OmniRoute Dokumentace", + "metadataDefaultTitle": "Dokumentace OmniRoute", + "metadataDescription": "Komplexní dokumentace pro OmniRoute AI gateway — nastavení, API, komprese, nasazení a další.", + "layoutNavTitle": "OmniRoute Dokumentace", + "layoutHomeLink": "Domovská stránka dokumentace", + "layoutDashboardLink": "← Zpět na Řídicí panel", + "homeTitle": "Dokumentace OmniRoute", + "homeMetadataDescription": "Vše, co potřebujete k směrování, kompresi a škálování vaší AI — průvodce nastavením, API reference, komprese, nasazení a další.", + "homeTwitterDescription": "Komplexní dokumentace pro OmniRoute AI gateway", + "homeDescription": "Vše, co potřebujete k směrování, kompresi a škálování vaší AI", + "homeSearchHint": "Stiskněte Ctrl K pro vyhledání v dokumentaci", + "featuredQuickStartTitle": "Rychlý Start", + "featuredQuickStartDescription": "Spusťte OmniRoute za 3 minuty", + "featuredAutoComboTitle": "Auto-Combo Průvodce", + "featuredAutoComboDescription": "Nechte OmniRoute vybrat pro vás nejlepší AI", + "featuredProvidersTitle": "Průvodce poskytovateli", + "featuredProvidersDescription": "Připojte poskytovatele AI během několika minut", + "nonTechUsersTitle": "Pro netechnické uživatele", + "nonTechUsersSubtitle": "Začněte rychle — není potřeba technické zázemí", + "techUsersTitle": "Pro technické uživatele", + "techUsersSubtitle": "Hluboké ponoření do architektury, API a vnitřností", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interaktivní API prozkoumávatel — vyzkoušejte koncové body OmniRoute naživo s odpověďmi v reálném čase", + "apiExplorerTitle": "API Průzkumník", + "apiExplorerDescription": "Vyzkoušejte živé koncové body OmniRoute. Vyberte koncový bod, nakonfigurujte svou žádost a sledujte odpověď v reálném čase.", + "apiExplorerSseStarted": "SSE stream byl spuštěn — zkontrolujte terminál/devtools pro výstup v reálném čase.", + "apiExplorerError": "Chyba: {message}", + "apiExplorerAuth": "autentizace", + "apiExplorerResponseLabel": "Odpověď", + "apiExplorerSelectEndpoint": "Vyberte koncový bod k prozkoumání", + "apiExplorerChooseApi": "Vyberte API z postranního panelu, abyste viděli podrobnosti a vyzkoušeli to naživo", + "feedbackThanks": "Děkujeme za vaši zpětnou vazbu!", + "feedbackQuestion": "Byla tato stránka užitečná?", + "pageMetadataTitle": "{title} — OmniRoute Dokumentace", + "pageMetadataDescription": "Dokumentace OmniRoute: {title}", + "breadcrumb": "Drobná navigace", + "apiReferenceTable": { + "parameters": "Parametry", + "name": "Jméno", + "type": "Typ", + "description": "Popis", + "returns": "Vrátí", + "typePrefix": "Typ:" + } }, "legal": { "privacyPolicy": "Zásady ochrany osobních údajů", @@ -9957,7 +10479,42 @@ "successMessage": "Váš účet {providerName} byl připojen.", "done": "Hotovo", "error": "Připojení se nezdařilo", - "tryAgain": "Zkuste to znovu" + "tryAgain": "Zkuste to znovu", + "errorSessionIncomplete": "OAuth relace není kompletní (chybí přesměrovací URI nebo ověřovač kódu). Restartujte připojení a zkuste to znovu.", + "errorExchangeFailed": "Výmena se nezdařila", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Výchozí Google OAuth přihlašovací údaje fungují pouze na localhostu. Pro vzdálené použití nakonfigurujte své vlastní OAuth přihlašovací údaje pomocí proměnných prostředí: ANTIGRAVITY_OAUTH_CLIENT_ID a ANTIGRAVITY_OAUTH_CLIENT_SECRET. Podívejte se na sekci README 'OAuth na vzdáleném serveru'.", + "errorSaveFailed": "Uložení se nezdařilo", + "errorAuthorizationFailed": "Autorizace selhala", + "errorAuthorizationTimeout": "Časový limit autorizace", + "errorRequestFailed": "Žádost selhala", + "errorCallbackServerFailed": "Nepodařilo se spustit server pro zpětné volání", + "errorBrowserUnavailable": "Prohlížeč OAuth není pro tohoto poskytovatele v aktuálním prostředí k dispozici. Místo toho použijte podporovanou metodu ověřování.", + "errorStateMismatch": "Neshoda stavu OAuth. Restartujte připojení a zkuste to znovu.", + "errorImportAccessToken": "Nepodařilo se importovat přístupový token", + "errorSessionNotInitialized": "OAuth relace nebyla inicializována. Restartujte tok připojení a zkuste to znovu.", + "errorNoAuthorizationCode": "Nebyl nalezen žádný autorizační kód. Vložte URL zpětného volání nebo autorizační kód.", + "tabDeviceCode": "Kód zařízení", + "tabBrowserLogin": "Přihlášení v prohlížeči", + "tabImportAuthJson": "Importovat auth.json", + "tabPasteApiKey": "Vložte API klíč", + "windsurfPasteDescription": "V IDE Windsurf / VS Code spusťte příkaz \"Windsurf: Poskytnout autentizační token\" z palety příkazů (nebo klikněte na tlačítko Jupyter \"Získat autentizační token Windsurf\"), poté zkopírujte zobrazený token a vložte jej níže. Otevření windsurf.com/show-auth-token přímo pouze zobrazí stránku \"Přesměrování\" — tok musí iniciovat IDE.", + "grokAuthJsonDescription": "Vložte CELÝ obsah ~/.grok/auth.json (nejen pole JWT \"key\"). Holý JWT nemá refresh_token, takže připojení vyprší po uplynutí platnosti (#7610). Při dostupnosti upřednostněte specializovaný modální dialog pro import auth.json.", + "devinDesktopPasteDescription": "Vložte existující API klíč Devin z ověřené relace Devin. Dostupnost exportu klíče a kroky se liší podle verze a účtu Devin.", + "devinPasteDescription": "Zadejte svůj WINDSURF_API_KEY (získaný pomocí `devin auth login`, nebo prostřednictvím příkazu \"Windsurf: Poskytnout Auth Token\" v IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Klíč / Token", + "saving": "Ukládání…", + "saveConnection": "Uložit připojení", + "gheDescription": "Zadejte základní URL vaší instance GitHub Enterprise (např. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "Je vyžadována URL adresa GitHub Enterprise", + "gitlabDuoSetupTitle": "Nastavení GitLab Duo OAuth", + "gitlabDuoSetupMessage": "GitLab Duo OAuth není nakonfigurován. Zaregistrujte OAuth aplikaci na {applicationsUrl} s přesměrovací URI {redirectUri} a rozsahy \"{scopes}\", poté nastavte {clientIdEnv} (a volitelně {clientSecretEnv}) a restartujte.", + "gitlabDuoSetupDescription": "Po registraci aplikace a nastavení proměnných prostředí na této instanci OmniRoute klikněte na Pokračovat pro zahájení přihlášení pomocí OAuth.", + "continue": "Pokračovat" }, "cursorAuthModal": { "title": "Připojte kurzorové IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Načíst další", - "loadingMore": "Načítání dalších..." + "loadingMore": "Načítání dalších...", + "correlationId": "ID korelace", + "group": { + "showAllRows": "Zobrazit všechny řádky", + "showLatestPerCorrelation": "Zobrazit nejnovější podle ID korelace", + "grouped": "Seskupeno" + }, + "running": "běží", + "interval": { + "decrease": "Snížit interval", + "title": "Interval automatického obnovení v sekundách", + "increase": "Zvýšit interval" + }, + "status": { + "inProgress": "Probíhá", + "recoveredByRetry": "Obnoveno opětovným pokusem", + "goToParent": "Přejít na nadřazenou žádost", + "healedTitle": "Selhalo, zotaveno po {count} pokusech", + "healed": "uzdraveno", + "failedTitle": "Všechny {count} pokusy selhaly", + "failed": "neúspěšné", + "pinnedTitle": "Model vybrán prostřednictvím připnutí relace kontextové cache", + "pinned": "připnutý" + }, + "attempts": "pokusy", + "detail": { + "collapse": "Sbalit {title}", + "expand": "Rozbalit {title}", + "copyTitle": "Kopírovat {title}", + "copied": "Zkopírováno!", + "copy": "Kopírovat", + "autoscrollOn": "Automatické posouvání: zapnuto", + "autoscrollOff": "Automatické posouvání: vypnuto", + "payload": { + "clientRawRequest": "Klientský Raw Request", + "clientRequest": "Žádost klienta", + "openaiRequest": "OpenAI Žádost", + "providerRequest": "Žádost o poskytovatele", + "providerResponse": "Odpověď poskytovatele", + "clientResponse": "Odpověď klienta", + "pipelineError": "Chyba v pipeline" + }, + "payloadMissing": "Podrobný artefakt payloadu již není k dispozici pro tento záznam protokolu.", + "payloadCorrupt": "Podrobný payload artefakt nebyl možné analyzovat.", + "notAvailable": "N/A", + "semanticCache": "Sémantický (OmniRoute)", + "upstreamCache": "Nadřazený (Poskytovatel)", + "ariaLabel": "Podrobnosti protokolu žádosti", + "completed": "Dokončeno", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute vrátil {status}, i když poskytovatel vrátil {provider}", + "previousRequest": "Předchozí žádost", + "nextRequest": "Další požadavek", + "close": "Zavřít detailní modal", + "startedAt": "Začalo v", + "endedAt": "Skončilo v", + "duration": "Doba trvání", + "model": "Model", + "provider": "Poskytovatel", + "account": "Účet", + "input": "Vstup", + "totalIn": "Celkem příchozí: {value}", + "cacheRead": "Čtení z cache: {value}", + "cacheWrite": "Cache Zápis: {value}", + "compressed": "Zkomprimováno: {from} → {to} ({percent}% ušetřeno)", + "output": "Výstup", + "totalOut": "Celkem ven: {value}", + "reasoning": "Důvod: {value}", + "requestedModel": "Požadovaný model", + "requestProtocol": "Protokol požadavku", + "cacheSource": "Cache Zdroj", + "modelPinning": "Zamykání Modelu", + "activeModelPinning": "Aktivní — model vybraný pomocí připnutí relace", + "rotated": "Otočeno: {initial} -> {final}", + "apiKey": "API Klíč", + "noApiKey": "Žádný API klíč", + "combo": "Kombinace", + "error": "Chyba", + "unblockAll": "Odblokovat vše", + "cleared": "Vymazáno", + "unblock": "Odblokovat", + "relatedRequests": "Související požadavky ({count})", + "current": "aktuální", + "detailStatus": "Detail Stavu", + "loadingDetails": "Načítání podrobností o požadavku...", + "providerEventStream": "Poskytovatel událostí streamu", + "clientEventStream": "Klientský událostní proud", + "eventStream": "Proud Událostí", + "responsePayloadLegacy": "Payload Odpovědi (Legacy)", + "requestPayloadLegacy": "Payload požadavku (Legacy)", + "noPayload": "Žádná data o payloadu nejsou k dispozici pro tento záznam.", + "correlationId": "ID korelace", + "correlationIdValue": "ID korelace: {id}", + "detailedPayloadInfo": "Nejprve povolte podrobné protokolování, pokud chcete čtyřstupňový pohled na payload klienta/poskytovatele pro nové požadavky." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} zakázán", "providerAdded": "{provider} přidán", "add": "Přidat", - "manualApiKey": "Použijte manuální API klíč" + "manualApiKey": "Použijte manuální API klíč", + "createDahlTokenFailed": "Nepodařilo se vytvořit token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Nastavit proxy", + "providerProxyTitleConfigured": "Proxy nakonfigurován: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Omezeno ToS — zkontrolujte podmínky", "caution": "Upozornění — doložky o osobním užití / proxy", "ok": "Obecně benevolentní" - } + }, + "allProviders": "Všichni poskytovatelé", + "noApiKeyRequired": "Není vyžadován žádný API klíč" }, "providerHealthAutopilot": { "title": "Autopilot stavu poskytovatelů", @@ -12390,7 +13047,11 @@ "on": "ZAP", "off": "VYP", "availableProviders": "Dostupní poskytovatelé ({count})", - "noProviderOverrides": "Žádná přepsání — všichni aktivní poskytovatelé se zapojí se svými výchozími modely" + "noProviderOverrides": "Žádná přepsání — všichni aktivní poskytovatelé se zapojí se svými výchozími modely", + "resetFailed": "Obnovení se nezdařilo", + "resetSuccess": "Obnovení konfigurace na výchozí hodnoty", + "running": "Probíhá...", + "testFailed": "Test selhal" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) je zakládající open source přítel OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Poskytovatel nepodporuje zobrazení pro tento požadavek na obrázek", "capabilityFilter.toolsMismatch": "Poskytovatel nepodporuje volání nástroje", "capabilityFilter.structuredOutputMismatch": "Poskytovatel nepodporuje strukturovaný výstup", - "capabilityFilter.contextWindowMismatch": "Žádost překračuje kontextové okno poskytovatele" + "capabilityFilter.contextWindowMismatch": "Žádost překračuje kontextové okno poskytovatele", + "publicSystem": { + "notFound": { + "title": "Stránka nebyla nalezena", + "description": "Stránka, kterou hledáte, neexistuje nebo byla přesunuta.", + "dashboardAriaLabel": "Návrat na řídicí panel", + "statusAriaLabel": "Otevřít stránku stavu systému", + "systemStatus": "Stav systému" + }, + "error": { + "title": "Interní chyba serveru", + "description": "Něco se pokazilo při zpracování vaší žádosti. Náš tým byl informován a pracuje na opravě.", + "errorId": "Chyba ID: {id}", + "detailsAriaLabel": "Podrobnosti o chybě", + "retryAriaLabel": "Zkuste znovu načíst stránku", + "tryAgain": "Zkusit znovu", + "dashboardAriaLabel": "Návrat na řídicí panel", + "statusAriaLabel": "Otevřít stav systému", + "systemStatus": "Stav Systému" + }, + "globalError": { + "title": "Něco se pokazilo", + "description": "Došlo k neočekávané chybě. Tato chyba byla zaznamenána a náš tým ji prozkoumá.", + "detailsAriaLabel": "Podrobnosti o chybě", + "retryAriaLabel": "Zkuste znovu načíst stránku", + "tryAgain": "Zkusit znovu", + "statusAriaLabel": "Otevřít stav systému", + "systemStatus": "Stav Systému" + }, + "offline": { + "title": "Problém s připojením", + "description": "OmniRoute momentálně nemůže dosáhnout sítě. Zkontrolujte své internetové, VPN nebo proxy nastavení.", + "connectionRestored": "Připojení obnoveno", + "offlineModeDetected": "Byl detekován offline režim", + "retryConnection": "Zkusit znovu připojení", + "openStatusPage": "Otevřít stránku stavu" + }, + "maintenance": { + "title": "Plánovaná Údržba", + "description": "Některé služby jsou dočasně nedostupné, zatímco probíhá údržba. Hlavní směrování obvykle zůstává online, ale funkce správy mohou být omezené.", + "suggestion1": "Zkuste to znovu za několik minut.", + "suggestion2": "Zkontrolujte aktuální zdravotní ukazatele a stav poskytovatele před opětovným pokusem.", + "systemStatus": "Zobrazit stav systému", + "healthDashboard": "Otevřít zdravotní panel" + }, + "status": { + "title": "Stav systému", + "description": "Živý operační snímek pro základní služby OmniRoute.", + "loadingHealth": "Načítání zdravotních metrik...", + "failedToLoad": "Nepodařilo se načíst stav systému.", + "unableToReachHealth": "Nelze dosáhnout koncového bodu zdraví. Zkontrolujte připojení a zkuste to znovu.", + "healthCheckFailed": "Kontrola zdraví selhala", + "openConnectivityHelp": "Nápověda k otevřené konektivitě", + "maintenanceInfo": "Informace o údržbě", + "service": "Služba", + "unknown": "neznámý", + "notAvailable": "n/a", + "providersTracked": "Sledovaní poskytovatelé", + "circuitBreakerState": "Stav Obvodu Poskytovatele", + "lastUpdate": "Poslední aktualizace: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Špatný požadavek", + "description": "Payload požadavku je neplatný nebo neúplný.", + "suggestion1": "Zkontrolujte požadovaná pole a formát payloadu před opětovným pokusem.", + "suggestion2": "Pokud používáte API, ověřte JSON schéma lokálně.", + "suggestion3": "Pokud se to bude dít dál, otevřete žádost v Translator Playground, abyste zkontrolovali payload.", + "primaryAction": "Otevřít dokumentaci", + "secondaryAction": "Otevřít překladač" + }, + "401": { + "title": "Neautorizováno", + "description": "K ověření přístupu k tomuto zdroji je vyžadováno ověření.", + "suggestion1": "Přihlaste se znovu a zkuste operaci znovu.", + "suggestion2": "Pro API volání potvrďte, že je přítomný a platný Bearer token.", + "suggestion3": "Pokud byl token nedávno otočen, aktualizujte své klientské údaje.", + "primaryAction": "Přejít na přihlášení", + "secondaryAction": "Spravovat API klíče" + }, + "403": { + "title": "Zakázáno", + "description": "Vaše žádost byla pochopena, ale přístup je podle politiky odepřen.", + "suggestion1": "Zkontrolujte pravidla povoleného/zablokovaného IP v nastavení.", + "suggestion2": "Ověřte model a rozpočtové politiky přiřazené k vašemu API klíči.", + "suggestion3": "Požádejte správce, aby udělil požadovaný rozsah oprávnění.", + "primaryAction": "Nápověda k otevřenému přístupu", + "secondaryAction": "Otevřít nastavení zabezpečení" + }, + "408": { + "title": "Vypršení časového limitu žádosti", + "description": "Server nedostal kompletní požadavek včas.", + "suggestion1": "Zkuste požadavek znovu s menším payloadem.", + "suggestion2": "Zkontrolujte stabilitu své sítě a latenci VPN/proxy.", + "suggestion3": "Pro dlouhé operace povolte streamování nebo rozdělte požadavek.", + "primaryAction": "Otevřít příručku pro koncový bod", + "secondaryAction": "Zkontrolovat stav sítě" + }, + "429": { + "title": "Příliš mnoho požadavků", + "description": "Byly překročeny limity pro tento klient, klíč nebo poskytovatele.", + "suggestion1": "Počkejte na cooldown a zkuste to znovu po navrhovaném intervalu.", + "suggestion2": "Přepnout na kombinaci s náhradními poskytovateli.", + "suggestion3": "Nastavte profily odolnosti/omezení rychlosti poskytovatele v nastavení.", + "primaryAction": "Otevřít nastavení odolnosti", + "secondaryAction": "Otevřít Combos" + }, + "500": { + "title": "Interní chyba serveru", + "description": "Došlo k neočekávané chybě na straně serveru při zpracování vaší žádosti.", + "suggestion1": "Zkuste to znovu za několik sekund.", + "suggestion2": "Zkontrolujte telemetrii zdraví a serverové protokoly pro korelované ID požadavků.", + "suggestion3": "Pokud přetrvává, nahlaste problém s časovým razítkem a kontextem žádosti.", + "primaryAction": "Otevřít zdravotní panel", + "secondaryAction": "Otevřít protokoly" + }, + "502": { + "title": "Špatná brána", + "description": "Poskytovatel upstream nebo integrace brány vrátil neplatnou odpověď.", + "suggestion1": "Zkuste to znovu s jiným poskytovatelem nebo aktivní kombinovanou trasou.", + "suggestion2": "Zkontrolujte pověření poskytovatele a dostupnost modelu.", + "suggestion3": "Zkontrolujte výstup překladače, pokud je zapojena konverze formátu.", + "primaryAction": "Otevřít poskytovatele", + "secondaryAction": "Otevřít překladač" + }, + "503": { + "title": "Služba není k dispozici", + "description": "Služba je dočasně nedostupná z důvodu údržby nebo degradovaných závislostí.", + "suggestion1": "Počkejte chvíli a zkuste to znovu.", + "suggestion2": "Zkontrolujte oznámení o údržbě a stav systému.", + "suggestion3": "Použijte záložní poskytovatele, pokud je váš pracovní postup citlivý na latenci.", + "primaryAction": "Podrobnosti o údržbě", + "secondaryAction": "Stav Systému" + } + } + }, + "kiroAuthModal": { + "title": "Připojit {providerLabel}", + "chooseMethod": "Vyberte si metodu ověření:", + "builderId": "AWS Builder ID", + "builderDescription": "Doporučeno pro většinu uživatelů. Přihlaste se pomocí účtu AWS spojeného s {providerLabel}.", + "organization": "Vaše organizace (AWS IAM Identity Center)", + "organizationDescription": "Použijte startovní URL SSO vaší společnosti (příklad: {url}).", + "googleAccount": "Účet Google", + "googleDescription": "Přihlaste se pomocí svého účtu Google.", + "githubAccount": "Účet GitHub", + "githubDescription": "Přihlaste se pomocí svého účtu GitHub.", + "importToken": "Importovat Token", + "importDescription": "Vložte obnovovací token exportovaný z {providerLabel}.", + "apiKey": "API Klíč", + "apiKeyDescription": "Vložte dlouhodobý {providerLabel} / CodeWhisperer API klíč. Je uložen jako bearer přihlašovací údaje bez refresh tokenu; objevování profilu je na nejlepší úsilí.", + "idcStartUrl": "IDC Start URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL vašeho AWS IAM Identity Center organizace", + "awsRegion": "AWS Region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS region pro vaše Identity Center (výchozí: us-east-1)", + "continue": "Pokračovat", + "back": "Zpět", + "autoDetecting": "Automatické zjišťování tokenu...", + "readingCredentials": "Načítání přihlašovacích údajů {providerLabel} z mezipaměti AWS SSO", + "tokenNotDetected": "Token {providerLabel} nebyl automaticky detekován. Prosím, vložte svůj obnovovací token ručně.", + "refreshToken": "Obnovovací Token", + "tokenPlaceholder": "Token bude automaticky vyplněn...", + "importing": "Importuji...", + "apiKeyPlaceholder": "Vložte svůj {providerLabel} API klíč...", + "apiKeyStoredDescription": "Uloženo šifrované jako dlouhodobé nositelné pověření. Neexistuje žádný tok obnovení.", + "apiKeyRegionDescription": "AWS region pro klíč (výchozí: us-east-1)", + "validating": "Ověřování...", + "validateAndSaveApiKey": "Ověřit a Uložit API Klíč", + "errorAutoDetect": "Nelze automaticky detekovat token", + "errorAutoDetectFailed": "Nepodařilo se automaticky detekovat token", + "errorRefreshTokenRequired": "Prosím zadejte obnovovací token", + "errorImportFailed": "Import selhal", + "errorApiKeyRequired": "Zadejte prosím klíč API Kiro", + "errorApiKeyImportFailed": "Import klíče API se nezdařil", + "errorIdcStartUrlRequired": "Prosím, zadejte svou IDC startovací URL" + }, + "kiroSocialOAuthModal": { + "title": "Připojit {providerLabel} přes {providerName}", + "errorStartAuthorization": "Nepodařilo se spustit autorizaci", + "errorAuthorizationExpired": "Autorizace vypršela. Spusťte znovu proces přihlášení.", + "errorAuthorizationFailed": "Autorizace selhala", + "initializing": "Inicializace...", + "settingUp": "Nastavení ověřování {providerName}", + "openIncognito": "Otevřete tento odkaz v okně Inkognito", + "incognitoDescription": "Použijte okno Incognito/Private, abyste se vyhnuli konfliktům se stávajícími účty.", + "copyLink": "Kopírovat odkaz", + "verificationCode": "Ověřovací kód", + "waiting": "Čekání na autorizaci...", + "cancel": "Zrušit", + "successTitle": "Úspěšně připojeno!", + "successMessage": "Váš účet {providerLabel} přes {providerName} byl připojen.", + "done": "Hotovo", + "errorTitle": "Připojení se nezdařilo", + "close": "Zavřít" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorizace selhala", + "errorPopupBlocked": "Vyskakovací okno bylo zablokováno — povolte vyskakovací okna pro tuto stránku, nebo vložte token ručně níže.", + "errorPopupClosed": "Okno autorizace bylo zavřeno před dokončením.", + "errorAccessTokenRequired": "Je vyžadován přístupový token.", + "errorImportFailed": "Import selhal", + "title": "Připojit Trae SOLO", + "authorizeDescription": "Autorizujte se přes trae.ai v okně. Okno se samo zavře, jakmile bude token importován.", + "authorizeImportant": "Důležité: nejprve se musíte přihlásit do trae.ai v tomto prohlížeči. Autorizace pouze potvrzuje existující relaci — nemůže vás přihlásit. Pokud vidíte \"Přihlášení se nezdařilo\", klikněte na \"Otevřít solo.trae.ai\", přihlaste se a poté se vraťte sem.", + "waitingForAuthorization": "Čekání na trae.ai…", + "authorizeWithBrowser": "Autorizovat pomocí prohlížeče", + "openSoloTrae": "Otevřít solo.trae.ai", + "orPasteManually": "nebo vložte token ručně", + "manualInstructions": "Přihlaste se na solo.trae.ai, otevřete DevTools → Síť, odešlete jakoukoli zprávu v chatu a zkopírujte JWT z Authorization: Cloud-IDE-JWT {tokenPlaceholder} hlavičky požadavku. Doba platnosti JWT je přibližně 14 dní. Volitelné identitní pole pocházejí z common_params ve stejném těle požadavku.", + "accessTokenLabel": "Přístupový token (Cloud-IDE-JWT)", + "webId": "Web ID", + "optional": "volitelný", + "bizUserId": "ID uživatele Biz", + "userUniqueId": "Jedinečné ID uživatele", + "scope": "Rozsah", + "tenant": "Nájemce", + "region": "Region", + "importing": "Importuji…", + "importToken": "Importovat Token", + "cancel": "Zrušit" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuování...", + "complete": "Dokončit", + "defaultLabel": "Distribuovat Proxies" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "zastaralý", + "risk": "riziko", + "close": "Zavřít", + "model": "Model", + "key": "Klíč", + "defaultKey": "výchozí", + "clearConversation": "Vymazat konverzaci", + "clear": "Vymazat", + "tabs": { + "test": "Test", + "logs": "Protokoly" + }, + "loadingLogs": "Načítání protokolů…", + "failedToLoadLogs": "Nepodařilo se načíst protokoly", + "noLogsYet": "Žádné záznamy zatím", + "noLogsDescription": "Odešlete testovací zprávu z karty Test — protokoly pro tohoto poskytovatele se zde zobrazí.", + "openFullLogs": "Otevřít stránku s úplnými protokoly", + "live": "Živě", + "tailingLast": "sledování posledních {count}", + "refreshNow": "Obnovit nyní", + "refresh": "Obnovit", + "unknownRequester": "neznámý žadatel", + "fields": { + "timestamp": "Časová značka", + "status": "Stav", + "duration": "Doba trvání", + "model": "Model", + "requestedModel": "Požadovaný model", + "provider": "Poskytovatel", + "requester": "Žadatel", + "tokens": "Tokeny" + } + }, + "proxyLog": { + "detailAriaLabel": "Podrobnosti protokolu proxy", + "event": "Proxy Událost", + "close": "Zavřít detailní modal pro proxy", + "time": "Čas", + "latency": "Latence", + "clientIp": "IP klienta", + "proxy": "Proxy", + "direct": "Přímý", + "type": "Typ", + "level": "Úroveň", + "provider": "Poskytovatel", + "tlsFingerprint": "TLS otisk", + "directNative": "Přímý", + "targetUrl": "Cílová URL", + "error": "Chyba", + "configuration": "Konfigurace proxy" + }, + "requestTimeline": { + "title": "Časová osa žádosti", + "modes": { + "follow": "Sledovat", + "followDescription": "Osa se posouvá doleva, čára NOW zůstává na 75%", + "now": "Nyní", + "nowDescription": "Přejít na aktuální čas, řádek NOW se resetuje na střed", + "pan": "Pan", + "panDescription": "Přetáhněte pro prozkoumání, pozadí je zmrazené" + }, + "reset": "Obnovit", + "started": "Začalo", + "ended": "Skončeno", + "duration": "Doba trvání", + "status": "Stav", + "provider": "Poskytovatel", + "tokens": "Tokeny", + "active": "Aktivní", + "other": "Jiné", + "tenMinutes": "10min", + "hour": "hodina", + "day": "den", + "unknownModel": "neznámý", + "pending": "čekající" + }, + "metadata": { + "compressionTitle": "Komprese", + "compressionDescription": "Nastavte nastavení komprese kontextu pro snížení využití tokenů a nákladů.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy koncové body pro vaši AI infrastrukturu", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Sledování LLM volání + ladění HTTPS provozu jakékoli aplikace" + }, + "conductor": { + "title": "Conductor — flotila CLI-agentů", + "subtitle": "OmniConductor hub: běžci, fronta úloh a rady, živě", + "runners": "Běžci", + "tasks": "Úkoly", + "colName": "Jméno", + "colClis": "CLI nástroje", + "colStatus": "Stav", + "colTask": "Úkol", + "colMode": "Režim", + "colRunner": "Běžec", + "colSummary": "Shrnutí", + "online": "online", + "offline": "offline", + "draining": "vypouštění", + "hubOffline": "Conductor hub je offline nebo není nakonfigurován (CONDUCTOR_HUB_URL) — nezobrazuje nic kromě zastaralých dat.", + "noRunners": "Žádní běžci nejsou registrováni", + "noTasks": "Žádné úkoly zatím", + "detailTitle": "Podrobnosti úkolu", + "prompt": "Výzva", + "branch": "Větev", + "fetchHint": "Získejte výsledek pomocí: git fetch origin {branch}", + "council": "Rada", + "candidates": "Kandidáti", + "cancel": "Zrušit úkol", + "cancelConfirmTitle": "Zrušit tuto úlohu?", + "cancelConfirmMessage": "Hub zruší provádění na runneru. Toto nelze vrátit zpět.", + "cancelFailed": "Hub odmítl zrušení", + "close": "Zavřít", + "error": "Chyba", + "faroTitle": "Faro — mluvčí flotily", + "faroSubtitle": "Chat a hlas, zakotvené v reálných událostech flotily. Destruktivní příkazy vždy vyžadují potvrzení.", + "faroEmpty": "Zeptejte se na flotilu — např. \"jak se má flotila?\"", + "faroPending": "Faro žádá o potvrzení", + "faroPlaceholder": "promluv s Farem…", + "faroSend": "odeslat", + "faroOffline": "Faro (mluvčí) je offline", + "yes": "Ano", + "no": "Ne", + "pushToTalk": "Držte pro mluvení", + "speakAnswers": "mluvit odpovědi", + "voiceModels": "Hlasové modely (poskytovatel/model tohoto OmniRoute)", + "voiceIdle": "mluvit", + "voiceListening": "naslouchání…", + "voiceThinking": "přemýšlím…", + "voiceSpeaking": "mluvení…", + "sttFailed": "Přepis selhal (zkontrolujte model/poskytovatele STT)", + "ttsFailed": "Selhání syntézy řeči (zkontrolujte model/poskytovatele TTS)", + "micDenied": "Mikrofon není k dispozici nebo bylo odepřeno povolení" + }, + "cliproxyProviderExposure": { + "title": "Expozice Poskytovatele", + "description": "Expose CLIProxyAPI modely jako cílovou trasu pod prefixem cliproxyapi/.", + "label": "Expose jako cliproxyapi/...", + "hint": "Když je povoleno, objevené modely se zobrazují v selektorech poskytovatele napříč OmniRoute.", + "updateFailed": "Nepodařilo se aktualizovat (HTTP {status})", + "networkError": "Chyba sítě — nelze aktualizovat nastavení expozice poskytovatele" + } } - diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index bb344aa2e8..80b78a5dba 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -172,6 +172,18 @@ "unselectAll": "Fravælg alle", "visibleModels": "synlige", "selectAllConfirm": "Tilføj {count} modeller til denne kombination?", + "testSelectedProviders": "Testudbydere", + "testingSelectedProviders": "Testning {done}/{total}...", + "noProvidersSelectedToTest": "Tjek mindst én udbyder nedenfor først", + "noModelsToTestForProviders": "Ingen modeller at teste for de valgte udbydere", + "testSelectedProvidersResults": "{ok} af {total} modeller fungerer", + "selectWorkingModels": "Tilføj arbejde", + "unselectWorkingModels": "Fjern valg af arbejde", + "noWorkingModelsToSelect": "Ingen fungerende modeller tilbage til at tilføje", + "providerTestHint": "Tip: tjek en udbyder → Test → Tilføj fungerende. Klik igen for at fjerne markeringen.", + "selectAllProviders": "Tjek alle udbydere", + "clearProviderSelection": "Fjern markeringen af udbydere", + "providersSelectedCount": "{count} udbydere tjekket", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Størrelse", + "toggleNoAuthProvider": "Skift til no-auth udbyder", + "loadingModels": "Indlæser modeller…", + "selectAModel": "Vælg en model", + "degraded": "Forringet", + "zeroConfigBannerTitle": "Kører i zero-config tilstand", + "zeroConfigBannerBody": "OmniRoute auto-genererede sikre krypteringsnøgler ved første opstart. De gemmes i {dataDir}. Ingen handling er nødvendig — dine data er krypteret og sikre. For at bruge brugerdefinerede nøgler, tilføj JWT_SECRET og STORAGE_ENCRYPTION_KEY til den fil.", + "batchRelativeTimeIn": "i {value}", + "batchRelativeTimeAgo": "{value} siden", + "batchDetailsTitle": "Batch Detaljer", + "batchProgress": "Fremskridt", + "batchCompletedCount": "{count} fuldført", + "batchFailedCount": "{count} mislykkedes", + "batchPendingCount": "{count} ventende", + "batchTimeline": "Tidslinje", + "batchTimelineInProgress": "I Gang", + "batchTimelineFinalizing": "Afslutter", + "batchTimelineCompleted": "Færdiggjort", + "batchTimelineFailed": "Mislykkedes", + "batchTimelineExpires": "Udløber", + "batchTimelineExpired": "Udløbet", + "batchTimelineCancelling": "Annullerer", + "batchTimelineCancelled": "Annulleret", + "batchTokenUsage": "Tokenbrug", + "batchMetadata": "Metadata", + "batchFileContents": "Filindhold", + "batchFileUsedByCount": "Brugt af {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Forhåndsvisning", + "batchFilePreviewTruncated": "Viser de første {shown} linjer ({total} linjer i alt)", + "batchFileDownloadFull": "Download Fuld Fil" }, "disabled": "Deaktiveret", "featureFlagOmnirouteEmergencyFallbackDescription": "Diriger budgetudtømte anmodninger til den gratis nød-fallback-udbyder/-model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separator", "discovery": "Opdagelse", "discoverySubtitle": "Scan udbydere for gratis adgang", + "conductor": "Konduktør", + "conductorSubtitle": "CLI-agent flåde", "resilienceConnections": "Forbindelsesresiliens", "resilienceConnectionsSubtitle": "Cooldown, afbryder, lockout-status", "settingsModalityBridge": "Modality Bro", - "settingsModalityBridgeSubtitle": "Billede/lyd → tekst fallback for tekst-only modeller" + "settingsModalityBridgeSubtitle": "Billede/lyd → tekst fallback for tekst-only modeller", + "commandPalette": { + "title": "Kommando palet", + "searchPlaceholder": "Søg sider, indstillinger, værktøjer...", + "clearSearch": "Ryd søgning", + "noResults": "Ingen resultater", + "navigate": "navigere", + "open": "åben", + "close": "luk" + }, + "noResults": "Ingen resultater" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Opdatering af indstillinger mislykkedes", "sync.token.created": "Synkroniseringstoken oprettet", "sync.token.revoked": "Synkroniseringstoken tilbagekaldt" - } + }, + "mcpMetricCalls24h": "Opkald (24t)", + "mcpMetricSuccessRate": "Succesrate", + "mcpMetricAvgDuration": "Gns. varighed", + "mcpMetricTopTool": "Top værktøj" }, "themesPage": { "title": "Temaer", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "En ny version er tilgængelig. Klik for at opdatere.", "updateStarted": "Opdatering startet...", "reloadingPageAutomatically": "Genindlæser siden automatisk...", - "providerTopology": "Udbydertopologi" + "providerTopology": "Udbydertopologi", + "downloadDmg": "Download DMG (macOS)", + "downloadDmgDescription": "En ny version af OmniRoute desktopappen er tilgængelig. Download og installer venligst macOS DMG-installationsprogrammet for at opdatere (nuværende: v{version}).", + "downloadExe": "Download EXE (Windows)", + "downloadExeDescription": "En ny version af OmniRoute desktop-appen er tilgængelig. Download og installer venligst Windows EXE-installationsprogrammet for at opdatere (nuværende: v{version}).", + "downloadAppImage": "Download AppImage (Linux)", + "downloadAppImageDescription": "En ny version af OmniRoute desktop-appen er tilgængelig. Download venligst Linux AppImage-pakken for at opdatere (nuværende: v{version}).", + "downloadUpdate": "Download Opdatering", + "downloadUpdateDescription": "En ny version af OmniRoute desktop-appen er tilgængelig. Download venligst det respektive app-format til dit system for at opdatere (aktuel: v{version}).", + "updateQueued": "Opdatering til v{version} er sat i kø.", + "updateDockerRebuilding": "Docker-billedet genopbygges i baggrunden.", + "updateWaitingRestart": "Venter på, at OmniRoute genstarter med den nye version.", + "updateInstalling": "Installerer v{version}.", + "updateRunning": "OmniRoute kører nu v{version}.", + "updateCompleted": "OmniRoute opdateret til v{version}.", + "updateDockerStillRebuilding": "Docker-billedet er stadig ved at blive genopbygget for v{version}.", + "updateInstallingBackground": "Installerer v{version} i baggrunden.", + "updateWaitingVersion": "Venter på, at OmniRoute kommer tilbage på v{version}.", + "updateDockerStillInProgress": "Docker genopbygning er stadig i gang.", + "updateRestarting": "Servicegenstart er i gang. Venter på, at OmniRoute kommer online igen...", + "updateTimeout": "Opdatering startet, men v{version} blev ikke tilgængelig før timeout. Opdater siden eller tjek serverlogfilerne.", + "updateTimedOut": "Opdatering til v{version} timed out.", + "updateStartFailed": "Mislykkedes at starte opdatering.", + "noResponseStream": "Ingen responsstream modtaget.", + "updateComplete": "Opdatering fuldført!", + "updateFailed": "Opdatering mislykkedes.", + "updateNetworkError": "Netværksfejl — forbindelse mistet under opdatering.", + "stepInstallPackage": "Installer Pakke", + "stepRebuildNativeModules": "Genopbyg Native Moduler", + "stepRestartService": "Genstart Tjeneste", + "stepComplete": "Færdig", + "stepError": "Fejl", + "updateCompleteTitle": "Opdatering Fuldført!", + "updateFailedTitle": "Opdatering Mislykkedes", + "updatingTitle": "Opdaterer OmniRoute...", + "reloadNotice": "Siden vil automatisk genindlæse om et par sekunder.", + "retryNotice": "Prøv venligst igen eller opdater manuelt via CLI.", + "restartNotice": "Luk ikke denne side. Systemet genstarter automatisk.", + "reloadNow": "Genindlæs Nu", + "closeUpdate": "Luk", + "retryUpdate": "Prøv igen", + "updateAvailableTitle": "Opdatering tilgængelig: v{version}{desktop}", + "desktopAppLabel": "(Skrivebordsapp)", + "checkingForUpdates": "Tjekker for opdateringer...", + "versionAvailableForDownload": "Version v{version} er tilgængelig for download.", + "downloadingUpdate": "Downloader opdatering... {percent}% færdig.", + "updateDownloaded": "Opdatering downloadet med succes! Klik på Genstart og installer for at anvende.", + "autoUpdateFailed": "Automatisk opdatering mislykkedes: {reason}.", + "unknownUpdateError": "Ukendt fejl", + "versionAvailableDesktop": "Version v{version} er tilgængelig for desktop-appen.", + "manualUpdateRequired": "Manuel opdatering kræves for denne installationstype.", + "restartAndInstall": "Genstart & Installer", + "checkForUpdate": "Tjek for opdatering", + "manualUpdate": "Manuel Opdatering", + "directDownloadHint": "Eller download det respektive installationsformat direkte:", + "releaseNotes": "Udgivelsesnoter", + "readMore": "Læs Mere", + "noAuthLabel": "Ingen godkendelse" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Afledt fra gemte kaldslogge omkring denne anmodning", "routeRecommendations": "Anbefalinger", "routeLimitations": "Begrænsninger", - "routeNoKnownLimitations": "Ingen kendte begrænsninger for denne forklaring." + "routeNoKnownLimitations": "Ingen kendte begrænsninger for denne forklaring.", + "searchAnalyticsLoading": "Indlæser søgeanalyser…", + "searchAnalyticsNoData": "Ingen søgedata tilgængelige endnu.", + "searchAnalyticsNoDataDescription": "Søgeanmodninger vil vises her efter den første søgning via /v1/search.", + "searchAnalyticsToday": "{count} i dag", + "searchAnalyticsCachedRequests": "{count} cachede anmodninger", + "searchAnalyticsApiCosts": "søg API-omkostninger", + "searchAnalyticsErrors": "{count} fejl", + "searchAnalyticsNoErrors": "Ingen fejl", + "searchAnalyticsProviderBreakdown": "Udbyderopdeling", + "searchAnalyticsQueries": "forespørgsler", + "searchAnalyticsEmptyDescription": "Brug POST /v1/search til at starte routing af websøgningsforespørgsler.", + "searchAnalyticsFreeTier": "Gratis niveau tilgængeligt: Serper (2.500/md), Brave (2.000/md), Exa (1.000/md), Tavily (1.000/md) — i alt 6.500+ gratis søgninger/md med automatisk failover.", + "autoRoutingNoDataAvailable": "Ingen auto-routing analyser tilgængelige. Foretag anmodninger ved at bruge auto/ præfikset for at se målinger.", + "defaultVariantLabel": "Standard", + "freeTierAvailable": "Gratis niveau tilgængeligt" }, "apiManager": { "title": "API nøgler", @@ -2348,7 +2478,9 @@ "providerCount": "{count} udbydere", "imageToTextBridgeAvailable": "Modality Bridge kan nu beskrive billeder for tekst-only modeller. Inline legepladsen vil være tilgængelig, når /api/v1/images/understanding er implementeret.", "imageToTextBridgeCta": "Konfigurer Image→Text broen i Modality Bridge indstillinger", - "sttBridgeCta": "Konfigurer Speech→Text broen i Modality Bridge indstillinger" + "sttBridgeCta": "Konfigurer Speech→Text broen i Modality Bridge indstillinger", + "existingConnection": "Eksisterende forbindelse", + "openrouterSttDescription": "OpenRouter tale-til-tekst modeller bruger din konfigurerede OpenRouter forbindelse. Ingen separate legitimationsoplysninger er nødvendige." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Indsæt i:", "copilotReloadInstruction": "Genstart derefter VS Code, og angiv API-nøglen i inputfeltet.", "wireApiChatCompletions": "Chatafslutninger (/chat/afslutninger)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Handlingen mislykkedes", + "cliproxyapiActionSucceeded": "Handlingen lykkedes", + "cliproxyapiCheckUpdates": "Tjek Opdateringer", + "cliproxyapiDescription": "Opstrøms proxy tilbagefald (Go-baseret OAuth)", + "cliproxyapiHealth": "Sundhed", + "cliproxyapiHealthy": "Sund", + "cliproxyapiInstall": "Installer", + "cliproxyapiNotInstalledValue": "Ikke installeret", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Anmodning mislykkedes", + "cliproxyapiRestart": "Genstart", + "cliproxyapiStart": "Start", + "cliproxyapiStatusError": "Fejl", + "cliproxyapiStatusInstalled": "Installeret", + "cliproxyapiStatusNotInstalled": "Ikke Installeret", + "cliproxyapiStatusRunning": "Kører", + "cliproxyapiStatusStopped": "Stoppet", + "cliproxyapiStop": "Stop", + "cliproxyapiUnhealthy": "Usund", + "cliproxyapiUnknown": "Ukendt", + "cliproxyapiUpdate": "Opdater", + "cliproxyapiUpdateAvailable": "Opdatering tilgængelig: v{current} → v{latest}", + "cliproxyapiVersion": "Version" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "Ingen prissætning", "pricingAvailableShort": "Det er mere forankret i den reelle situati­", "pricingMissingShort": "ingen pris", + "fallbackOnlyOnQuotaExhaustion": "Kun avancer, når kvoten er opbrugt", + "fallbackOnlyOnQuotaExhaustionShort": "kvote-enkelt tilbagefald", "warningRoundRobinSingleModel": "Round-robin er mest nyttig med mindst 2 modeller.", "warningCostOptimizedPartialPricing": "Kun {priced} af {total}-modeller har priser. Routing kan være delvist omkostningsbevidst.", "warningCostOptimizedNoPricing": "Der blev ikke fundet nogen prisdata for denne kombination. Omkostningsoptimeret kan rute uventet.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Tilstandspakke og vægtning forbliver her; afbryderens runtime-status forbliver på Health-siden.", "emailVisibilityHint": "Konto-e-mails her følger den globale privatlivsindstilling.", "emailVisibilityTooltip": "Brug øje-ikonet til at vise eller skjule konto-e-mails globalt på tværs af kombinationer, udbydere og kvoteskærme.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Trin for trin (Leverandør → Model)", + "builderModeGlobal": "Global model søgning (Brugerdefineret kombination)", + "builderGlobalSearchPlaceholder": "Søg modeller på tværs af alle udbydere (f.eks. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Tilføj alle", + "builderGlobalShortcuts": "Genveje:", + "builderGlobalNoResults": "Ingen model fundet for \"{query}\".", + "builderGlobalProviderLabel": "Udbyder:", + "builderGlobalAccountCount": "{count, plural, one {# konto} other {# konti}}", + "builderGlobalAdded": "Tilføjet", + "builderGlobalAdd": "Tilføj", "manualModel": "Manuel model", "manualModelInvalid": "Indtast en model som udbyder/model.", "manualModelUnknownProvider": "Ukendt udbyderpræfiks.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Session Tilgængelighed", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness inaktiv", "kimiPresetTitle": "Kimi Coding-forudindstilling", "kimiPresetDescription": "Kimi K3 som den primære model (Moonshot API), med automatisk fallback til dine Kimi Code-forbindelser (kimi-coding, kimi-web), når de er konfigureret.", - "kimiPresetCta": "Tilføj forudindstilling" + "kimiPresetCta": "Tilføj forudindstilling", + "intelligentComboCount": "{count, plural, one {# intelligent kombination} other {# intelligente kombinationer}}", + "providersInScope": "{count, plural, one {# udbyder i omfang} other {# udbydere i omfang}}", + "savingModePack": "Gemmer {pack}…", + "errorTitle": "Kunne ikke indlæse combos", + "errorDescription": "Vi kunne ikke indlæse kombinationsdata lige nu. Tjek din forbindelse og prøv igen.", + "errorId": "Fejl ID: {id}", + "errorRetry": "Prøv igen", + "comboLabel": "Kombination" }, "costs": { "title": "Omkostninger", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Brugernavn", "obsidianPassword": "Adgangskode", - "obsidianTailscaleHint": "Brug din Tailscale-IP i stedet for localhost, hvis du opretter forbindelse fra en mobil enhed. Begge enheder skal være på det samme Tailscale-netværk." + "obsidianTailscaleHint": "Brug din Tailscale-IP i stedet for localhost, hvis du opretter forbindelse fra en mobil enhed. Begge enheder skal være på det samme Tailscale-netværk.", + "cloudSyncNotConfigured": "Cloud sync er ikke konfigureret på denne instans.", + "notionConnect": "Forbind", + "notionConnectFailed": "Mislykkedes at oprette forbindelse", + "notionConnected": "Forbundet", + "notionConnectionFailed": "Forbindelse mislykkedes", + "notionDescription": "Søg, læs, forespørg og skriv til Notion gennem routede AI-modeller", + "notionDisconnect": "Frakobl forbindelsen", + "notionDisconnectFailed": "Mislykkedes at afbryde forbindelsen", + "notionEnterToken": "Indtast venligst en Notion integrations-token", + "notionIntegrationHelp": "Opret en intern integration ved", + "notionIntegrationToken": "Notion Intern Token til Integration", + "notionNotConnected": "Ikke tilsluttet", + "notionTokenConfigured": "Token konfigureret. Notion-værktøjer er tilgængelige via MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Udbyder / Model", "noRemoteProviders": "Ingen udbydere med konfigureret API-nøgle", "selectProviderModel": "Vælg en model", + "customBaseUrlLabel": "Brugerdefineret base-URL (valgfri)", + "customModelIdLabel": "Brugerdefineret model-ID (valgfrit)", + "customEndpointHelp": "Brug en OpenAI-kompatibel /embeddings endpoint. Lokale endpoints er tilladt; cloud metadata mål er blokeret.", + "customEndpointSave": "Anvend brugerdefineret slutpunkt", + "customEndpointInvalid": "Indtast både en gyldig HTTP(S) base-URL og en model-ID, eller lad begge felter være tomme.", + "customEndpointSaveFailed": "Den brugerdefinerede indlejringsslutpunkt kunne ikke gemmes.", "staticEnabledLabel": "Aktiver Static Potion", "staticEnabledDesc": "Download og brug potion-base-8M-model lokalt", "transformersEnabledLabel": "Aktiver Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Rydder op...", "cleanNow": "Ryd op nu", "cleanupSuccess": "{count} punkt(er) fjernet", - "cleanupFailed": "Oprydning mislykkedes" + "cleanupFailed": "Oprydning mislykkedes", + "hostLabel": "Vært", + "collectionLabel": "Samling" }, "rerank": { "enableLabel": "Aktivér Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-tiers fallback diagram", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Opsæt gratis udbydere", + "description": "Valgfrit aktiver valgte udbydere uden tilmelding. Gennemgå hver udbyders meddelelse og websted, før du fortsætter; tilgængelighed og hastighedsgrænser styres af tredjeparter.", + "loading": "Indlæser gratis udbydere...", + "loadFailed": "Kunne ikke indlæse gratis udbydere.", + "alreadyConfigured": "Alle berettigede gratisudbydere er allerede konfigureret.", + "reviewProviderSite": "Gennemgå udbyderens websted og vilkår", + "confirmation": "Jeg har gennemgået disse tredjepartsudbydere og ønsker, at OmniRoute opretter de valgte forbindelser.", + "setupSelected": "Opsæt valgte udbydere", + "settingUp": "Opsætter...", + "setupFailed": "Kunne ikke oprette de valgte udbydere. Intet eksisterende blev ændret.", + "retryFailed": "Prøv igen med fejlede udbydere", + "orUseApiKey": "eller forbind med en API-nøgle", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "oprettet", + "skipped": "allerede konfigureret", + "failed": "mislykkedes" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Påkrævet. Udbyder API base URL.", "iconUrlLabel": "Ikon-URL", "iconUrlHint": "Valgfrit. Billed-URL, der vises som denne udbyders ikon.", + "iconUrlInvalid": "Ugyldig ikon-URL. Brug en http(s):// eller data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibel (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Session allerede aktuel", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Anvend godkendelse", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Indsæt API-nøgle…", "zedSaving": "Gemmer…", "zedImportAction": "Importer", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktiver automatisk fornyelse af Cursor-session", + "cursorAgentNudgeBody": "Installer cursor-agent for automatisk sessionsfornyelse — uden det skal Cursor-forbindelser have periodisk manuel genforbindelse cirka hver 24. time.", + "cursorAgentNudgeDismiss": "Afvis", "zedManualImportFailed": "Manuel import mislykkedes", "zedManualImportSuccess": "Importerede {provider}-token fra Zed", "grokImportTitle": "Importer Grok Build-godkendelse", @@ -5878,7 +6066,6 @@ "friendliai": "Gratis niveau til serverløs inferens — intet kreditkort påkrævet", "gemini": "Gratis altid: 1.500 anmodninger/dag til Gemini 2.5 Flash — intet kreditkort, hent nøgle på aistudio.google.com", "gigachat": "Forbind GigaChat (Sber) med en API-nøgle.", - "github-models": "Opret et GitHub PAT med 'models: read'-scope på github.com/settings/tokens", "gitlab": "Personligt adgangstoken til GitLab til den offentlige Code Suggestions API. Konfigurer en selvhostet base-URL, når du ikke bruger gitlab.com.", "gitlawb-gmi": "Hent din API-nøgle fra Gitlawb Opengateway-dashboardet.", "gitlawb": "Hent din API-nøgle fra Gitlawb Opengateway-dashboardet.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Forbind Kimi Coding med det eksisterende OAuth-flow.", "kiro": "Gratis niveau: 50 kreditter/måned (~25K–100K tokens). ⚠️ Kiro ToS forbyder brug af tredjeparts proxy/harness.", "codex": "Forbind OpenAI Codex med det eksisterende OAuth-flow.", - "qwen": "Forbind Qwen Code med det eksisterende OAuth-flow." + "qwen": "Forbind Qwen Code med det eksisterende OAuth-flow.", + "github-models": "Opret et GitHub PAT med 'models: read'-scope på github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accepterer udbyder-native model-id'er. Importer fra /models eller tilføj brugerdefinerede id'er til routing.", "bedrockModelsDescription": "Amazon Bedrock-modeller er omfattet af AWS-regionen. Importer fra /models eller tilføj Bedrock-model-id'er aktiveret i det valgte område.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Når alle konfigurerede forbindelser er udtømt (kvote, kreditter eller udløb), brug midlertidigt denne udbyders nøgleløse niveau. Sluk for at springe denne udbyder over i stedet for at sende anonyme anmodninger - anbefales når det nøgleløse niveau afviser dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktiveret for {provider}", "anonymousFallbackDisabled": "Anonym fallback deaktiveret for {provider} — udtømte forbindelser vil springe denne udbyder over", - "anonymousFallbackUpdateFailed": "Mislykkedes med at opdatere anonym fallback-indstilling" + "anonymousFallbackUpdateFailed": "Mislykkedes med at opdatere anonym fallback-indstilling", + "batchDeleteFailed": "Batch sletning mislykkedes", + "batchDeleteNetworkError": "Netværksfejl under batch-sletning", + "batchUpdateFailed": "Batchopdatering mislykkedes", + "batchUpdateNetworkError": "Netværksfejl under batchopdatering", + "categoryAudio": "Lyd", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Søg", + "categoryWebCookie": "Web Cookie", + "claudeExtraUsageBlockingDisabled": "Claude ekstra-brug blokering deaktiveret (ekstra brug er tilladt)", + "claudeExtraUsageBlockingEnabled": "Claude ekstra-brug blokering aktiveret (ekstra brug vil blive blokeret)", + "claudeRoutingPreferenceDisabled": "Uden præfiks Claude-modeller foretrækker ikke længere Claude Code", + "claudeRoutingPreferenceEnabled": "Unpræfikserede Claude-modeller foretrækker nu Claude Code", + "clearMediaFilter": "Ryd", + "cliproxyRoutingDisabled": "Anmodninger bruger nu native OmniRoute (direkte)", + "cliproxyRoutingEnabled": "Anmodninger rutes nu gennem CLIProxyAPI (dybere emulering)", + "codexLimitPolicyUpdated": "Codex grænsepolitik opdateret", + "codexServiceModeUpdated": "Codex tjenestetilstand opdateret", + "codexServiceTierActive": "Codex {tier} service niveau er aktivt", + "codexTierFastLabel": "Hurtig", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Mislykkedes med at anvende kommando kode auth", + "commandCodeApplyingApproval": "Browser godkendt, anvender…", + "commandCodeApplyingKey": "Anvender browser-godkendt nøgle…", + "commandCodeApprovalInstructions": "Åbn auth-URL'en, godkend adgang, og indsæt derefter den returnerede nøgle/JSON/URL nedenfor…", + "commandCodeAuthExpired": "Command Code auth udløbet", + "commandCodeConnected": "Kommando Kode tilsluttet", + "commandCodeConnectionAdded": "Command Code-forbindelse tilføjet", + "commandCodeLinkExpired": "Command Code-linket er udløbet", + "commandCodeOpeningStudio": "Åbner Command Code Studio…", + "commandCodePopupBlocked": "Popup blokeret. Venligst tillad popups og prøv Command Code Connect igen.", + "commandCodeStartFailed": "Mislykkedes at starte Command Code auth", + "connectionDeleted": "Forbindelse slettet", + "connectionFallback": "forbindelse", + "coolingConnectionsDescription": "Disse forbindelser returnerede en 429 (rate-limit) ved deres sidste anmodning. OmniRoute vil springe dem over, indtil timeren udløber - ingen manuel deaktivering kræves.", + "coolingConnectionsTitle": "I øjeblikket køler ({count})", + "failedDeleteAlias": "Kunne ikke slette alias", + "failedDeleteConnection": "Fejl ved sletning af forbindelse", + "failedDistributeProxies": "Mislykkedes at distribuere proxyer.", + "failedSaveModelEndpointSettings": "Fejl ved gemning af model endpoint indstillinger", + "failedUpdateClaudeExtraUsagePolicy": "Mislykkedes med at opdatere Claude ekstra-brugs politik", + "failedUpdateClaudeRoutingPreference": "Mislykkedes med at opdatere Claude Code routing-præference", + "failedUpdateCliproxyRouting": "Mislykkedes at opdatere CLIProxyAPI-routing", + "failedUpdateCodexLimitPolicy": "Mislykkedes med at opdatere Codex grænsepolitik", + "failedUpdateCodexServiceMode": "Mislykkedes at opdatere Codex service-tilstand", + "filterByMedia": "Medier", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kimi Code API-nøgle", + "modelTestFailed": "Modeltesten mislykkedes", + "modelTestNetworkError": "Netværksfejl test af model", + "networkError": "Netværksfejl", + "networkErrorDeletingAlias": "Netværksfejl ved sletning af alias", + "networkErrorSettingAlias": "Netværksfejl ved indstilling af alias", + "noProvidersMatch": "Ingen udbydere matcher din søgning.", + "noSavedProxies": "Ingen gemte proxyer fundet. Tilføj proxyer i Indstillinger → Proxy først.", + "pageLoadErrorDescription": "Vi kunne ikke indlæse udbyderdata lige nu. Tjek din forbindelse og prøv igen.", + "pageLoadErrorId": "Fejl ID: {id}", + "pageLoadErrorRetry": "Prøv Igen", + "pageLoadErrorTitle": "Kunne ikke indlæse udbydere", + "playgroundTitle": "Legeplads", + "providerDetailConnectionFlexActive": "Codex flex service niveau er aktivt for denne forbindelse", + "providerDetailConnectionPriorityActive": "Codex prioriteret servicelag er aktivt for denne forbindelse", + "providerDetailGlobalFlexActive": "Global Codex flex service niveau er aktivt", + "providerDetailGlobalPriorityActive": "Global Codex prioriteret servicelag er aktivt", + "proxiesDistributed": "Fordelt {assigned} proxy tildeling(er) på tværs af {tagLabel}{total} forbindelse(r).", + "rerankEndpoint": "Genrangér", + "savedModelEndpointSettings": "Indstillinger for gemt model endpoint", + "searchByModelAria": "Søg efter model", + "selectSupportedEndpoint": "Vælg mindst én understøttet endpoint", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Indstillinger", @@ -6460,7 +6719,24 @@ "loadFailed": "Kunne ikke indlæse abonnementslisten", "toggleFailed": "Kunne ikke skifte kontakt", "refreshFailed": "Kunne ikke opdatere", - "deleteFailed": "Kunne ikke slette" + "deleteFailed": "Kunne ikke slette", + "add": "Tilføj", + "cancel": "Annuller", + "configure": "Konfigurer", + "copyEndpoint": "Kopier Endpoint", + "coreEndpointHint": "Core Endpoint Hint", + "coreNodesHint": "Kernerne Hint", + "create": "Opret", + "deleteConfirm": "Slet Bekræftelse", + "empty": "Tom", + "globalModeDescription": "Global Tilstand Beskrivelse", + "localCoreHint": "Lokal Core Hint", + "nodeSummary": "Node Resumé", + "providerRequired": "Leverandør Påkrævet", + "providerRouting": "Udbyder Routing", + "refresh": "Opdater", + "refreshInterval": "Opdateringsinterval", + "ruleModeDescription": "Regeltilstand Beskrivelse" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Kør et automatisk vision-til-tekst-fallback før billedanmodninger dirigeres til modeller, der kun understøtter tekst.", "visionBridgeEnabledLabel": "Aktiveret", "visionBridgeEnabledDesc": "Slå den præ-kaldsbro til/fra, der erstatter billeddele med udtrukket tekst.", + "visionBridgeRerouteTextOnlyLabel": "Omvej tekst-only modeller", + "visionBridgeRerouteTextOnlyDesc": "Send den komplette anmodning, inklusive billeder, til bro-modellen, når den valgte model ikke har billedeinput.", "visionBridgeModel": "Bromodel", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Ethvert OmniRoute-model-ID, der understøtter vision, kan bruges her.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-nøglen mangler manage-scopet.", "BYPASS_PREFIX_NOT_ALLOWED": "Et eller flere præfikser er rettet mod spawn-kompatible ruter og kan ikke omgås.", "GENERIC": "Kunne ikke opdatere authz-indstillinger." - } + }, + "remove": "Fjern" }, "resilienceBaseCooldownLabel": "Grundafkøling", "scopeLabel": "Omfang", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Tester lyd…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip(klip) transskriberet af {model}", "modalityBridgeAudioTestNoop": "Audio Bridge blev ikke aktiveret (målet kan understøtte lyd, ingen STT-udbyder er tilsluttet, eller broen er deaktiveret)", - "modalityBridgeAudioTestError": "Lydtest mislykkedes: {message}" + "modalityBridgeAudioTestError": "Lydtest mislykkedes: {message}", + "modelRoutingDescriptionPlaceholder": "Rute Opus-modeller til frontier combo", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Koder", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback Beskrivelse", + "cliproxyapiHealthLabel": "Cliproxyapi Sundhedsetiket", + "cliproxyapiImportFailed": "Cliproxyapi Import Mislykkedes", + "cliproxyapiImportResult": "Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "Cliproxyapi Ugyldig URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Livscyklusmeddelelse Efter", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Livscyklusmeddelelse Før", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Livscyklusmeddelelse Link", + "cliproxyapiPortLabel": "Cliproxyapi Port Etikette", + "cliproxyapiStatusLabel": "Cliproxyapi Status Etiket", + "cliproxyapiVersionLabel": "Cliproxyapi Versionsmærke", + "collection": "Samling", + "errorPage": { + "description": "Vi kunne ikke indlæse indstillinger lige nu. Prøv venligst igen om et par sekunder.", + "errorId": "Fejl ID: {id}", + "retry": "Prøv Igen", + "title": "Kunne ikke indlæse indstillinger" + }, + "host": "Vært", + "notInstalled": "Ikke installeret", + "oneproxyActions": "Oneproxy Handlinger", + "oneproxyActive": "Oneproxy Aktiv", + "oneproxyAnonymity": "Oneproxy Anonymitet", + "oneproxyCountry": "Oneproxy Land", + "oneproxyDelete": "Oneproxy Slet", + "oneproxyEmpty": "Oneproxy Tom", + "oneproxyHost": "Oneproxy Vært", + "oneproxyLatency": "Oneproxy Latens", + "oneproxyProtocol": "Oneproxy Protokol", + "oneproxyQuality": "Oneproxy Kvalitet", + "oneproxySyncFailed": "Synkronisering mislykkedes: {error}", + "oneproxySyncSuccess": "Synkroniseret {total} proxies ({added} nye, {updated} opdaterede)", + "proxyDocumentationSocks5DescAfter": "Proxy Dokumentation Socks5 Beskrivelse Efter", + "proxyFreePoolAddProxy": "Proxy Free Pool Tilføj Proxy", + "proxyFreePoolAdding": "Proxy Free Pool Tilføjelse", + "proxyFreePoolSelectProxy": "Proxy Fri Pulje Vælg Proxy", + "proxyStatusActive": "Proxy Status Aktiv", + "proxyStatusInactive": "Proxy Status Inaktiv", + "routingAddEntry": "Tilføj post", + "settingSaveFailed": "Indstilling Gem Mislykkedes", + "settingSaved": "Indstillinger Gemt", + "skillsmpApiKeyHintAfter": ". Rate limit: {limit} anmodninger/dag.", + "skillsmpApiKeyHintBefore": "Få din API-nøgle fra", + "syncFailed": "Synkronisering mislykkedes", + "unhealthy": "Usund", + "oneproxyDescription": "Hent og roter gratis validerede proxyer fra 1proxy fællesskabsplatformen", + "oneproxySyncing": "Synkroniserer...", + "oneproxySyncNow": "Synk Nu", + "oneproxyClearAll": "Ryd Alt", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Ryd alle 1proxy proxyer?", + "memorySkillsSkillsmpDescription": "Forbind til SkillsMP for at opdage og installere færdigheder fra markedet.", + "memorySkillsActiveProviderDescription": "Vælg hvilken udbyder, Skills-siden bruger til søgning og installation.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Markedsplads", + "memorySkillsSkillsmpProviderDescription": "Godkendt markedsplads (bruger din SkillsMP API-nøgle).", + "memorySkillsSkillsshProviderTitle": "skills.sh Bibliotek", + "memorySkillsSkillsshProviderDescription": "Offentlig bibliotekudbyder (ingen API-nøgle kræves).", + "routingCcBridgeCatalogName": "Anthropic-kompatibel CC-bro", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Native Claude-udbyder med OAuth-udstedte tokens.", + "routingCcBridgeName": "Claude-Code Broen", + "routingCcBridgeDescription": "Relay slutpunkter ved hjælp af API-nøgler (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Brugerdefineret udbyder.", + "routingUnknownOpKind": "Ukendt op type: {kind}", + "routingInvalidJson": "Ugyldig JSON: {error}", + "routingConfigMustBeObject": "Konfigurationen skal være et JSON-objekt", + "routingEnabledMustBeBoolean": "`enabled` skal være sandt eller falsk", + "routingPipelineMustBeArray": "`pipeline` skal være et array af ops", + "routingPipelineTooLong": "Pipeline kan ikke overstige 50 ops", + "routingOpMissingKind": "Op #{index}: mangler eller er ugyldig `kind`", + "routingOpUnknownKind": "Op #{index}: ukendt type \"{kind}\"", + "routingJsonEditorHide": "Skjul JSON-editor", + "routingJsonEditorImportExport": "Importér / eksporter JSON", + "routingJsonEditorLabel": "JSON (rediger og anvend, eller indsæt for at importere)", + "routingApplyJson": "Anvend JSON", + "routingTransformsFootnote": "Alle transformeringsoperationer er idempotente ved genkørsel. Ændringer træder i kraft med det samme ved næste anmodning.", + "cliproxyapiUnknown": "Ukendt", + "cliproxyapiVersion": "Version", + "cliproxyapiHealth": "Sundhed", + "cliproxyapiPort": "Port", + "qdrantHost": "Vært", + "qdrantCollection": "Samling" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Fuld", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Standard", + "off": "Slukket", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Aggressiv", + "ultra": "Ultra", + "responsesToolOutput": "Svarværktøjets output" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Kører sidst i stakken (efter RTK/Caveman renser teksten, konverterer OmniGlyph resten til billeder) og kører også selvstændigt via omniglyph-tilstand. Dette er en forhåndsvisning og forbliver deaktiveret som standard, indtil end-to-end-validering er fuldført.", "saved": "Gemt.", "saveFailed": "Kunne ikke gemme.", - "enableAria": "Aktiver OmniGlyph-motoren" + "enableAria": "Aktiver OmniGlyph-motoren", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Indlejrede tjenester", @@ -9127,7 +9500,49 @@ "unableToLoad": "Systemmetrics kunne ikke indlæses", "product": "Produkt", "resources": "Ressourcer", - "company": "Selskab" + "company": "Selskab", + "tokenHealthTooltips": { + "allHealthy": "Alle tokens er sunde", + "needsAttention": "Nogle tokens kræver opmærksomhed", + "refreshFailures": "Token opdateringsfejl registreret", + "unknown": "Sundhedsstatus ukendt" + }, + "systemMonitor": { + "metricsAriaLabel": "Systemmålinger", + "memory": "Hukommelse", + "memoryShort": "mem", + "uptime": "Oppetid", + "ariaLabel": "Systemovervågning", + "title": "Systemovervågning", + "version": "Version", + "connections": "Forbindelser", + "circuitBreakers": "Kredsløbsafbrydere", + "open": "{count} åben", + "memoryUsage": "Hukommelsesforbrug" + }, + "never": "Aldrig", + "justNow": "Lige nu", + "minutesAgo": "{count}m siden", + "hoursAgo": "{count} timer siden", + "tokens": "Tokens", + "costs": "Omkostninger", + "autoRefresh": "Auto Opdatering ({seconds}s)", + "toggleAutoRefresh": "Skift automatisk opdatering", + "activeRequests": "Aktive Anmodninger", + "totalRequests": "Samlede Anmodninger", + "totalInputTokens": "Samlede Indtastnings Tokens", + "model": "Model", + "provider": "Udbyder", + "requests": "Anmodninger", + "lastUsed": "Sidst Brugt", + "inputTokens": "Indtastnings Tokens", + "totalTokens": "Samlede Tokens", + "inputCost": "Input Omkostning", + "outputCost": "Udgiftsomkostning", + "noUsageData": "Ingen brug registreret endnu. Foretag nogle anmodninger for at se data her.", + "account": "Konto", + "accountLabel": "Konto {id}", + "noAccountUsage": "Ingen kontospecifik brug registreret endnu. Foretag anmodninger ved hjælp af OAuth-konti for at se data her." }, "auth": { "welcome": "Velkommen", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Nulstil via App Data", + "resetViaAppDataDescription": "Slet indstillingsfilen fra appdata-mappen for at nulstille din adgangskode:", + "quitDesktopApp": "Luk OmniRoute desktop-appen helt", + "navigateToAppDataDirectory": "Naviger til appdata-mappen:", + "checkSystemAppDataFolder": "(Tjek din systemapp data-mappe)", + "relaunchDesktopFreshSetup": "Genstart OmniRoute skrivebordsapp'en — den vil starte en ny opsætning", + "alternativeSetPasswordTitle": "Alternativ: Indstil Ny Adgangskode", + "alternativeSetPasswordDescription": "Indstil en ny initial adgangskode via serverens miljøfil:", + "openServerEnvFilePrefix": "Åbn", + "relaunchDesktopApp": "Genstart OmniRoute desktop-appen", + "codexLinkInvalidOrExpired": "Dette link er ugyldigt eller udløbet.", + "codexValidationServerError": "Kunne ikke nå serveren for at validere dette link.", + "codexSaveConnectionError": "Kunne ikke gemme forbindelsen. Linket kan være udløbet.", + "codexDeviceLoginDisabled": "Enhedslogin med kode er deaktiveret for denne OpenAI-konto. Aktivér det i ChatGPT's sikkerhedsindstillinger (eller spørg din arbejdspladsadministrator).", + "codexAuthorizationTimedOut": "Autorisationen udløb. Klik på Start igen for at prøve igen.", + "authenticationCancelled": "Godkendelse blev annulleret.", + "unexpectedAuthenticationError": "Uventet fejl under godkendelse. Prøv venligst igen.", + "connectOpenAiCodexTitle": "Forbind OpenAI Codex", + "codexConnectDescription": "Autoriser en ChatGPT-konto for at færdiggøre opsætningen af denne forbindelse.", + "validatingCodexLink": "Validerer link…", + "codexGenerateCodeDescription": "Klik nedenfor for at generere en engangskode, og log derefter ind på OpenAI.", + "startCodexFlow": "Start", + "requestingOpenAiCode": "Anmoder om kode fra OpenAI…", + "codexVerificationInstructions": "1. Åbn OpenAI verificeringssiden, og 2. indtast denne kode. Denne side opdateres automatisk, når du autoriserer.", + "yourCode": "Din kode", + "openVerificationPage": "Åbn verifikationsside", + "copyUrlShort": "Kopier URL", + "savingConnection": "Gemmer forbindelse…", + "codexConnected": "Forbundet!", + "codexConnectionRegistered": "Codex-kontoen blev registreret. Du kan lukke denne fane.", + "tryAgain": "Prøv igen", + "traeAuthorizationSuccess": "Trae godkendelse ✓", + "traeAuthorizationFailed": "Trae godkendelse mislykkedes", + "closeAuthorizationWindow": "Du kan lukke dette vindue.", + "returnToDashboard": "Returner til instrumentbrættet.", + "resetViaAppData": "Nulstil via App Data", + "deleteSettingsToReset": "Slet indstillingsfilen fra appdata-mappen for at nulstille din adgangskode:", + "quitAppCompletely": "Luk OmniRoute desktopappen helt", + "navigateToAppData": "Naviger til appdata-mappen", + "checkAppDataFolder": "Tjek din systemapp data-mappe", + "deleteSettingsJson": "Slet", + "relaunchAppFresh": "Genstart OmniRoute skrivebordsapp'en — den vil starte en ny opsætning", + "alternativeSetPassword": "Alternativ: Indstil Ny Adgangskode", + "setNewPasswordViaEnv": "Indstil en ny initial adgangskode via servermiljøfilen:", + "openServerEnv": "Åbn", + "inDataDirectory": "i datakataloget", + "addOrUpdate": "Tilføj eller opdater", + "deleteAndRelaunch": "Slet", + "settingsJson": "settings.json", + "fromDataDir": "fra datakataloget", + "relaunchApp": "Genstart OmniRoute skrivebordsapp'en" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Klar til at forenkle din AI-infrastruktur?", "ctaDescription": "Slut dig til udviklere, der strømliner deres AI-integrationer med OmniRoute. Open source og gratis at starte.", "startFree": "Start gratis", - "readDocumentation": "Læs dokumentation" + "readDocumentation": "Læs dokumentation", + "company": "Virksomhed", + "pricing": "Priser", + "apiReference": "API Reference", + "helpCenter": "Hjælp Center", + "about": "Om", + "blog": "Blog", + "contact": "Kontakt", + "terms": "Vilkår", + "privacy": "Privatliv", + "license": "Licens", + "footerDescription": "Den samlede grænseflade til moderne AI-infrastruktur. Sikker, observerbar og skalerbar.", + "communityDiscussions": "Fællesskabsdiskussioner" }, "docs": { "title": "Dokumentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registrer og administrer agenter via ACP-registret til kommunikation mellem agenter og værktøjsdeling.", "protocolAcpStep1": "Naviger til Dashboard → Agenter for at se registrerede ACP-agenter.", "protocolAcpStep2": "Registrer nye agenter med funktioner og slutpunktskonfiguration.", - "protocolAcpStep3": "Brug CLI-værktøjer til at konfigurere agentkommunikationskanaler." + "protocolAcpStep3": "Brug CLI-værktøjer til at konfigurere agentkommunikationskanaler.", + "metadataTitleTemplate": "%s — OmniRoute Doku", + "metadataDefaultTitle": "OmniRoute Dokumentation", + "metadataDescription": "Omfattende dokumentation for OmniRoute AI gateway — opsætning, API, komprimering, implementering og mere.", + "layoutNavTitle": "OmniRoute Docs", + "layoutHomeLink": "Dokumenter Hjem", + "layoutDashboardLink": "← Tilbage til Dashboard", + "homeTitle": "OmniRoute Dokumentation", + "homeMetadataDescription": "Alt hvad du behøver for at rute, komprimere og skalere din AI — opsætningsvejledninger, API-referencer, komprimering, implementering og mere.", + "homeTwitterDescription": "Omfattende dokumentation for OmniRoute AI gateway", + "homeDescription": "Alt hvad du behøver for at rute, komprimere og skalere din AI", + "homeSearchHint": "Tryk på Ctrl K for at søge i dokumentationen", + "featuredQuickStartTitle": "Hurtig Start", + "featuredQuickStartDescription": "Få OmniRoute til at køre på 3 minutter", + "featuredAutoComboTitle": "Auto-Combo Guide", + "featuredAutoComboDescription": "Lad OmniRoute vælge den bedste AI til dig", + "featuredProvidersTitle": "Udbyderguide", + "featuredProvidersDescription": "Forbind AI-udbydere på få minutter", + "nonTechUsersTitle": "For Ikke-Tekniske Brugere", + "nonTechUsersSubtitle": "Kom hurtigt i gang — ingen teknisk baggrund nødvendig", + "techUsersTitle": "For Tech Brugere", + "techUsersSubtitle": "Dybdegående indblik i arkitektur, API'er og interne systemer", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interaktiv API-udforsker — prøv OmniRoute-endepunkter live med realtids-svar", + "apiExplorerTitle": "API Udforsker", + "apiExplorerDescription": "Prøv OmniRoute-endepunkter live. Vælg et endepunkt, konfigurer din anmodning, og se svaret i realtid.", + "apiExplorerSseStarted": "SSE-streamen er startet — tjek terminalen/devtools for realtidsoutput.", + "apiExplorerError": "Fejl: {message}", + "apiExplorerAuth": "godkendelse", + "apiExplorerResponseLabel": "Svar", + "apiExplorerSelectEndpoint": "Vælg en endpoint at udforske", + "apiExplorerChooseApi": "Vælg en API fra sidepanelet for at se detaljer og prøve den live", + "feedbackThanks": "Tak for din feedback!", + "feedbackQuestion": "Var denne side nyttig?", + "pageMetadataTitle": "{title} — OmniRoute Doku", + "pageMetadataDescription": "OmniRoute dokumentation: {title}", + "breadcrumb": "Brødkrumme", + "apiReferenceTable": { + "parameters": "Parametre", + "name": "Navn", + "type": "Type", + "description": "Beskrivelse", + "returns": "Returnerer", + "typePrefix": "Type:" + } }, "legal": { "privacyPolicy": "Privatlivspolitik", @@ -9957,7 +10479,42 @@ "successMessage": "Din {providerName} konto er blevet forbundet.", "done": "Færdig", "error": "Forbindelsen mislykkedes", - "tryAgain": "Prøv igen" + "tryAgain": "Prøv igen", + "errorSessionIncomplete": "OAuth-session er ufuldstændig (mangler redirect URI eller kodeverifier). Genstart forbindelsen og prøv igen.", + "errorExchangeFailed": "Udveksling mislykkedes", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: De standard Google OAuth legitimationsoplysninger fungerer kun på localhost. For fjernbrug skal du konfigurere dine egne OAuth legitimationsoplysninger via miljøvariabler: ANTIGRAVITY_OAUTH_CLIENT_ID og ANTIGRAVITY_OAUTH_CLIENT_SECRET. Se README-sektionen 'OAuth på en fjernserver'.", + "errorSaveFailed": "Gemning mislykkedes", + "errorAuthorizationFailed": "Autorisation mislykkedes", + "errorAuthorizationTimeout": "Autorisationstimeout", + "errorRequestFailed": "Anmodning mislykkedes", + "errorCallbackServerFailed": "Mislykkedes at starte callback-serveren", + "errorBrowserUnavailable": "Browser OAuth er ikke tilgængelig for denne udbyder i det nuværende miljø. Brug den understøttede autentificeringsmetode i stedet.", + "errorStateMismatch": "OAuth tilstand mismatch. Genstart forbindelsen og prøv igen.", + "errorImportAccessToken": "Fejl ved import af adgangstoken", + "errorSessionNotInitialized": "OAuth-session ikke initialiseret. Genstart forbindelsesflowet og prøv igen.", + "errorNoAuthorizationCode": "Ingen autorisationskode fundet. Indsæt callback-URL'en eller autorisationskoden.", + "tabDeviceCode": "Enhedskode", + "tabBrowserLogin": "Browser Login", + "tabImportAuthJson": "Importer auth.json", + "tabPasteApiKey": "Indsæt API-nøgle", + "windsurfPasteDescription": "I Windsurf / VS Code IDE, kør kommandoen \"Windsurf: Provide Auth Token\" fra kommando paletten (eller klik på Jupyter \"Get Windsurf Authentication Token\" knappen), kopier derefter den viste token og indsæt den nedenfor. At åbne windsurf.com/show-auth-token direkte viser kun en \"Redirecting\" side — IDE'en skal initiere flowet.", + "grokAuthJsonDescription": "Indsæt det FULDE indhold af ~/.grok/auth.json (ikke kun JWT \"nøgle\" feltet). En bare JWT har ikke refresh_token, så forbindelsen dør efter udløb (#7610). Foretræk den dedikerede Import auth.json modal, når den er tilgængelig.", + "devinDesktopPasteDescription": "Indsæt en eksisterende Devin API-nøgle fra en autentificeret Devin-session. Tilgængelighed af nøgleeksport og trin varierer afhængigt af Devin-version og konto.", + "devinPasteDescription": "Angiv din WINDSURF_API_KEY (fået via `devin auth login`, eller via Windsurf IDE \"Windsurf: Provide Auth Token\" kommandoen).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Byg auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Nøgle / Token", + "saving": "Gemmer…", + "saveConnection": "Gem Forbindelse", + "gheDescription": "Indtast basis-URL'en til din GitHub Enterprise-instans (f.eks. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise-URL er påkrævet", + "gitlabDuoSetupTitle": "GitLab Duo OAuth opsætning", + "gitlabDuoSetupMessage": "GitLab Duo OAuth er ikke konfigureret. Registrer en OAuth-applikation på {applicationsUrl} med omdirigerings-URI {redirectUri} og scopes \"{scopes}\", og indstil derefter {clientIdEnv} (og valgfrit {clientSecretEnv}) og genstart.", + "gitlabDuoSetupDescription": "Når applikationen er registreret, og miljøvariablerne er indstillet på denne OmniRoute-instans, skal du klikke på Fortsæt for at starte OAuth-login.", + "continue": "Fortsæt" }, "cursorAuthModal": { "title": "Tilslut Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Indlæs flere", - "loadingMore": "Indlæser flere..." + "loadingMore": "Indlæser flere...", + "correlationId": "Korrelations-ID", + "group": { + "showAllRows": "Vis alle rækker", + "showLatestPerCorrelation": "Vis seneste pr. korrelations-ID", + "grouped": "Grupperet" + }, + "running": "kører", + "interval": { + "decrease": "Formindsk intervallet", + "title": "Auto-opdateringsinterval i sekunder", + "increase": "Forøg intervallet" + }, + "status": { + "inProgress": "Under behandling", + "recoveredByRetry": "Gendannet ved forsøg igen", + "goToParent": "Gå til overordnet anmodning", + "healedTitle": "Mislykkedes, genoprettet efter {count} forsøg", + "healed": "helbredt", + "failedTitle": "Alle {count} forsøg mislykkedes", + "failed": "mislykkedes", + "pinnedTitle": "Model valgt via kontekst-cache session fastgørelse", + "pinned": "fastgjort" + }, + "attempts": "forsøg", + "detail": { + "collapse": "Skjul {title}", + "expand": "Udvid {title}", + "copyTitle": "Kopier {title}", + "copied": "Kopieret!", + "copy": "Kopier", + "autoscrollOn": "Autoscroll: til", + "autoscrollOff": "Autoscroll: fra", + "payload": { + "clientRawRequest": "Klient Rå Anmodning", + "clientRequest": "Klientanmodning", + "openaiRequest": "OpenAI Anmodning", + "providerRequest": "Leverandøranmodning", + "providerResponse": "Udbyderens svar", + "clientResponse": "Klientrespons", + "pipelineError": "Pipeline Fejl" + }, + "payloadMissing": "Den detaljerede payload-artifact er ikke længere tilgængelig for denne logpost.", + "payloadCorrupt": "Den detaljerede payload-artifact kunne ikke parses.", + "notAvailable": "N/A", + "semanticCache": "Semantisk (OmniRoute)", + "upstreamCache": "Opstrøm (Udbyder)", + "ariaLabel": "Anmodningslogdetalje", + "completed": "Fuldført", + "upstreamStatus": "Opstrøms: {status}", + "statusDiscrepancy": "OmniRoute returnerede {status}, selvom udbyderen returnerede {provider}", + "previousRequest": "Tidligere anmodning", + "nextRequest": "Næste anmodning", + "close": "Luk detalje modal", + "startedAt": "Startede Ved", + "endedAt": "Afsluttet Den", + "duration": "Varighed", + "model": "Model", + "provider": "Udbyder", + "account": "Konto", + "input": "Indtastning", + "totalIn": "Total Ind: {value}", + "cacheRead": "Cache Læs: {value}", + "cacheWrite": "Cache Skriv: {value}", + "compressed": "Komprimeret: {from} → {to} ({percent}% sparet)", + "output": "Udgivelse", + "totalOut": "Total Udbetaling: {value}", + "reasoning": "Begrundelse: {value}", + "requestedModel": "Anmodet Model", + "requestProtocol": "Req Protokol", + "cacheSource": "Cache Kilde", + "modelPinning": "Model Pinning", + "activeModelPinning": "Aktiv — model valgt via sessionsfastgørelse", + "rotated": "Roteret: {initial} -> {final}", + "apiKey": "API-nøgle", + "noApiKey": "Ingen API-nøgle", + "combo": "Kombination", + "error": "Fejl", + "unblockAll": "Fjern blokering af alle", + "cleared": "Rydet", + "unblock": "Fjern blokering", + "relatedRequests": "Relaterede Anmodninger ({count})", + "current": "nuværende", + "detailStatus": "Detalje Status", + "loadingDetails": "Indlæser anmodningsdetaljer...", + "providerEventStream": "Udbyder Begivenhedsstrøm", + "clientEventStream": "Klientbegivenhedsstrøm", + "eventStream": "Hændelsesstrøm", + "responsePayloadLegacy": "Respons Payload (Legacy)", + "requestPayloadLegacy": "Anmodningspayload (Legacy)", + "noPayload": "Ingen payloaddata tilgængelig for denne logpost.", + "correlationId": "Korrelations-ID", + "correlationIdValue": "Korrelation ID: {id}", + "detailedPayloadInfo": "Aktivér detaljeret logning først, hvis du ønsker den fire-trins klient/udbyder payload visning for nye anmodninger." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} deaktiveret", "providerAdded": "{provider} tilføjet", "add": "Tilføj", - "manualApiKey": "Brug en manuel API-nøgle" + "manualApiKey": "Brug en manuel API-nøgle", + "createDahlTokenFailed": "Fejl ved oprettelse af Dahl-token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Konfigurer proxy", + "providerProxyTitleConfigured": "Proxy konfigureret: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-begrænset — gennemse vilkår", "caution": "Forsigtig — klausuler om personlig brug / proxy", "ok": "Generelt tilladende" - } + }, + "allProviders": "Alle udbydere", + "noApiKeyRequired": "Ingen API-nøgle kræves" }, "providerHealthAutopilot": { "title": "Udbyderstatus-autopilot", @@ -12390,7 +13047,11 @@ "on": "TIL", "off": "FRA", "availableProviders": "Tilgængelige udbydere ({count})", - "noProviderOverrides": "Ingen tilsidesættelser — alle aktive udbydere vil deltage med deres standardmodeller" + "noProviderOverrides": "Ingen tilsidesættelser — alle aktive udbydere vil deltage med deres standardmodeller", + "resetFailed": "Nulstilling mislykkedes", + "resetSuccess": "Konfiguration nulstillet til standardindstillinger", + "running": "Kører...", + "testFailed": "Testet mislykkedes" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) er OmniRoutes stiftende open source-ven", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Udbyderen understøtter ikke vision for denne billedanmodning", "capabilityFilter.toolsMismatch": "Udbyderen understøtter ikke værktøjsopkald.", "capabilityFilter.structuredOutputMismatch": "Udbyderen understøtter ikke struktureret output", - "capabilityFilter.contextWindowMismatch": "Anmodningen overskrider udbyderens kontekstvindue" + "capabilityFilter.contextWindowMismatch": "Anmodningen overskrider udbyderens kontekstvindue", + "publicSystem": { + "notFound": { + "title": "Siden blev ikke fundet", + "description": "Den side, du leder efter, findes ikke eller er blevet flyttet.", + "dashboardAriaLabel": "Returner til dashboardet", + "statusAriaLabel": "Åbn systemstatusside", + "systemStatus": "Systemstatus" + }, + "error": { + "title": "Intern Serverfejl", + "description": "Noget gik galt under behandlingen af din anmodning. Vores team er blevet underrettet og arbejder på en løsning.", + "errorId": "Fejl ID: {id}", + "detailsAriaLabel": "Fejl detaljer", + "retryAriaLabel": "Prøv at indlæse siden igen", + "tryAgain": "Prøv Igen", + "dashboardAriaLabel": "Returner til dashboardet", + "statusAriaLabel": "Åbn systemstatus", + "systemStatus": "Systemstatus" + }, + "globalError": { + "title": "Noget gik galt", + "description": "Der opstod en uventet fejl. Dette er blevet logget, og vores team vil undersøge det.", + "detailsAriaLabel": "Fejl detaljer", + "retryAriaLabel": "Prøv at indlæse siden igen", + "tryAgain": "Prøv Igen", + "statusAriaLabel": "Åbn systemstatus", + "systemStatus": "Systemstatus" + }, + "offline": { + "title": "Forbindelsesproblem", + "description": "OmniRoute kan ikke nå netværket lige nu. Tjek din internet-, VPN- eller proxyindstillinger.", + "connectionRestored": "Forbindelse gendannet", + "offlineModeDetected": "Offline-tilstand registreret", + "retryConnection": "Prøv forbindelsen igen", + "openStatusPage": "Åbn Statusside" + }, + "maintenance": { + "title": "Planlagt Vedligeholdelse", + "description": "Nogle tjenester er midlertidigt utilgængelige, mens vedligeholdelse er i gang. Kernerouting forbliver normalt online, men administrationsfunktioner kan være nedsat.", + "suggestion1": "Prøv igen om et par minutter.", + "suggestion2": "Tjek nuværende sundhedsindikatorer og udbyderstatus, før du prøver igen.", + "systemStatus": "Vis Systemstatus", + "healthDashboard": "Åbn Sundhedsdashboard" + }, + "status": { + "title": "Systemstatus", + "description": "Live operationel snapshot for OmniRoute kerne tjenester.", + "loadingHealth": "Indlæser sundhedsmetrikker...", + "failedToLoad": "Kunne ikke indlæse systemets sundhed.", + "unableToReachHealth": "Kan ikke nå sundheds-endpointet. Tjek forbindelsen og prøv igen.", + "healthCheckFailed": "Sundhedstjek Mislykkedes", + "openConnectivityHelp": "Åben Connectivity Hjælp", + "maintenanceInfo": "Vedligeholdelsesinfo", + "service": "Service", + "unknown": "ukendt", + "notAvailable": "n/a", + "providersTracked": "Sporrede Udbydere", + "circuitBreakerState": "Udbyder Circuit Breaker Tilstand", + "lastUpdate": "Seneste opdatering: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}t {minutes}m" + }, + "statusPages": { + "400": { + "title": "Ugyldig anmodning", + "description": "Anmodningspayloaden er ugyldig eller ufuldstændig.", + "suggestion1": "Gennemgå de krævede felter og payload-formatet, før du prøver igen.", + "suggestion2": "Hvis du bruger API'en, skal du validere JSON-skemaet lokalt.", + "suggestion3": "Hvis dette bliver ved med at ske, skal du åbne anmodningen i Translator Playground for at inspicere payloaden.", + "primaryAction": "Åbn Dokumentation", + "secondaryAction": "Åbn oversætter" + }, + "401": { + "title": "Uautoriseret", + "description": "Godkendelse er påkrævet for at få adgang til denne ressource.", + "suggestion1": "Log ind igen og prøv operationen igen.", + "suggestion2": "For API-opkald, bekræft at Bearer-tokenet er til stede og gyldigt.", + "suggestion3": "Hvis tokenet for nylig er blevet roteret, skal du opdatere dine klientoplysninger.", + "primaryAction": "Gå til Login", + "secondaryAction": "Administrer API-nøgler" + }, + "403": { + "title": "Forbudt", + "description": "Din anmodning blev forstået, men adgang er nægtet af politik.", + "suggestion1": "Tjek IP tilladelses-/blokliste regler i indstillinger.", + "suggestion2": "Bekræft model- og budgetpolitikker tildelt til din API-nøgle.", + "suggestion3": "Bed en administrator om at give den nødvendige tilladelsesomfang.", + "primaryAction": "Åben Adgang Hjælp", + "secondaryAction": "Åbn sikkerhedsindstillinger" + }, + "408": { + "title": "Anmodning Timeout", + "description": "Serveren modtog ikke en komplet anmodning i tide.", + "suggestion1": "Prøv at sende anmodningen igen med en mindre payload.", + "suggestion2": "Tjek din netværksstabilitet og VPN/proxy-latens.", + "suggestion3": "For lange operationer, aktiver streaming eller del anmodningen.", + "primaryAction": "Åbn Endpoint Guide", + "secondaryAction": "Tjek netværksstatus" + }, + "429": { + "title": "For mange anmodninger", + "description": "Rate limits blev overskredet for denne klient, nøgle eller udbyder.", + "suggestion1": "Vent på cooldown og prøv igen efter det foreslåede interval.", + "suggestion2": "Skift til en kombination med fallback-udbydere.", + "suggestion3": "Juster udbyderens modstandsdygtighed/rate-limit profiler i indstillinger.", + "primaryAction": "Åbn Resilience Indstillinger", + "secondaryAction": "Åbn Combos" + }, + "500": { + "title": "Intern Serverfejl", + "description": "Der opstod en uventet serverfejl under behandlingen af din anmodning.", + "suggestion1": "Prøv igen om et par sekunder.", + "suggestion2": "Tjek sundhedstelemetri og serverlogs for korrelerede anmodnings-ID'er.", + "suggestion3": "Hvis problemet fortsætter, rapporter problemet med tidsstempel og anmodningskontekst.", + "primaryAction": "Åbn Sundhedsdashboard", + "secondaryAction": "Åbn Logs" + }, + "502": { + "title": "Dårlig Gateway", + "description": "Opstrømsudbyder eller gateway-integration returnerede et ugyldigt svar.", + "suggestion1": "Prøv igen med en anden udbyder eller aktiv kombinationsrute.", + "suggestion2": "Tjek udbyderens legitimationsoplysninger og modeltilgængelighed.", + "suggestion3": "Inspektion af oversætteroutput, hvis formatkonvertering er involveret.", + "primaryAction": "Åbn Udbydere", + "secondaryAction": "Åbn oversætter" + }, + "503": { + "title": "Tjeneste Utilgængelig", + "description": "Tjenesten er midlertidigt utilgængelig på grund af vedligeholdelse eller nedgraderede afhængigheder.", + "suggestion1": "Vent et øjeblik og prøv igen.", + "suggestion2": "Tjek vedligeholdelsesmeddelelser og systemstatus.", + "suggestion3": "Brug fallback-udbydere, hvis din arbejdsgang er følsom over for latenstid.", + "primaryAction": "Vedligeholdelsesdetaljer", + "secondaryAction": "Systemstatus" + } + } + }, + "kiroAuthModal": { + "title": "Forbind {providerLabel}", + "chooseMethod": "Vælg din godkendelsesmetode:", + "builderId": "AWS Builder ID", + "builderDescription": "Anbefalet til de fleste brugere. Log ind med den AWS-konto, der er knyttet til {providerLabel}.", + "organization": "Din Organisation (AWS IAM Identitetscenter)", + "organizationDescription": "Brug din virksomheds SSO start-URL (eksempel: {url}).", + "googleAccount": "Google-konto", + "googleDescription": "Log ind med din Google-konto.", + "githubAccount": "GitHub-konto", + "githubDescription": "Log ind med din GitHub-konto.", + "importToken": "Importer Token", + "importDescription": "Indsæt en opfrisknings-token eksporteret fra {providerLabel}.", + "apiKey": "API-nøgle", + "apiKeyDescription": "Indsæt en langvarig {providerLabel} / CodeWhisperer API-nøgle. Den gemmes som en bearer-legitimationsoplysning uden opdaterings-token; profilopdagelse er bedste indsats.", + "idcStartUrl": "IDC Start URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Din organisations AWS IAM Identity Center URL", + "awsRegion": "AWS Region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-region for dit Identity Center (standard: us-east-1)", + "continue": "Fortsæt", + "back": "Tilbage", + "autoDetecting": "Auto-detekterer token...", + "readingCredentials": "Læser {providerLabel} legitimationsoplysninger fra AWS SSO-cache", + "tokenNotDetected": "{providerLabel} token blev ikke automatisk registreret. Indsæt venligst din opdateringstoken manuelt.", + "refreshToken": "Opdateringstoken", + "tokenPlaceholder": "Token vil blive udfyldt automatisk...", + "importing": "Importerer...", + "apiKeyPlaceholder": "Indsæt din {providerLabel} API-nøgle...", + "apiKeyStoredDescription": "Lagrer krypteret som en langvarig bærerlegitimation. Der er ingen opdateringsflow.", + "apiKeyRegionDescription": "AWS-region for nøglen (standard: us-east-1)", + "validating": "Validerer...", + "validateAndSaveApiKey": "Valider og Gem API-nøgle", + "errorAutoDetect": "Kunne ikke automatisk registrere token", + "errorAutoDetectFailed": "Mislykkedes at auto-detektere token", + "errorRefreshTokenRequired": "Indtast venligst en opdaterings-token", + "errorImportFailed": "Importen mislykkedes", + "errorApiKeyRequired": "Indtast venligst en Kiro API-nøgle", + "errorApiKeyImportFailed": "Import af API-nøgle mislykkedes", + "errorIdcStartUrlRequired": "Indtast venligst din IDC start-URL" + }, + "kiroSocialOAuthModal": { + "title": "Forbind {providerLabel} via {providerName}", + "errorStartAuthorization": "Mislykkedes at starte godkendelse", + "errorAuthorizationExpired": "Autorisationen er udløbet. Start login-flowet igen.", + "errorAuthorizationFailed": "Autorisation mislykkedes", + "initializing": "Initialiserer...", + "settingUp": "Opsætning af {providerName} autentifikation", + "openIncognito": "Åbn dette link i et inkognito-vindue", + "incognitoDescription": "Brug et Inkognito/Privat vindue for at undgå sessionskonflikter med eksisterende konti.", + "copyLink": "Kopier link", + "verificationCode": "Bekræftelseskode", + "waiting": "Venter på godkendelse...", + "cancel": "Annuller", + "successTitle": "Forbundet med succes!", + "successMessage": "Din {providerLabel} konto via {providerName} er blevet tilsluttet.", + "done": "Færdig", + "errorTitle": "Forbindelse Mislykkedes", + "close": "Luk" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorisation mislykkedes", + "errorPopupBlocked": "Popup blokeret — tillad popups for dette site, eller indsæt tokenet manuelt nedenfor.", + "errorPopupClosed": "Autoriseringsvinduet blev lukket, før det blev afsluttet.", + "errorAccessTokenRequired": "Adgangstoken er påkrævet.", + "errorImportFailed": "Importen mislykkedes", + "title": "Forbind Trae SOLO", + "authorizeDescription": "Autoriser via trae.ai i et popup-vindue. Popup-vinduet vil lukke sig selv, når tokenet er blevet importeret.", + "authorizeImportant": "Vigtigt: du skal være logget ind på trae.ai i denne browser først. Autoriseringssiden bekræfter kun en eksisterende session — den kan ikke logge dig ind. Hvis du ser \"Login Mislykkedes\", klik på \"Åbn solo.trae.ai\", log ind, og vend derefter tilbage hertil.", + "waitingForAuthorization": "Venter på trae.ai…", + "authorizeWithBrowser": "Autoriser med Browser", + "openSoloTrae": "Åbn solo.trae.ai", + "orPasteManually": "eller indsæt en token manuelt", + "manualInstructions": "Log ind på solo.trae.ai, åbn DevTools → Netværk, send en chatbesked, og kopier JWT fra Authorization: Cloud-IDE-JWT {tokenPlaceholder} anmodningsheaderen. JWT-livstid er ~14 dage. Valgfri identitetsfelter kommer fra common_params i den samme anmodningskrop.", + "accessTokenLabel": "Adgangstoken (Cloud-IDE-JWT)", + "webId": "Web-ID", + "optional": "valgfri", + "bizUserId": "Biz Bruger ID", + "userUniqueId": "Bruger Unik ID", + "scope": "Omfang", + "tenant": "Lejer", + "region": "Region", + "importing": "Importer…", + "importToken": "Importer Token", + "cancel": "Annuller" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuerer...", + "complete": "Færdig", + "defaultLabel": "Distribuer Proxies" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "forældet", + "risk": "risiko", + "close": "Luk", + "model": "Model", + "key": "Nøgle", + "defaultKey": "standard", + "clearConversation": "Ryd samtale", + "clear": "Ryd", + "tabs": { + "test": "Test", + "logs": "Logs" + }, + "loadingLogs": "Indlæser logfiler…", + "failedToLoadLogs": "Kunne ikke indlæse logs", + "noLogsYet": "Ingen logs endnu", + "noLogsDescription": "Send en testbesked fra Test-fanen — logfiler for denne udbyder vises her.", + "openFullLogs": "Åbn fuld logside", + "live": "Live", + "tailingLast": "viser de sidste {count}", + "refreshNow": "Opdater nu", + "refresh": "Opdater", + "unknownRequester": "ukendt anmoder", + "fields": { + "timestamp": "Tidsstempel", + "status": "Status", + "duration": "Varighed", + "model": "Model", + "requestedModel": "Anmodet model", + "provider": "Udbyder", + "requester": "Anmoder", + "tokens": "Tokens" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy log detaljer", + "event": "Proxy Begivenhed", + "close": "Luk proxy detalje modal", + "time": "Tid", + "latency": "Forsinkelse", + "clientIp": "Klient-IP", + "proxy": "Proxy", + "direct": "Direkte", + "type": "Type", + "level": "Niveau", + "provider": "Udbyder", + "tlsFingerprint": "TLS Fingeraftryk", + "directNative": "Direkte", + "targetUrl": "Mål-URL", + "error": "Fejl", + "configuration": "Proxykonfiguration" + }, + "requestTimeline": { + "title": "Anmodnings Tidslinje", + "modes": { + "follow": "Følg", + "followDescription": "Akse ruller til venstre, NU-linjen forbliver på 75%", + "now": "Nu", + "nowDescription": "Spring til nuværende tid, NU-linjen nulstilles til midten", + "pan": "Pan", + "panDescription": "Træk for at udforske, baggrunden er frosset" + }, + "reset": "Nulstil", + "started": "Startede", + "ended": "Afsluttet", + "duration": "Varighed", + "status": "Status", + "provider": "Udbyder", + "tokens": "Tokens", + "active": "Aktiv", + "other": "Andet", + "tenMinutes": "10min", + "hour": "time", + "day": "dag", + "unknownModel": "ukendt", + "pending": "afventer" + }, + "metadata": { + "compressionTitle": "Komprimering", + "compressionDescription": "Konfigurer indstillinger for kontekstkomprimering for at reducere tokenforbrug og omkostninger.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy-endepunkter til din AI-infrastruktur", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Overvåg LLM-opkald + fejlfind ethvert apps HTTPS-trafik" + }, + "conductor": { + "title": "Conductor — CLI-agent flåde", + "subtitle": "OmniConductor hub: løbere, opgavekø og råd, live", + "runners": "Løbere", + "tasks": "Opgaver", + "colName": "Navn", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Opgave", + "colMode": "Tilstand", + "colRunner": "Runner", + "colSummary": "Resumé", + "online": "online", + "offline": "offline", + "draining": "afvanding", + "hubOffline": "Conductor hub offline eller ikke konfigureret (CONDUCTOR_HUB_URL) — viser ingenting i stedet for forældede data.", + "noRunners": "Ingen løbere registreret", + "noTasks": "Ingen opgaver endnu", + "detailTitle": "Opgavedetaljer", + "prompt": "Prompt", + "branch": "Gren", + "fetchHint": "Hent resultatet med: git fetch origin {branch}", + "council": "Råd", + "candidates": "Kandidater", + "cancel": "Annuller opgave", + "cancelConfirmTitle": "Annuller denne opgave?", + "cancelConfirmMessage": "Huben vil afbryde udførelsen på runneren. Dette kan ikke fortrydes.", + "cancelFailed": "Hubben nægtede annulleringen", + "close": "Luk", + "error": "Fejl", + "faroTitle": "Faro — flådetalsmand", + "faroSubtitle": "Chat og stemme, forankret i virkelige flådebegivenheder. Destruktive kommandoer beder altid om bekræftelse.", + "faroEmpty": "Spørg om flåden — f.eks. \"hvordan har flåden det?\"", + "faroPending": "Faro beder om bekræftelse", + "faroPlaceholder": "snak med Faro…", + "faroSend": "send", + "faroOffline": "Faro (talsmand) er offline", + "yes": "Ja", + "no": "Nej", + "pushToTalk": "Hold for at tale", + "speakAnswers": "tal svar", + "voiceModels": "Stemme modeller (udbyder/model af denne OmniRoute)", + "voiceIdle": "snak", + "voiceListening": "lytter…", + "voiceThinking": "tænker…", + "voiceSpeaking": "taler…", + "sttFailed": "Transkription mislykkedes (tjek STT-modellen/udbyderen)", + "ttsFailed": "Tale syntese mislykkedes (tjek TTS-modellen/udbyderen)", + "micDenied": "Mikrofon utilgængelig eller tilladelse nægtet" + }, + "cliproxyProviderExposure": { + "title": "Udbyder Eksponering", + "description": "Eksponer CLIProxyAPI-modeller som et routingmål under cliproxyapi/ præfikset.", + "label": "Eksponer som cliproxyapi/...", + "hint": "Når aktiveret, vises opdagede modeller i udbydervælgerne på tværs af OmniRoute.", + "updateFailed": "Mislykkedes at opdatere (HTTP {status})", + "networkError": "Netværksfejl — kunne ikke opdatere udbyderens eksponeringsindstilling" + } } - diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 94323f5afc..392cb9751a 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -172,6 +172,18 @@ "unselectAll": "Auswahl aufheben", "visibleModels": "sichtbar", "selectAllConfirm": "{count} Modelle zu dieser Kombination hinzufügen?", + "testSelectedProviders": "Testanbieter", + "testingSelectedProviders": "Testen {done}/{total}...", + "noProvidersSelectedToTest": "Überprüfen Sie zuerst mindestens einen Anbieter unten", + "noModelsToTestForProviders": "Keine Modelle zum Testen für die ausgewählten Anbieter", + "testSelectedProvidersResults": "{ok} von {total} Modellen arbeiten", + "selectWorkingModels": "Hinzufügen funktioniert", + "unselectWorkingModels": "Auswahl aufheben", + "noWorkingModelsToSelect": "Keine funktionierenden Modelle mehr zum Hinzufügen", + "providerTestHint": "Tipp: Anbieter überprüfen → Test → Funktioniert hinzufügen. Klicken Sie erneut, um die Auswahl aufzuheben.", + "selectAllProviders": "Alle Anbieter überprüfen", + "clearProviderSelection": "Anbieter abwählen", + "providersSelectedCount": "{count} Anbieter überprüft", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Größe", + "toggleNoAuthProvider": "No-Auth-Anbieter umschalten", + "loadingModels": "Modelle werden geladen…", + "selectAModel": "Wählen Sie ein Modell", + "degraded": "Herabgestuft", + "zeroConfigBannerTitle": "Ausführung im Zero-Config-Modus", + "zeroConfigBannerBody": "OmniRoute hat bei der ersten Ausführung automatisch sichere Verschlüsselungsschlüssel generiert. Diese werden in {dataDir} gespeichert. Es sind keine Maßnahmen erforderlich – Ihre Daten sind verschlüsselt und sicher. Um benutzerdefinierte Schlüssel zu verwenden, fügen Sie JWT_SECRET und STORAGE_ENCRYPTION_KEY zu dieser Datei hinzu.", + "batchRelativeTimeIn": "in {value}", + "batchRelativeTimeAgo": "vor {value}", + "batchDetailsTitle": "Batch-Details", + "batchProgress": "Fortschritt", + "batchCompletedCount": "{count} abgeschlossen", + "batchFailedCount": "{count} fehlgeschlagen", + "batchPendingCount": "{count} ausstehend", + "batchTimeline": "Zeitleiste", + "batchTimelineInProgress": "In Bearbeitung", + "batchTimelineFinalizing": "Abschließen", + "batchTimelineCompleted": "Abgeschlossen", + "batchTimelineFailed": "Fehlgeschlagen", + "batchTimelineExpires": "Läuft ab", + "batchTimelineExpired": "Abgelaufen", + "batchTimelineCancelling": "Abbrechen", + "batchTimelineCancelled": "Abgebrochen", + "batchTokenUsage": "Token-Nutzung", + "batchMetadata": "Metadaten", + "batchFileContents": "Dateiinhalt", + "batchFileUsedByCount": "Verwendet von {count, plural, one {# Batch} other {# Batches}}", + "batchFilePreview": "Vorschau", + "batchFilePreviewTruncated": "Zeige die ersten {shown} Zeilen ({total} insgesamt)", + "batchFileDownloadFull": "Vollständige Datei herunterladen" }, "disabled": "Deaktiviert", "featureFlagOmnirouteEmergencyFallbackDescription": "Anfragen mit erschöpftem Budget an den kostenlosen Notfall-Fallback-Anbieter/das Notfall-Fallback-Modell weiterleiten.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Trennlinie", "discovery": "Discovery", "discoverySubtitle": "Anbieter auf kostenlosen Zugang scannen", + "conductor": "Leiter", + "conductorSubtitle": "CLI-Agent-Flotte", "resilienceConnections": "Verbindungsresilienz", "resilienceConnectionsSubtitle": "Cooldown, Schalter, Sperrstatus", "settingsModalityBridge": "Modalitätsbrücke", - "settingsModalityBridgeSubtitle": "Bild-/Audio-→Text-Fallback für textbasierte Modelle" + "settingsModalityBridgeSubtitle": "Bild-/Audio-→Text-Fallback für textbasierte Modelle", + "commandPalette": { + "title": "Befehls-Palette", + "searchPlaceholder": "Seiten, Einstellungen, Werkzeuge suchen...", + "clearSearch": "Suche löschen", + "noResults": "Keine Ergebnisse", + "navigate": "navigieren", + "open": "öffnen", + "close": "schließen" + }, + "noResults": "Keine Ergebnisse" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Aktualisierung der Einstellungen fehlgeschlagen", "sync.token.created": "Sync-Token erstellt", "sync.token.revoked": "Sync-Token widerrufen" - } + }, + "mcpMetricCalls24h": "Anrufe (24h)", + "mcpMetricSuccessRate": "Erfolgsquote", + "mcpMetricAvgDuration": "Durchschnittliche Dauer", + "mcpMetricTopTool": "Top-Tool" }, "themesPage": { "title": "Themen", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Eine neue Version ist verfügbar. Klicken Sie zum Aktualisieren.", "updateStarted": "Aktualisierung gestartet...", "reloadingPageAutomatically": "Seite wird automatisch neu geladen...", - "providerTopology": "Anbietertopologie" + "providerTopology": "Anbietertopologie", + "downloadDmg": "DMG herunterladen (macOS)", + "downloadDmgDescription": "Eine neue Version der OmniRoute-Desktop-App ist verfügbar. Bitte laden Sie den macOS DMG-Installer herunter und installieren Sie ihn, um zu aktualisieren (aktuell: v{version}).", + "downloadExe": "EXE herunterladen (Windows)", + "downloadExeDescription": "Eine neue Version der OmniRoute-Desktopanwendung ist verfügbar. Bitte laden Sie den Windows EXE-Installer herunter und installieren Sie ihn, um zu aktualisieren (aktuell: v{version}).", + "downloadAppImage": "AppImage herunterladen (Linux)", + "downloadAppImageDescription": "Eine neue Version der OmniRoute-Desktopanwendung ist verfügbar. Bitte laden Sie das Linux AppImage-Paket herunter, um zu aktualisieren (aktuell: v{version}).", + "downloadUpdate": "Update Herunterladen", + "downloadUpdateDescription": "Eine neue Version der OmniRoute-Desktop-App ist verfügbar. Bitte laden Sie das entsprechende App-Format für Ihr System herunter, um ein Update durchzuführen (aktuell: v{version}).", + "updateQueued": "Update auf v{version} in der Warteschlange.", + "updateDockerRebuilding": "Das Docker-Image wird im Hintergrund neu erstellt.", + "updateWaitingRestart": "Warten auf den Neustart von OmniRoute mit der neuen Version.", + "updateInstalling": "Installiere v{version}.", + "updateRunning": "OmniRoute läuft jetzt in der Version v{version}.", + "updateCompleted": "OmniRoute auf v{version} aktualisiert.", + "updateDockerStillRebuilding": "Das Docker-Image wird weiterhin für v{version} neu erstellt.", + "updateInstallingBackground": "Installiere v{version} im Hintergrund.", + "updateWaitingVersion": "Warten auf OmniRoute, um auf v{version} zurückzukehren.", + "updateDockerStillInProgress": "Docker-Neubau ist noch im Gange.", + "updateRestarting": "Dienstneustart wird durchgeführt. Warten auf die Rückkehr von OmniRoute...", + "updateTimeout": "Das Update wurde gestartet, aber v{version} war vor dem Timeout nicht verfügbar. Aktualisieren Sie die Seite oder überprüfen Sie die Serverprotokolle.", + "updateTimedOut": "Das Update auf v{version} hat zu lange gedauert.", + "updateStartFailed": "Update konnte nicht gestartet werden.", + "noResponseStream": "Kein Antwortstream empfangen.", + "updateComplete": "Aktualisierung abgeschlossen!", + "updateFailed": "Aktualisierung fehlgeschlagen.", + "updateNetworkError": "Netzwerkfehler — Verbindung während des Updates verloren.", + "stepInstallPackage": "Paket installieren", + "stepRebuildNativeModules": "Native-Module neu erstellen", + "stepRestartService": "Dienst neu starten", + "stepComplete": "Vollständig", + "stepError": "Fehler", + "updateCompleteTitle": "Aktualisierung abgeschlossen!", + "updateFailedTitle": "Aktualisierung fehlgeschlagen", + "updatingTitle": "Aktualisiere OmniRoute...", + "reloadNotice": "Die Seite wird in wenigen Sekunden automatisch neu geladen.", + "retryNotice": "Bitte versuchen Sie es erneut oder aktualisieren Sie manuell über die CLI.", + "restartNotice": "Schließen Sie diese Seite nicht. Das System wird automatisch neu gestartet.", + "reloadNow": "Jetzt Neu Laden", + "closeUpdate": "Schließen", + "retryUpdate": "Erneut versuchen", + "updateAvailableTitle": "Update Verfügbar: v{version}{desktop}", + "desktopAppLabel": "(Desktop-App)", + "checkingForUpdates": "Auf Updates prüfen...", + "versionAvailableForDownload": "Version v{version} ist zum Download verfügbar.", + "downloadingUpdate": "Update wird heruntergeladen... {percent}% abgeschlossen.", + "updateDownloaded": "Update erfolgreich heruntergeladen! Klicken Sie auf Neu starten & Installieren, um die Änderungen anzuwenden.", + "autoUpdateFailed": "Automatische Aktualisierung fehlgeschlagen: {reason}.", + "unknownUpdateError": "Unbekannter Fehler", + "versionAvailableDesktop": "Version v{version} ist für die Desktop-App verfügbar.", + "manualUpdateRequired": "Manuelle Aktualisierung für diesen Installationstyp erforderlich.", + "restartAndInstall": "Neu starten & installieren", + "checkForUpdate": "Auf Updates prüfen", + "manualUpdate": "Manuelle Aktualisierung", + "directDownloadHint": "Oder laden Sie das jeweilige Installationsformat direkt herunter:", + "releaseNotes": "Versionshinweise", + "readMore": "Mehr Lesen", + "noAuthLabel": "Keine Authentifizierung" }, "analytics": { "title": "Analytik", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Abgeleitet aus den persistenten Aufrufprotokollen um diese Anfrage herum", "routeRecommendations": "Empfehlungen", "routeLimitations": "Einschränkungen", - "routeNoKnownLimitations": "Keine bekannten Einschränkungen für diese Erklärung." + "routeNoKnownLimitations": "Keine bekannten Einschränkungen für diese Erklärung.", + "searchAnalyticsLoading": "Lade Suchanalysen…", + "searchAnalyticsNoData": "Noch keine Suchdaten verfügbar.", + "searchAnalyticsNoDataDescription": "Suchanfragen werden hier angezeigt, nachdem die erste Suche über /v1/search durchgeführt wurde.", + "searchAnalyticsToday": "{count} heute", + "searchAnalyticsCachedRequests": "{count} zwischengespeicherte Anfragen", + "searchAnalyticsApiCosts": "Suchkosten der API", + "searchAnalyticsErrors": "{count} Fehler", + "searchAnalyticsNoErrors": "Keine Fehler", + "searchAnalyticsProviderBreakdown": "Anbieteraufstellung", + "searchAnalyticsQueries": "Abfragen", + "searchAnalyticsEmptyDescription": "Verwenden Sie POST /v1/search, um mit der Routenplanung von Websuchen zu beginnen.", + "searchAnalyticsFreeTier": "Kostenloses Kontingent verfügbar: Serper (2.500/Monat), Brave (2.000/Monat), Exa (1.000/Monat), Tavily (1.000/Monat) — insgesamt 6.500+ kostenlose Suchen/Monat mit automatischem Failover.", + "autoRoutingNoDataAvailable": "Keine Auto-Routing-Analysen verfügbar. Stellen Sie Anfragen mit dem Präfix auto/ um Metriken anzuzeigen.", + "defaultVariantLabel": "Standardmäßig", + "freeTierAvailable": "Kostenloses Kontingent verfügbar" }, "apiManager": { "title": "API-Schlüssel", @@ -2348,7 +2478,9 @@ "providerCount": "{count} Anbieter", "imageToTextBridgeAvailable": "Die Modality Bridge kann jetzt Bilder für textbasierte Modelle beschreiben. Der Inline-Spielplatz wird verfügbar sein, wenn /api/v1/images/understanding implementiert ist.", "imageToTextBridgeCta": "Konfigurieren Sie die Bild→Text-Brücke in den Modality Bridge-Einstellungen", - "sttBridgeCta": "Konfigurieren Sie die Speech→Text-Brücke in den Modality Bridge-Einstellungen" + "sttBridgeCta": "Konfigurieren Sie die Speech→Text-Brücke in den Modality Bridge-Einstellungen", + "existingConnection": "Bestehende Verbindung", + "openrouterSttDescription": "Die OpenRouter-Spracherkennungsmodelle verwenden Ihre konfigurierte OpenRouter-Verbindung. Es sind keine separaten Anmeldeinformationen erforderlich." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Einfügen in:", "copilotReloadInstruction": "Laden Sie dann VS Code neu und legen Sie den API-Schlüssel in der Eingabeaufforderung fest.", "wireApiChatCompletions": "Chat-Abschlüsse (/chat/completions)", - "wireApiResponses": "Antwort-API (/responses)" + "wireApiResponses": "Antwort-API (/responses)", + "cliproxyapiActionFailed": "Aktion fehlgeschlagen", + "cliproxyapiActionSucceeded": "Aktion erfolgreich", + "cliproxyapiCheckUpdates": "Updates überprüfen", + "cliproxyapiDescription": "Upstream-Proxy-Fallback (Go-basiertes OAuth)", + "cliproxyapiHealth": "Gesundheit", + "cliproxyapiHealthy": "Gesund", + "cliproxyapiInstall": "Installieren", + "cliproxyapiNotInstalledValue": "Nicht installiert", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Anfrage fehlgeschlagen", + "cliproxyapiRestart": "Neustarten", + "cliproxyapiStart": "Start", + "cliproxyapiStatusError": "Fehler", + "cliproxyapiStatusInstalled": "Installiert", + "cliproxyapiStatusNotInstalled": "Nicht Installiert", + "cliproxyapiStatusRunning": "Läuft", + "cliproxyapiStatusStopped": "Gestoppt", + "cliproxyapiStop": "Stop", + "cliproxyapiUnhealthy": "Ungesund", + "cliproxyapiUnknown": "Unbekannt", + "cliproxyapiUpdate": "Aktualisieren", + "cliproxyapiUpdateAvailable": "Update verfügbar: v{current} → v{latest}", + "cliproxyapiVersion": "Version" }, "combos": { "title": "Kombinationen", @@ -3236,6 +3391,8 @@ "pricingMissing": "Keine Preisgestaltung", "pricingAvailableShort": "preislich", "pricingMissingShort": "kein Preis", + "fallbackOnlyOnQuotaExhaustion": "Nur bei Erschöpfung des Kontingents fortfahren", + "fallbackOnlyOnQuotaExhaustionShort": "Quota-Only Fallback", "warningRoundRobinSingleModel": "Round-Robin ist bei mindestens zwei Modellen am nützlichsten.", "warningCostOptimizedPartialPricing": "Nur {priced} der {total} Modelle haben Preise. Die Routenplanung kann teilweise kostenbewusst erfolgen.", "warningCostOptimizedNoPricing": "Für diese Kombination wurden keine Preisdaten gefunden. Eine kostenoptimierte Route kann unerwartet erfolgen.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Modus-Paket und Gewichtung bleiben hier; der Breaker-Laufzeitstatus bleibt auf der Health-Seite.", "emailVisibilityHint": "Konto-E-Mails folgen hier dem globalen Datenschutz-Schalter.", "emailVisibilityTooltip": "Verwenden Sie das Augensymbol, um Konto-E-Mails global über Combos, Provider und Kontingent-Bildschirme hinweg ein- oder auszublenden.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Schritt für Schritt (Anbieter → Modell)", + "builderModeGlobal": "Globale Modellsuche (Benutzerdefinierte Kombination)", + "builderGlobalSearchPlaceholder": "Modelle über alle Anbieter hinweg suchen (z. B. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Alles hinzufügen", + "builderGlobalShortcuts": "Tastenkombinationen:", + "builderGlobalNoResults": "Kein Modell gefunden für \"{query}\".", + "builderGlobalProviderLabel": "Anbieter:", + "builderGlobalAccountCount": "{count, plural, one {# Konto} other {# Konten}}", + "builderGlobalAdded": "Hinzugefügt", + "builderGlobalAdd": "Hinzufügen", "manualModel": "Manuelles Modell", "manualModelInvalid": "Geben Sie ein Modell als provider/model ein.", "manualModelUnknownProvider": "Unbekanntes Provider-Präfix.", @@ -3548,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness aus", "kimiPresetTitle": "Kimi Coding-Preset", "kimiPresetDescription": "Kimi K3 als primäres Modell (Moonshot API), mit automatischem Fallback auf Ihre Kimi Code-Verbindungen (kimi-coding, kimi-web), sofern konfiguriert.", - "kimiPresetCta": "Preset hinzufügen" + "kimiPresetCta": "Preset hinzufügen", + "intelligentComboCount": "{count, plural, one {# intelligenter Kombi} other {# intelligente Kombis}}", + "providersInScope": "{count, plural, one {# Anbieter im Geltungsbereich} other {# Anbieter im Geltungsbereich}}", + "savingModePack": "Speichern von {pack}…", + "errorTitle": "Kombinationen konnten nicht geladen werden", + "errorDescription": "Wir konnten die Kombinationsdaten momentan nicht laden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "errorId": "Fehler-ID: {id}", + "errorRetry": "Versuche es erneut", + "comboLabel": "Kombination" }, "costs": { "title": "Kosten", @@ -3937,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Benutzername", "obsidianPassword": "Passwort", - "obsidianTailscaleHint": "Verwenden Sie Ihre Tailscale-IP anstelle von localhost, wenn Sie eine Verbindung vom Mobilgerät herstellen. Beide Geräte müssen sich im selben Tailscale-Netzwerk befinden." + "obsidianTailscaleHint": "Verwenden Sie Ihre Tailscale-IP anstelle von localhost, wenn Sie eine Verbindung vom Mobilgerät herstellen. Beide Geräte müssen sich im selben Tailscale-Netzwerk befinden.", + "cloudSyncNotConfigured": "Die Cloud-Synchronisierung ist auf dieser Instanz nicht konfiguriert.", + "notionConnect": "Verbinden", + "notionConnectFailed": "Verbindung fehlgeschlagen", + "notionConnected": "Verbunden", + "notionConnectionFailed": "Verbindung fehlgeschlagen", + "notionDescription": "Durch geroutete KI-Modelle in Notion suchen, lesen, abfragen und schreiben", + "notionDisconnect": "Trennen", + "notionDisconnectFailed": "Trennen fehlgeschlagen", + "notionEnterToken": "Bitte geben Sie ein Notion-Integrations-Token ein", + "notionIntegrationHelp": "Erstellen Sie eine interne Integration bei", + "notionIntegrationToken": "Notion Interner Integrations-Token", + "notionNotConnected": "Nicht verbunden", + "notionTokenConfigured": "Token konfiguriert. Notion-Tools sind über MCP verfügbar." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4153,6 +4331,12 @@ "providerModelLabel": "Anbieter / Modell", "noRemoteProviders": "Keine Anbieter mit konfiguriertem API-Schlüssel", "selectProviderModel": "Modell auswählen", + "customBaseUrlLabel": "Benutzerdefinierte Basis-URL (optional)", + "customModelIdLabel": "Benutzerdefinierte Modell-ID (optional)", + "customEndpointHelp": "Verwenden Sie einen OpenAI-kompatiblen /embeddings-Endpunkt. Lokale Endpunkte sind erlaubt; Cloud-Metadatenziele sind blockiert.", + "customEndpointSave": "Benutzerdefinierten Endpunkt anwenden", + "customEndpointInvalid": "Geben Sie sowohl eine gültige HTTP(S)-Basis-URL als auch eine Modell-ID ein oder lassen Sie beide Felder leer.", + "customEndpointSaveFailed": "Der benutzerdefinierte Einbettungsendpunkt konnte nicht gespeichert werden.", "staticEnabledLabel": "Statisches Potion aktivieren", "staticEnabledDesc": "Modell „potion-base-8M“ herunterladen und lokal verwenden", "transformersEnabledLabel": "Transformers.js aktivieren", @@ -4259,7 +4443,9 @@ "cleaning": "Cleaning...", "cleanNow": "Clean now", "cleanupSuccess": "{count} point(s) removed", - "cleanupFailed": "Cleanup failed" + "cleanupFailed": "Cleanup failed", + "hostLabel": "Host", + "collectionLabel": "Sammlung" }, "rerank": { "enableLabel": "Enable Rerank", @@ -4757,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-Stufen-Fallback-Diagramm", "apiKeyMgmt": "API-Schlüsselverwaltung", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Kostenlose Anbieter einrichten", + "description": "Optional können ausgewählte Anbieter ohne Anmeldung aktiviert werden. Überprüfen Sie die Hinweise und die Website jedes Anbieters, bevor Sie fortfahren; Verfügbarkeit und Ratenlimits werden von Dritten kontrolliert.", + "loading": "Lade kostenlose Anbieter...", + "loadFailed": "Konnte kostenlose Anbieter nicht laden.", + "alreadyConfigured": "Alle berechtigten kostenlosen Anbieter sind bereits konfiguriert.", + "reviewProviderSite": "Überprüfen Sie die Anbieter-Website und die Bedingungen", + "confirmation": "Ich habe diese Drittanbieter überprüft und möchte, dass OmniRoute die ausgewählten Verbindungen erstellt.", + "setupSelected": "Ausgewählte Anbieter einrichten", + "settingUp": "Einrichten...", + "setupFailed": "Die ausgewählten Anbieter konnten nicht eingerichtet werden. Es wurde nichts Bestehendes geändert.", + "retryFailed": "Erneut fehlgeschlagene Anbieter versuchen", + "orUseApiKey": "oder verbinden Sie sich mit einem API-Schlüssel", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "erstellt", + "skipped": "bereits konfiguriert", + "failed": "fehlgeschlagen" } } }, @@ -4978,6 +5164,7 @@ "baseUrlHint": "Erforderlich. Basis-URL der Anbieter-API.", "iconUrlLabel": "Icon-URL", "iconUrlHint": "Optional. Bild-URL, die als Icon dieses Anbieters angezeigt wird.", + "iconUrlInvalid": "Ungültige Icon-URL. Verwenden Sie eine http(s):// oder data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "AC-Prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5315,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibel (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sitzung bereits aktuell", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Authentifizierung anwenden", @@ -5689,9 +5876,9 @@ "zedPasteApiKey": "API-Schlüssel einfügen…", "zedSaving": "Wird gespeichert…", "zedImportAction": "Importieren", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktivieren Sie die automatische Erneuerung der Cursor-Sitzung", + "cursorAgentNudgeBody": "Installiere den Cursor-Agenten für die automatische Sitzungserneuerung – ohne ihn müssen Cursor-Verbindungen ungefähr alle 24 Stunden manuell neu verbunden werden.", + "cursorAgentNudgeDismiss": "Ablehnen", "zedManualImportFailed": "Manueller Import fehlgeschlagen", "zedManualImportSuccess": "{provider}-Token aus Zed importiert", "grokImportTitle": "Grok Build-Authentifizierung importieren", @@ -5879,7 +6066,6 @@ "friendliai": "Kostenlose Stufe für serverlose Inferenz – keine Kreditkarte erforderlich", "gemini": "Für immer kostenlos: 1.500 Anfragen/Tag für Gemini 2.5 Flash — keine Kreditkarte, Schlüssel unter aistudio.google.com anfordern", "gigachat": "GigaChat (Sber) mit einem API-Schlüssel verbinden.", - "github-models": "Erstellen Sie einen GitHub-PAT mit dem Scope 'models: read' unter github.com/settings/tokens", "gitlab": "Persönliches GitLab-Zugriffstoken für die öffentliche Code Suggestions API. Konfigurieren Sie eine selbstgehostete Basis-URL, wenn Sie nicht gitlab.com verwenden.", "gitlawb-gmi": "Holen Sie sich Ihren API-Schlüssel aus dem Gitlawb Opengateway-Dashboard.", "gitlawb": "Holen Sie sich Ihren API-Schlüssel aus dem Gitlawb Opengateway-Dashboard.", @@ -6018,7 +6204,8 @@ "kimi-coding": "Kimi Coding mit dem bestehenden OAuth-Flow verbinden.", "kiro": "Kostenlose Stufe: 50 Credits/Monat (~25K–100K Token). ⚠️ Die Nutzungsbedingungen von Kiro verbieten die Nutzung von Drittanbieter-Proxys/Harnesses.", "codex": "OpenAI Codex mit dem bestehenden OAuth-Flow verbinden.", - "qwen": "Qwen Code mit dem bestehenden OAuth-Flow verbinden." + "qwen": "Qwen Code mit dem bestehenden OAuth-Flow verbinden.", + "github-models": "Erstellen Sie einen GitHub-PAT mit dem Scope 'models: read' unter github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} akzeptiert provider-native Modell-IDs. Importiere sie über /models oder füge eigene IDs fürs Routing hinzu.", "bedrockModelsDescription": "Amazon-Bedrock-Modelle hängen von der AWS-Region ab. Importiere sie über /models oder füge Bedrock-Modell-IDs hinzu, die in der gewählten Region aktiviert sind.", @@ -6077,7 +6264,78 @@ "anonymousFallbackDesc": "Wenn alle konfigurierten Verbindungen erschöpft sind (Kontingent, Guthaben oder Ablauf), verwenden Sie vorübergehend die schlüssellose Stufe dieses Anbieters. Deaktivieren Sie dies, um diesen Anbieter zu überspringen, anstatt anonyme Anfragen zu senden – empfohlen, wenn die schlüssellose Stufe diese ablehnt (401).", "anonymousFallbackEnabled": "Anonymer Fallback für {provider} aktiviert", "anonymousFallbackDisabled": "Anonymer Fallback für {provider} deaktiviert — erschöpfte Verbindungen überspringen diesen Anbieter", - "anonymousFallbackUpdateFailed": "Fehler beim Aktualisieren der anonymen Fallback-Einstellung" + "anonymousFallbackUpdateFailed": "Fehler beim Aktualisieren der anonymen Fallback-Einstellung", + "batchDeleteFailed": "Batch-Löschung fehlgeschlagen", + "batchDeleteNetworkError": "Netzwerkfehler während der Batch-Löschung", + "batchUpdateFailed": "Batch-Aktualisierung fehlgeschlagen", + "batchUpdateNetworkError": "Netzwerkfehler während der Batch-Aktualisierung", + "categoryAudio": "Audio", + "categoryCloudAgent": "Cloud-Agent", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Suche", + "categoryWebCookie": "Web-Cookie", + "claudeExtraUsageBlockingDisabled": "Claude zusätzliche Nutzungssperre deaktiviert (zusätzliche Nutzung ist erlaubt)", + "claudeExtraUsageBlockingEnabled": "Claude Übernutzungsblockierung aktiviert (Übernutzung wird blockiert)", + "claudeRoutingPreferenceDisabled": "Unpräfixierte Claude-Modelle bevorzugen nicht mehr Claude Code", + "claudeRoutingPreferenceEnabled": "Unpräfixierte Claude-Modelle bevorzugen jetzt Claude Code", + "clearMediaFilter": "Löschen", + "cliproxyRoutingDisabled": "Anfragen verwenden jetzt das native OmniRoute (direkt)", + "cliproxyRoutingEnabled": "Anfragen werden jetzt über CLIProxyAPI geleitet (tiefere Emulation)", + "codexLimitPolicyUpdated": "Codex-Limit-Richtlinie aktualisiert", + "codexServiceModeUpdated": "Codex-Dienstmodus aktualisiert", + "codexServiceTierActive": "Codex {tier} Dienstebene ist aktiv", + "codexTierFastLabel": "Schnell", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Fehler beim Anwenden des Befehlscodes auth", + "commandCodeApplyingApproval": "Browser genehmigt, wird angewendet…", + "commandCodeApplyingKey": "Browser-zugelassenen Schlüssel anwenden…", + "commandCodeApprovalInstructions": "Öffnen Sie die Auth-URL, genehmigen Sie den Zugriff und fügen Sie dann den zurückgegebenen Schlüssel/JSON/URL unten ein…", + "commandCodeAuthExpired": "Befehls-Code auth abgelaufen", + "commandCodeConnected": "Befehlscode verbunden", + "commandCodeConnectionAdded": "Befehlscode-Verbindung hinzugefügt", + "commandCodeLinkExpired": "Der Link zum Befehlscode ist abgelaufen", + "commandCodeOpeningStudio": "Öffne Command Code Studio…", + "commandCodePopupBlocked": "Popup blockiert. Bitte erlauben Sie Popups und versuchen Sie es erneut mit Command Code Connect.", + "commandCodeStartFailed": "Fehler beim Starten des Befehls Code auth", + "connectionDeleted": "Verbindung gelöscht", + "connectionFallback": "Verbindung", + "coolingConnectionsDescription": "Diese Verbindungen haben bei ihrer letzten Anfrage einen 429 (Rate-Limit) zurückgegeben. OmniRoute wird sie überspringen, bis der Timer abläuft – eine manuelle Deaktivierung ist nicht erforderlich.", + "coolingConnectionsTitle": "Aktuell kühlen ({count})", + "failedDeleteAlias": "Alias konnte nicht gelöscht werden", + "failedDeleteConnection": "Verbindung konnte nicht gelöscht werden", + "failedDistributeProxies": "Verteilung der Proxys fehlgeschlagen.", + "failedSaveModelEndpointSettings": "Fehler beim Speichern der Einstellungen für den Modell-Endpunkt", + "failedUpdateClaudeExtraUsagePolicy": "Fehler beim Aktualisieren der Claude-Nutzungsrichtlinie für zusätzliche Nutzung", + "failedUpdateClaudeRoutingPreference": "Fehler beim Aktualisieren der Claude Code-Routing-Präferenz", + "failedUpdateCliproxyRouting": "Fehler beim Aktualisieren der CLIProxyAPI-Routing", + "failedUpdateCodexLimitPolicy": "Fehler beim Aktualisieren der Codex-Limitrichtlinie", + "failedUpdateCodexServiceMode": "Fehler beim Aktualisieren des Codex-Dienstmodus", + "filterByMedia": "Medien", + "freeBadge": "Kostenlos", + "kimiCodeApiKeyLabel": "Kimi Code API-Schlüssel", + "modelTestFailed": "Modelltest fehlgeschlagen", + "modelTestNetworkError": "Netzwerkfehler beim Testen des Modells", + "networkError": "Netzwerkfehler", + "networkErrorDeletingAlias": "Netzwerkfehler beim Löschen des Alias", + "networkErrorSettingAlias": "Netzwerkfehler beim Festlegen des Alias'", + "noProvidersMatch": "Keine Anbieter entsprechen Ihrer Suche.", + "noSavedProxies": "Keine gespeicherten Proxys gefunden. Fügen Sie zuerst Proxys in Einstellungen → Proxy hinzu.", + "pageLoadErrorDescription": "Wir konnten die Anbieterdaten momentan nicht laden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "pageLoadErrorId": "Fehler-ID: {id}", + "pageLoadErrorRetry": "Versuche es erneut", + "pageLoadErrorTitle": "Anbieter konnten nicht geladen werden", + "playgroundTitle": "Spielplatz", + "providerDetailConnectionFlexActive": "Der Codex Flex-Service-Tarif ist für diese Verbindung aktiv.", + "providerDetailConnectionPriorityActive": "Der Codex-Prioritätsdienst ist für diese Verbindung aktiv.", + "providerDetailGlobalFlexActive": "Der globale Codex Flex-Service-Tarif ist aktiv", + "providerDetailGlobalPriorityActive": "Der globale Codex-Prioritätsdienst ist aktiv", + "proxiesDistributed": "Verteilte {assigned} Proxy-Zuweisung(en) über {tagLabel}{total} Verbindung(en).", + "rerankEndpoint": "Neu bewerten", + "savedModelEndpointSettings": "Einstellungen für den gespeicherten Modell-Endpunkt", + "searchByModelAria": "Nach Modell suchen", + "selectSupportedEndpoint": "Wählen Sie mindestens einen unterstützten Endpunkt aus", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Einstellungen", @@ -6461,7 +6719,24 @@ "loadFailed": "Die Abonnementliste konnte nicht geladen werden", "toggleFailed": "Fehler beim Umschalten des Schalters", "refreshFailed": "Aktualisierung fehlgeschlagen", - "deleteFailed": "Fehler beim Löschen" + "deleteFailed": "Fehler beim Löschen", + "add": "Hinzufügen", + "cancel": "Abbrechen", + "configure": "Konfigurieren", + "copyEndpoint": "Endpunkt kopieren", + "coreEndpointHint": "Kernendpunkt-Hinweis", + "coreNodesHint": "Kernknoten-Hinweis", + "create": "Erstellen", + "deleteConfirm": "Löschen Bestätigen", + "empty": "Leer", + "globalModeDescription": "Globale Modusbeschreibung", + "localCoreHint": "Lokaler Core-Hinweis", + "nodeSummary": "Knotenübersicht", + "providerRequired": "Anbieter erforderlich", + "providerRouting": "Anbieter-Routing", + "refresh": "Aktualisieren", + "refreshInterval": "Aktualisierungsintervall", + "ruleModeDescription": "Regelmodus-Beschreibung" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7235,6 +7510,8 @@ "visionBridgeDesc": "Einen automatischen Vision-to-Text-Fallback ausführen, bevor Bildanfragen an reine Textmodelle weitergeleitet werden.", "visionBridgeEnabledLabel": "Aktiviert", "visionBridgeEnabledDesc": "Die Pre-Call-Bridge umschalten, die Bildteile durch extrahierten Text ersetzt.", + "visionBridgeRerouteTextOnlyLabel": "Leite nur Textmodelle um", + "visionBridgeRerouteTextOnlyDesc": "Senden Sie die vollständige Anfrage, einschließlich Bilder, an das Brückenmodell, wenn das ausgewählte Modell keinen Bildeingang hat.", "visionBridgeModel": "Brückenmodell", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Jede OmniRoute-Modell-ID, die Vision unterstützt, kann hier verwendet werden.", @@ -7597,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Dem API-Schlüssel fehlt der Scope „manage“.", "BYPASS_PREFIX_NOT_ALLOWED": "Ein oder mehrere Präfixe zielen auf spawn-fähige Routen ab und können nicht umgangen werden.", "GENERIC": "Fehler beim Aktualisieren der Autorisierungseinstellungen." - } + }, + "remove": "Entfernen" }, "resilienceBaseCooldownLabel": "Grundabklingzeit", "scopeLabel": "Geltungsbereich", @@ -7784,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Audio wird getestet…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} Clip(s) von {model} transkribiert", "modalityBridgeAudioTestNoop": "Audio Bridge wurde nicht aktiviert (das Ziel unterstützt möglicherweise Audio, kein STT-Anbieter ist verbunden oder die Brücke ist deaktiviert)", - "modalityBridgeAudioTestError": "Audiotest fehlgeschlagen: {message}" + "modalityBridgeAudioTestError": "Audiotest fehlgeschlagen: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus-Modelle zu Frontier-Kombination", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback-Codes", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback-Beschreibung", + "cliproxyapiHealthLabel": "Cliproxyapi Gesundheitslabel", + "cliproxyapiImportFailed": "Cliproxyapi Importieren Fehlgeschlagen", + "cliproxyapiImportResult": "Cliproxyapi Import Ergebnis", + "cliproxyapiInvalidUrl": "Cliproxyapi Ungültige URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Lebenszyklusbenachrichtigung Nach", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Lebenszyklusbenachrichtigung Vor", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Lebenszyklusbenachrichtigung Link", + "cliproxyapiPortLabel": "Cliproxyapi Port Beschriftung", + "cliproxyapiStatusLabel": "Cliproxyapi Statusbezeichnung", + "cliproxyapiVersionLabel": "Cliproxyapi Versionsbezeichnung", + "collection": "Sammlung", + "errorPage": { + "description": "Wir konnten die Einstellungen gerade nicht laden. Bitte versuchen Sie es in ein paar Sekunden erneut.", + "errorId": "Fehler-ID: {id}", + "retry": "Versuche es erneut", + "title": "Fehler beim Laden der Einstellungen" + }, + "host": "Host", + "notInstalled": "Nicht installiert", + "oneproxyActions": "Oneproxy-Aktionen", + "oneproxyActive": "Oneproxy Aktiv", + "oneproxyAnonymity": "Oneproxy Anonymität", + "oneproxyCountry": "Oneproxy Land", + "oneproxyDelete": "Oneproxy Löschen", + "oneproxyEmpty": "Oneproxy Leer", + "oneproxyHost": "Oneproxy-Host", + "oneproxyLatency": "Oneproxy-Latenz", + "oneproxyProtocol": "Oneproxy-Protokoll", + "oneproxyQuality": "Oneproxy Qualität", + "oneproxySyncFailed": "Synchronisierung fehlgeschlagen: {error}", + "oneproxySyncSuccess": "Synchronisierte {total} Proxys ({added} neu, {updated} aktualisiert)", + "proxyDocumentationSocks5DescAfter": "Proxy-Dokumentation Socks5 Beschreibung Nach", + "proxyFreePoolAddProxy": "Proxy Freier Pool Proxy Hinzufügen", + "proxyFreePoolAdding": "Proxy Freier Pool Hinzufügen", + "proxyFreePoolSelectProxy": "Proxy Freier Pool Proxy Auswählen", + "proxyStatusActive": "Proxy-Status Aktiv", + "proxyStatusInactive": "Proxy-Status Inaktiv", + "routingAddEntry": "Eintrag hinzufügen", + "settingSaveFailed": "Einstellungsspeicherung fehlgeschlagen", + "settingSaved": "Einstellungen Gespeichert", + "skillsmpApiKeyHintAfter": ". Rate Limit: {limit} Anfragen/Tag.", + "skillsmpApiKeyHintBefore": "Holen Sie sich Ihren API-Schlüssel von", + "syncFailed": "Synchronisierung fehlgeschlagen", + "unhealthy": "Ungesund", + "oneproxyDescription": "Holen Sie sich kostenlose, validierte Proxys von der 1proxy-Community-Plattform und rotieren Sie diese.", + "oneproxySyncing": "Synchronisieren...", + "oneproxySyncNow": "Jetzt synchronisieren", + "oneproxyClearAll": "Alle Löschen", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Alle 1proxy-Proxys löschen?", + "memorySkillsSkillsmpDescription": "Verbinden Sie sich mit SkillsMP, um Fähigkeiten aus dem Marktplatz zu entdecken und zu installieren.", + "memorySkillsActiveProviderDescription": "Wählen Sie aus, welchen Anbieter die Skills-Seite für die Suche und Installation verwendet.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP-Marktplatz", + "memorySkillsSkillsmpProviderDescription": "Authentifizierter Marktplatz (verwendet Ihren SkillsMP API-Schlüssel).", + "memorySkillsSkillsshProviderTitle": "skills.sh Verzeichnis", + "memorySkillsSkillsshProviderDescription": "Öffentlicher Verzeichnisanbieter (kein API-Schlüssel erforderlich).", + "routingCcBridgeCatalogName": "Anthropic-kompatible CC-Brücke", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Native Claude-Anbieter mit von OAuth ausgegebenen Tokens.", + "routingCcBridgeName": "Claude-Code-Brücke", + "routingCcBridgeDescription": "Relay-Endpunkte mit API-Schlüsseln (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Benutzerdefinierter Anbieter.", + "routingUnknownOpKind": "Unbekannter Op-Typ: {kind}", + "routingInvalidJson": "Ungültiges JSON: {error}", + "routingConfigMustBeObject": "Die Konfiguration muss ein JSON-Objekt sein", + "routingEnabledMustBeBoolean": "`enabled` muss true oder false sein", + "routingPipelineMustBeArray": "`pipeline` muss ein Array von Ops sein", + "routingPipelineTooLong": "Die Pipeline darf 50 Operationen nicht überschreiten", + "routingOpMissingKind": "Op #{index}: fehlender oder ungültiger `kind`", + "routingOpUnknownKind": "Op #{index}: unbekannter Typ \"{kind}\"", + "routingJsonEditorHide": "JSON-Editor ausblenden", + "routingJsonEditorImportExport": "JSON importieren / exportieren", + "routingJsonEditorLabel": "JSON (bearbeiten und anwenden oder einfügen zum Importieren)", + "routingApplyJson": "JSON anwenden", + "routingTransformsFootnote": "Alle Transformationsoperationen sind idempotent bei erneutem Ausführen. Änderungen treten sofort bei der nächsten Anfrage in Kraft.", + "cliproxyapiUnknown": "Unbekannt", + "cliproxyapiVersion": "Version", + "cliproxyapiHealth": "Gesundheit", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Sammlung" }, "contextRtk": { "title": "RTK Engine", @@ -8017,6 +8379,15 @@ "full": "Vollständig", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Standardmäßig", + "off": "Aus", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Aggressiv", + "ultra": "Ultra", + "responsesToolOutput": "Antworten-Tool-Ausgabe" } }, "contextCombos": { @@ -8182,7 +8553,8 @@ "enableDescription": "Wird als Letztes im Stack ausgeführt (nachdem RTK/Caveman den Text bereinigt hat, konvertiert OmniGlyph den Rest in Bilder) und läuft auch eigenständig im omniglyph-Modus. Dies ist eine Vorschau und bleibt standardmäßig deaktiviert, bis die End-to-End-Validierung abgeschlossen ist.", "saved": "Gespeichert.", "saveFailed": "Konnte nicht gespeichert werden.", - "enableAria": "OmniGlyph-Engine aktivieren" + "enableAria": "OmniGlyph-Engine aktivieren", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Eingebettete Dienste", @@ -9128,7 +9500,49 @@ "unableToLoad": "Systemmetriken können nicht geladen werden", "product": "Produkt", "resources": "Ressourcen", - "company": "Unternehmen" + "company": "Unternehmen", + "tokenHealthTooltips": { + "allHealthy": "Alle Tokens gesund", + "needsAttention": "Einige Tokens benötigen Aufmerksamkeit", + "refreshFailures": "Token-Aktualisierungsfehler erkannt", + "unknown": "Gesundheitsstatus unbekannt" + }, + "systemMonitor": { + "metricsAriaLabel": "Systemmetriken", + "memory": "Speicher", + "memoryShort": "mem", + "uptime": "Betriebszeit", + "ariaLabel": "Systemüberwachung", + "title": "Systemüberwachung", + "version": "Version", + "connections": "Verbindungen", + "circuitBreakers": "Leistungsschalter", + "open": "{count} offen", + "memoryUsage": "Speicherverbrauch" + }, + "never": "Nie", + "justNow": "Gerade eben", + "minutesAgo": "vor {count}m", + "hoursAgo": "vor {count}h", + "tokens": "Tokens", + "costs": "Kosten", + "autoRefresh": "Automatische Aktualisierung ({seconds}s)", + "toggleAutoRefresh": "Automatische Aktualisierung umschalten", + "activeRequests": "Aktive Anfragen", + "totalRequests": "Gesamtanfragen", + "totalInputTokens": "Gesamtzahl der Eingabetokens", + "model": "Modell", + "provider": "Anbieter", + "requests": "Anfragen", + "lastUsed": "Zuletzt Verwendet", + "inputTokens": "Eingabetokens", + "totalTokens": "Gesamtanzahl der Tokens", + "inputCost": "Eingabekosten", + "outputCost": "Ausgabekosten", + "noUsageData": "Noch keine Nutzung aufgezeichnet. Machen Sie einige Anfragen, um hier Daten zu sehen.", + "account": "Konto", + "accountLabel": "Konto {id}", + "noAccountUsage": "Noch keine kontospezifische Nutzung aufgezeichnet. Stellen Sie Anfragen mit OAuth-Konten, um hier Daten zu sehen." }, "auth": { "welcome": "Willkommen", @@ -9194,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Zurücksetzen über App-Daten", + "resetViaAppDataDescription": "Löschen Sie die Einstellungsdatei aus dem Anwendungsdatenverzeichnis, um Ihr Passwort zurückzusetzen:", + "quitDesktopApp": "Beenden Sie die OmniRoute-Desktopanwendung vollständig", + "navigateToAppDataDirectory": "Navigiere zum App-Datenverzeichnis:", + "checkSystemAppDataFolder": "(Überprüfen Sie Ihren System-App-Datenordner)", + "relaunchDesktopFreshSetup": "Starten Sie die OmniRoute-Desktop-App neu – es wird eine frische Einrichtung gestartet.", + "alternativeSetPasswordTitle": "Alternative: Neues Passwort Festlegen", + "alternativeSetPasswordDescription": "Setzen Sie ein neues Anfangspasswort über die Server-Umgebungsdatei:", + "openServerEnvFilePrefix": "Öffnen", + "relaunchDesktopApp": "Starten Sie die OmniRoute-Desktopanwendung neu", + "codexLinkInvalidOrExpired": "Dieser Link ist ungültig oder abgelaufen.", + "codexValidationServerError": "Konnte den Server nicht erreichen, um diesen Link zu validieren.", + "codexSaveConnectionError": "Die Verbindung konnte nicht gespeichert werden. Der Link ist möglicherweise abgelaufen.", + "codexDeviceLoginDisabled": "Die Gerätecode-Anmeldung ist für dieses OpenAI-Konto deaktiviert. Aktivieren Sie sie in den Sicherheitseinstellungen von ChatGPT (oder fragen Sie Ihren Workspace-Administrator).", + "codexAuthorizationTimedOut": "Die Autorisierung ist abgelaufen. Klicken Sie auf Erneut starten, um es erneut zu versuchen.", + "authenticationCancelled": "Die Authentifizierung wurde abgebrochen.", + "unexpectedAuthenticationError": "Unerwarteter Fehler bei der Authentifizierung. Bitte versuchen Sie es erneut.", + "connectOpenAiCodexTitle": "OpenAI Codex verbinden", + "codexConnectDescription": "Autorisieren Sie ein ChatGPT-Konto, um diese Verbindung einzurichten.", + "validatingCodexLink": "Link wird validiert…", + "codexGenerateCodeDescription": "Klicken Sie unten, um einen einmaligen Code zu generieren, und melden Sie sich dann bei OpenAI an.", + "startCodexFlow": "Start", + "requestingOpenAiCode": "Code von OpenAI anfordern…", + "codexVerificationInstructions": "1. Öffnen Sie die OpenAI-Überprüfungsseite und 2. geben Sie diesen Code ein. Diese Seite wird automatisch aktualisiert, sobald Sie autorisieren.", + "yourCode": "Ihr Code", + "openVerificationPage": "Verifizierungsseite öffnen", + "copyUrlShort": "URL kopieren", + "savingConnection": "Verbindung wird gespeichert…", + "codexConnected": "Verbunden!", + "codexConnectionRegistered": "Das Codex-Konto wurde registriert. Sie können diesen Tab schließen.", + "tryAgain": "Versuche es erneut", + "traeAuthorizationSuccess": "Trae-Autorisierung ✓", + "traeAuthorizationFailed": "Trae-Autorisierung fehlgeschlagen", + "closeAuthorizationWindow": "Sie können dieses Fenster schließen.", + "returnToDashboard": "Zurück zum Dashboard.", + "resetViaAppData": "Zurücksetzen über App-Daten", + "deleteSettingsToReset": "Löschen Sie die Einstellungsdatei aus dem App-Datenverzeichnis, um Ihr Passwort zurückzusetzen:", + "quitAppCompletely": "Beenden Sie die OmniRoute-Desktopanwendung vollständig", + "navigateToAppData": "Navigieren Sie zum App-Datenverzeichnis", + "checkAppDataFolder": "Überprüfen Sie Ihren System-App-Datenordner", + "deleteSettingsJson": "Löschen", + "relaunchAppFresh": "Starten Sie die OmniRoute-Desktopanwendung neu – sie wird die Einrichtung von Grund auf neu starten.", + "alternativeSetPassword": "Alternative: Neues Passwort festlegen", + "setNewPasswordViaEnv": "Setzen Sie ein neues Anfangspasswort über die Server-Umgebungsdatei:", + "openServerEnv": "Öffnen", + "inDataDirectory": "im Datenverzeichnis", + "addOrUpdate": "Hinzufügen oder aktualisieren", + "deleteAndRelaunch": "Löschen", + "settingsJson": "settings.json", + "fromDataDir": "aus dem Datenverzeichnis", + "relaunchApp": "Starten Sie die OmniRoute-Desktopanwendung neu" }, "landing": { "brandName": "OmniRoute", @@ -9276,7 +9741,19 @@ "ctaTitle": "Sind Sie bereit, Ihre KI-Infrastruktur zu vereinfachen?", "ctaDescription": "Schließen Sie sich Entwicklern an, die ihre KI-Integrationen mit OmniRoute optimieren. Open Source und kostenlos zu starten.", "startFree": "Kostenlos starten", - "readDocumentation": "Dokumentation lesen" + "readDocumentation": "Dokumentation lesen", + "company": "Unternehmen", + "pricing": "Preise", + "apiReference": "API-Referenz", + "helpCenter": "Hilfezentrum", + "about": "Über", + "blog": "Blog", + "contact": "Kontakt", + "terms": "Bedingungen", + "privacy": "Datenschutz", + "license": "Lizenz", + "footerDescription": "Die einheitliche Schnittstelle für moderne KI-Infrastruktur. Sicher, beobachtbar und skalierbar.", + "communityDiscussions": "Gemeinschaftsdiskussionen" }, "docs": { "title": "Dokumentation", @@ -9485,7 +9962,51 @@ "protocolAcpDesc": "Registrieren und verwalten Sie Agenten über die ACP-Registrierung für die Kommunikation zwischen Agenten und die gemeinsame Nutzung von Tools.", "protocolAcpStep1": "Navigieren Sie zu Dashboard → Agents, um registrierte ACP-Agenten anzuzeigen.", "protocolAcpStep2": "Registrieren Sie neue Agenten mit Funktionen und Endpunktkonfiguration.", - "protocolAcpStep3": "Verwenden Sie CLI-Tools, um Agenten-Kommunikationskanäle zu konfigurieren." + "protocolAcpStep3": "Verwenden Sie CLI-Tools, um Agenten-Kommunikationskanäle zu konfigurieren.", + "metadataTitleTemplate": "%s — OmniRoute-Dokumentation", + "metadataDefaultTitle": "OmniRoute-Dokumentation", + "metadataDescription": "Umfassende Dokumentation für das OmniRoute AI-Gateway — Einrichtung, API, Kompression, Bereitstellung und mehr.", + "layoutNavTitle": "OmniRoute-Dokumentation", + "layoutHomeLink": "Dokumente Startseite", + "layoutDashboardLink": "← Zurück zum Dashboard", + "homeTitle": "OmniRoute-Dokumentation", + "homeMetadataDescription": "Alles, was Sie benötigen, um Ihre KI zu routen, zu komprimieren und zu skalieren – Einrichtungsanleitungen, API-Referenz, Kompression, Bereitstellung und mehr.", + "homeTwitterDescription": "Umfassende Dokumentation für das OmniRoute AI-Gateway", + "homeDescription": "Alles, was Sie benötigen, um Ihre KI zu routen, zu komprimieren und zu skalieren", + "homeSearchHint": "Drücken Sie Ctrl K, um die Dokumentation zu durchsuchen", + "featuredQuickStartTitle": "Schnellstart", + "featuredQuickStartDescription": "OmniRoute in 3 Minuten zum Laufen bringen", + "featuredAutoComboTitle": "Auto-Combo-Anleitung", + "featuredAutoComboDescription": "Lass OmniRoute die beste KI für dich auswählen", + "featuredProvidersTitle": "Anbieterhandbuch", + "featuredProvidersDescription": "Verbinden Sie KI-Anbieter in Minuten", + "nonTechUsersTitle": "Für Nicht-Technische Benutzer", + "nonTechUsersSubtitle": "Schnell loslegen — kein technischer Hintergrund erforderlich", + "techUsersTitle": "Für technische Benutzer", + "techUsersSubtitle": "Tiefer Einblick in Architektur, APIs und Interna", + "apiExplorerMetadataTitle": "API-Explorer — OmniRoute-Dokumentation", + "apiExplorerMetadataDescription": "Interaktiver API-Explorer — testen Sie OmniRoute-Endpunkte live mit Echtzeit-Antworten", + "apiExplorerTitle": "API-Explorer", + "apiExplorerDescription": "Testen Sie die OmniRoute-Endpunkte live. Wählen Sie einen Endpunkt aus, konfigurieren Sie Ihre Anfrage und sehen Sie die Antwort in Echtzeit.", + "apiExplorerSseStarted": "SSE-Stream gestartet — überprüfen Sie das Terminal/devtools auf Echtzeitausgaben.", + "apiExplorerError": "Fehler: {message}", + "apiExplorerAuth": "auth", + "apiExplorerResponseLabel": "Antwort", + "apiExplorerSelectEndpoint": "Wählen Sie einen Endpunkt zum Erkunden aus", + "apiExplorerChooseApi": "Wählen Sie eine API aus der Seitenleiste, um Details zu sehen und sie live auszuprobieren", + "feedbackThanks": "Danke für Ihr Feedback!", + "feedbackQuestion": "War diese Seite hilfreich?", + "pageMetadataTitle": "{title} — OmniRoute-Dokumentation", + "pageMetadataDescription": "OmniRoute-Dokumentation: {title}", + "breadcrumb": "Brotkrumen", + "apiReferenceTable": { + "parameters": "Parameter", + "name": "Name", + "type": "Typ", + "description": "Beschreibung", + "returns": "Rückgaben", + "typePrefix": "Typ:" + } }, "legal": { "privacyPolicy": "Datenschutzrichtlinie", @@ -9958,7 +10479,42 @@ "successMessage": "Ihr {providerName}-Konto wurde verbunden.", "done": "Fertig", "error": "Verbindung fehlgeschlagen", - "tryAgain": "Versuchen Sie es erneut" + "tryAgain": "Versuchen Sie es erneut", + "errorSessionIncomplete": "Die OAuth-Sitzung ist unvollständig (fehlende Umleitungs-URI oder Code-Verifier). Starten Sie die Verbindung neu und versuchen Sie es erneut.", + "errorExchangeFailed": "Austausch fehlgeschlagen", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Die standardmäßigen Google OAuth-Anmeldeinformationen funktionieren nur auf localhost. Für die Verwendung aus der Ferne konfigurieren Sie Ihre eigenen OAuth-Anmeldeinformationen über Umgebungsvariablen: ANTIGRAVITY_OAUTH_CLIENT_ID und ANTIGRAVITY_OAUTH_CLIENT_SECRET. Siehe den README-Abschnitt 'OAuth auf einem Remote-Server'.", + "errorSaveFailed": "Speichern fehlgeschlagen", + "errorAuthorizationFailed": "Autorisierung fehlgeschlagen", + "errorAuthorizationTimeout": "Autorisierungszeitüberschreitung", + "errorRequestFailed": "Anforderung fehlgeschlagen", + "errorCallbackServerFailed": "Fehler beim Starten des Callback-Servers", + "errorBrowserUnavailable": "Browser-OAuth ist für diesen Anbieter in der aktuellen Umgebung nicht verfügbar. Verwenden Sie stattdessen die unterstützte Authentifizierungsmethode.", + "errorStateMismatch": "OAuth-Zustandsabweichung. Starten Sie die Verbindung neu und versuchen Sie es erneut.", + "errorImportAccessToken": "Fehler beim Importieren des Zugriffstokens", + "errorSessionNotInitialized": "OAuth-Sitzung nicht initialisiert. Starten Sie den Verbindungsfluss neu und versuchen Sie es erneut.", + "errorNoAuthorizationCode": "Kein Autorisierungscode gefunden. Fügen Sie die Callback-URL oder den Authentifizierungscode ein.", + "tabDeviceCode": "Geräteschlüssel", + "tabBrowserLogin": "Browser-Anmeldung", + "tabImportAuthJson": "auth.json importieren", + "tabPasteApiKey": "API-Schlüssel einfügen", + "windsurfPasteDescription": "Im Windsurf / VS Code IDE führen Sie den Befehl \"Windsurf: Authentifizierungstoken bereitstellen\" aus dem Befehlsfeld aus (oder klicken Sie auf die Schaltfläche \"Windsurf-Authentifizierungstoken abrufen\" von Jupyter), kopieren Sie dann das angezeigte Token und fügen Sie es unten ein. Das direkte Öffnen von windsurf.com/show-auth-token zeigt nur eine Seite mit \"Weiterleitung\" an — der IDE muss den Ablauf initiieren.", + "grokAuthJsonDescription": "Fügen Sie den vollständigen Inhalt von ~/.grok/auth.json ein (nicht nur das JWT \"key\"-Feld). Ein nacktes JWT hat kein refresh_token, sodass die Verbindung nach Ablauf der Frist abbricht (#7610). Bevorzugen Sie das spezielle Import auth.json-Modal, wenn verfügbar.", + "devinDesktopPasteDescription": "Fügen Sie einen vorhandenen Devin API-Schlüssel aus einer authentifizierten Devin-Sitzung ein. Die Verfügbarkeit des Schlüsselausexports und die Schritte variieren je nach Devin-Version und -Konto.", + "devinPasteDescription": "Geben Sie Ihren WINDSURF_API_KEY an (erhalten über `devin auth login` oder über den Windsurf IDE-Befehl \"Windsurf: Auth-Token bereitstellen\").", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API-Schlüssel / Token", + "saving": "Speichern…", + "saveConnection": "Verbindung speichern", + "gheDescription": "Geben Sie die Basis-URL Ihrer GitHub Enterprise-Instanz ein (z. B. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise-URL", + "gheUrlRequired": "Die GitHub Enterprise-URL ist erforderlich", + "gitlabDuoSetupTitle": "GitLab Duo OAuth Einrichtung", + "gitlabDuoSetupMessage": "GitLab Duo OAuth ist nicht konfiguriert. Registrieren Sie eine OAuth-Anwendung unter {applicationsUrl} mit der Umleitungs-URI {redirectUri} und den Berechtigungen \"{scopes}\", setzen Sie dann {clientIdEnv} (und optional {clientSecretEnv}) und starten Sie neu.", + "gitlabDuoSetupDescription": "Nachdem die Anwendung registriert ist und die Umgebungsvariablen für diese OmniRoute-Instanz festgelegt sind, klicken Sie auf Weiter, um den OAuth-Login zu starten.", + "continue": "Fortfahren" }, "cursorAuthModal": { "title": "Verbinden Sie die Cursor-IDE", @@ -10475,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Mehr laden", - "loadingMore": "Mehr laden..." + "loadingMore": "Mehr laden...", + "correlationId": "Korrelations-ID", + "group": { + "showAllRows": "Alle Zeilen anzeigen", + "showLatestPerCorrelation": "Zeige die neuesten pro Korrelations-ID", + "grouped": "Gruppiert" + }, + "running": "ausführen", + "interval": { + "decrease": "Intervall verringern", + "title": "Automatisches Aktualisierungsintervall in Sekunden", + "increase": "Intervall erhöhen" + }, + "status": { + "inProgress": "In Bearbeitung", + "recoveredByRetry": "Wiederhergestellt durch Wiederholung", + "goToParent": "Gehe zur übergeordneten Anfrage", + "healedTitle": "Fehlgeschlagen, nach {count} Wiederholungen wiederhergestellt", + "healed": "geheilt", + "failedTitle": "Alle {count} Versuche sind fehlgeschlagen", + "failed": "fehlgeschlagen", + "pinnedTitle": "Modell über Kontext-Cache-Sitzungs-Pinning ausgewählt", + "pinned": "angeheftet" + }, + "attempts": "versuche", + "detail": { + "collapse": "Klappe {title}", + "expand": "Erweitern {title}", + "copyTitle": "Kopiere {title}", + "copied": "Kopiert!", + "copy": "Kopieren", + "autoscrollOn": "Autoscroll: ein", + "autoscrollOff": "Autoscroll: aus", + "payload": { + "clientRawRequest": "Client Rohanfrage", + "clientRequest": "Kundenanfrage", + "openaiRequest": "OpenAI-Anfrage", + "providerRequest": "Anbieteranfrage", + "providerResponse": "Anbieterantwort", + "clientResponse": "Kundenantwort", + "pipelineError": "Pipeline-Fehler" + }, + "payloadMissing": "Das detaillierte Payload-Artefakt ist für diesen Protokolleintrag nicht mehr verfügbar.", + "payloadCorrupt": "Detailliertes Payload-Artefakt konnte nicht analysiert werden.", + "notAvailable": "N/A", + "semanticCache": "Semantisch (OmniRoute)", + "upstreamCache": "Upstream (Anbieter)", + "ariaLabel": "Anforderungsprotokolldetails", + "completed": "Abgeschlossen", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute gab {status} zurück, obwohl der Anbieter {provider} zurückgab.", + "previousRequest": "Vorherige Anfrage", + "nextRequest": "Nächste Anfrage", + "close": "Detailmodal schließen", + "startedAt": "Begonnen Am", + "endedAt": "Beendet Am", + "duration": "Dauer", + "model": "Modell", + "provider": "Anbieter", + "account": "Konto", + "input": "Eingabe", + "totalIn": "Gesamtbetrag: {value}", + "cacheRead": "Cache Lesen: {value}", + "cacheWrite": "Cache Schreiben: {value}", + "compressed": "Komprimiert: {from} → {to} ({percent}% gespart)", + "output": "Ausgabe", + "totalOut": "Gesamt Aus: {value}", + "reasoning": "Begründung: {value}", + "requestedModel": "Angefordertes Modell", + "requestProtocol": "Req-Protokoll", + "cacheSource": "Cache-Quelle", + "modelPinning": "Modell-Pinning", + "activeModelPinning": "Aktiv — Modell über Sitzungs-Pinning ausgewählt", + "rotated": "Rotiert: {initial} -> {final}", + "apiKey": "API-Schlüssel", + "noApiKey": "Kein API-Schlüssel", + "combo": "Kombination", + "error": "Fehler", + "unblockAll": "Alle entsperren", + "cleared": "Geleert", + "unblock": "Entsperren", + "relatedRequests": "Verwandte Anfragen ({count})", + "current": "aktuell", + "detailStatus": "Detailstatus", + "loadingDetails": "Lade Anforderungsdetails...", + "providerEventStream": "Anbieter-Ereignisstream", + "clientEventStream": "Client-Ereignisstrom", + "eventStream": "Ereignisstrom", + "responsePayloadLegacy": "Antwortpayload (Legacy)", + "requestPayloadLegacy": "Anforderungspayload (Legacy)", + "noPayload": "Keine Payload-Daten für diesen Protokolleintrag verfügbar.", + "correlationId": "Korrelations-ID", + "correlationIdValue": "Korrelations-ID: {id}", + "detailedPayloadInfo": "Aktivieren Sie zuerst das detaillierte Protokollieren, wenn Sie die vierstufige Client/Provider-Payload-Ansicht für neue Anfragen wünschen." + } }, "proxyLogger": { "filterAll": "All", @@ -11704,7 +12354,11 @@ "providerDisabled": "{provider} deaktiviert", "providerAdded": "{provider} hinzugefügt", "add": "Hinzufügen", - "manualApiKey": "Verwenden Sie einen manuellen API-Schlüssel" + "manualApiKey": "Verwenden Sie einen manuellen API-Schlüssel", + "createDahlTokenFailed": "Fehler beim Erstellen des Dahl-Tokens", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Proxy konfigurieren", + "providerProxyTitleConfigured": "Proxy konfiguriert: {host}" }, "gamification": { "leaderboardScopes": { @@ -12202,7 +12856,9 @@ "avoid": "ToS-eingeschränkt — Nutzungsbedingungen prüfen", "caution": "Achtung — Klauseln zur Eigennutzung / Proxy-Nutzung", "ok": "Generell zulässig" - } + }, + "allProviders": "Alle Anbieter", + "noApiKeyRequired": "Kein API-Schlüssel erforderlich" }, "providerHealthAutopilot": { "title": "Anbieter-Status-Autopilot", @@ -12391,7 +13047,11 @@ "on": "EIN", "off": "AUS", "availableProviders": "Verfügbare Anbieter ({count})", - "noProviderOverrides": "Keine Überschreibungen — alle aktiven Anbieter nehmen mit ihren Standardmodellen teil" + "noProviderOverrides": "Keine Überschreibungen — alle aktiven Anbieter nehmen mit ihren Standardmodellen teil", + "resetFailed": "Zurücksetzen fehlgeschlagen", + "resetSuccess": "Konfiguration auf die Standardwerte zurückgesetzt", + "running": "Läuft...", + "testFailed": "Test fehlgeschlagen" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) ist OmniRoutes Open-Source-Gründungsfreund", @@ -12580,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Der Anbieter unterstützt die Vision für diese Bildanfrage nicht", "capabilityFilter.toolsMismatch": "Der Anbieter unterstützt keinen Toolaufruf", "capabilityFilter.structuredOutputMismatch": "Der Anbieter unterstützt keine strukturierten Ausgaben", - "capabilityFilter.contextWindowMismatch": "Anfrage überschreitet das Kontextfenster des Anbieters" + "capabilityFilter.contextWindowMismatch": "Anfrage überschreitet das Kontextfenster des Anbieters", + "publicSystem": { + "notFound": { + "title": "Seite nicht gefunden", + "description": "Die von Ihnen gesuchte Seite existiert nicht oder wurde verschoben.", + "dashboardAriaLabel": "Zurück zum Dashboard", + "statusAriaLabel": "Systemstatusseite öffnen", + "systemStatus": "Systemstatus" + }, + "error": { + "title": "Interner Serverfehler", + "description": "Etwas ist schiefgelaufen bei der Verarbeitung Ihrer Anfrage. Unser Team wurde benachrichtigt und arbeitet an einer Lösung.", + "errorId": "Fehler-ID: {id}", + "detailsAriaLabel": "Fehlerdetails", + "retryAriaLabel": "Seite erneut laden", + "tryAgain": "Versuche es erneut", + "dashboardAriaLabel": "Zurück zum Dashboard", + "statusAriaLabel": "Systemstatus öffnen", + "systemStatus": "Systemstatus" + }, + "globalError": { + "title": "Etwas ist schiefgelaufen", + "description": "Ein unerwarteter Fehler ist aufgetreten. Dies wurde protokolliert und unser Team wird dies untersuchen.", + "detailsAriaLabel": "Fehlerdetails", + "retryAriaLabel": "Seite erneut laden", + "tryAgain": "Versuche es erneut", + "statusAriaLabel": "Systemstatus öffnen", + "systemStatus": "Systemstatus" + }, + "offline": { + "title": "Verbindungsproblem", + "description": "OmniRoute kann das Netzwerk derzeit nicht erreichen. Überprüfen Sie Ihre Internet-, VPN- oder Proxy-Einstellungen.", + "connectionRestored": "Verbindung wiederhergestellt", + "offlineModeDetected": "Offline-Modus erkannt", + "retryConnection": "Verbindung erneut versuchen", + "openStatusPage": "Statusseite öffnen" + }, + "maintenance": { + "title": "Geplante Wartung", + "description": "Einige Dienste sind vorübergehend nicht verfügbar, während Wartungsarbeiten durchgeführt werden. Das Kernrouting bleibt normalerweise online, aber die Verwaltungsfunktionen können eingeschränkt sein.", + "suggestion1": "Versuchen Sie es in ein paar Minuten erneut.", + "suggestion2": "Überprüfen Sie die aktuellen Gesundheitsindikatoren und den Status des Anbieters, bevor Sie es erneut versuchen.", + "systemStatus": "Systemstatus anzeigen", + "healthDashboard": "Gesundheitsdashboard öffnen" + }, + "status": { + "title": "Systemstatus", + "description": "Live-Betriebsaufnahme für die Kernservices von OmniRoute.", + "loadingHealth": "Lade Gesundheitsmetriken...", + "failedToLoad": "Fehler beim Laden der Systemgesundheit.", + "unableToReachHealth": "Kann den Gesundheitsendpunkt nicht erreichen. Überprüfen Sie die Konnektivität und versuchen Sie es erneut.", + "healthCheckFailed": "Gesundheitsprüfung fehlgeschlagen", + "openConnectivityHelp": "Öffne die Connectivity-Hilfe", + "maintenanceInfo": "Wartungsinformationen", + "service": "Dienst", + "unknown": "unbekannt", + "notAvailable": "n/a", + "providersTracked": "Verfolgte Anbieter", + "circuitBreakerState": "Anbieter Sicherungszustand", + "lastUpdate": "Letzte Aktualisierung: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Ungültige Anfrage", + "description": "Die Anforderungsnutzlast ist ungültig oder unvollständig.", + "suggestion1": "Überprüfen Sie die erforderlichen Felder und das Payload-Format, bevor Sie es erneut versuchen.", + "suggestion2": "Wenn Sie die API verwenden, validieren Sie das JSON-Schema lokal.", + "suggestion3": "Wenn das weiterhin passiert, öffnen Sie die Anfrage im Translator Playground, um die Nutzlast zu überprüfen.", + "primaryAction": "Dokumentation Öffnen", + "secondaryAction": "Übersetzer öffnen" + }, + "401": { + "title": "Unbefugt", + "description": "Die Authentifizierung ist erforderlich, um auf diese Ressource zuzugreifen.", + "suggestion1": "Melden Sie sich erneut an und versuchen Sie die Operation erneut.", + "suggestion2": "Für API-Aufrufe bestätigen Sie, dass das Bearer-Token vorhanden und gültig ist.", + "suggestion3": "Wenn das Token kürzlich rotiert wurde, aktualisieren Sie Ihre Client-Anmeldeinformationen.", + "primaryAction": "Gehe zu Anmelden", + "secondaryAction": "API-Schlüssel verwalten" + }, + "403": { + "title": "Verboten", + "description": "Ihre Anfrage wurde verstanden, aber der Zugriff ist durch die Richtlinie verweigert.", + "suggestion1": "Überprüfen Sie die IP-Whitelist/Blacklist-Regeln in den Einstellungen.", + "suggestion2": "Überprüfen Sie die Modell- und Budgetrichtlinien, die Ihrem API-Schlüssel zugewiesen sind.", + "suggestion3": "Bitten Sie einen Administrator, den erforderlichen Berechtigungsbereich zu gewähren.", + "primaryAction": "Open Access Hilfe", + "secondaryAction": "Sicherheits Einstellungen Öffnen" + }, + "408": { + "title": "Anforderungszeitüberschreitung", + "description": "Der Server hat die Anfrage nicht rechtzeitig vollständig erhalten.", + "suggestion1": "Versuchen Sie die Anfrage mit einer kleineren Nutzlast erneut.", + "suggestion2": "Überprüfen Sie die Stabilität Ihres Netzwerks und die Latenz von VPN/Proxy.", + "suggestion3": "Für lange Vorgänge aktivieren Sie das Streaming oder teilen Sie die Anfrage auf.", + "primaryAction": "Öffnen Sie den Endpunktleitfaden", + "secondaryAction": "Netzwerkstatus überprüfen" + }, + "429": { + "title": "Zu Viele Anfragen", + "description": "Die Rate-Limits wurden für diesen Client, Schlüssel oder Anbieter überschritten.", + "suggestion1": "Warten Sie auf die Abklingzeit und versuchen Sie es nach dem vorgeschlagenen Intervall erneut.", + "suggestion2": "Wechseln Sie zu einem Kombi mit Fallback-Anbietern.", + "suggestion3": "Passen Sie die Resilienz-/Rate-Limit-Profile in den Einstellungen an.", + "primaryAction": "Resilienz-Einstellungen öffnen", + "secondaryAction": "Öffne Combos" + }, + "500": { + "title": "Interner Serverfehler", + "description": "Ein unerwarteter serverseitiger Fehler ist aufgetreten, während Ihre Anfrage verarbeitet wurde.", + "suggestion1": "Erneut versuchen in ein paar Sekunden.", + "suggestion2": "Überprüfen Sie die Gesundheits-Telemetrie und Serverprotokolle auf korrelierte Anforderungs-IDs.", + "suggestion3": "Wenn das Problem weiterhin besteht, melden Sie das Problem mit Zeitstempel und Anfragekontext.", + "primaryAction": "Gesundheits-Dashboard öffnen", + "secondaryAction": "Protokolle Öffnen" + }, + "502": { + "title": "Schlechtes Gateway", + "description": "Der Upstream-Anbieter oder die Gateway-Integration hat eine ungültige Antwort zurückgegeben.", + "suggestion1": "Erneut versuchen mit einem anderen Anbieter oder aktiven Kombiroute.", + "suggestion2": "Überprüfen Sie die Anmeldeinformationen des Anbieters und die Verfügbarkeit des Modells.", + "suggestion3": "Überprüfen Sie die Ausgabe des Übersetzers, wenn eine Formatkonvertierung beteiligt ist.", + "primaryAction": "Anbieter Öffnen", + "secondaryAction": "Übersetzer öffnen" + }, + "503": { + "title": "Dienst Nicht Verfügbar", + "description": "Der Dienst ist vorübergehend aufgrund von Wartungsarbeiten oder beeinträchtigten Abhängigkeiten nicht verfügbar.", + "suggestion1": "Warten Sie einen Moment und versuchen Sie es erneut.", + "suggestion2": "Überprüfen Sie Wartungsbenachrichtigungen und den Systemstatus.", + "suggestion3": "Verwenden Sie Fallback-Anbieter, wenn Ihr Workflow latenzempfindlich ist.", + "primaryAction": "Wartungsdetails", + "secondaryAction": "Systemstatus" + } + } + }, + "kiroAuthModal": { + "title": "Verbinden {providerLabel}", + "chooseMethod": "Wählen Sie Ihre Authentifizierungsmethode:", + "builderId": "AWS Builder-ID", + "builderDescription": "Empfohlen für die meisten Benutzer. Melden Sie sich mit dem AWS-Konto an, das mit {providerLabel} verknüpft ist.", + "organization": "Ihre Organisation (AWS IAM Identity Center)", + "organizationDescription": "Verwenden Sie die Start-URL Ihrer Unternehmens-SSO (Beispiel: {url}).", + "googleAccount": "Google-Konto", + "googleDescription": "Melden Sie sich mit Ihrem Google-Konto an.", + "githubAccount": "GitHub-Konto", + "githubDescription": "Melden Sie sich mit Ihrem GitHub-Konto an.", + "importToken": "Token importieren", + "importDescription": "Fügen Sie ein Refresh-Token ein, das von {providerLabel} exportiert wurde.", + "apiKey": "API-Schlüssel", + "apiKeyDescription": "Fügen Sie einen langlebigen {providerLabel} / CodeWhisperer API-Schlüssel ein. Er wird als Bearer-Anmeldeinformation ohne Aktualisierungstoken gespeichert; die Profilerkennung erfolgt nach bestem Bemühen.", + "idcStartUrl": "IDC Start-URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Die URL des AWS IAM Identity Centers Ihrer Organisation", + "awsRegion": "AWS-Region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-Region für Ihr Identity Center (Standard: us-east-1)", + "continue": "Fortfahren", + "back": "Zurück", + "autoDetecting": "Token wird automatisch erkannt...", + "readingCredentials": "Lese {providerLabel} Anmeldeinformationen aus dem AWS SSO-Cache", + "tokenNotDetected": "{providerLabel} Token wurde nicht automatisch erkannt. Bitte fügen Sie Ihr Aktualisierungstoken manuell ein.", + "refreshToken": "Aktualisiere Token", + "tokenPlaceholder": "Token wird automatisch ausgefüllt...", + "importing": "Importiere...", + "apiKeyPlaceholder": "Fügen Sie Ihren {providerLabel} API-Schlüssel ein...", + "apiKeyStoredDescription": "Als langanhaltendes Träger-Zugangsdokument gespeichert und verschlüsselt. Es gibt keinen Aktualisierungsfluss.", + "apiKeyRegionDescription": "AWS-Region für den Schlüssel (Standard: us-east-1)", + "validating": "Validiere...", + "validateAndSaveApiKey": "API-Schlüssel validieren und speichern", + "errorAutoDetect": "Konnte Token nicht automatisch erkennen", + "errorAutoDetectFailed": "Token konnte nicht automatisch erkannt werden", + "errorRefreshTokenRequired": "Bitte geben Sie ein Aktualisierungstoken ein", + "errorImportFailed": "Import fehlgeschlagen", + "errorApiKeyRequired": "Bitte geben Sie einen Kiro API-Schlüssel ein", + "errorApiKeyImportFailed": "Import der API-Schlüssel fehlgeschlagen", + "errorIdcStartUrlRequired": "Bitte geben Sie Ihre IDC-Start-URL ein" + }, + "kiroSocialOAuthModal": { + "title": "Verbinden Sie {providerLabel} über {providerName}", + "errorStartAuthorization": "Fehler beim Starten der Autorisierung", + "errorAuthorizationExpired": "Die Autorisierung ist abgelaufen. Starten Sie den Anmeldevorgang erneut.", + "errorAuthorizationFailed": "Autorisierung fehlgeschlagen", + "initializing": "Initialisiere...", + "settingUp": "Einrichten der {providerName} Authentifizierung", + "openIncognito": "Öffne diesen Link in einem Inkognito-Fenster", + "incognitoDescription": "Verwenden Sie ein Inkognito-/Privatfenster, um Sitzungsprobleme mit bestehenden Konten zu vermeiden.", + "copyLink": "Link kopieren", + "verificationCode": "Bestätigungscode", + "waiting": "Warten auf Autorisierung...", + "cancel": "Abbrechen", + "successTitle": "Erfolgreich verbunden!", + "successMessage": "Ihr {providerLabel}-Konto über {providerName} wurde verbunden.", + "done": "Fertig", + "errorTitle": "Verbindung fehlgeschlagen", + "close": "Schließen" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorisierung fehlgeschlagen", + "errorPopupBlocked": "Popup blockiert — erlauben Sie Popups für diese Seite oder fügen Sie das Token manuell unten ein.", + "errorPopupClosed": "Das Autorisierungsfenster wurde geschlossen, bevor die Durchführung abgeschlossen werden konnte.", + "errorAccessTokenRequired": "Ein Zugriffstoken ist erforderlich.", + "errorImportFailed": "Import fehlgeschlagen", + "title": "Verbinde Trae SOLO", + "authorizeDescription": "Autorisieren Sie sich über trae.ai in einem Popup. Das Popup schließt sich, sobald das Token importiert wurde.", + "authorizeImportant": "Wichtig: Sie müssen in diesem Browser bei trae.ai angemeldet sein. Die Autorisierungsseite bestätigt nur eine bestehende Sitzung — sie kann Sie nicht anmelden. Wenn Sie \"Anmeldung fehlgeschlagen\" sehen, klicken Sie auf \"Öffnen Sie solo.trae.ai\", melden Sie sich an und kehren Sie dann hierher zurück.", + "waitingForAuthorization": "Warten auf trae.ai…", + "authorizeWithBrowser": "Mit Browser autorisieren", + "openSoloTrae": "Öffne solo.trae.ai", + "orPasteManually": "oder fügen Sie ein Token manuell ein", + "manualInstructions": "Melden Sie sich bei solo.trae.ai an, öffnen Sie die Entwicklertools → Netzwerk, senden Sie eine beliebige Chatnachricht und kopieren Sie das JWT aus dem Authorization: Cloud-IDE-JWT {tokenPlaceholder} Anfrage-Header. Die JWT-Lebensdauer beträgt ~14 Tage. Optionale Identitätsfelder stammen aus common_params im gleichen Anfrage-Body.", + "accessTokenLabel": "Zugriffstoken (Cloud-IDE-JWT)", + "webId": "Web-ID", + "optional": "optional", + "bizUserId": "Biz-Benutzer-ID", + "userUniqueId": "Benutzer-Eindeutige ID", + "scope": "Bereich", + "tenant": "Mieter", + "region": "Region", + "importing": "Importiere…", + "importToken": "Token importieren", + "cancel": "Abbrechen" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Verteilen...", + "complete": "Vollständig", + "defaultLabel": "Proxys verteilen" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "veraltet", + "risk": "Risiko", + "close": "Schließen", + "model": "Modell", + "key": "Schlüssel", + "defaultKey": "Standardwert", + "clearConversation": "Unterhaltung löschen", + "clear": "Löschen", + "tabs": { + "test": "Test", + "logs": "Protokolle" + }, + "loadingLogs": "Protokolle werden geladen…", + "failedToLoadLogs": "Fehler beim Laden der Protokolle", + "noLogsYet": "Noch keine Protokolle", + "noLogsDescription": "Senden Sie eine Testnachricht von der Test-Registerkarte — Protokolle für diesen Anbieter erscheinen hier.", + "openFullLogs": "Öffne die vollständige Protokollseite", + "live": "Live", + "tailingLast": "letzte {count} anzeigen", + "refreshNow": "Jetzt aktualisieren", + "refresh": "Aktualisieren", + "unknownRequester": "unbekannter Anforderer", + "fields": { + "timestamp": "Zeitstempel", + "status": "Status", + "duration": "Dauer", + "model": "Modell", + "requestedModel": "Angefordertes Modell", + "provider": "Anbieter", + "requester": "Anforderer", + "tokens": "Tokenen" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy-Protokolldetails", + "event": "Proxy-Ereignis", + "close": "Schließen Sie das Proxy-Detail-Modal", + "time": "Zeit", + "latency": "Latenz", + "clientIp": "Client-IP", + "proxy": "Proxy", + "direct": "Direkt", + "type": "Typ", + "level": "Level", + "provider": "Anbieter", + "tlsFingerprint": "TLS-Fingerabdruck", + "directNative": "Direkt", + "targetUrl": "Ziel-URL", + "error": "Fehler", + "configuration": "Proxy-Konfiguration" + }, + "requestTimeline": { + "title": "Anforderungszeitraum", + "modes": { + "follow": "Folgen", + "followDescription": "Die Achse scrollt nach links, die NOW-Linie bleibt bei 75%", + "now": "Jetzt", + "nowDescription": "Springe zur aktuellen Zeit, die JETZT-Zeile wird zentriert zurückgesetzt", + "pan": "Pfanne", + "panDescription": "Ziehen, um zu erkunden, Hintergrund ist eingefroren" + }, + "reset": "Zurücksetzen", + "started": "Gestartet", + "ended": "Beendet", + "duration": "Dauer", + "status": "Status", + "provider": "Anbieter", + "tokens": "Tokenen", + "active": "Aktiv", + "other": "Andere", + "tenMinutes": "10min", + "hour": "Stunde", + "day": "Tag", + "unknownModel": "unbekannt", + "pending": "ausstehend" + }, + "metadata": { + "compressionTitle": "Kompression", + "compressionDescription": "Konfigurieren Sie die Einstellungen zur Kontextkompression, um den Tokenverbrauch und die Kosten zu senken.", + "relayTitle": "OmniRoute — Relay-Proxys", + "relayDescription": "Serverless Relay-Proxy-Endpunkte für Ihre KI-Infrastruktur", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Überwachen Sie LLM-Aufrufe + debuggen Sie den HTTPS-Verkehr jeder Anwendung" + }, + "conductor": { + "title": "Conductor — CLI-Agent-Flotte", + "subtitle": "OmniConductor-Hub: Runner, Aufgabenwarteschlange und Gremien, live", + "runners": "Läufer", + "tasks": "Aufgaben", + "colName": "Name", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Aufgabe", + "colMode": "Modus", + "colRunner": "Läufer", + "colSummary": "Zusammenfassung", + "online": "online", + "offline": "offline", + "draining": "entleeren", + "hubOffline": "Conductor-Hub offline oder nicht konfiguriert (CONDUCTOR_HUB_URL) — zeigt nichts an statt veralteter Daten.", + "noRunners": "Keine Läufer registriert", + "noTasks": "Keine Aufgaben vorhanden", + "detailTitle": "Aufgabendetails", + "prompt": "Eingabeaufforderung", + "branch": "Zweig", + "fetchHint": "Holen Sie das Ergebnis mit: git fetch origin {branch}", + "council": "Rat", + "candidates": "Kandidaten", + "cancel": "Aufgabe abbrechen", + "cancelConfirmTitle": "Diese Aufgabe abbrechen?", + "cancelConfirmMessage": "Der Hub wird die Ausführung auf dem Runner abbrechen. Dies kann nicht rückgängig gemacht werden.", + "cancelFailed": "Der Hub hat die Stornierung abgelehnt", + "close": "Schließen", + "error": "Fehler", + "faroTitle": "Faro — Flottensprecher", + "faroSubtitle": "Chat und Sprache, verankert in realen Flottenereignissen. Zerstörerische Befehle verlangen immer nach einer Bestätigung.", + "faroEmpty": "Fragen Sie nach der Flotte — z.B. \"Wie steht es um die Flotte?\"", + "faroPending": "Faro bittet um Bestätigung", + "faroPlaceholder": "sprich mit Faro…", + "faroSend": "senden", + "faroOffline": "Faro (Sprecher) ist offline", + "yes": "Ja", + "no": "Nein", + "pushToTalk": "Drücken, um zu sprechen", + "speakAnswers": "Antworten sprechen", + "voiceModels": "Sprachmodelle (Anbieter/Modell dieses OmniRoute)", + "voiceIdle": "reden", + "voiceListening": "lauschen…", + "voiceThinking": "nachdenken…", + "voiceSpeaking": "sprechen…", + "sttFailed": "Transkription fehlgeschlagen (überprüfen Sie das STT-Modell/den Anbieter)", + "ttsFailed": "Sprachsynthese fehlgeschlagen (überprüfen Sie das TTS-Modell/den Anbieter)", + "micDenied": "Mikrofon nicht verfügbar oder Berechtigung verweigert" + }, + "cliproxyProviderExposure": { + "title": "Anbieterexposition", + "description": "Expose CLIProxyAPI-Modelle als Routing-Ziel unter dem cliproxyapi/-Präfix.", + "label": "Expose als cliproxyapi/...", + "hint": "Wenn aktiviert, erscheinen entdeckte Modelle in den Anbieterauswahlen über OmniRoute.", + "updateFailed": "Fehler beim Aktualisieren (HTTP {status})", + "networkError": "Netzwerkfehler — konnte die Bereitstellungseinstellung nicht aktualisieren" + } } - diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 788fdd7287..230418195f 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -1289,7 +1289,8 @@ "navigate": "navigate", "open": "open", "close": "close" - } + }, + "noResults": "No results" }, "webhooks": { "title": "Webhooks", @@ -2187,7 +2188,8 @@ "searchAnalyticsEmptyDescription": "Use POST /v1/search to start routing web searches.", "searchAnalyticsFreeTier": "Free tier available: Serper (2,500/mo), Brave (2,000/mo), Exa (1,000/mo), Tavily (1,000/mo) — total 6,500+ free searches/month with automatic failover.", "autoRoutingNoDataAvailable": "No auto-routing analytics available. Make requests using the auto/ prefix to see metrics.", - "defaultVariantLabel": "Default" + "defaultVariantLabel": "Default", + "freeTierAvailable": "Free tier available" }, "apiManager": { "title": "API Keys", @@ -2476,7 +2478,9 @@ "providerCount": "{count} providers", "imageToTextBridgeAvailable": "Modality Bridge can describe images for text-only models now. The inline playground will be available when /api/v1/images/understanding is implemented.", "imageToTextBridgeCta": "Configure the Image→Text bridge in Modality Bridge settings", - "sttBridgeCta": "Configure the Speech→Text bridge in Modality Bridge settings" + "sttBridgeCta": "Configure the Speech→Text bridge in Modality Bridge settings", + "existingConnection": "Existing connection", + "openrouterSttDescription": "OpenRouter speech-to-text models use your configured OpenRouter connection. No separate credential is required." }, "search": { "searchQuery": "Search Query", @@ -3708,7 +3712,8 @@ "errorTitle": "Failed to load combos", "errorDescription": "We could not load combo data right now. Check your connection and try again.", "errorId": "Error ID: {id}", - "errorRetry": "Try Again" + "errorRetry": "Try Again", + "comboLabel": "Combo" }, "costs": { "title": "Costs", @@ -4438,7 +4443,9 @@ "cleaning": "Cleaning...", "cleanNow": "Clean now", "cleanupSuccess": "{count} point(s) removed", - "cleanupFailed": "Cleanup failed" + "cleanupFailed": "Cleanup failed", + "hostLabel": "Host", + "collectionLabel": "Collection" }, "rerank": { "enableLabel": "Enable Rerank", @@ -6765,7 +6772,7 @@ "denoRelayOrgDomainRequired": "Organization domain is required", "denoRelayDeployFailed": "Deno Deploy failed", "denoRelayTokenHint": "Organization token (prefix ddo_) from console.deno.com → Organization → Settings → Organization Tokens. Used once for deploy and never stored.", - "denoRelayOrgDomainHint": "Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://..deno.net.", + "denoRelayOrgDomainHint": "Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://<app-name>.<org-slug>.deno.net.", "proxyFreePoolFilterProtocol": "Filter by protocol", "proxyFreePoolProtocol": "Protocol", "proxyFreePoolCountryPlaceholder": "Country (e.g. US)", @@ -7904,9 +7911,9 @@ "resilienceEnableServerWaitDesc": "When enabled, OmniRoute waits for the first cooldown to expire and retries automatically.", "resilienceMaxAttempts": "Maximum attempts", "resilienceMaxWaitPerAttempt": "Maximum wait per attempt", - "resilienceComboCooldownWaitTitle": "Quota-share combo cooldown wait", - "resilienceComboCooldownWaitDesc": "For quota-share combos only: wait out a short transient cooldown and re-dispatch instead of returning a 429 immediately. Never waits on quota_exhausted.", - "resilienceComboCooldownWaitToggleDesc": "Quota-share combos only; never waits on quota_exhausted.", + "resilienceComboCooldownWaitTitle": "Combo cooldown wait", + "resilienceComboCooldownWaitDesc": "For all combo strategies: wait out a short transient cooldown and re-dispatch instead of returning a 429 immediately. Never waits on quota_exhausted.", + "resilienceComboCooldownWaitToggleDesc": "All combo strategies; never waits on quota_exhausted.", "resilienceComboCooldownMaxWaitMs": "Maximum wait per attempt", "resilienceComboCooldownBudgetMs": "Total wait budget", "resilienceQuotaShareConcurrencyTitle": "Quota-share per-connection concurrency", @@ -8133,7 +8140,13 @@ "routingJsonEditorImportExport": "Import / export JSON", "routingJsonEditorLabel": "JSON (edit and apply, or paste to import)", "routingApplyJson": "Apply JSON", - "routingTransformsFootnote": "All transform ops are idempotent on re-run. Changes take effect immediately on the next request." + "routingTransformsFootnote": "All transform ops are idempotent on re-run. Changes take effect immediately on the next request.", + "cliproxyapiUnknown": "Unknown", + "cliproxyapiVersion": "Version", + "cliproxyapiHealth": "Health", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Collection" }, "contextRtk": { "title": "RTK Engine", @@ -8540,7 +8553,8 @@ "enableDescription": "Runs last in the stack (after RTK/Caveman cleans the text, OmniGlyph converts the remainder to images) and also runs standalone through omniglyph mode. This is a preview and remains off by default until end-to-end validation is complete.", "saved": "Saved.", "saveFailed": "Could not save.", - "enableAria": "Enable the OmniGlyph engine" + "enableAria": "Enable the OmniGlyph engine", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Embedded Services", @@ -9629,7 +9643,23 @@ "traeAuthorizationSuccess": "Trae authorization ✓", "traeAuthorizationFailed": "Trae authorization failed", "closeAuthorizationWindow": "You can close this window.", - "returnToDashboard": "Return to the dashboard." + "returnToDashboard": "Return to the dashboard.", + "resetViaAppData": "Reset via App Data", + "deleteSettingsToReset": "Delete the settings file from the app data directory to reset your password:", + "quitAppCompletely": "Quit the OmniRoute desktop app completely", + "navigateToAppData": "Navigate to the app data directory", + "checkAppDataFolder": "Check your system app data folder", + "deleteSettingsJson": "Delete", + "relaunchAppFresh": "Relaunch the OmniRoute desktop app — it will start fresh setup", + "alternativeSetPassword": "Alternative: Set New Password", + "setNewPasswordViaEnv": "Set a new initial password via the server environment file:", + "openServerEnv": "Open", + "inDataDirectory": "in the data directory", + "addOrUpdate": "Add or update", + "deleteAndRelaunch": "Delete", + "settingsJson": "settings.json", + "fromDataDir": "from the data directory", + "relaunchApp": "Relaunch the OmniRoute desktop app" }, "landing": { "brandName": "OmniRoute", @@ -10484,8 +10514,7 @@ "gitlabDuoSetupTitle": "GitLab Duo OAuth setup", "gitlabDuoSetupMessage": "GitLab Duo OAuth is not configured. Register an OAuth application at {applicationsUrl} with redirect URI {redirectUri} and scopes \"{scopes}\", then set {clientIdEnv} (and optionally {clientSecretEnv}) and restart.", "gitlabDuoSetupDescription": "After the application is registered and the env vars are set on this OmniRoute instance, click Continue to start the OAuth login.", - "continue": "Continue", - "googleOAuthWarning": "Remote access + Google OAuth: bundled credentials only accept loopback redirects like 127.0.0.1. The browser that approves Google must be able to reach OmniRoute on that local port, usually by opening OmniRoute locally or using an SSH/local-forward tunnel. Recommended for remote installs: on your own computer run npx omniroute login antigravity and paste the credential blob it prints into the field below. For fully remote use without this local callback, configure your own OAuth credentials." + "continue": "Continue" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -12827,7 +12856,9 @@ "avoid": "ToS-restricted — review terms", "caution": "Caution — personal-use / proxy clauses", "ok": "Generally permissive" - } + }, + "allProviders": "All providers", + "noApiKeyRequired": "No API key required" }, "providerHealthAutopilot": { "title": "Provider Health Autopilot", @@ -13576,5 +13607,13 @@ "sttFailed": "Transcription failed (check the STT model/provider)", "ttsFailed": "Speech synthesis failed (check the TTS model/provider)", "micDenied": "Microphone unavailable or permission denied" + }, + "cliproxyProviderExposure": { + "title": "Provider Exposure", + "description": "Expose CLIProxyAPI models as a routing target under the cliproxyapi/ prefix.", + "label": "Expose as cliproxyapi/...", + "hint": "When enabled, discovered models appear in provider selects across OmniRoute.", + "updateFailed": "Failed to update (HTTP {status})", + "networkError": "Network error — could not update provider exposure setting" } } \ No newline at end of file diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 6876c2c637..0aa75aa31d 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -172,6 +172,18 @@ "unselectAll": "Deseleccionar todo", "visibleModels": "visibles", "selectAllConfirm": "¿Añadir {count} modelos a esta combinación?", + "testSelectedProviders": "Proveedores de pruebas", + "testingSelectedProviders": "Probando {done}/{total}...", + "noProvidersSelectedToTest": "Marque al menos un proveedor a continuación primero", + "noModelsToTestForProviders": "No hay modelos para probar para los proveedores seleccionados", + "testSelectedProvidersResults": "{ok} de {total} modelos funcionando", + "selectWorkingModels": "Agregar trabajando", + "unselectWorkingModels": "Deseleccionar trabajando", + "noWorkingModelsToSelect": "No quedan modelos de trabajo para agregar", + "providerTestHint": "Consejo: verifica un proveedor → Prueba → Agregar funcionando. Haz clic nuevamente para deseleccionar.", + "selectAllProviders": "Verificar todos los proveedores", + "clearProviderSelection": "Desmarcar proveedores", + "providersSelectedCount": "{count} proveedores verificados", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Tamaño", + "toggleNoAuthProvider": "Alternar proveedor sin autenticación", + "loadingModels": "Cargando modelos…", + "selectAModel": "Selecciona un modelo", + "degraded": "Degradado", + "zeroConfigBannerTitle": "Ejecutándose en modo sin configuración", + "zeroConfigBannerBody": "OmniRoute generó automáticamente claves de cifrado seguras en el primer lanzamiento. Se almacenan en {dataDir}. No se requiere ninguna acción: tus datos están cifrados y seguros. Para usar claves personalizadas, agrega JWT_SECRET y STORAGE_ENCRYPTION_KEY a ese archivo.", + "batchRelativeTimeIn": "en {value}", + "batchRelativeTimeAgo": "hace {value}", + "batchDetailsTitle": "Detalles del Lote", + "batchProgress": "Progreso", + "batchCompletedCount": "{count} completado", + "batchFailedCount": "{count} fallido", + "batchPendingCount": "{count} pendiente", + "batchTimeline": "Línea de tiempo", + "batchTimelineInProgress": "En Progreso", + "batchTimelineFinalizing": "Finalizando", + "batchTimelineCompleted": "Completado", + "batchTimelineFailed": "Fallido", + "batchTimelineExpires": "Expira", + "batchTimelineExpired": "Caducado", + "batchTimelineCancelling": "Cancelando", + "batchTimelineCancelled": "Cancelado", + "batchTokenUsage": "Uso de Tokens", + "batchMetadata": "Metadatos", + "batchFileContents": "Contenido del Archivo", + "batchFileUsedByCount": "Usado por {count, plural, one {# lote} other {# lotes}}", + "batchFilePreview": "Vista Previa", + "batchFilePreviewTruncated": "Mostrando las primeras {shown} líneas ({total} líneas en total)", + "batchFileDownloadFull": "Descargar Archivo Completo" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separator", "discovery": "Discovery", "discoverySubtitle": "Scan providers for free access", + "conductor": "Conductor", + "conductorSubtitle": "Flota de CLI-agent", "resilienceConnections": "Resiliencia de Conexión", "resilienceConnectionsSubtitle": "Cooldown, disyuntor, estado de bloqueo", "settingsModalityBridge": "Puente de Modalidad", - "settingsModalityBridgeSubtitle": "Fallback de imagen/audio → texto para modelos solo de texto" + "settingsModalityBridgeSubtitle": "Fallback de imagen/audio → texto para modelos solo de texto", + "commandPalette": { + "title": "Paleta de comandos", + "searchPlaceholder": "Buscar páginas, configuraciones, herramientas...", + "clearSearch": "Borrar búsqueda", + "noResults": "Sin resultados", + "navigate": "navegar", + "open": "abrir", + "close": "cerrar" + }, + "noResults": "Sin resultados" }, "webhooks": { "title": "Ganchos web", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Error al actualizar la configuración", "sync.token.created": "Token de sincronización creado", "sync.token.revoked": "Token de sincronización revocado" - } + }, + "mcpMetricCalls24h": "Llamadas (24h)", + "mcpMetricSuccessRate": "Tasa de éxito", + "mcpMetricAvgDuration": "Duración promedio", + "mcpMetricTopTool": "Herramienta principal" }, "themesPage": { "title": "Temas", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Hay una nueva versión disponible. Haga clic para actualizar.", "updateStarted": "Actualización iniciada...", "reloadingPageAutomatically": "Recargando página automáticamente...", - "providerTopology": "Topología del proveedor" + "providerTopology": "Topología del proveedor", + "downloadDmg": "Descargar DMG (macOS)", + "downloadDmgDescription": "Una nueva versión de la aplicación de escritorio OmniRoute está disponible. Por favor, descarga e instala el instalador DMG de macOS para actualizar (actual: v{version}).", + "downloadExe": "Descargar EXE (Windows)", + "downloadExeDescription": "Una nueva versión de la aplicación de escritorio OmniRoute está disponible. Por favor, descarga e instala el instalador EXE de Windows para actualizar (actual: v{version}).", + "downloadAppImage": "Descargar AppImage (Linux)", + "downloadAppImageDescription": "Una nueva versión de la aplicación de escritorio OmniRoute está disponible. Por favor, descarga el paquete AppImage para Linux para actualizar (actual: v{version}).", + "downloadUpdate": "Descargar Actualización", + "downloadUpdateDescription": "Una nueva versión de la aplicación de escritorio OmniRoute está disponible. Por favor, descarga el formato de aplicación correspondiente para tu sistema para actualizar (actual: v{version}).", + "updateQueued": "Actualización en cola a v{version}.", + "updateDockerRebuilding": "La imagen de Docker se está reconstruyendo en segundo plano.", + "updateWaitingRestart": "Esperando a que OmniRoute se reinicie con la nueva versión.", + "updateInstalling": "Instalando v{version}.", + "updateRunning": "OmniRoute ahora está ejecutando v{version}.", + "updateCompleted": "OmniRoute actualizado a v{version}.", + "updateDockerStillRebuilding": "La imagen de Docker aún se está reconstruyendo para v{version}.", + "updateInstallingBackground": "Instalando v{version} en segundo plano.", + "updateWaitingVersion": "Esperando a que OmniRoute vuelva en v{version}.", + "updateDockerStillInProgress": "La reconstrucción de Docker aún está en progreso.", + "updateRestarting": "Reinicio del servicio en progreso. Esperando a que OmniRoute vuelva a estar en línea...", + "updateTimeout": "La actualización comenzó, pero v{version} no estuvo disponible antes del tiempo de espera. Actualiza la página o revisa los registros del servidor.", + "updateTimedOut": "La actualización a v{version} ha expirado.", + "updateStartFailed": "Error al iniciar la actualización.", + "noResponseStream": "No se recibió ningún flujo de respuesta.", + "updateComplete": "¡Actualización completa!", + "updateFailed": "La actualización falló.", + "updateNetworkError": "Error de red: conexión perdida durante la actualización.", + "stepInstallPackage": "Instalar Paquete", + "stepRebuildNativeModules": "Reconstruir Módulos Nativos", + "stepRestartService": "Reiniciar Servicio", + "stepComplete": "Completo", + "stepError": "Error", + "updateCompleteTitle": "¡Actualización Completa!", + "updateFailedTitle": "Actualización Fallida", + "updatingTitle": "Actualizando OmniRoute...", + "reloadNotice": "La página se recargará automáticamente en unos segundos.", + "retryNotice": "Por favor, inténtalo de nuevo o actualiza manualmente a través de la CLI.", + "restartNotice": "No cierre esta página. El sistema se reiniciará automáticamente.", + "reloadNow": "Recargar Ahora", + "closeUpdate": "Cerrar", + "retryUpdate": "Reintentar", + "updateAvailableTitle": "Actualización disponible: v{version}{desktop}", + "desktopAppLabel": "(Aplicación de Escritorio)", + "checkingForUpdates": "Buscando actualizaciones...", + "versionAvailableForDownload": "La versión v{version} está disponible para descargar.", + "downloadingUpdate": "Descargando actualización... {percent}% completo.", + "updateDownloaded": "¡Actualización descargada con éxito! Haz clic en Reiniciar e Instalar para aplicar.", + "autoUpdateFailed": "La actualización automática falló: {reason}.", + "unknownUpdateError": "Error desconocido", + "versionAvailableDesktop": "La versión v{version} está disponible para la aplicación de escritorio.", + "manualUpdateRequired": "Se requiere actualización manual para este tipo de instalación.", + "restartAndInstall": "Reiniciar e Instalar", + "checkForUpdate": "Buscar Actualización", + "manualUpdate": "Actualización Manual", + "directDownloadHint": "O descarga el formato de instalador respectivo directamente:", + "releaseNotes": "Notas de la versión", + "readMore": "Leer Más", + "noAuthLabel": "Sin Autenticación" }, "analytics": { "title": "Analítica", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Inferred from persisted call logs around this request", "routeRecommendations": "Recommendations", "routeLimitations": "Limitations", - "routeNoKnownLimitations": "No known limitations for this explanation." + "routeNoKnownLimitations": "No known limitations for this explanation.", + "searchAnalyticsLoading": "Cargando análisis de búsqueda…", + "searchAnalyticsNoData": "No hay datos de búsqueda disponibles aún.", + "searchAnalyticsNoDataDescription": "Las solicitudes de búsqueda aparecerán aquí después de la primera búsqueda a través de /v1/search.", + "searchAnalyticsToday": "{count} hoy", + "searchAnalyticsCachedRequests": "{count} solicitudes en caché", + "searchAnalyticsApiCosts": "costos de la API de búsqueda", + "searchAnalyticsErrors": "{count} errores", + "searchAnalyticsNoErrors": "Sin errores", + "searchAnalyticsProviderBreakdown": "Desglose del Proveedor", + "searchAnalyticsQueries": "consultas", + "searchAnalyticsEmptyDescription": "Utiliza POST /v1/search para comenzar a dirigir búsquedas web.", + "searchAnalyticsFreeTier": "Disponible el nivel gratuito: Serper (2,500/mes), Brave (2,000/mes), Exa (1,000/mes), Tavily (1,000/mes) — total de 6,500+ búsquedas gratuitas/mes con conmutación automática por error.", + "autoRoutingNoDataAvailable": "No hay análisis de enrutamiento automático disponibles. Realiza solicitudes utilizando el prefijo auto/ para ver métricas.", + "defaultVariantLabel": "Predeterminado", + "freeTierAvailable": "Nivel gratuito disponible" }, "apiManager": { "title": "Claves API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} providers", "imageToTextBridgeAvailable": "El puente de modalidad puede describir imágenes para modelos solo de texto ahora. El entorno de pruebas en línea estará disponible cuando /api/v1/images/understanding esté implementado.", "imageToTextBridgeCta": "Configura el puente de Imagen→Texto en la configuración del Puente de Modalidad", - "sttBridgeCta": "Configura el puente de Voz→Texto en la configuración del Puente de Modalidad" + "sttBridgeCta": "Configura el puente de Voz→Texto en la configuración del Puente de Modalidad", + "existingConnection": "Conexión existente", + "openrouterSttDescription": "Los modelos de conversión de voz a texto de OpenRouter utilizan tu conexión de OpenRouter configurada. No se requieren credenciales separadas." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Pegar en:", "copilotReloadInstruction": "Then reload VS Code and set the API key in the input prompt.", "wireApiChatCompletions": "Finalizaciones de chat (/chat/completions)", - "wireApiResponses": "API de respuestas (/respuestas)" + "wireApiResponses": "API de respuestas (/respuestas)", + "cliproxyapiActionFailed": "Acción fallida", + "cliproxyapiActionSucceeded": "Acción exitosa", + "cliproxyapiCheckUpdates": "Buscar Actualizaciones", + "cliproxyapiDescription": "Fallback de proxy ascendente (OAuth basado en Go)", + "cliproxyapiHealth": "Salud", + "cliproxyapiHealthy": "Saludable", + "cliproxyapiInstall": "Instalar", + "cliproxyapiNotInstalledValue": "No instalado", + "cliproxyapiPort": "Puerto", + "cliproxyapiRequestFailed": "La solicitud falló", + "cliproxyapiRestart": "Reiniciar", + "cliproxyapiStart": "Iniciar", + "cliproxyapiStatusError": "Error", + "cliproxyapiStatusInstalled": "Instalado", + "cliproxyapiStatusNotInstalled": "No Instalado", + "cliproxyapiStatusRunning": "Ejecutando", + "cliproxyapiStatusStopped": "Detenido", + "cliproxyapiStop": "Detener", + "cliproxyapiUnhealthy": "No saludable", + "cliproxyapiUnknown": "Desconocido", + "cliproxyapiUpdate": "Actualizar", + "cliproxyapiUpdateAvailable": "Actualización disponible: v{current} → v{latest}", + "cliproxyapiVersion": "Versión" }, "combos": { "title": "combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "Sin precios", "pricingAvailableShort": "carillo", "pricingMissingShort": "sin precio", + "fallbackOnlyOnQuotaExhaustion": "Solo avanzar en caso de agotamiento de cuota", + "fallbackOnlyOnQuotaExhaustionShort": "fallback solo de cuota", "warningRoundRobinSingleModel": "El round-robin es más útil con al menos 2 modelos.", "warningCostOptimizedPartialPricing": "Solo {priced} de los modelos {total} tienen precios. El enrutamiento puede tener en cuenta parcialmente los costos.", "warningCostOptimizedNoPricing": "No se encontraron datos de precios para este combo. El costo optimizado puede enrutarse inesperadamente.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "El paquete de modos y los pesos se mantienen aquí; el estado del disyuntor en tiempo real se mantiene en la página de Salud.", "emailVisibilityHint": "Los correos de cuentas aquí siguen el selector global de privacidad.", "emailVisibilityTooltip": "Use the eye icon to reveal or hide account emails globally across combos, providers and quota screens.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Paso a paso (Proveedor → Modelo)", + "builderModeGlobal": "Búsqueda de modelo global (Combo personalizado)", + "builderGlobalSearchPlaceholder": "Buscar modelos en todos los proveedores (por ejemplo, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Agregar todo", + "builderGlobalShortcuts": "Atajos:", + "builderGlobalNoResults": "No se encontró ningún modelo para \"{query}\".", + "builderGlobalProviderLabel": "Proveedor:", + "builderGlobalAccountCount": "{count, plural, one {# cuenta} other {# cuentas}}", + "builderGlobalAdded": "Agregado", + "builderGlobalAdd": "Agregar", "manualModel": "Manual model", "manualModelInvalid": "Enter a model as provider/model.", "manualModelUnknownProvider": "Unknown provider prefix.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilidad de Sesión", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness off", "kimiPresetTitle": "Kimi Coding preset", "kimiPresetDescription": "Kimi K3 as the primary model (Moonshot API), with automatic fallback to your Kimi Code connections (kimi-coding, kimi-web) when configured.", - "kimiPresetCta": "Add preset" + "kimiPresetCta": "Add preset", + "intelligentComboCount": "{count, plural, one {# combinación inteligente} other {# combinaciones inteligentes}}", + "providersInScope": "{count, plural, one {# proveedor en el alcance} other {# proveedores en el alcance}}", + "savingModePack": "Guardando {pack}…", + "errorTitle": "Error al cargar los combos", + "errorDescription": "No pudimos cargar los datos del combo en este momento. Verifica tu conexión y vuelve a intentarlo.", + "errorId": "Error ID: {id}", + "errorRetry": "Inténtalo de nuevo", + "comboLabel": "Combo" }, "costs": { "title": "Costos", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Username", "obsidianPassword": "Password", - "obsidianTailscaleHint": "Use your Tailscale IP instead of localhost if connecting from mobile. Both devices must be on the same Tailscale network." + "obsidianTailscaleHint": "Use your Tailscale IP instead of localhost if connecting from mobile. Both devices must be on the same Tailscale network.", + "cloudSyncNotConfigured": "La sincronización en la nube no está configurada en esta instancia.", + "notionConnect": "Conectar", + "notionConnectFailed": "Error al conectar", + "notionConnected": "Conectado", + "notionConnectionFailed": "Conexión fallida", + "notionDescription": "Buscar, leer, consultar y escribir en Notion a través de modelos de IA enrutados", + "notionDisconnect": "Desconectar", + "notionDisconnectFailed": "Error al desconectar", + "notionEnterToken": "Por favor, introduce un token de integración de Notion", + "notionIntegrationHelp": "Crear una Integración Interna en", + "notionIntegrationToken": "Token de Integración Interna de Notion", + "notionNotConnected": "No conectado", + "notionTokenConfigured": "Token configurado. Las herramientas de Notion están disponibles a través de MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Model", "noRemoteProviders": "No providers with configured API key", "selectProviderModel": "Select a model", + "customBaseUrlLabel": "URL base personalizada (opcional)", + "customModelIdLabel": "ID de modelo personalizado (opcional)", + "customEndpointHelp": "Utiliza un endpoint /embeddings compatible con OpenAI. Se permiten endpoints locales; los objetivos de metadatos en la nube están bloqueados.", + "customEndpointSave": "Aplicar punto final personalizado", + "customEndpointInvalid": "Ingresa tanto una URL base HTTP(S) válida como un ID de modelo, o deja ambos campos vacíos.", + "customEndpointSaveFailed": "No se pudo guardar el punto final de incrustación personalizada.", "staticEnabledLabel": "Enable Static Potion", "staticEnabledDesc": "Download and use potion-base-8M model locally", "transformersEnabledLabel": "Enable Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Cleaning...", "cleanNow": "Clean now", "cleanupSuccess": "{count} point(s) removed", - "cleanupFailed": "Cleanup failed" + "cleanupFailed": "Cleanup failed", + "hostLabel": "Anfitrión", + "collectionLabel": "Colección" }, "rerank": { "enableLabel": "Enable Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagrama alternativo de 3 niveles de OmniRoute", "apiKeyMgmt": "Gestión de claves API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Configurar proveedores gratuitos", + "description": "Opcionalmente habilite los proveedores seleccionados sin registro. Revise el aviso y el sitio de cada proveedor antes de continuar; la disponibilidad y los límites de tasa son controlados por terceros.", + "loading": "Cargando proveedores gratuitos...", + "loadFailed": "No se pudieron cargar los proveedores gratuitos.", + "alreadyConfigured": "Todos los proveedores gratuitos elegibles ya están configurados.", + "reviewProviderSite": "Revisar el sitio del proveedor y los términos", + "confirmation": "Revisé estos proveedores de terceros y quiero que OmniRoute cree las conexiones seleccionadas.", + "setupSelected": "Configurar proveedores seleccionados", + "settingUp": "Configurando...", + "setupFailed": "No se pudo configurar los proveedores seleccionados. No se cambió nada existente.", + "retryFailed": "Reintentar proveedores fallidos", + "orUseApiKey": "o conéctate con una clave API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "creado", + "skipped": "ya configurado", + "failed": "fallido" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Requerido. URL base de la API del proveedor.", "iconUrlLabel": "Icon URL", "iconUrlHint": "Optional. Image URL shown as this provider's icon.", + "iconUrlInvalid": "URL de icono no válida. Utilice una URL http(s):// o data:image/*;base64.", "anthropicPrefixPlaceholder": "producto ac", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod.)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "La sesión ya está activa", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Aplicar autenticación", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Paste API key…", "zedSaving": "Saving…", "zedImportAction": "Import", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Habilitar la renovación automática de la sesión del Cursor", + "cursorAgentNudgeBody": "Instala cursor-agent para la renovación automática de sesiones; sin él, las conexiones de Cursor necesitan reconexiones manuales periódicas aproximadamente cada 24 horas.", + "cursorAgentNudgeDismiss": "Descartar", "zedManualImportFailed": "Manual import failed", "zedManualImportSuccess": "Imported {provider} token from Zed", "grokImportTitle": "Import Grok Build Auth", @@ -5878,7 +6066,6 @@ "friendliai": "Free tier for serverless inference — no credit card required", "gemini": "Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com", "gigachat": "Connect GigaChat (Sber) with an API key.", - "github-models": "Create a GitHub PAT with 'models: read' scope at github.com/settings/tokens", "gitlab": "GitLab personal access token for the public Code Suggestions API. Configure a self-hosted base URL when not using gitlab.com.", "gitlawb-gmi": "Get your API key from Gitlawb Opengateway dashboard.", "gitlawb": "Get your API key from Gitlawb Opengateway dashboard.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Connect Kimi Coding with the existing OAuth flow.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Connect OpenAI Codex with the existing OAuth flow.", - "qwen": "Connect Qwen Code with the existing OAuth flow." + "qwen": "Connect Qwen Code with the existing OAuth flow.", + "github-models": "Create a GitHub PAT with 'models: read' scope at github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} acepta ID de modelo nativo del proveedor. Importe desde /models o agregue ID personalizados para enrutamiento.", "bedrockModelsDescription": "Los modelos de Amazon Bedrock tienen como alcance la región de AWS. Importe desde /models o agregue ID de modelo Bedrock habilitados en la región seleccionada.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Cuando todas las conexiones configuradas están agotadas (cuota, créditos o expiración), utiliza temporalmente el nivel sin clave de este proveedor. Desactiva para omitir este proveedor en lugar de enviar solicitudes anónimas — recomendado cuando el nivel sin clave las rechaza (401).", "anonymousFallbackEnabled": "Fallback anónimo habilitado para {provider}", "anonymousFallbackDisabled": "El retroceso anónimo está deshabilitado para {provider} — las conexiones agotadas omitirán este proveedor", - "anonymousFallbackUpdateFailed": "Error al actualizar la configuración de respaldo anónimo" + "anonymousFallbackUpdateFailed": "Error al actualizar la configuración de respaldo anónimo", + "batchDeleteFailed": "La eliminación por lotes falló", + "batchDeleteNetworkError": "Error de red durante la eliminación por lotes", + "batchUpdateFailed": "La actualización por lotes falló", + "batchUpdateNetworkError": "Error de red durante la actualización por lotes", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agente en la Nube", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Buscar", + "categoryWebCookie": "Cookie Web", + "claudeExtraUsageBlockingDisabled": "Bloqueo de uso adicional de Claude desactivado (se permite el uso adicional)", + "claudeExtraUsageBlockingEnabled": "Bloqueo de uso adicional de Claude habilitado (el uso adicional será bloqueado)", + "claudeRoutingPreferenceDisabled": "Los modelos Claude sin prefijo ya no prefieren Claude Code", + "claudeRoutingPreferenceEnabled": "Los modelos Claude sin prefijo ahora prefieren Claude Code", + "clearMediaFilter": "Borrar", + "cliproxyRoutingDisabled": "Las solicitudes ahora utilizan OmniRoute nativo (directo)", + "cliproxyRoutingEnabled": "Las solicitudes ahora se enrutan a través de CLIProxyAPI (emulación más profunda)", + "codexLimitPolicyUpdated": "Política de límite de Codex actualizada", + "codexServiceModeUpdated": "Modo de servicio de Codex actualizado", + "codexServiceTierActive": "El nivel de servicio Codex {tier} está activo", + "codexTierFastLabel": "Rápido", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Error al aplicar el código de comando auth", + "commandCodeApplyingApproval": "Navegador aprobado, aplicando…", + "commandCodeApplyingKey": "Aplicando la clave aprobada por el navegador…", + "commandCodeApprovalInstructions": "Abre la URL de autenticación, aprueba el acceso y luego pega la clave/JSON/URL devuelta a continuación…", + "commandCodeAuthExpired": "El código de autenticación ha expirado", + "commandCodeConnected": "Código de comando conectado", + "commandCodeConnectionAdded": "Conexión de código de comando añadida", + "commandCodeLinkExpired": "El enlace del código de comando ha expirado", + "commandCodeOpeningStudio": "Abriendo Command Code Studio…", + "commandCodePopupBlocked": "Popup bloqueado. Por favor, permite las ventanas emergentes y vuelve a intentar Command Code Connect.", + "commandCodeStartFailed": "Error al iniciar el comando Code auth", + "connectionDeleted": "Conexión eliminada", + "connectionFallback": "conexión", + "coolingConnectionsDescription": "Estas conexiones devolvieron un 429 (límite de tasa) en su última solicitud. OmniRoute las omitirá hasta que expire el temporizador; no se requiere desactivación manual.", + "coolingConnectionsTitle": "Enfriando actualmente ({count})", + "failedDeleteAlias": "Error al eliminar el alias", + "failedDeleteConnection": "Error al eliminar la conexión", + "failedDistributeProxies": "Error al distribuir proxies.", + "failedSaveModelEndpointSettings": "Error al guardar la configuración del punto final del modelo", + "failedUpdateClaudeExtraUsagePolicy": "Error al actualizar la política de uso adicional de Claude", + "failedUpdateClaudeRoutingPreference": "Error al actualizar la preferencia de enrutamiento de Claude Code", + "failedUpdateCliproxyRouting": "Error al actualizar el enrutamiento de CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Error al actualizar la política de límite de Codex", + "failedUpdateCodexServiceMode": "Error al actualizar el modo de servicio de Codex", + "filterByMedia": "Medios", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Clave de API de Kimi Code", + "modelTestFailed": "La prueba del modelo falló", + "modelTestNetworkError": "Error de red al probar el modelo", + "networkError": "Error de red", + "networkErrorDeletingAlias": "Error de red al eliminar el alias", + "networkErrorSettingAlias": "Error de red al establecer el alias", + "noProvidersMatch": "No hay proveedores que coincidan con tu búsqueda.", + "noSavedProxies": "No se encontraron proxies guardados. Agrega proxies en Configuración → Proxy primero.", + "pageLoadErrorDescription": "No pudimos cargar los datos del proveedor en este momento. Verifica tu conexión y vuelve a intentarlo.", + "pageLoadErrorId": "Error ID: {id}", + "pageLoadErrorRetry": "Inténtalo de nuevo", + "pageLoadErrorTitle": "Error al cargar los proveedores", + "playgroundTitle": "Parque de Juegos", + "providerDetailConnectionFlexActive": "El nivel de servicio de Codex Flex está activo para esta conexión", + "providerDetailConnectionPriorityActive": "El nivel de servicio prioritario de Codex está activo para esta conexión", + "providerDetailGlobalFlexActive": "El nivel de servicio Global Codex flex está activo", + "providerDetailGlobalPriorityActive": "El nivel de servicio prioritario de Global Codex está activo", + "proxiesDistributed": "Distribuido {assigned} asignación(es) de proxy a través de {tagLabel}{total} conexión(es).", + "rerankEndpoint": "Reclasificar", + "savedModelEndpointSettings": "Configuración del punto final del modelo guardado", + "searchByModelAria": "Buscar por modelo", + "selectSupportedEndpoint": "Seleccione al menos un endpoint compatible", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configuración", @@ -6460,7 +6719,24 @@ "loadFailed": "No se pudo cargar la lista de suscripción", "toggleFailed": "No se pudo alternar el interruptor", "refreshFailed": "No se pudo actualizar", - "deleteFailed": "No se pudo eliminar" + "deleteFailed": "No se pudo eliminar", + "add": "Agregar", + "cancel": "Cancelar", + "configure": "Configurar", + "copyEndpoint": "Copiar Endpoint", + "coreEndpointHint": "Sugerencia de Endpoint Principal", + "coreNodesHint": "Sugerencia de Nodos Principales", + "create": "Crear", + "deleteConfirm": "Eliminar Confirmación", + "empty": "Vacío", + "globalModeDescription": "Descripción del Modo Global", + "localCoreHint": "Sugerencia de Núcleo Local", + "nodeSummary": "Resumen del Nodo", + "providerRequired": "Proveedor Requerido", + "providerRouting": "Enrutamiento de Proveedores", + "refresh": "Actualizar", + "refreshInterval": "Intervalo de Actualización", + "ruleModeDescription": "Descripción del Modo de Regla" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Run an automatic vision-to-text fallback before routing image requests to text-only models.", "visionBridgeEnabledLabel": "Enabled", "visionBridgeEnabledDesc": "Toggle the pre-call bridge that replaces image parts with extracted text.", + "visionBridgeRerouteTextOnlyLabel": "Reenviar modelos solo de texto", + "visionBridgeRerouteTextOnlyDesc": "Envía la solicitud completa, incluidas las imágenes, al modelo puente cuando el modelo seleccionado no tenga entrada de imagen.", "visionBridgeModel": "Modelo de puente", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Any OmniRoute model ID that supports vision can be used here.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API key lacks the manage scope.", "BYPASS_PREFIX_NOT_ALLOWED": "One or more prefixes target spawn-capable routes and cannot be bypassed.", "GENERIC": "Failed to update authz settings." - } + }, + "remove": "Eliminar" }, "resilienceBaseCooldownLabel": "Enfriamiento básico", "scopeLabel": "Alcance", @@ -7737,13 +8016,6 @@ "modalityBridgeSubTabsAria": "Secciones del Puente de Modalidad", "modalityBridgeVisionTitle": "Puente de Visión", "modalityBridgeVisionDesc": "Describe imágenes con un modelo de visión y continúa con el modelo de texto elegido por el usuario.", - "modalityBridgeAudioTitle": "Puente de Audio", - "modalityBridgeAudioDesc": "Transcribe audio con un modelo de reconocimiento de voz antes de continuar con el modelo de texto elegido.", - "modalityBridgeAudioEnabled": "Habilitar Puente de Audio", - "modalityBridgeAudioEnabledDesc": "Reemplace las partes de audio con transcripciones cuando el modelo objetivo no pueda procesar audio.", - "modalityBridgeAudioModel": "Modelo de texto a voz", - "modalityBridgeAudioModelAuto": "Automático (primer proveedor STT conectado)", - "modalityBridgeAudioMaxClips": "Máx. clips de audio por solicitud", "modalityBridgeMode": "Modo", "modalityBridgeModeAuto": "Automático (recomendado)", "modalityBridgeModeAutoHint": "Heurística heredada: redirigir modelos individuales sin credenciales; describir de otra manera.", @@ -7774,16 +8046,107 @@ "modalityBridgeTestReroute": "El puente redirigió la solicitud a {model}", "modalityBridgeTestNoop": "El puente no se activó (el modelo puede soportar visión de forma nativa o el puente está deshabilitado)", "modalityBridgeTestError": "La prueba falló: {message}", + "modalityBridgeAudioComingSoon": "El puente de audio (voz → texto a través de /v1/audio/transcriptions) se incluirá en la próxima versión. Sus claves de configuración ya están reservadas.", + "modalityBridgeVideoComingSoon": "El puenteo de video (muestreo de fotogramas + subtitulado) está en la lista de tareas pendientes — consulta el problema #9760.", + "modalityBridgeMovedTitle": "Vision Bridge movido", + "modalityBridgeMovedBody": "La configuración de Vision Bridge ahora está disponible en la página dedicada de Modality Bridge.", + "modalityBridgeMovedCta": "Abrir la configuración del puente de modalidad", + "modalityBridgeAudioTitle": "Puente de Audio", + "modalityBridgeAudioDesc": "Transcribe audio con un modelo de reconocimiento de voz antes de continuar con el modelo de texto elegido.", + "modalityBridgeAudioEnabled": "Habilitar Puente de Audio", + "modalityBridgeAudioEnabledDesc": "Reemplace las partes de audio con transcripciones cuando el modelo objetivo no pueda procesar audio.", + "modalityBridgeAudioModel": "Modelo de texto a voz", + "modalityBridgeAudioModelAuto": "Automático (primer proveedor STT conectado)", + "modalityBridgeAudioMaxClips": "Máx. clips de audio por solicitud", "modalityBridgeAudioTestButton": "Prueba con audio de muestra", "modalityBridgeAudioTestRunning": "Probando audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) transcritos por {model}", "modalityBridgeAudioTestNoop": "Audio Bridge no se activó (el destino puede soportar audio, no hay proveedor de STT conectado, o el puente está deshabilitado)", "modalityBridgeAudioTestError": "La prueba de audio falló: {message}", - "modalityBridgeAudioComingSoon": "El puente de audio (voz → texto a través de /v1/audio/transcriptions) se incluirá en la próxima versión. Sus claves de configuración ya están reservadas.", - "modalityBridgeVideoComingSoon": "El puenteo de video (muestreo de fotogramas + subtitulado) está en la lista de tareas pendientes — consulta el problema #9760.", - "modalityBridgeMovedTitle": "Vision Bridge movido", - "modalityBridgeMovedBody": "La configuración de Vision Bridge ahora está disponible en la página dedicada de Modality Bridge.", - "modalityBridgeMovedCta": "Abrir la configuración del puente de modalidad" + "modelRoutingDescriptionPlaceholder": "Rutea los modelos Opus al combo frontier", + "cliproxyapiFallbackCodes": "Códigos de Reemplazo de Cliproxyapi", + "cliproxyapiFallbackDescription": "Descripción de Respaldo de Cliproxyapi", + "cliproxyapiHealthLabel": "Etiqueta de Salud de Cliproxyapi", + "cliproxyapiImportFailed": "Fallo en la Importación de Cliproxyapi", + "cliproxyapiImportResult": "Resultado de Importación de Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL inválido", + "cliproxyapiLifecycleNoticeAfter": "Aviso de Ciclo de Vida de Cliproxyapi Después", + "cliproxyapiLifecycleNoticeBefore": "Aviso de Ciclo de Vida de Cliproxyapi Antes", + "cliproxyapiLifecycleNoticeLink": "Enlace de Aviso de Ciclo de Vida de Cliproxyapi", + "cliproxyapiPortLabel": "Etiqueta de puerto de Cliproxyapi", + "cliproxyapiStatusLabel": "Etiqueta de Estado de Cliproxyapi", + "cliproxyapiVersionLabel": "Etiqueta de Versión de Cliproxyapi", + "collection": "Colección", + "errorPage": { + "description": "No pudimos cargar la configuración en este momento. Por favor, inténtalo de nuevo en unos segundos.", + "errorId": "ID de error: {id}", + "retry": "Inténtalo de nuevo", + "title": "Error al cargar la configuración" + }, + "host": "Anfitrión", + "notInstalled": "No instalado", + "oneproxyActions": "Acciones de Oneproxy", + "oneproxyActive": "Oneproxy Activo", + "oneproxyAnonymity": "Anonymidad de Oneproxy", + "oneproxyCountry": "País de Oneproxy", + "oneproxyDelete": "Eliminar Oneproxy", + "oneproxyEmpty": "Oneproxy Vacío", + "oneproxyHost": "Host de Oneproxy", + "oneproxyLatency": "Latencia de Oneproxy", + "oneproxyProtocol": "Protocolo Oneproxy", + "oneproxyQuality": "Calidad de Oneproxy", + "oneproxySyncFailed": "La sincronización falló: {error}", + "oneproxySyncSuccess": "Sincronizados {total} proxies ({added} nuevos, {updated} actualizados)", + "proxyDocumentationSocks5DescAfter": "Documentación del Proxy Socks5 Desc Después", + "proxyFreePoolAddProxy": "Agregar Proxy a Pool Sin Proxy", + "proxyFreePoolAdding": "Añadiendo Pool Sin Proxy", + "proxyFreePoolSelectProxy": "Seleccionar Proxy de Pool Sin Proxy", + "proxyStatusActive": "Estado del Proxy Activo", + "proxyStatusInactive": "Estado del Proxy Inactivo", + "routingAddEntry": "Agregar entrada", + "settingSaveFailed": "Error Al Guardar La Configuración", + "settingSaved": "Configuración Guardada", + "skillsmpApiKeyHintAfter": ". Límite de tasa: {limit} solicitudes/día.", + "skillsmpApiKeyHintBefore": "Obtén tu clave API de", + "syncFailed": "La sincronización falló", + "unhealthy": "No saludable", + "oneproxyDescription": "Obtén y rota proxies validados gratuitos de la plataforma comunitaria 1proxy", + "oneproxySyncing": "Sincronizando...", + "oneproxySyncNow": "Sincronizar Ahora", + "oneproxyClearAll": "Borrar Todo", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "¿Eliminar todos los proxies de 1proxy?", + "memorySkillsSkillsmpDescription": "Conéctate a SkillsMP para descubrir e instalar habilidades del mercado.", + "memorySkillsActiveProviderDescription": "Elija qué proveedor utiliza la página de Habilidades para buscar e instalar.", + "memorySkillsSkillsmpProviderTitle": "Mercado SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Mercado autenticado (utiliza tu clave API de SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Directorio skills.sh", + "memorySkillsSkillsshProviderDescription": "Proveedor de directorio público (no se requiere clave API).", + "routingCcBridgeCatalogName": "Puente CC compatible con Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Proveedor nativo de Claude con tokens emitidos por OAuth.", + "routingCcBridgeName": "Puente Claude-Code", + "routingCcBridgeDescription": "Puntos finales de Relay utilizando claves API (compatible con anthropic-cc-*).", + "routingCustomProviderDescription": "Proveedor personalizado.", + "routingUnknownOpKind": "Tipo de operación desconocido: {kind}", + "routingInvalidJson": "JSON no válido: {error}", + "routingConfigMustBeObject": "La configuración debe ser un objeto JSON", + "routingEnabledMustBeBoolean": "`enabled` debe ser verdadero o falso", + "routingPipelineMustBeArray": "`pipeline` debe ser un array de ops", + "routingPipelineTooLong": "La canalización no puede exceder 50 operaciones", + "routingOpMissingKind": "Op #{index}: falta o es inválido `kind`", + "routingOpUnknownKind": "Op #{index}: tipo desconocido \"{kind}\"", + "routingJsonEditorHide": "Ocultar editor JSON", + "routingJsonEditorImportExport": "Importar / exportar JSON", + "routingJsonEditorLabel": "JSON (editar y aplicar, o pegar para importar)", + "routingApplyJson": "Aplicar JSON", + "routingTransformsFootnote": "Todas las operaciones de transformación son idempotentes en la reejecución. Los cambios tienen efecto inmediato en la siguiente solicitud.", + "cliproxyapiUnknown": "Desconocido", + "cliproxyapiVersion": "Versión", + "cliproxyapiHealth": "Salud", + "cliproxyapiPort": "Puerto", + "qdrantHost": "Anfitrión", + "qdrantCollection": "Colección" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Predeterminado", + "off": "Apagar", + "lite": "Lite", + "standard": "Estándar", + "aggressive": "Agresivo", + "ultra": "Ultra", + "responsesToolOutput": "Salida de la herramienta de respuestas" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Runs last in the stack (after RTK/Caveman cleans the text, OmniGlyph converts the remainder to images) and also runs standalone through omniglyph mode. This is a preview and remains off by default until end-to-end validation is complete.", "saved": "Saved.", "saveFailed": "Could not save.", - "enableAria": "Enable the OmniGlyph engine" + "enableAria": "Enable the OmniGlyph engine", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Embedded Services", @@ -9127,7 +9500,49 @@ "unableToLoad": "No se pueden cargar las métricas del sistema", "product": "Producto", "resources": "Recursos", - "company": "Empresa" + "company": "Empresa", + "tokenHealthTooltips": { + "allHealthy": "Todos los tokens están sanos", + "needsAttention": "Algunos tokens necesitan atención", + "refreshFailures": "Se detectaron fallos en la actualización del token", + "unknown": "Estado de salud desconocido" + }, + "systemMonitor": { + "metricsAriaLabel": "Métricas del sistema", + "memory": "Memoria", + "memoryShort": "mem", + "uptime": "Tiempo de actividad", + "ariaLabel": "Monitoreo del sistema", + "title": "Monitor del Sistema", + "version": "Versión", + "connections": "Conexiones", + "circuitBreakers": "Interruptores Automáticos", + "open": "{count} abierto", + "memoryUsage": "Uso de memoria" + }, + "never": "Nunca", + "justNow": "Justo ahora", + "minutesAgo": "hace {count}m", + "hoursAgo": "hace {count}h", + "tokens": "Tokens", + "costs": "Costos", + "autoRefresh": "Actualización Automática ({seconds}s)", + "toggleAutoRefresh": "Activar/desactivar la actualización automática", + "activeRequests": "Solicitudes Activas", + "totalRequests": "Total de Solicitudes", + "totalInputTokens": "Total De Tokens De Entrada", + "model": "Modelo", + "provider": "Proveedor", + "requests": "Solicitudes", + "lastUsed": "Último Uso", + "inputTokens": "Tokens de entrada", + "totalTokens": "Total de Tokens", + "inputCost": "Costo de Entrada", + "outputCost": "Costo de Salida", + "noUsageData": "No se han registrado usos aún. Realiza algunas solicitudes para ver datos aquí.", + "account": "Cuenta", + "accountLabel": "Cuenta {id}", + "noAccountUsage": "No se han registrado aún usos específicos de la cuenta. Realiza solicitudes utilizando cuentas de OAuth para ver datos aquí." }, "auth": { "welcome": "Bienvenido", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Restablecer a través de los datos de la aplicación", + "resetViaAppDataDescription": "Elimina el archivo de configuración del directorio de datos de la aplicación para restablecer tu contraseña:", + "quitDesktopApp": "Salir de la aplicación de escritorio OmniRoute por completo", + "navigateToAppDataDirectory": "Navega al directorio de datos de la aplicación:", + "checkSystemAppDataFolder": "(Revisa la carpeta de datos de la aplicación de tu sistema)", + "relaunchDesktopFreshSetup": "Reinicia la aplicación de escritorio OmniRoute — comenzará una nueva configuración", + "alternativeSetPasswordTitle": "Alternativa: Establecer Nueva Contraseña", + "alternativeSetPasswordDescription": "Establezca una nueva contraseña inicial a través del archivo de entorno del servidor:", + "openServerEnvFilePrefix": "Abrir", + "relaunchDesktopApp": "Reinicia la aplicación de escritorio OmniRoute", + "codexLinkInvalidOrExpired": "Este enlace es inválido o ha expirado.", + "codexValidationServerError": "No se pudo alcanzar el servidor para validar este enlace.", + "codexSaveConnectionError": "No se pudo guardar la conexión. El enlace puede haber expirado.", + "codexDeviceLoginDisabled": "El inicio de sesión con código de dispositivo está deshabilitado para esta cuenta de OpenAI. Actívalo en la configuración de seguridad de ChatGPT (o pregunta a tu administrador de espacio de trabajo).", + "codexAuthorizationTimedOut": "La autorización ha expirado. Haz clic en Iniciar de nuevo para reintentar.", + "authenticationCancelled": "La autenticación fue cancelada.", + "unexpectedAuthenticationError": "Error inesperado durante la autenticación. Por favor, inténtalo de nuevo.", + "connectOpenAiCodexTitle": "Conectar OpenAI Codex", + "codexConnectDescription": "Autoriza una cuenta de ChatGPT para completar la configuración de esta conexión.", + "validatingCodexLink": "Validando enlace…", + "codexGenerateCodeDescription": "Haz clic a continuación para generar un código de un solo uso, luego inicia sesión en OpenAI.", + "startCodexFlow": "Iniciar", + "requestingOpenAiCode": "Solicitando código de OpenAI…", + "codexVerificationInstructions": "1. Abre la página de verificación de OpenAI y 2. ingresa este código. Esta página se actualiza automáticamente una vez que autorices.", + "yourCode": "Tu código", + "openVerificationPage": "Abrir página de verificación", + "copyUrlShort": "Copiar URL", + "savingConnection": "Guardando conexión…", + "codexConnected": "¡Conectado!", + "codexConnectionRegistered": "La cuenta de Codex ha sido registrada. Puedes cerrar esta pestaña.", + "tryAgain": "Inténtalo de nuevo", + "traeAuthorizationSuccess": "Trae autorización ✓", + "traeAuthorizationFailed": "Trae autorización fallida", + "closeAuthorizationWindow": "Puedes cerrar esta ventana.", + "returnToDashboard": "Regresar al panel de control.", + "resetViaAppData": "Restablecer a través de los datos de la aplicación", + "deleteSettingsToReset": "Elimina el archivo de configuración del directorio de datos de la aplicación para restablecer tu contraseña:", + "quitAppCompletely": "Salir de la aplicación de escritorio OmniRoute por completo", + "navigateToAppData": "Navega al directorio de datos de la aplicación", + "checkAppDataFolder": "Verifica la carpeta de datos de la aplicación de tu sistema", + "deleteSettingsJson": "Eliminar", + "relaunchAppFresh": "Reinicia la aplicación de escritorio OmniRoute — comenzará una nueva configuración", + "alternativeSetPassword": "Alternativa: Establecer Nueva Contraseña", + "setNewPasswordViaEnv": "Establecer una nueva contraseña inicial a través del archivo de entorno del servidor:", + "openServerEnv": "Abrir", + "inDataDirectory": "en el directorio de datos", + "addOrUpdate": "Agregar o actualizar", + "deleteAndRelaunch": "Eliminar", + "settingsJson": "settings.json", + "fromDataDir": "desde el directorio de datos", + "relaunchApp": "Reinicia la aplicación de escritorio OmniRoute" }, "landing": { "brandName": "OmniRuta", @@ -9275,7 +9741,19 @@ "ctaTitle": "¿Listo para simplificar su infraestructura de IA?", "ctaDescription": "Únase a los desarrolladores que están optimizando sus integraciones de IA con OmniRoute. Código abierto y gratuito para comenzar.", "startFree": "Comience gratis", - "readDocumentation": "Leer documentación" + "readDocumentation": "Leer documentación", + "company": "Empresa", + "pricing": "Precios", + "apiReference": "Referencia de API", + "helpCenter": "Centro de Ayuda", + "about": "Acerca de", + "blog": "Blog", + "contact": "Contacto", + "terms": "Términos", + "privacy": "Privacidad", + "license": "Licencia", + "footerDescription": "La interfaz unificada para la infraestructura moderna de IA. Segura, observable y escalable.", + "communityDiscussions": "Discusiones Comunitarias" }, "docs": { "title": "Documentación", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registre y administre agentes a través del registro ACP para la comunicación entre agentes y el intercambio de herramientas.", "protocolAcpStep1": "Navegue hasta Panel → Agentes para ver los agentes ACP registrados.", "protocolAcpStep2": "Registrar nuevos agentes con capacidades y configuración de endpoints.", - "protocolAcpStep3": "Utilice las herramientas CLI para configurar los canales de comunicación del agente." + "protocolAcpStep3": "Utilice las herramientas CLI para configurar los canales de comunicación del agente.", + "metadataTitleTemplate": "%s — Documentación de OmniRoute", + "metadataDefaultTitle": "Documentación de OmniRoute", + "metadataDescription": "Documentación completa para el gateway OmniRoute AI: configuración, API, compresión, implementación y más.", + "layoutNavTitle": "Documentación de OmniRoute", + "layoutHomeLink": "Inicio de Docs", + "layoutDashboardLink": "← Volver al Tablero", + "homeTitle": "Documentación de OmniRoute", + "homeMetadataDescription": "Todo lo que necesitas para enrutar, comprimir y escalar tu IA: guías de configuración, referencia de API, compresión, implementación y más.", + "homeTwitterDescription": "Documentación completa para el gateway de OmniRoute AI", + "homeDescription": "Todo lo que necesitas para enrutar, comprimir y escalar tu IA", + "homeSearchHint": "Presiona Ctrl K para buscar en la documentación", + "featuredQuickStartTitle": "Inicio Rápido", + "featuredQuickStartDescription": "Haz que OmniRoute funcione en 3 minutos", + "featuredAutoComboTitle": "Guía de Auto-Combo", + "featuredAutoComboDescription": "Deja que OmniRoute elija la mejor IA para ti", + "featuredProvidersTitle": "Guía de Proveedores", + "featuredProvidersDescription": "Conecta proveedores de IA en minutos", + "nonTechUsersTitle": "Para Usuarios No Técnicos", + "nonTechUsersSubtitle": "Empieza rápidamente — no se necesita experiencia técnica", + "techUsersTitle": "Para Usuarios Técnicos", + "techUsersSubtitle": "Profundiza en la arquitectura, APIs e internals", + "apiExplorerMetadataTitle": "Explorador de API — Documentación de OmniRoute", + "apiExplorerMetadataDescription": "Explorador de API interactivo — prueba los endpoints de OmniRoute en vivo con respuestas en tiempo real", + "apiExplorerTitle": "Explorador de API", + "apiExplorerDescription": "Prueba los endpoints de OmniRoute en vivo. Selecciona un endpoint, configura tu solicitud y ve la respuesta en tiempo real.", + "apiExplorerSseStarted": "Flujo SSE iniciado — verifica la terminal/devtools para salida en tiempo real.", + "apiExplorerError": "Error: {message}", + "apiExplorerAuth": "autenticación", + "apiExplorerResponseLabel": "Respuesta", + "apiExplorerSelectEndpoint": "Selecciona un endpoint para explorar", + "apiExplorerChooseApi": "Elige una API del panel lateral para ver detalles y probarla en vivo", + "feedbackThanks": "¡Gracias por tus comentarios!", + "feedbackQuestion": "¿Fue útil esta página?", + "pageMetadataTitle": "{title} — Documentación de OmniRoute", + "pageMetadataDescription": "Documentación de OmniRoute: {title}", + "breadcrumb": "Ruta de navegación", + "apiReferenceTable": { + "parameters": "Parámetros", + "name": "Nombre", + "type": "Tipo", + "description": "Descripción", + "returns": "Devuelve", + "typePrefix": "Tipo:" + } }, "legal": { "privacyPolicy": "Política de privacidad", @@ -9957,7 +10479,42 @@ "successMessage": "Su cuenta {providerName} ha sido conectada.", "done": "hecho", "error": "La conexión falló", - "tryAgain": "Inténtalo de nuevo" + "tryAgain": "Inténtalo de nuevo", + "errorSessionIncomplete": "La sesión de OAuth está incompleta (falta el URI de redirección o el verificador de código). Reinicie la conexión e inténtelo de nuevo.", + "errorExchangeFailed": "Intercambio fallido", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Las credenciales predeterminadas de Google OAuth solo funcionan en localhost. Para uso remoto, configura tus propias credenciales de OAuth a través de variables de entorno: ANTIGRAVITY_OAUTH_CLIENT_ID y ANTIGRAVITY_OAUTH_CLIENT_SECRET. Consulta la sección del README 'OAuth en un servidor remoto'.", + "errorSaveFailed": "Guardado fallido", + "errorAuthorizationFailed": "Autorización fallida", + "errorAuthorizationTimeout": "Tiempo de espera de autorización", + "errorRequestFailed": "La solicitud falló", + "errorCallbackServerFailed": "Error al iniciar el servidor de callbacks", + "errorBrowserUnavailable": "El OAuth del navegador no está disponible para este proveedor en el entorno actual. Utiliza el método de autenticación soportado en su lugar.", + "errorStateMismatch": "Desajuste del estado de OAuth. Reinicie la conexión y vuelva a intentarlo.", + "errorImportAccessToken": "Error al importar el token de acceso", + "errorSessionNotInitialized": "La sesión de OAuth no está inicializada. Reinicie el flujo de conexión e inténtelo de nuevo.", + "errorNoAuthorizationCode": "No se encontró el código de autorización. Pegue la URL de callback o el código de autenticación.", + "tabDeviceCode": "Código del Dispositivo", + "tabBrowserLogin": "Inicio de sesión en el navegador", + "tabImportAuthJson": "Importar auth.json", + "tabPasteApiKey": "Pegar la clave de API", + "windsurfPasteDescription": "En el IDE de Windsurf / VS Code, ejecuta el comando \"Windsurf: Provide Auth Token\" desde la paleta de comandos (o haz clic en el botón \"Get Windsurf Authentication Token\" de Jupyter), luego copia el token mostrado y pégalo a continuación. Abrir windsurf.com/show-auth-token directamente solo muestra una página de \"Redirigiendo\" — el IDE debe iniciar el flujo.", + "grokAuthJsonDescription": "Pega el contenido COMPLETO de ~/.grok/auth.json (no solo el campo \"key\" del JWT). Un JWT desnudo no tiene refresh_token, por lo que la conexión se interrumpe después de la expiración (#7610). Prefiere el modal dedicado de Importar auth.json cuando esté disponible.", + "devinDesktopPasteDescription": "Pega una clave API de Devin existente de una sesión autenticada de Devin. La disponibilidad de exportación de claves y los pasos varían según la versión y la cuenta de Devin.", + "devinPasteDescription": "Proporcione su WINDSURF_API_KEY (obtenido a través de `devin auth login`, o a través del comando \"Windsurf: Provide Auth Token\" en el IDE de Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Clave API / Token", + "saving": "Guardando…", + "saveConnection": "Guardar Conexión", + "gheDescription": "Ingrese la URL base de su instancia de GitHub Enterprise (por ejemplo, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL de GitHub Enterprise", + "gheUrlRequired": "Se requiere la URL de GitHub Enterprise", + "gitlabDuoSetupTitle": "Configuración de OAuth de Duo en GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth no está configurado. Registra una aplicación OAuth en {applicationsUrl} con la URI de redirección {redirectUri} y los alcances \"{scopes}\", luego establece {clientIdEnv} (y opcionalmente {clientSecretEnv}) y reinicia.", + "gitlabDuoSetupDescription": "Después de que la aplicación esté registrada y las variables de entorno estén configuradas en esta instancia de OmniRoute, haz clic en Continuar para iniciar la sesión de OAuth.", + "continue": "Continuar" }, "cursorAuthModal": { "title": "Conectar cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Load More", - "loadingMore": "Loading more..." + "loadingMore": "Loading more...", + "correlationId": "ID de correlación", + "group": { + "showAllRows": "Mostrar todas las filas", + "showLatestPerCorrelation": "Mostrar el último por ID de correlación", + "grouped": "Agrupado" + }, + "running": "ejecutando", + "interval": { + "decrease": "Disminuir intervalo", + "title": "Intervalo de autoactualización en segundos", + "increase": "Aumentar intervalo" + }, + "status": { + "inProgress": "En progreso", + "recoveredByRetry": "Recuperado por reintento", + "goToParent": "Ir a la solicitud principal", + "healedTitle": "Fallido, recuperado después de {count} reintentos", + "healed": "sanado", + "failedTitle": "Todos los {count} intentos fallaron", + "failed": "fallido", + "pinnedTitle": "Modelo seleccionado a través de la fijación de sesión del caché de contexto", + "pinned": "fijado" + }, + "attempts": "intentos", + "detail": { + "collapse": "Colapsar {title}", + "expand": "Expandir {title}", + "copyTitle": "Copiar {title}", + "copied": "¡Copiado!", + "copy": "Copiar", + "autoscrollOn": "Desplazamiento automático: activado", + "autoscrollOff": "Desplazamiento automático: desactivado", + "payload": { + "clientRawRequest": "Solicitud Cruda del Cliente", + "clientRequest": "Solicitud del Cliente", + "openaiRequest": "Solicitud de OpenAI", + "providerRequest": "Solicitud de Proveedor", + "providerResponse": "Respuesta del Proveedor", + "clientResponse": "Respuesta del Cliente", + "pipelineError": "Error de Pipeline" + }, + "payloadMissing": "El artefacto de carga detallada ya no está disponible para esta entrada de registro.", + "payloadCorrupt": "No se pudo analizar el artefacto de carga detallada.", + "notAvailable": "N/A", + "semanticCache": "Semántico (OmniRoute)", + "upstreamCache": "Río Arriba (Proveedor)", + "ariaLabel": "Detalles del registro de solicitudes", + "completed": "Completado", + "upstreamStatus": "Río arriba: {status}", + "statusDiscrepancy": "OmniRoute devolvió {status} a pesar de que el proveedor devolvió {provider}", + "previousRequest": "Solicitud anterior", + "nextRequest": "Siguiente solicitud", + "close": "Cerrar modal de detalles", + "startedAt": "Comenzó En", + "endedAt": "Finalizado En", + "duration": "Duración", + "model": "Modelo", + "provider": "Proveedor", + "account": "Cuenta", + "input": "Entrada", + "totalIn": "Total Entrante: {value}", + "cacheRead": "Lectura de Caché: {value}", + "cacheWrite": "Escritura en Caché: {value}", + "compressed": "Comprimido: {from} → {to} ({percent}% ahorrado)", + "output": "Salida", + "totalOut": "Total Salida: {value}", + "reasoning": "Razonamiento: {value}", + "requestedModel": "Modelo Solicitado", + "requestProtocol": "Protocolo Req", + "cacheSource": "Fuente de Caché", + "modelPinning": "Fijación de Modelo", + "activeModelPinning": "Activo — modelo seleccionado a través de la fijación de sesión", + "rotated": "Rotado: {initial} -> {final}", + "apiKey": "Clave de API", + "noApiKey": "Sin clave de API", + "combo": "Combo", + "error": "Error", + "unblockAll": "Desbloquear todo", + "cleared": "Borrado", + "unblock": "Desbloquear", + "relatedRequests": "Solicitudes Relacionadas ({count})", + "current": "actual", + "detailStatus": "Estado Detallado", + "loadingDetails": "Cargando detalles de la solicitud...", + "providerEventStream": "Flujo de Eventos del Proveedor", + "clientEventStream": "Flujo de Eventos del Cliente", + "eventStream": "Flujo de Eventos", + "responsePayloadLegacy": "Carga Útil de Respuesta (Legado)", + "requestPayloadLegacy": "Carga Útil de Solicitud (Legado)", + "noPayload": "No hay datos de carga útiles disponibles para esta entrada de registro.", + "correlationId": "ID de correlación", + "correlationIdValue": "ID de correlación: {id}", + "detailedPayloadInfo": "Habilita primero el registro detallado si deseas la vista de carga útil de cliente/proveedor de cuatro etapas para nuevas solicitudes." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} disabled", "providerAdded": "{provider} añadido", "add": "Agregar", - "manualApiKey": "Usar una clave API manual" + "manualApiKey": "Usar una clave API manual", + "createDahlTokenFailed": "Error al crear el token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configurar proxy", + "providerProxyTitleConfigured": "Proxy configurado: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-restricted — review terms", "caution": "Caution — personal-use / proxy clauses", "ok": "Generally permissive" - } + }, + "allProviders": "Todos los proveedores", + "noApiKeyRequired": "No se requiere clave de API" }, "providerHealthAutopilot": { "title": "Provider Health Autopilot", @@ -12390,7 +13047,11 @@ "on": "Activado", "off": "Desactivado", "availableProviders": "Proveedores disponibles ({count})", - "noProviderOverrides": "Sin ajustes específicos: todos los proveedores activos participarán con sus modelos predeterminados" + "noProviderOverrides": "Sin ajustes específicos: todos los proveedores activos participarán con sus modelos predeterminados", + "resetFailed": "Restablecimiento fallido", + "resetSuccess": "Configuración restablecida a los valores predeterminados", + "running": "Ejecutando...", + "testFailed": "La prueba falló" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) es el amigo fundador del código abierto de OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "El proveedor no admite visión para esta solicitud de imagen", "capabilityFilter.toolsMismatch": "El proveedor no admite la llamada a la herramienta", "capabilityFilter.structuredOutputMismatch": "El proveedor no admite salida estructurada", - "capabilityFilter.contextWindowMismatch": "La solicitud excede la ventana de contexto del proveedor" + "capabilityFilter.contextWindowMismatch": "La solicitud excede la ventana de contexto del proveedor", + "publicSystem": { + "notFound": { + "title": "Página no encontrada", + "description": "La página que estás buscando no existe o ha sido movida.", + "dashboardAriaLabel": "Volver al panel de control", + "statusAriaLabel": "Abrir la página de estado del sistema", + "systemStatus": "Estado del Sistema" + }, + "error": { + "title": "Error Interno del Servidor", + "description": "Algo salió mal al procesar su solicitud. Nuestro equipo ha sido notificado y está trabajando en una solución.", + "errorId": "ID de error: {id}", + "detailsAriaLabel": "Detalles del error", + "retryAriaLabel": "Reintentar cargar la página", + "tryAgain": "Inténtalo de nuevo", + "dashboardAriaLabel": "Regresar al panel de control", + "statusAriaLabel": "Abrir estado del sistema", + "systemStatus": "Estado del Sistema" + }, + "globalError": { + "title": "Algo salió mal", + "description": "Ocurrió un error inesperado. Esto ha sido registrado y nuestro equipo investigará.", + "detailsAriaLabel": "Detalles del error", + "retryAriaLabel": "Reintentar cargar la página", + "tryAgain": "Inténtalo de nuevo", + "statusAriaLabel": "Abrir estado del sistema", + "systemStatus": "Estado del Sistema" + }, + "offline": { + "title": "Problema de Conectividad", + "description": "OmniRoute no puede acceder a la red en este momento. Verifica tu conexión a internet, VPN o configuraciones de proxy.", + "connectionRestored": "Conexión restaurada", + "offlineModeDetected": "Modo fuera de línea detectado", + "retryConnection": "Reintentar Conexión", + "openStatusPage": "Abrir Página de Estado" + }, + "maintenance": { + "title": "Mantenimiento Programado", + "description": "Algunos servicios están temporalmente no disponibles mientras se realiza el mantenimiento. La ruta principal generalmente permanece en línea, pero las funciones de gestión pueden estar degradadas.", + "suggestion1": "Inténtalo de nuevo en unos minutos.", + "suggestion2": "Verifica los indicadores de salud actuales y el estado del proveedor antes de reintentar.", + "systemStatus": "Ver Estado del Sistema", + "healthDashboard": "Abrir el Panel de Salud" + }, + "status": { + "title": "Estado del Sistema", + "description": "Instantánea operativa en vivo para los servicios centrales de OmniRoute.", + "loadingHealth": "Cargando métricas de salud...", + "failedToLoad": "Error al cargar la salud del sistema.", + "unableToReachHealth": "No se puede alcanzar el endpoint de salud. Verifique la conectividad y vuelva a intentar.", + "healthCheckFailed": "La Verificación de Salud Falló", + "openConnectivityHelp": "Ayuda de Conectividad Abierta", + "maintenanceInfo": "Información de Mantenimiento", + "service": "Servicio", + "unknown": "desconocido", + "notAvailable": "n/a", + "providersTracked": "Proveedores Rastreado", + "circuitBreakerState": "Estado del Interruptor de Circuito del Proveedor", + "lastUpdate": "Última actualización: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Solicitud Incorrecta", + "description": "La carga útil de la solicitud es inválida o incompleta.", + "suggestion1": "Revise los campos obligatorios y el formato de carga antes de reintentar.", + "suggestion2": "Si estás utilizando la API, valida el esquema JSON localmente.", + "suggestion3": "Si esto sigue ocurriendo, abre la solicitud en Translator Playground para inspeccionar la carga.", + "primaryAction": "Abrir Documentación", + "secondaryAction": "Abrir Traductor" + }, + "401": { + "title": "No autorizado", + "description": "Se requiere autenticación para acceder a este recurso.", + "suggestion1": "Inicia sesión de nuevo y vuelve a intentar la operación.", + "suggestion2": "Para las llamadas a la API, confirma que el token Bearer esté presente y sea válido.", + "suggestion3": "Si el token fue rotado recientemente, actualiza tus credenciales de cliente.", + "primaryAction": "Ir a Iniciar Sesión", + "secondaryAction": "Gestionar Claves API" + }, + "403": { + "title": "Prohibido", + "description": "Su solicitud fue entendida, pero el acceso está denegado por políticas.", + "suggestion1": "Verifica las reglas de la lista de permitidos/bloqueados de IP en la configuración.", + "suggestion2": "Verifica las políticas de modelo y presupuesto asignadas a tu clave API.", + "suggestion3": "Pide a un administrador que otorgue el alcance de permisos requerido.", + "primaryAction": "Ayuda de Acceso Abierto", + "secondaryAction": "Abrir Configuración de Seguridad" + }, + "408": { + "title": "Tiempo de Espera Agotado", + "description": "El servidor no recibió una solicitud completa a tiempo.", + "suggestion1": "Vuelve a intentar la solicitud con un payload más pequeño.", + "suggestion2": "Verifica la estabilidad de tu red y la latencia de VPN/proxy.", + "suggestion3": "Para operaciones largas, habilite la transmisión o divida la solicitud.", + "primaryAction": "Abrir Guía de Endpoint", + "secondaryAction": "Verificar Estado de la Red" + }, + "429": { + "title": "Demasiadas Solicitudes", + "description": "Se superaron los límites de tasa para este cliente, clave o proveedor.", + "suggestion1": "Espera el tiempo de espera y vuelve a intentar después del intervalo sugerido.", + "suggestion2": "Cambia a un combo con proveedores de respaldo.", + "suggestion3": "Ajusta los perfiles de resiliencia/límite de tasa del proveedor en la configuración.", + "primaryAction": "Abrir Configuración de Resiliencia", + "secondaryAction": "Abrir Combos" + }, + "500": { + "title": "Error Interno del Servidor", + "description": "Ocurrió un error inesperado del lado del servidor al procesar su solicitud.", + "suggestion1": "Intenta de nuevo en unos segundos.", + "suggestion2": "Verifica la telemetría de salud y los registros del servidor para los IDs de solicitud correlacionados.", + "suggestion3": "Si persiste, informe del problema con la marca de tiempo y el contexto de la solicitud.", + "primaryAction": "Abrir el Panel de Salud", + "secondaryAction": "Abrir Registros" + }, + "502": { + "title": "Puerta de enlace incorrecta", + "description": "El proveedor upstream o la integración del gateway devolvió una respuesta inválida.", + "suggestion1": "Reintentar con otro proveedor o ruta de combinación activa.", + "suggestion2": "Verifique las credenciales del proveedor y la disponibilidad del modelo.", + "suggestion3": "Inspeccionar la salida del traductor si está involucrada la conversión de formato.", + "primaryAction": "Abrir Proveedores", + "secondaryAction": "Abrir Traductor" + }, + "503": { + "title": "Servicio No Disponible", + "description": "El servicio no está disponible temporalmente debido a mantenimiento o dependencias degradadas.", + "suggestion1": "Espera un momento y vuelve a intentarlo.", + "suggestion2": "Verifique los avisos de mantenimiento y el estado del sistema.", + "suggestion3": "Utiliza proveedores de respaldo si tu flujo de trabajo es sensible a la latencia.", + "primaryAction": "Detalles de Mantenimiento", + "secondaryAction": "Estado del Sistema" + } + } + }, + "kiroAuthModal": { + "title": "Conectar {providerLabel}", + "chooseMethod": "Elige tu método de autenticación:", + "builderId": "ID de Constructor de AWS", + "builderDescription": "Recomendado para la mayoría de los usuarios. Inicia sesión con la cuenta de AWS vinculada a {providerLabel}.", + "organization": "Tu Organización (AWS IAM Identity Center)", + "organizationDescription": "Utiliza la URL de inicio SSO de tu empresa (ejemplo: {url}).", + "googleAccount": "Cuenta de Google", + "googleDescription": "Inicia sesión con tu cuenta de Google.", + "githubAccount": "Cuenta de GitHub", + "githubDescription": "Inicia sesión con tu cuenta de GitHub.", + "importToken": "Importar Token", + "importDescription": "Pega un token de actualización exportado de {providerLabel}.", + "apiKey": "Clave de API", + "apiKeyDescription": "Pegue una clave API de {providerLabel} / CodeWhisperer de larga duración. Se almacena como una credencial bearer sin token de actualización; el descubrimiento de perfil es un esfuerzo de buena fe.", + "idcStartUrl": "URL de inicio de IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "La URL del Centro de Identidad IAM de AWS de su organización", + "awsRegion": "Región de AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Región de AWS para tu Centro de Identidad (predeterminado: us-east-1)", + "continue": "Continuar", + "back": "Atrás", + "autoDetecting": "Detectando token automáticamente...", + "readingCredentials": "Leyendo las credenciales de {providerLabel} desde la caché de AWS SSO", + "tokenNotDetected": "El token {providerLabel} no fue detectado automáticamente. Por favor, pega tu token de actualización manualmente.", + "refreshToken": "Actualizar Token", + "tokenPlaceholder": "El token se completará automáticamente...", + "importing": "Importando...", + "apiKeyPlaceholder": "Pega tu clave API de {providerLabel}...", + "apiKeyStoredDescription": "Almacenado encriptado como un credencial portador de larga duración. No hay flujo de actualización.", + "apiKeyRegionDescription": "Región de AWS para la clave (predeterminado: us-east-1)", + "validating": "Validando...", + "validateAndSaveApiKey": "Validar y Guardar la Clave API", + "errorAutoDetect": "No se pudo detectar automáticamente el token", + "errorAutoDetectFailed": "Error al detectar automáticamente el token", + "errorRefreshTokenRequired": "Por favor, introduce un token de actualización", + "errorImportFailed": "Importación fallida", + "errorApiKeyRequired": "Por favor, introduce una clave API de Kiro", + "errorApiKeyImportFailed": "La importación de la clave API falló", + "errorIdcStartUrlRequired": "Por favor, introduce tu URL de inicio de IDC" + }, + "kiroSocialOAuthModal": { + "title": "Conectar {providerLabel} a través de {providerName}", + "errorStartAuthorization": "Error al iniciar la autorización", + "errorAuthorizationExpired": "La autorización ha expirado. Inicia el flujo de inicio de sesión nuevamente.", + "errorAuthorizationFailed": "Autorización fallida", + "initializing": "Inicializando...", + "settingUp": "Configurando la autenticación de {providerName}", + "openIncognito": "Abre este enlace en una ventana de incógnito", + "incognitoDescription": "Utiliza una ventana de incógnito/privada para evitar conflictos de sesión con cuentas existentes.", + "copyLink": "Copiar enlace", + "verificationCode": "Código de verificación", + "waiting": "Esperando autorización...", + "cancel": "Cancelar", + "successTitle": "¡Conectado con éxito!", + "successMessage": "Tu cuenta de {providerLabel} a través de {providerName} ha sido conectada.", + "done": "Hecho", + "errorTitle": "Conexión Fallida", + "close": "Cerrar" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorización fallida", + "errorPopupBlocked": "Popup bloqueado — permite ventanas emergentes para este sitio, o pega el token manualmente a continuación.", + "errorPopupClosed": "La ventana de autorización se cerró antes de completar.", + "errorAccessTokenRequired": "Se requiere un token de acceso.", + "errorImportFailed": "Importación fallida", + "title": "Conectar Trae SOLO", + "authorizeDescription": "Autoriza a través de trae.ai en una ventana emergente. La ventana emergente se cerrará automáticamente una vez que se haya importado el token.", + "authorizeImportant": "Importante: debes iniciar sesión en trae.ai en este navegador primero. La página de autorización solo confirma una sesión existente; no puede iniciar sesión. Si ves \"Error de inicio de sesión\", haz clic en \"Abrir solo.trae.ai\", inicia sesión y luego regresa aquí.", + "waitingForAuthorization": "Esperando a trae.ai…", + "authorizeWithBrowser": "Autorizar con el Navegador", + "openSoloTrae": "Abre solo.trae.ai", + "orPasteManually": "o pega un token manualmente", + "manualInstructions": "Inicia sesión en solo.trae.ai, abre DevTools → Red, envía cualquier mensaje de chat y copia el JWT del encabezado de solicitud Authorization: Cloud-IDE-JWT {tokenPlaceholder}. La duración del JWT es de aproximadamente 14 días. Los campos de identidad opcionales provienen de common_params en el mismo cuerpo de la solicitud.", + "accessTokenLabel": "Token de Acceso (Cloud-IDE-JWT)", + "webId": "ID de Web", + "optional": "opcional", + "bizUserId": "ID de Usuario de Biz", + "userUniqueId": "ID Único de Usuario", + "scope": "Ámbito", + "tenant": "Inquilino", + "region": "Región", + "importing": "Importando…", + "importToken": "Importar Token", + "cancel": "Cancelar" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuyendo...", + "complete": "Completo", + "defaultLabel": "Distribuir Proxies" + } + }, + "providerTest": { + "dialogLabel": "Prueba {provider}", + "deprecated": "obsoleto", + "risk": "riesgo", + "close": "Cerrar", + "model": "Modelo", + "key": "Clave", + "defaultKey": "predeterminado", + "clearConversation": "Borrar conversación", + "clear": "Borrar", + "tabs": { + "test": "Prueba", + "logs": "Registros" + }, + "loadingLogs": "Cargando registros…", + "failedToLoadLogs": "Error al cargar los registros", + "noLogsYet": "No hay registros aún", + "noLogsDescription": "Envía un mensaje de prueba desde la pestaña de Prueba — los registros para este proveedor aparecerán aquí.", + "openFullLogs": "Abrir página de registros completos", + "live": "En Vivo", + "tailingLast": "siguiendo los últimos {count}", + "refreshNow": "Actualizar ahora", + "refresh": "Actualizar", + "unknownRequester": "solicitante desconocido", + "fields": { + "timestamp": "Marca de tiempo", + "status": "Estado", + "duration": "Duración", + "model": "Modelo", + "requestedModel": "Modelo solicitado", + "provider": "Proveedor", + "requester": "Solicitante", + "tokens": "Tokens" + } + }, + "proxyLog": { + "detailAriaLabel": "Detalles del registro del proxy", + "event": "Evento Proxy", + "close": "Cerrar modal de detalles del proxy", + "time": "Tiempo", + "latency": "Latencia", + "clientIp": "IP del Cliente", + "proxy": "Proxy", + "direct": "Directo", + "type": "Tipo", + "level": "Nivel", + "provider": "Proveedor", + "tlsFingerprint": "Huella Digital TLS", + "directNative": "Directo", + "targetUrl": "URL de destino", + "error": "Error", + "configuration": "Configuración del Proxy" + }, + "requestTimeline": { + "title": "Cronograma de Solicitudes", + "modes": { + "follow": "Seguir", + "followDescription": "El eje se desplaza a la izquierda, la línea NOW se mantiene en el 75%", + "now": "Ahora", + "nowDescription": "Saltar al tiempo actual, la línea AHORA se restablece al centro", + "pan": "Pan", + "panDescription": "Arrastra para explorar, el fondo está congelado" + }, + "reset": "Restablecer", + "started": "Iniciado", + "ended": "Terminado", + "duration": "Duración", + "status": "Estado", + "provider": "Proveedor", + "tokens": "Tokens", + "active": "Activo", + "other": "Otro", + "tenMinutes": "10min", + "hour": "hora", + "day": "día", + "unknownModel": "desconocido", + "pending": "pendiente" + }, + "metadata": { + "compressionTitle": "Compresión", + "compressionDescription": "Configura los ajustes de compresión de contexto para reducir el uso de tokens y los costos.", + "relayTitle": "OmniRoute — Proxies de Relay", + "relayDescription": "Puntos finales de proxy de retransmisión sin servidor para tu infraestructura de IA", + "trafficInspectorTitle": "Inspector de Tráfico — OmniRoute", + "trafficInspectorDescription": "Monitorear llamadas LLM + depurar el tráfico HTTPS de cualquier aplicación" + }, + "conductor": { + "title": "Conductor — Flota de agentes CLI", + "subtitle": "OmniConductor hub: ejecutores, cola de tareas y consejos, en vivo", + "runners": "Corredores", + "tasks": "Tareas", + "colName": "Nombre", + "colClis": "CLIs", + "colStatus": "Estado", + "colTask": "Tarea", + "colMode": "Modo", + "colRunner": "Ejecutor", + "colSummary": "Resumen", + "online": "en línea", + "offline": "sin conexión", + "draining": "drenando", + "hubOffline": "Conductor hub fuera de línea o no configurado (CONDUCTOR_HUB_URL) — mostrando nada en lugar de datos obsoletos.", + "noRunners": "No hay corredores registrados", + "noTasks": "No hay tareas aún", + "detailTitle": "Detalle de la tarea", + "prompt": "Indicación", + "branch": "Rama", + "fetchHint": "Obtén el resultado con: git fetch origin {branch}", + "council": "Consejo", + "candidates": "Candidatos", + "cancel": "Cancelar tarea", + "cancelConfirmTitle": "¿Cancelar esta tarea?", + "cancelConfirmMessage": "El hub abortará la ejecución en el runner. Esto no se puede deshacer.", + "cancelFailed": "El hub rechazó la cancelación", + "close": "Cerrar", + "error": "Error", + "faroTitle": "Faro — portavoz de la flota", + "faroSubtitle": "Chat y voz, anclados en eventos reales de flota. Los comandos destructivos siempre piden confirmación.", + "faroEmpty": "Pregunta sobre la flota — por ejemplo, \"¿cómo está la flota?\"", + "faroPending": "Faro está pidiendo confirmación", + "faroPlaceholder": "habla con Faro…", + "faroSend": "enviar", + "faroOffline": "Faro (portavoz) está desconectado", + "yes": "Sí", + "no": "No", + "pushToTalk": "Mantén para hablar", + "speakAnswers": "hablar respuestas", + "voiceModels": "Modelos de voz (proveedor/modelo de este OmniRoute)", + "voiceIdle": "hablar", + "voiceListening": "escuchando…", + "voiceThinking": "pensando…", + "voiceSpeaking": "hablando…", + "sttFailed": "La transcripción falló (verifica el modelo/proveedor de STT)", + "ttsFailed": "La síntesis de voz falló (verifica el modelo/proveedor TTS)", + "micDenied": "Micrófono no disponible o permiso denegado" + }, + "cliproxyProviderExposure": { + "title": "Exposición del Proveedor", + "description": "Exponga los modelos de CLIProxyAPI como un objetivo de enrutamiento bajo el prefijo cliproxyapi/.", + "label": "Exponer como cliproxyapi/...", + "hint": "Cuando está habilitado, los modelos descubiertos aparecen en las selecciones de proveedores a través de OmniRoute.", + "updateFailed": "Error al actualizar (HTTP {status})", + "networkError": "Error de red: no se pudo actualizar la configuración de exposición del proveedor" + } } - diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index 923390e1b8..3773db894d 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -172,6 +172,18 @@ "unselectAll": "لغو انتخاب همه", "visibleModels": "قابل مشاهده", "selectAllConfirm": "افزودن {count} مدل به این ترکیب؟", + "testSelectedProviders": "تأمین‌کنندگان تست", + "testingSelectedProviders": "در حال آزمایش {done}/{total}...", + "noProvidersSelectedToTest": "ابتدا حداقل یک ارائه‌دهنده را در زیر بررسی کنید", + "noModelsToTestForProviders": "مدلی برای آزمایش برای ارائه‌دهندگان انتخاب‌شده وجود ندارد", + "testSelectedProvidersResults": "{ok} از {total} مدل‌ها در حال کار است", + "selectWorkingModels": "اضافه کردن کار می‌کند", + "unselectWorkingModels": "غیرفعال کردن انتخاب", + "noWorkingModelsToSelect": "مدل‌های کاری برای اضافه کردن باقی نمانده است", + "providerTestHint": "نکته: یک ارائه‌دهنده را بررسی کنید → آزمایش → اضافه کردن کار. دوباره کلیک کنید تا انتخاب را لغو کنید.", + "selectAllProviders": "تمام ارائه‌دهندگان را بررسی کنید", + "clearProviderSelection": "غیرفعال کردن ارائه‌دهندگان", + "providersSelectedCount": "{count} ارائه‌دهنده بررسی شده‌اند", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "اندازه", + "toggleNoAuthProvider": "تغییر وضعیت ارائه‌دهنده بدون احراز هویت", + "loadingModels": "در حال بارگذاری مدل‌ها…", + "selectAModel": "مدلی را انتخاب کنید", + "degraded": "کاهش یافته", + "zeroConfigBannerTitle": "در حال اجرا در حالت بدون پیکربندی", + "zeroConfigBannerBody": "OmniRoute کلیدهای رمزنگاری امن را در اولین بار راه‌اندازی به‌طور خودکار تولید کرد. این کلیدها در {dataDir} ذخیره می‌شوند. نیازی به اقدام نیست — داده‌های شما رمزنگاری شده و ایمن هستند. برای استفاده از کلیدهای سفارشی، JWT_SECRET و STORAGE_ENCRYPTION_KEY را به آن فایل اضافه کنید.", + "batchRelativeTimeIn": "در {value}", + "batchRelativeTimeAgo": "{value} پیش", + "batchDetailsTitle": "جزئیات دسته", + "batchProgress": "پیشرفت", + "batchCompletedCount": "{count} تکمیل شده", + "batchFailedCount": "{count} ناموفق بود", + "batchPendingCount": "{count} در انتظار", + "batchTimeline": "خط زمان", + "batchTimelineInProgress": "در حال انجام", + "batchTimelineFinalizing": "نهایی‌سازی", + "batchTimelineCompleted": "تکمیل شد", + "batchTimelineFailed": "ناموفق", + "batchTimelineExpires": "منقضی می‌شود", + "batchTimelineExpired": "منقضی شده", + "batchTimelineCancelling": "در حال لغو", + "batchTimelineCancelled": "لغو شد", + "batchTokenUsage": "استفاده از توکن", + "batchMetadata": "متاداده", + "batchFileContents": "محتوای فایل", + "batchFileUsedByCount": "استفاده شده توسط {count, plural, one {# دسته} other {# دسته‌ها}}", + "batchFilePreview": "پیش‌نمایش", + "batchFilePreviewTruncated": "نمایش {shown} خط اول ({total} خط کل)", + "batchFileDownloadFull": "دانلود فایل کامل" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "جداکننده", "discovery": "شناسایی", "discoverySubtitle": "اسکن ارائه‌دهندگان برای دسترسی رایگان", + "conductor": "هدایتگر", + "conductorSubtitle": "ناوگان CLI-agent", "resilienceConnections": "تاب‌آوری اتصال", "resilienceConnectionsSubtitle": "خنک‌سازی، قطع‌کننده، وضعیت قفل", "settingsModalityBridge": "پل مدالیته", - "settingsModalityBridgeSubtitle": "تصویر/صوت → متن پشتیبان برای مدل‌های فقط متنی" + "settingsModalityBridgeSubtitle": "تصویر/صوت → متن پشتیبان برای مدل‌های فقط متنی", + "commandPalette": { + "title": "پالت فرمان", + "searchPlaceholder": "صفحات، تنظیمات، ابزارها...", + "clearSearch": "پاک کردن جستجو", + "noResults": "هیچ نتیجه‌ای یافت نشد", + "navigate": "ناوبری", + "open": "باز کردن", + "close": "بستن" + }, + "noResults": "هیچ نتیجه‌ای یافت نشد" }, "webhooks": { "title": "وب هوک ها", @@ -1477,7 +1531,11 @@ "settings.update_failed": "به‌روزرسانی تنظیمات ناموفق بود", "sync.token.created": "توکن همگام‌سازی ایجاد شد", "sync.token.revoked": "توکن همگام‌سازی باطل شد" - } + }, + "mcpMetricCalls24h": "تماس‌ها (۲۴ ساعت)", + "mcpMetricSuccessRate": "نرخ موفقیت", + "mcpMetricAvgDuration": "مدت زمان متوسط", + "mcpMetricTopTool": "ابزار برتر" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "بارگیری مجدد صفحه به صورت خودکار...", - "providerTopology": "توپولوژی ارائه دهنده" + "providerTopology": "توپولوژی ارائه دهنده", + "downloadDmg": "دانلود DMG (macOS)", + "downloadDmgDescription": "نسخه جدیدی از برنامه دسکتاپ OmniRoute در دسترس است. لطفاً DMG نصب‌کننده macOS را دانلود و نصب کنید تا به‌روزرسانی کنید (فعلی: v{version}).", + "downloadExe": "دانلود EXE (ویندوز)", + "downloadExeDescription": "نسخه جدیدی از برنامه دسکتاپ OmniRoute در دسترس است. لطفاً فایل نصبی EXE ویندوز را دانلود و نصب کنید تا به‌روزرسانی کنید (فعلی: v{version}).", + "downloadAppImage": "دانلود AppImage (لینوکس)", + "downloadAppImageDescription": "نسخه جدیدی از برنامه دسکتاپ OmniRoute در دسترس است. لطفاً بسته AppImage لینوکس را برای به‌روزرسانی دانلود کنید (فعلی: v{version}).", + "downloadUpdate": "دانلود به‌روزرسانی", + "downloadUpdateDescription": "نسخه جدیدی از برنامه دسکتاپ OmniRoute در دسترس است. لطفاً فرمت مربوط به سیستم خود را برای به‌روزرسانی دانلود کنید (فعلی: v{version}).", + "updateQueued": "به‌روزرسانی به v{version} در صف قرار گرفت.", + "updateDockerRebuilding": "تصویر Docker در حال بازسازی در پس‌زمینه است.", + "updateWaitingRestart": "در حال انتظار برای راه‌اندازی مجدد OmniRoute با نسخه جدید.", + "updateInstalling": "در حال نصب v{version}.", + "updateRunning": "OmniRoute اکنون در حال اجرای v{version} است.", + "updateCompleted": "OmniRoute به نسخه {version} به‌روزرسانی شد.", + "updateDockerStillRebuilding": "تصویر Docker هنوز در حال بازسازی برای v{version} است.", + "updateInstallingBackground": "در حال نصب v{version} در پس‌زمینه.", + "updateWaitingVersion": "در حال انتظار برای بازگشت OmniRoute در v{version}.", + "updateDockerStillInProgress": "فرآیند بازسازی Docker هنوز در حال انجام است.", + "updateRestarting": "در حال راه‌اندازی مجدد سرویس. در حال انتظار برای آنلاین شدن OmniRoute...", + "updateTimeout": "به‌روزرسانی آغاز شد، اما v{version} قبل از زمان‌سنج در دسترس قرار نگرفت. صفحه را تازه‌سازی کنید یا لاگ‌های سرور را بررسی کنید.", + "updateTimedOut": "به‌روزرسانی به v{version} زمان‌بر شد.", + "updateStartFailed": "شروع به‌روزرسانی ناموفق بود.", + "noResponseStream": "هیچ جریانی از پاسخ دریافت نشد.", + "updateComplete": "به‌روزرسانی کامل شد!", + "updateFailed": "به‌روزرسانی ناموفق بود.", + "updateNetworkError": "خطای شبکه — اتصال در حین به‌روزرسانی قطع شد.", + "stepInstallPackage": "نصب بسته", + "stepRebuildNativeModules": "بازسازی ماژول‌های بومی", + "stepRestartService": "راه‌اندازی مجدد سرویس", + "stepComplete": "کامل شد", + "stepError": "خطا", + "updateCompleteTitle": "به‌روزرسانی کامل شد!", + "updateFailedTitle": "به‌روزرسانی ناموفق بود", + "updatingTitle": "در حال بروزرسانی OmniRoute...", + "reloadNotice": "صفحه به طور خودکار در چند ثانیه بارگذاری مجدد خواهد شد.", + "retryNotice": "لطفاً دوباره تلاش کنید یا به‌صورت دستی از طریق CLI به‌روزرسانی کنید.", + "restartNotice": "این صفحه را ببندید. سیستم به طور خودکار راه‌اندازی مجدد خواهد شد.", + "reloadNow": "اکنون بارگذاری مجدد کنید", + "closeUpdate": "بستن", + "retryUpdate": "تلاش مجدد", + "updateAvailableTitle": "به‌روزرسانی موجود: v{version}{desktop}", + "desktopAppLabel": "(برنامه دسکتاپ)", + "checkingForUpdates": "در حال بررسی به‌روزرسانی‌ها...", + "versionAvailableForDownload": "نسخه v{version} برای دانلود در دسترس است.", + "downloadingUpdate": "در حال دانلود به‌روزرسانی... {percent}% کامل شده.", + "updateDownloaded": "به‌روزرسانی با موفقیت دانلود شد! برای اعمال تغییرات روی Restart & Install کلیک کنید.", + "autoUpdateFailed": "به‌روزرسانی خودکار ناموفق بود: {reason}.", + "unknownUpdateError": "خطای ناشناخته", + "versionAvailableDesktop": "نسخه v{version} برای برنامه دسکتاپ در دسترس است.", + "manualUpdateRequired": "به‌روزرسانی دستی برای این نوع نصب لازم است.", + "restartAndInstall": "راه‌اندازی مجدد و نصب", + "checkForUpdate": "بررسی به‌روزرسانی", + "manualUpdate": "به‌روزرسانی دستی", + "directDownloadHint": "یا فرمت نصب‌کننده مربوطه را به‌طور مستقیم دانلود کنید:", + "releaseNotes": "یادداشت‌های انتشار", + "readMore": "بیشتر بخوانید", + "noAuthLabel": "بدون احراز هویت" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "استنتاج‌شده از لاگ‌های تماس ذخیره‌شده پیرامون این درخواست", "routeRecommendations": "توصیه‌ها", "routeLimitations": "محدودیت‌ها", - "routeNoKnownLimitations": "هیچ محدودیت شناخته‌شده‌ای برای این توضیح وجود ندارد." + "routeNoKnownLimitations": "هیچ محدودیت شناخته‌شده‌ای برای این توضیح وجود ندارد.", + "searchAnalyticsLoading": "در حال بارگذاری تجزیه و تحلیل جستجو…", + "searchAnalyticsNoData": "هنوز داده‌های جستجو در دسترس نیست.", + "searchAnalyticsNoDataDescription": "درخواست‌های جستجو پس از اولین جستجو از طریق /v1/search در اینجا ظاهر خواهند شد.", + "searchAnalyticsToday": "{count} امروز", + "searchAnalyticsCachedRequests": "{count} درخواست‌های کش‌شده", + "searchAnalyticsApiCosts": "هزینه‌های API جستجو", + "searchAnalyticsErrors": "{count} خطاها", + "searchAnalyticsNoErrors": "هیچ خطایی وجود ندارد", + "searchAnalyticsProviderBreakdown": "تحلیل ارائه‌دهنده", + "searchAnalyticsQueries": "پرسش‌ها", + "searchAnalyticsEmptyDescription": "از POST /v1/search برای شروع مسیریابی جستجوهای وب استفاده کنید.", + "searchAnalyticsFreeTier": "لایه رایگان موجود است: Serper (2,500/mo)، Brave (2,000/mo)، Exa (1,000/mo)، Tavily (1,000/mo) — مجموع 6,500+ جستجوی رایگان در ماه با انتقال خودکار.", + "autoRoutingNoDataAvailable": "هیچ تحلیلی برای مسیریابی خودکار موجود نیست. برای مشاهده متریک‌ها از پیشوند auto/ استفاده کنید.", + "defaultVariantLabel": "پیش‌فرض", + "freeTierAvailable": "لایه رایگان در دسترس است" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} ارائه‌دهنده", "imageToTextBridgeAvailable": "پل ارتباطی مدالیته اکنون می‌تواند تصاویر را برای مدل‌های متنی توصیف کند. زمین بازی درون‌خطی زمانی در دسترس خواهد بود که /api/v1/images/understanding پیاده‌سازی شود.", "imageToTextBridgeCta": "تنظیم پل تصویر→متن در تنظیمات پل مدالیته", - "sttBridgeCta": "تنظیم پل گفتار→متن در تنظیمات پل مدالیته" + "sttBridgeCta": "تنظیم پل گفتار→متن در تنظیمات پل مدالیته", + "existingConnection": "اتصال موجود", + "openrouterSttDescription": "مدل‌های تبدیل گفتار به متن OpenRouter از اتصال پیکربندی‌شده OpenRouter شما استفاده می‌کنند. نیازی به اعتبارنامه جداگانه نیست." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "چسباندن در:", "copilotReloadInstruction": "سپس VS Code را مجدداً بارگیری کرده و کلید API را در اعلان ورودی تنظیم کنید.", "wireApiChatCompletions": "تکمیل چت (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "عملیات ناموفق بود", + "cliproxyapiActionSucceeded": "عملیات با موفقیت انجام شد", + "cliproxyapiCheckUpdates": "بررسی به‌روزرسانی‌ها", + "cliproxyapiDescription": "پشتیبان پروکسی بالادستی (OAuth مبتنی بر Go)", + "cliproxyapiHealth": "سلامت", + "cliproxyapiHealthy": "سالم", + "cliproxyapiInstall": "نصب کنید", + "cliproxyapiNotInstalledValue": "نصب نشده", + "cliproxyapiPort": "پورت", + "cliproxyapiRequestFailed": "درخواست ناموفق بود", + "cliproxyapiRestart": "راه‌اندازی مجدد", + "cliproxyapiStart": "شروع", + "cliproxyapiStatusError": "خطا", + "cliproxyapiStatusInstalled": "نصب شده", + "cliproxyapiStatusNotInstalled": "نصب نشده", + "cliproxyapiStatusRunning": "در حال اجرا", + "cliproxyapiStatusStopped": "متوقف شد", + "cliproxyapiStop": "متوقف کن", + "cliproxyapiUnhealthy": "غیر سالم", + "cliproxyapiUnknown": "ناشناخته", + "cliproxyapiUpdate": "به‌روزرسانی", + "cliproxyapiUpdateAvailable": "به‌روزرسانی موجود است: v{current} → v{latest}", + "cliproxyapiVersion": "نسخه" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "فقط در صورت تمام شدن سهم پیش بروید", + "fallbackOnlyOnQuotaExhaustionShort": "فقط بازگشت به سهمیه", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "بسته حالت و وزن‌دهی در اینجا می‌مانند؛ وضعیت زمان اجرای مدارشکن در صفحه سلامت باقی می‌ماند.", "emailVisibilityHint": "ایمیل‌های حساب در اینجا از سوئیچ حریم خصوصی سراسری پیروی می‌کنند.", "emailVisibilityTooltip": "از نماد چشم برای نمایش یا پنهان کردن ایمیل‌های حساب به‌صورت سراسری در صفحات ترکیب‌ها، ارائه‌دهندگان و سهمیه‌ها استفاده کنید.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "گام به گام (تأمین‌کننده → مدل)", + "builderModeGlobal": "جستجوی مدل جهانی (ترکیب سفارشی)", + "builderGlobalSearchPlaceholder": "مدل‌ها را در تمام ارائه‌دهندگان جستجو کنید (به عنوان مثال opus، sonnet، deepseek، kimi، qwen)...", + "builderGlobalAddAll": "همه را اضافه کن", + "builderGlobalShortcuts": "میانبرها:", + "builderGlobalNoResults": "مدلی برای \"{query}\" پیدا نشد.", + "builderGlobalProviderLabel": "ارائه‌دهنده:", + "builderGlobalAccountCount": "{count, plural, one {# حساب} other {# حساب‌ها}}", + "builderGlobalAdded": "اضافه شد", + "builderGlobalAdd": "اضافه کردن", "manualModel": "مدل دستی", "manualModelInvalid": "یک مدل را به صورت provider/model وارد کنید.", "manualModelUnknownProvider": "پیشوند ارائه‌دهنده ناشناخته است.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "دسترس‌پذیری جلسه", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "چسبندگی خاموش", "kimiPresetTitle": "پیش‌تنظیم Kimi Coding", "kimiPresetDescription": "مدل Kimi K3 به عنوان مدل اصلی (Moonshot API)، با انتقال خودکار به اتصالات Kimi Code شما (kimi-coding، kimi-web) در صورت پیکربندی.", - "kimiPresetCta": "افزودن پیش‌تنظیم" + "kimiPresetCta": "افزودن پیش‌تنظیم", + "intelligentComboCount": "{count, plural, one {# ترکیب هوشمند} other {# ترکیب‌های هوشمند}}", + "providersInScope": "{count, plural, one {# ارائه‌دهنده در دامنه} other {# ارائه‌دهنده‌ها در دامنه}}", + "savingModePack": "در حال ذخیره {pack}…", + "errorTitle": "بارگذاری ترکیب‌ها ناموفق بود", + "errorDescription": "در حال حاضر نمی‌توانیم داده‌های ترکیبی را بارگذاری کنیم. اتصال خود را بررسی کنید و دوباره تلاش کنید.", + "errorId": "شناسه خطا: {id}", + "errorRetry": "دوباره تلاش کنید", + "comboLabel": "ترکیب" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "آدرس WebDAV", "obsidianUsername": "نام کاربری", "obsidianPassword": "رمز عبور", - "obsidianTailscaleHint": "اگر از موبایل متصل می‌شوید، به جای localhost از IP مربوط به Tailscale خود استفاده کنید. هر دو دستگاه باید روی یک شبکه Tailscale باشند." + "obsidianTailscaleHint": "اگر از موبایل متصل می‌شوید، به جای localhost از IP مربوط به Tailscale خود استفاده کنید. هر دو دستگاه باید روی یک شبکه Tailscale باشند.", + "cloudSyncNotConfigured": "همگام‌سازی ابری در این نمونه پیکربندی نشده است.", + "notionConnect": "متصل شوید", + "notionConnectFailed": "متصل نشد", + "notionConnected": "متصل شد", + "notionConnectionFailed": "اتصال ناموفق بود", + "notionDescription": "جستجو، خواندن، پرسش و نوشتن در نوتیون از طریق مدل‌های هوش مصنوعی مسیریابی شده", + "notionDisconnect": "قطع اتصال", + "notionDisconnectFailed": "قطع اتصال ناموفق بود", + "notionEnterToken": "لطفاً یک توکن ادغام Notion وارد کنید", + "notionIntegrationHelp": "یک ادغام داخلی در", + "notionIntegrationToken": "توکن ادغام داخلی نوتیون", + "notionNotConnected": "متصل نیستید", + "notionTokenConfigured": "توکن پیکربندی شده است. ابزارهای Notion از طریق MCP در دسترس هستند." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "ارائه‌دهنده / مدل", "noRemoteProviders": "هیچ ارائه‌دهنده‌ای با کلید API پیکربندی‌شده وجود ندارد", "selectProviderModel": "انتخاب یک مدل", + "customBaseUrlLabel": "آدرس پایه سفارشی (اختیاری)", + "customModelIdLabel": "شناسه مدل سفارشی (اختیاری)", + "customEndpointHelp": "از نقطه پایانی /embeddings سازگار با OpenAI استفاده کنید. نقاط پایانی محلی مجاز هستند؛ هدف‌های متاداده ابری مسدود شده‌اند.", + "customEndpointSave": "اعمال نقطه پایانی سفارشی", + "customEndpointInvalid": "هر دو URL پایه HTTP(S) معتبر و شناسه مدل را وارد کنید، یا هر دو فیلد را خالی بگذارید.", + "customEndpointSaveFailed": "نقطه پایانی جاسازی سفارشی نمی‌تواند ذخیره شود.", "staticEnabledLabel": "فعال‌سازی Potion ایستا", "staticEnabledDesc": "دانلود و استفاده از مدل potion-base-8M به صورت محلی", "transformersEnabledLabel": "فعال‌سازی Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "در حال پاک‌سازی...", "cleanNow": "اکنون پاک‌سازی شود", "cleanupSuccess": "{count} نقطه حذف شد", - "cleanupFailed": "پاک‌سازی ناموفق بود" + "cleanupFailed": "پاک‌سازی ناموفق بود", + "hostLabel": "میزبان", + "collectionLabel": "مجموعه" }, "rerank": { "enableLabel": "فعال‌سازی Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "نمودار بازگشتی 3 لایه OmniRoute", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "تنظیم ارائه‌دهندگان رایگان", + "description": "به‌طور اختیاری ارائه‌دهنده‌های بدون ثبت‌نام انتخاب‌شده را فعال کنید. قبل از ادامه، اطلاعیه و سایت هر ارائه‌دهنده را بررسی کنید؛ در دسترس بودن و محدودیت‌های نرخ توسط اشخاص ثالث کنترل می‌شود.", + "loading": "در حال بارگذاری ارائه‌دهندگان رایگان...", + "loadFailed": "نتوانستیم ارائه‌دهندگان رایگان را بارگذاری کنیم.", + "alreadyConfigured": "تمام ارائه‌دهندگان رایگان واجد شرایط قبلاً پیکربندی شده‌اند.", + "reviewProviderSite": "بررسی سایت و شرایط ارائه‌دهنده", + "confirmation": "من این ارائه‌دهندگان شخص ثالث را بررسی کردم و می‌خواهم OmniRoute اتصالات انتخاب‌شده را ایجاد کند.", + "setupSelected": "تنظیم ارائه‌دهندگان انتخاب‌شده", + "settingUp": "در حال راه‌اندازی...", + "setupFailed": "نمی‌توان ارائه‌دهندگان انتخاب‌شده را راه‌اندازی کرد. هیچ چیز موجودی تغییر نکرد.", + "retryFailed": "تلاش مجدد برای تأمین‌کننده‌های ناموفق", + "orUseApiKey": "یا با یک کلید API متصل شوید", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "ایجاد شده", + "skipped": "قبلاً پیکربندی شده است", + "failed": "ناموفق" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "URL آیکون", "iconUrlHint": "اختیاری. URL تصویری که به عنوان آیکون این ارائه‌دهنده نمایش داده می‌شود.", + "iconUrlInvalid": "آدرس آیکون نامعتبر است. از آدرس http(s):// یا data:image/*;base64 استفاده کنید.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "جلسه در حال حاضر فعال است", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "درخواست احراز هویت", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "جای‌گذاری کلید API…", "zedSaving": "در حال ذخیره‌سازی…", "zedImportAction": "وارد کردن", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "فعال‌سازی تجدید خودکار جلسه Cursor", + "cursorAgentNudgeBody": "برای نصب cursor-agent جهت تجدید خودکار جلسه — بدون آن، اتصالات Cursor نیاز به اتصال دستی دوره‌ای تقریباً هر ۲۴ ساعت دارند.", + "cursorAgentNudgeDismiss": "رد کردن", "zedManualImportFailed": "وارد کردن دستی ناموفق بود", "zedManualImportSuccess": "توکن {provider} از Zed وارد شد", "grokImportTitle": "وارد کردن احراز هویت Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "سطح رایگان برای استنتاج بدون سرور (serverless inference) — بدون نیاز به کارت اعتباری", "gemini": "رایگان برای همیشه: ۱,۵۰۰ درخواست در روز برای Gemini 2.5 Flash — بدون نیاز به کارت اعتباری، کلید را در aistudio.google.com دریافت کنید", "gigachat": "اتصال GigaChat (Sber) با یک کلید API.", - "github-models": "یک GitHub PAT با محدوده (scope) 'models: read' در github.com/settings/tokens ایجاد کنید", "gitlab": "توکن دسترسی شخصی GitLab برای API عمومی Code Suggestions. در صورت عدم استفاده از gitlab.com، یک URL پایه خودمیزبانی‌شده (self-hosted) پیکربندی کنید.", "gitlawb-gmi": "کلید API خود را از داشبورد Gitlawb Opengateway دریافت کنید.", "gitlawb": "کلید API خود را از داشبورد Gitlawb Opengateway دریافت کنید.", @@ -6017,7 +6204,8 @@ "kimi-coding": "اتصال به Kimi Coding با جریان OAuth موجود.", "kiro": "طرح رایگان: ۵۰ اعتبار/ماه (~۲۵ هزار–۱۰۰ هزار توکن). ⚠️ شرایط خدمات Kiro استفاده از پروکسی/هارنس شخص ثالث را ممنوع می‌کند.", "codex": "اتصال OpenAI Codex با جریان OAuth موجود.", - "qwen": "اتصال Qwen Code با جریان OAuth موجود." + "qwen": "اتصال Qwen Code با جریان OAuth موجود.", + "github-models": "یک GitHub PAT با محدوده (scope) 'models: read' در github.com/settings/tokens ایجاد کنید" }, "passthroughModelsDescription": "{provider} شناسه های مدل بومی ارائه دهنده را می پذیرد. از /models وارد کنید یا شناسه های سفارشی را برای مسیریابی اضافه کنید.", "bedrockModelsDescription": "مدل‌های بستر آمازون بر اساس منطقه AWS تعیین می‌شوند. از /models وارد کنید یا شناسه‌های مدل Bedrock را که در منطقه انتخابی فعال شده است اضافه کنید.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "زمانی که تمام اتصالات پیکربندی‌شده تمام شده‌اند (سهمیه، اعتبار یا انقضا)، به‌طور موقت از سطح بدون کلید این ارائه‌دهنده استفاده کنید. برای رد کردن این ارائه‌دهنده به‌جای ارسال درخواست‌های ناشناس خاموش کنید — این کار زمانی توصیه می‌شود که سطح بدون کلید آن‌ها را رد کند (401).", "anonymousFallbackEnabled": "پشتیبانی ناشناس برای {provider} فعال شد", "anonymousFallbackDisabled": "پشتیبانی ناشناس برای {provider} غیرفعال شده است — اتصالات تمام شده این ارائه‌دهنده را نادیده خواهند گرفت", - "anonymousFallbackUpdateFailed": "به‌روزرسانی تنظیمات پشتیبان ناشناس ناموفق بود" + "anonymousFallbackUpdateFailed": "به‌روزرسانی تنظیمات پشتیبان ناشناس ناموفق بود", + "batchDeleteFailed": "حذف دسته‌ای ناموفق بود", + "batchDeleteNetworkError": "خطای شبکه در حین حذف دسته‌ای", + "batchUpdateFailed": "به‌روزرسانی دسته‌ای ناموفق بود", + "batchUpdateNetworkError": "خطای شبکه در حین به‌روزرسانی دسته‌ای", + "categoryAudio": "صوتی", + "categoryCloudAgent": "عامل ابری", + "categoryIde": "IDE", + "categoryLocal": "محلی", + "categorySearch": "جستجو", + "categoryWebCookie": "کوکی وب", + "claudeExtraUsageBlockingDisabled": "مسدود کردن استفاده اضافی کلود غیرفعال است (استفاده اضافی مجاز است)", + "claudeExtraUsageBlockingEnabled": "مسدودسازی استفاده اضافی کلاود فعال است (استفاده اضافی مسدود خواهد شد)", + "claudeRoutingPreferenceDisabled": "مدل‌های کلود بدون پیشوند دیگر کلود کد را ترجیح نمی‌دهند", + "claudeRoutingPreferenceEnabled": "مدل‌های کلود بدون پیشوند اکنون کلود کد را ترجیح می‌دهند", + "clearMediaFilter": "پاک کردن", + "cliproxyRoutingDisabled": "درخواست‌ها اکنون از OmniRoute بومی (مستقیم) استفاده می‌کنند", + "cliproxyRoutingEnabled": "درخواست‌ها اکنون از طریق CLIProxyAPI (شبیه‌سازی عمیق‌تر) هدایت می‌شوند", + "codexLimitPolicyUpdated": "سیاست محدودیت کدکس به‌روزرسانی شد", + "codexServiceModeUpdated": "حالت سرویس Codex به‌روزرسانی شد", + "codexServiceTierActive": "سطح خدمات Codex {tier} فعال است", + "codexTierFastLabel": "سریع", + "codexTierFlexLabel": "فلکس", + "commandCodeApplyFailed": "عدم موفقیت در اعمال کد فرمان auth", + "commandCodeApplyingApproval": "مرورگر تأیید شد، در حال اعمال…", + "commandCodeApplyingKey": "اعمال کلید تأیید شده توسط مرورگر…", + "commandCodeApprovalInstructions": "آدرس احراز هویت را باز کنید، دسترسی را تأیید کنید، سپس کلید/JSON/آدرس بازگشتی را در زیر بچسبانید…", + "commandCodeAuthExpired": "کد فرمان اعتبارسنجی منقضی شده است", + "commandCodeConnected": "کد فرمان متصل شد", + "commandCodeConnectionAdded": "کد فرمان اتصال اضافه شد", + "commandCodeLinkExpired": "لینک کد فرمان منقضی شده است", + "commandCodeOpeningStudio": "در حال باز کردن Command Code Studio…", + "commandCodePopupBlocked": "پنجره بازشو مسدود شده است. لطفاً پنجره‌های بازشو را مجاز کنید و دوباره تلاش کنید تا Command Code Connect را اجرا کنید.", + "commandCodeStartFailed": "شروع Command Code auth با شکست مواجه شد", + "connectionDeleted": "اتصال حذف شد", + "connectionFallback": "اتصال", + "coolingConnectionsDescription": "این اتصالات در آخرین درخواست خود یک ۴۲۹ (محدودیت نرخ) دریافت کردند. OmniRoute تا زمانی که تایمر منقضی شود، آنها را نادیده خواهد گرفت - نیازی به غیرفعال‌سازی دستی نیست.", + "coolingConnectionsTitle": "در حال حاضر خنک‌سازی ({count})", + "failedDeleteAlias": "حذف مستعار ناموفق بود", + "failedDeleteConnection": "حذف اتصال ناموفق بود", + "failedDistributeProxies": "توزیع پروکسی‌ها ناموفق بود.", + "failedSaveModelEndpointSettings": "ذخیره تنظیمات نقطه پایانی مدل ناموفق بود", + "failedUpdateClaudeExtraUsagePolicy": "به‌روزرسانی سیاست استفاده اضافی کلود ناموفق بود", + "failedUpdateClaudeRoutingPreference": "به‌روزرسانی ترجیح مسیریابی کلاود کد ناموفق بود", + "failedUpdateCliproxyRouting": "به‌روزرسانی مسیریابی CLIProxyAPI ناموفق بود", + "failedUpdateCodexLimitPolicy": "به‌روزرسانی سیاست محدودیت Codex ناموفق بود", + "failedUpdateCodexServiceMode": "به‌روزرسانی حالت سرویس Codex ناموفق بود", + "filterByMedia": "رسانه", + "freeBadge": "رایگان", + "kimiCodeApiKeyLabel": "کلید API کیمی کد", + "modelTestFailed": "آزمون مدل ناموفق بود", + "modelTestNetworkError": "خطای شبکه در حال تست مدل", + "networkError": "خطای شبکه", + "networkErrorDeletingAlias": "خطای شبکه در حذف نام مستعار", + "networkErrorSettingAlias": "خطای شبکه در تنظیم مستعار", + "noProvidersMatch": "هیچ ارائه‌دهنده‌ای با جستجوی شما مطابقت ندارد.", + "noSavedProxies": "هیچ پروکسی ذخیره‌شده‌ای پیدا نشد. ابتدا پروکسی‌ها را در تنظیمات → پروکسی اضافه کنید.", + "pageLoadErrorDescription": "در حال حاضر نمی‌توانیم داده‌های ارائه‌دهنده را بارگذاری کنیم. اتصال خود را بررسی کرده و دوباره تلاش کنید.", + "pageLoadErrorId": "شناسه خطا: {id}", + "pageLoadErrorRetry": "دوباره تلاش کنید", + "pageLoadErrorTitle": "بارگذاری ارائه‌دهندگان ناموفق بود", + "playgroundTitle": "زمین بازی", + "providerDetailConnectionFlexActive": "لایه خدمات Codex flex برای این اتصال فعال است", + "providerDetailConnectionPriorityActive": "سطح خدمات اولویت کدکس برای این اتصال فعال است", + "providerDetailGlobalFlexActive": "سطح خدمات Global Codex flex فعال است", + "providerDetailGlobalPriorityActive": "سطح خدمات اولویت کدکس جهانی فعال است", + "proxiesDistributed": "تخصیص پروکسی {assigned} توزیع شده در {tagLabel}{total} اتصال(ها).", + "rerankEndpoint": "رتبه‌بندی مجدد", + "savedModelEndpointSettings": "تنظیمات نقطه پایانی مدل ذخیره شده", + "searchByModelAria": "جستجو بر اساس مدل", + "selectSupportedEndpoint": "حداقل یک نقطه پایانی پشتیبانی شده را انتخاب کنید", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "لیست اشتراک بارگیری نشد", "toggleFailed": "تغییر سوئیچ انجام نشد", "refreshFailed": "بازخوانی نشد", - "deleteFailed": "حذف نشد" + "deleteFailed": "حذف نشد", + "add": "اضافه کردن", + "cancel": "لغو", + "configure": "پیکربندی", + "copyEndpoint": "کپی نقطه پایانی", + "coreEndpointHint": "راهنمای نقطه پایانی اصلی", + "coreNodesHint": "راهنمای گره‌های اصلی", + "create": "ایجاد کنید", + "deleteConfirm": "تأیید حذف", + "empty": "خالی", + "globalModeDescription": "توضیحات حالت جهانی", + "localCoreHint": "راهنمای هسته محلی", + "nodeSummary": "خلاصه نود", + "providerRequired": "فراهم‌کننده الزامی است", + "providerRouting": "مسیر یابی ارائه‌دهنده", + "refresh": "به‌روزرسانی", + "refreshInterval": "فاصله به‌روزرسانی", + "ruleModeDescription": "توضیحات حالت قانون" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "اجرای یک جایگزین خودکار تصویر به متن قبل از مسیریابی درخواست‌های تصویر به مدل‌های متنی.", "visionBridgeEnabledLabel": "فعال", "visionBridgeEnabledDesc": "تغییر وضعیت پل پیش‌از‌فراخوانی که بخش‌های تصویر را با متن استخراج‌شده جایگزین می‌کند.", + "visionBridgeRerouteTextOnlyLabel": "مدل‌های متنی فقط را تغییر مسیر دهید", + "visionBridgeRerouteTextOnlyDesc": "درخواست کامل را، از جمله تصاویر، به مدل پل ارسال کنید زمانی که مدل انتخاب شده ورودی تصویری ندارد.", "visionBridgeModel": "مدل پل", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "هر شناسه مدل OmniRoute که از بینایی پشتیبانی می‌کند، می‌تواند در اینجا استفاده شود.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "کلید API فاقد محدوده دسترسی manage است.", "BYPASS_PREFIX_NOT_ALLOWED": "یک یا چند پیشوند مسیرهای با قابلیت اسپاون را هدف قرار می‌دهند و نمی‌توان از آن‌ها عبور کرد.", "GENERIC": "به‌روزرسانی تنظیمات authz با شکست مواجه شد." - } + }, + "remove": "حذف کنید" }, "resilienceBaseCooldownLabel": "خنک کردن پایه", "scopeLabel": "دامنه", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "در حال آزمایش صدا…", "modalityBridgeAudioTestOk": "پل صوتی OK — {count} کلیپ(ها) توسط {model} رونویسی شد", "modalityBridgeAudioTestNoop": "پل صوتی فعال نشد (ممکن است هدف از صوت پشتیبانی کند، هیچ ارائه‌دهنده STT متصل نیست، یا پل غیرفعال است)", - "modalityBridgeAudioTestError": "آزمون صدا ناموفق بود: {message}" + "modalityBridgeAudioTestError": "آزمون صدا ناموفق بود: {message}", + "modelRoutingDescriptionPlaceholder": "مدل‌های Route Opus را به ترکیب frontier هدایت کنید", + "cliproxyapiFallbackCodes": "کدهای پشتیبان Cliproxyapi", + "cliproxyapiFallbackDescription": "توضیحات پشتیبان Cliproxyapi", + "cliproxyapiHealthLabel": "برچسب سلامت Cliproxyapi", + "cliproxyapiImportFailed": "واردات Cliproxyapi ناموفق بود", + "cliproxyapiImportResult": "نتیجه واردات Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL نامعتبر", + "cliproxyapiLifecycleNoticeAfter": "اطلاعیه چرخه حیات Cliproxyapi بعد از", + "cliproxyapiLifecycleNoticeBefore": "اعلان چرخه حیات Cliproxyapi قبل از", + "cliproxyapiLifecycleNoticeLink": "لینک اطلاعیه چرخه حیات Cliproxyapi", + "cliproxyapiPortLabel": "برچسب پورت Cliproxyapi", + "cliproxyapiStatusLabel": "برچسب وضعیت Cliproxyapi", + "cliproxyapiVersionLabel": "برچسب نسخه Cliproxyapi", + "collection": "مجموعه", + "errorPage": { + "description": "در حال حاضر نمی‌توانیم تنظیمات را بارگذاری کنیم. لطفاً چند ثانیه دیگر دوباره تلاش کنید.", + "errorId": "شناسه خطا: {id}", + "retry": "دوباره تلاش کنید", + "title": "بارگذاری تنظیمات ناموفق بود" + }, + "host": "میزبان", + "notInstalled": "نصب نشده", + "oneproxyActions": "عملیات وان‌پراکسی", + "oneproxyActive": "Oneproxy فعال است", + "oneproxyAnonymity": "ناشناس بودن Oneproxy", + "oneproxyCountry": "کشور Oneproxy", + "oneproxyDelete": "حذف Oneproxy", + "oneproxyEmpty": "Oneproxy خالی", + "oneproxyHost": "هاست وان‌پراکسی", + "oneproxyLatency": "تاخیر Oneproxy", + "oneproxyProtocol": "پروتکل Oneproxy", + "oneproxyQuality": "کیفیت Oneproxy", + "oneproxySyncFailed": "همگام‌سازی ناموفق: {error}", + "oneproxySyncSuccess": "پروکسی‌های همگام‌سازی شده {total} ({added} جدید، {updated} به‌روزرسانی شده)", + "proxyDocumentationSocks5DescAfter": "مستندات پروکسی Socks5 توضیحات بعد از", + "proxyFreePoolAddProxy": "اضافه کردن پروکسی به استخر بدون پروکسی", + "proxyFreePoolAdding": "اضافه کردن استخر پروکسی رایگان", + "proxyFreePoolSelectProxy": "انتخاب پروکسی از استخر بدون پروکسی", + "proxyStatusActive": "وضعیت پروکسی فعال", + "proxyStatusInactive": "وضعیت پروکسی غیرفعال", + "routingAddEntry": "افزودن ورودی", + "settingSaveFailed": "ذخیره تنظیمات ناموفق بود", + "settingSaved": "تنظیمات ذخیره شد", + "skillsmpApiKeyHintAfter": "محدودیت نرخ: {limit} درخواست در روز.", + "skillsmpApiKeyHintBefore": "کلید API خود را از دریافت کنید", + "syncFailed": "همگام‌سازی ناموفق بود", + "unhealthy": "غیر سالم", + "oneproxyDescription": "پروکسی‌های رایگان و تأییدشده را از پلتفرم جامعه 1proxy دریافت و چرخش دهید", + "oneproxySyncing": "همگام‌سازی...", + "oneproxySyncNow": "هم‌اکنون همگام‌سازی کن", + "oneproxyClearAll": "پاک کردن همه", + "oneproxyGoogle": "گوگل", + "oneproxyClearAllConfirm": "آیا می‌خواهید تمام پروکسی‌های 1proxy را پاک کنید؟", + "memorySkillsSkillsmpDescription": "به SkillsMP متصل شوید تا مهارت‌ها را از بازار کشف و نصب کنید.", + "memorySkillsActiveProviderDescription": "انتخاب کنید که صفحه مهارت‌ها از کدام ارائه‌دهنده برای جستجو و نصب استفاده کند.", + "memorySkillsSkillsmpProviderTitle": "بازار SkillsMP", + "memorySkillsSkillsmpProviderDescription": "بازار تأییدشده (از کلید API SkillsMP شما استفاده می‌کند).", + "memorySkillsSkillsshProviderTitle": "دایرکتوری skills.sh", + "memorySkillsSkillsshProviderDescription": "ارائه‌دهنده دایرکتوری عمومی (نیاز به کلید API نیست).", + "routingCcBridgeCatalogName": "پل CC سازگار با Anthropic", + "routingClaudeProviderName": "کلود (OAuth)", + "routingClaudeProviderDescription": "ارائه‌دهنده‌ی بومی کلاود با توکن‌های صادرشده توسط OAuth.", + "routingCcBridgeName": "پل کلاود-کد", + "routingCcBridgeDescription": "انتقال نقاط پایانی با استفاده از کلیدهای API (سازگار با anthropic-cc-*).", + "routingCustomProviderDescription": "ارائه‌دهنده سفارشی.", + "routingUnknownOpKind": "نوع عمل ناشناخته: {kind}", + "routingInvalidJson": "JSON نامعتبر: {error}", + "routingConfigMustBeObject": "پیکربندی باید یک شیء JSON باشد", + "routingEnabledMustBeBoolean": "`enabled` باید true یا false باشد", + "routingPipelineMustBeArray": "`pipeline` باید یک آرایه از ops باشد", + "routingPipelineTooLong": "پایپ‌لاین نمی‌تواند بیشتر از 50 عملیات باشد", + "routingOpMissingKind": "عملیات #{index}: `kind` گم شده یا نامعتبر است", + "routingOpUnknownKind": "عملیات #{index}: نوع ناشناخته \"{kind}\"", + "routingJsonEditorHide": "ویرایشگر JSON را پنهان کن", + "routingJsonEditorImportExport": "واردات / صادرات JSON", + "routingJsonEditorLabel": "JSON (ویرایش و اعمال، یا چسباندن برای وارد کردن)", + "routingApplyJson": "اعمال JSON", + "routingTransformsFootnote": "تمام عملیات تبدیل در اجرای مجدد ایندپوتنت هستند. تغییرات بلافاصله در درخواست بعدی اعمال می‌شوند.", + "cliproxyapiUnknown": "ناشناخته", + "cliproxyapiVersion": "نسخه", + "cliproxyapiHealth": "سلامت", + "cliproxyapiPort": "پورت", + "qdrantHost": "میزبان", + "qdrantCollection": "مجموعه" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "کامل", "ultra": "فوق‌العاده" } + }, + "modeOptions": { + "default": "پیش‌فرض", + "off": "خاموش", + "lite": "لایت", + "standard": "استاندارد", + "aggressive": "تهاجمی", + "ultra": "اولترا", + "responsesToolOutput": "خروجی ابزار پاسخ‌ها" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "در انتهای پشته اجرا می‌شود (پس از اینکه RTK/Caveman متن را پاکسازی کرد، OmniGlyph باقی‌مانده را به تصویر تبدیل می‌کند) و همچنین به‌صورت مستقل از طریق حالت omniglyph اجرا می‌شود. این یک پیش‌نمایش است و تا زمان تکمیل اعتبارسنجی سرتاسری به‌طور پیش‌فرض خاموش می‌ماند.", "saved": "ذخیره شد.", "saveFailed": "ذخیره نشد.", - "enableAria": "فعال‌سازی موتور OmniGlyph" + "enableAria": "فعال‌سازی موتور OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "سرویس‌های تعبیه‌شده", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "همه توکن‌ها سالم هستند", + "needsAttention": "برخی از توکن‌ها نیاز به توجه دارند", + "refreshFailures": "خطاهای تازه‌سازی توکن شناسایی شدند", + "unknown": "وضعیت سلامتی ناشناخته است" + }, + "systemMonitor": { + "metricsAriaLabel": "معیارهای سیستم", + "memory": "حافظه", + "memoryShort": "حافظه", + "uptime": "زمان فعالیت", + "ariaLabel": "نظارت بر سیستم", + "title": "نظارت بر سیستم", + "version": "نسخه", + "connections": "اتصالات", + "circuitBreakers": "مدار شکن‌ها", + "open": "{count} باز", + "memoryUsage": "استفاده از حافظه" + }, + "never": "هرگز", + "justNow": "همین حالا", + "minutesAgo": "{count}دقیقه پیش", + "hoursAgo": "{count} ساعت پیش", + "tokens": "توکن‌ها", + "costs": "هزینه‌ها", + "autoRefresh": "بارگذاری خودکار ({seconds}s)", + "toggleAutoRefresh": "تغییر حالت تازه‌سازی خودکار", + "activeRequests": "درخواست‌های فعال", + "totalRequests": "تعداد کل درخواست‌ها", + "totalInputTokens": "تعداد کل توکن‌های ورودی", + "model": "مدل", + "provider": "ارائه‌دهنده", + "requests": "درخواست‌ها", + "lastUsed": "آخرین استفاده شده", + "inputTokens": "توکن‌های ورودی", + "totalTokens": "کل توکن‌ها", + "inputCost": "هزینه ورودی", + "outputCost": "هزینه خروجی", + "noUsageData": "هنوز هیچ استفاده‌ای ثبت نشده است. برای مشاهده داده‌ها، چند درخواست انجام دهید.", + "account": "حساب", + "accountLabel": "حساب {id}", + "noAccountUsage": "هیچ استفاده خاصی از حساب هنوز ثبت نشده است. برای مشاهده داده‌ها در اینجا، از حساب‌های OAuth درخواست کنید." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "تنظیم مجدد از طریق داده‌های برنامه", + "resetViaAppDataDescription": "فایل تنظیمات را از دایرکتوری داده‌های برنامه حذف کنید تا رمز عبور خود را بازنشانی کنید:", + "quitDesktopApp": "کاملاً از برنامه دسکتاپ OmniRoute خارج شوید", + "navigateToAppDataDirectory": "به دایرکتوری داده‌های اپ بروید:", + "checkSystemAppDataFolder": "(پوشه داده‌های برنامه سیستم خود را بررسی کنید)", + "relaunchDesktopFreshSetup": "برنامه دسکتاپ OmniRoute را دوباره راه‌اندازی کنید — این برنامه راه‌اندازی جدیدی را آغاز خواهد کرد", + "alternativeSetPasswordTitle": "گزینه دیگر: تنظیم رمز عبور جدید", + "alternativeSetPasswordDescription": "یک رمز عبور اولیه جدید از طریق فایل محیط سرور تنظیم کنید:", + "openServerEnvFilePrefix": "باز کردن", + "relaunchDesktopApp": "اپلیکیشن دسکتاپ OmniRoute را دوباره راه‌اندازی کنید", + "codexLinkInvalidOrExpired": "این لینک نامعتبر یا منقضی شده است.", + "codexValidationServerError": "نمی‌توان به سرور دسترسی پیدا کرد تا این لینک را تأیید کند.", + "codexSaveConnectionError": "نتوانستیم اتصال را ذخیره کنیم. ممکن است لینک منقضی شده باشد.", + "codexDeviceLoginDisabled": "ورود با کد دستگاه برای این حساب OpenAI غیرفعال است. آن را در تنظیمات امنیتی ChatGPT فعال کنید (یا از مدیر فضای کاری خود بخواهید).", + "codexAuthorizationTimedOut": "مهلت مجوز به پایان رسید. برای تلاش مجدد روی شروع دوباره کلیک کنید.", + "authenticationCancelled": "احراز هویت لغو شد.", + "unexpectedAuthenticationError": "خطای غیرمنتظره‌ای در حین احراز هویت رخ داده است. لطفاً دوباره تلاش کنید.", + "connectOpenAiCodexTitle": "اتصال به OpenAI Codex", + "codexConnectDescription": "یک حساب ChatGPT را مجاز کنید تا این اتصال را کامل کنید.", + "validatingCodexLink": "در حال اعتبارسنجی لینک…", + "codexGenerateCodeDescription": "برای تولید یک کد یک‌بار مصرف، زیر را کلیک کنید، سپس به OpenAI وارد شوید.", + "startCodexFlow": "شروع", + "requestingOpenAiCode": "در حال درخواست کد از OpenAI…", + "codexVerificationInstructions": "1. صفحه تأیید OpenAI را باز کنید و 2. این کد را وارد کنید. این صفحه به طور خودکار پس از مجوز شما به‌روزرسانی می‌شود.", + "yourCode": "کد شما", + "openVerificationPage": "صفحه تأیید را باز کنید", + "copyUrlShort": "کپی آدرس وب‌سایت", + "savingConnection": "در حال ذخیره‌سازی اتصال…", + "codexConnected": "متصل شد!", + "codexConnectionRegistered": "حساب Codex ثبت شد. می‌توانید این تب را ببندید.", + "tryAgain": "دوباره تلاش کنید", + "traeAuthorizationSuccess": "مجوز Trae ✓", + "traeAuthorizationFailed": "مجوز Trae ناموفق بود", + "closeAuthorizationWindow": "شما می‌توانید این پنجره را ببندید.", + "returnToDashboard": "به داشبورد بازگردید.", + "resetViaAppData": "بازنشانی از طریق داده‌های برنامه", + "deleteSettingsToReset": "فایل تنظیمات را از دایرکتوری داده‌های برنامه حذف کنید تا رمز عبور خود را بازنشانی کنید:", + "quitAppCompletely": "کاملاً از برنامه دسکتاپ OmniRoute خارج شوید", + "navigateToAppData": "به دایرکتوری داده‌های برنامه بروید", + "checkAppDataFolder": "پوشه داده‌های اپلیکیشن سیستم خود را بررسی کنید", + "deleteSettingsJson": "حذف", + "relaunchAppFresh": "اپلیکیشن دسکتاپ OmniRoute را دوباره راه‌اندازی کنید — این کار راه‌اندازی جدیدی را آغاز خواهد کرد", + "alternativeSetPassword": "گزینه دیگر: تنظیم رمز عبور جدید", + "setNewPasswordViaEnv": "یک رمز عبور اولیه جدید از طریق فایل محیط سرور تنظیم کنید:", + "openServerEnv": "باز کردن", + "inDataDirectory": "در دایرکتوری داده‌ها", + "addOrUpdate": "اضافه یا به‌روزرسانی کنید", + "deleteAndRelaunch": "حذف", + "settingsJson": "settings.json", + "fromDataDir": "از دایرکتوری داده‌ها", + "relaunchApp": "اپلیکیشن دسکتاپ OmniRoute را دوباره راه‌اندازی کنید" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "شرکت", + "pricing": "قیمت گذاری", + "apiReference": "مرجع API", + "helpCenter": "مرکز کمک", + "about": "درباره", + "blog": "وبلاگ", + "contact": "تماس", + "terms": "شرایط", + "privacy": "حریم خصوصی", + "license": "مجوز", + "footerDescription": "رابط یکپارچه برای زیرساخت مدرن هوش مصنوعی. امن، قابل مشاهده و مقیاس‌پذیر.", + "communityDiscussions": "بحث‌های جامعه" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — مستندات OmniRoute", + "metadataDefaultTitle": "مستندات OmniRoute", + "metadataDescription": "مستندات جامع برای دروازه OmniRoute AI — راه‌اندازی، API، فشرده‌سازی، استقرار و بیشتر.", + "layoutNavTitle": "مستندات OmniRoute", + "layoutHomeLink": "خانه مستندات", + "layoutDashboardLink": "← بازگشت به داشبورد", + "homeTitle": "مستندات OmniRoute", + "homeMetadataDescription": "هر آنچه برای مسیریابی، فشرده‌سازی و مقیاس‌پذیری هوش مصنوعی خود نیاز دارید — راهنماهای راه‌اندازی، مرجع API، فشرده‌سازی، استقرار و بیشتر.", + "homeTwitterDescription": "مستندات جامع برای دروازه OmniRoute AI", + "homeDescription": "هر چیزی که برای مسیریابی، فشرده‌سازی و مقیاس‌پذیری هوش مصنوعی خود نیاز دارید", + "homeSearchHint": "برای جستجوی مستندات، Ctrl K را فشار دهید", + "featuredQuickStartTitle": "شروع سریع", + "featuredQuickStartDescription": "OmniRoute را در ۳ دقیقه راه‌اندازی کنید", + "featuredAutoComboTitle": "راهنمای خودکار ترکیب", + "featuredAutoComboDescription": "بگذارید OmniRoute بهترین هوش مصنوعی را برای شما انتخاب کند", + "featuredProvidersTitle": "راهنمای ارائه‌دهندگان", + "featuredProvidersDescription": "در عرض چند دقیقه ارائه‌دهندگان هوش مصنوعی را متصل کنید", + "nonTechUsersTitle": "برای کاربران غیر فنی", + "nonTechUsersSubtitle": "به سرعت شروع کنید — نیازی به پیش‌زمینه فنی نیست", + "techUsersTitle": "برای کاربران فنی", + "techUsersSubtitle": "غور عمیق در معماری، APIها و جزئیات داخلی", + "apiExplorerMetadataTitle": "کاوشگر API — مستندات OmniRoute", + "apiExplorerMetadataDescription": "کاوشگر API تعاملی — با پاسخ‌های زنده، نقاط پایانی OmniRoute را به‌صورت زنده امتحان کنید", + "apiExplorerTitle": "کاوشگر API", + "apiExplorerDescription": "نقاط پایانی OmniRoute را به صورت زنده امتحان کنید. یک نقطه پایانی را انتخاب کنید، درخواست خود را پیکربندی کنید و پاسخ را به صورت زنده مشاهده کنید.", + "apiExplorerSseStarted": "جریان SSE آغاز شد — برای خروجی لحظه‌ای، ترمینال/ابزارهای توسعه را بررسی کنید.", + "apiExplorerError": "خطا: {message}", + "apiExplorerAuth": "احراز هویت", + "apiExplorerResponseLabel": "پاسخ", + "apiExplorerSelectEndpoint": "یک نقطه پایانی را برای کاوش انتخاب کنید", + "apiExplorerChooseApi": "یک API از نوار کناری انتخاب کنید تا جزئیات آن را ببینید و به صورت زنده امتحان کنید", + "feedbackThanks": "از بازخورد شما متشکرم!", + "feedbackQuestion": "آیا این صفحه مفید بود؟", + "pageMetadataTitle": "{title} — مستندات OmniRoute", + "pageMetadataDescription": "مستندات OmniRoute: {title}", + "breadcrumb": "نوار ناوبری", + "apiReferenceTable": { + "parameters": "پارامترها", + "name": "نام", + "type": "نوع", + "description": "توضیحات", + "returns": "برمی‌گرداند", + "typePrefix": "نوع:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "نشست OAuth ناقص است (URI بازگشت یا تأییدکننده کد گم شده است). اتصال را دوباره راه‌اندازی کنید و دوباره تلاش کنید.", + "errorExchangeFailed": "تبادل ناموفق بود", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: اعتبارنامه‌های پیش‌فرض Google OAuth فقط بر روی localhost کار می‌کنند. برای استفاده از راه دور، اعتبارنامه‌های OAuth خود را از طریق متغیرهای محیطی پیکربندی کنید: ANTIGRAVITY_OAUTH_CLIENT_ID و ANTIGRAVITY_OAUTH_CLIENT_SECRET. بخش README را با عنوان 'OAuth on a Remote Server' مشاهده کنید.", + "errorSaveFailed": "ذخیره‌سازی ناموفق بود", + "errorAuthorizationFailed": "مجوز تأیید نشد", + "errorAuthorizationTimeout": "زمان انقضای مجوز", + "errorRequestFailed": "درخواست ناموفق بود", + "errorCallbackServerFailed": "راه‌اندازی سرور callback با شکست مواجه شد", + "errorBrowserUnavailable": "OAuth مرورگر برای این ارائه‌دهنده در محیط فعلی در دسترس نیست. به جای آن از روش تأیید هویت پشتیبانی‌شده استفاده کنید.", + "errorStateMismatch": "عدم تطابق وضعیت OAuth. اتصال را دوباره راه‌اندازی کرده و دوباره تلاش کنید.", + "errorImportAccessToken": "وارد کردن توکن دسترسی ناموفق بود", + "errorSessionNotInitialized": "نشست OAuth راه‌اندازی نشده است. جریان اتصال را دوباره راه‌اندازی کنید و دوباره تلاش کنید.", + "errorNoAuthorizationCode": "هیچ کد تأیید هویتی پیدا نشد. URL بازگشتی یا کد تأیید هویت را بچسبانید.", + "tabDeviceCode": "کد دستگاه", + "tabBrowserLogin": "ورود به مرورگر", + "tabImportAuthJson": "وارد کردن auth.json", + "tabPasteApiKey": "کلید API را بچسبانید", + "windsurfPasteDescription": "در IDE ویندسرف / VS Code، فرمان \"Windsurf: Provide Auth Token\" را از پنل فرمان اجرا کنید (یا روی دکمه \"Get Windsurf Authentication Token\" در Jupyter کلیک کنید)، سپس توکن نمایش داده شده را کپی کرده و در زیر بچسبانید. باز کردن windsurf.com/show-auth-token به طور مستقیم فقط صفحه \"Redirecting\" را نشان می‌دهد — IDE باید جریان را آغاز کند.", + "grokAuthJsonDescription": "محتوای کامل ~/.grok/auth.json را بچسبانید (فقط فیلد \"key\" JWT نیست). یک JWT خالی refresh_token ندارد، بنابراین اتصال پس از انقضا قطع می‌شود (#7610). در صورت موجود بودن، از پنجره وارد کردن auth.json اختصاصی استفاده کنید.", + "devinDesktopPasteDescription": "کلید API موجود Devin را از یک جلسه تأیید شده Devin بچسبانید. در دسترس بودن صادرات کلید و مراحل آن بسته به نسخه و حساب Devin متفاوت است.", + "devinPasteDescription": "کلید API WINDSURF خود را ارائه دهید (که از طریق `devin auth login` یا از طریق دستور \"Windsurf: Provide Auth Token\" در IDE Windsurf به دست آمده است).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "کلید API / توکن", + "saving": "در حال ذخیره‌سازی…", + "saveConnection": "ذخیره اتصال", + "gheDescription": "آدرس پایه URL نمونه GitHub Enterprise خود را وارد کنید (به عنوان مثال https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "آدرس GitHub Enterprise", + "gheUrlRequired": "آدرس URL گیت‌هاب سازمانی الزامی است", + "gitlabDuoSetupTitle": "تنظیم OAuth دوگانه GitLab", + "gitlabDuoSetupMessage": "پیکربندی OAuth دوگانه GitLab انجام نشده است. یک برنامه OAuth در {applicationsUrl} با URI بازگشت {redirectUri} و دامنه‌های \"{scopes}\" ثبت کنید، سپس {clientIdEnv} (و به‌طور اختیاری {clientSecretEnv}) را تنظیم کرده و دوباره راه‌اندازی کنید.", + "gitlabDuoSetupDescription": "پس از ثبت‌نام برنامه و تنظیم متغیرهای محیطی در این نمونه OmniRoute، برای شروع ورود به سیستم OAuth روی ادامه کلیک کنید.", + "continue": "ادامه دهید" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "بارگذاری بیشتر", - "loadingMore": "در حال بارگذاری بیشتر..." + "loadingMore": "در حال بارگذاری بیشتر...", + "correlationId": "شناسه همبستگی", + "group": { + "showAllRows": "نمایش همه ردیف‌ها", + "showLatestPerCorrelation": "آخرین موارد را بر اساس شناسه همبستگی نمایش دهید", + "grouped": "گروه‌بندی شده" + }, + "running": "در حال اجرا", + "interval": { + "decrease": "کاهش بازه", + "title": "فاصله خودکار تازه‌سازی به ثانیه", + "increase": "افزایش بازه" + }, + "status": { + "inProgress": "در حال پیشرفت", + "recoveredByRetry": "بازیابی شده با تلاش مجدد", + "goToParent": "به درخواست والد بروید", + "healedTitle": "ناموفق، پس از {count} تلاش مجدد بازیابی شد", + "healed": "بهبود یافته", + "failedTitle": "تمام {count} تلاش‌ها ناموفق بود", + "failed": "ناموفق", + "pinnedTitle": "مدل انتخاب شده از طریق پین کردن جلسه کش زمینه", + "pinned": "سنجاق شده" + }, + "attempts": "تلاش‌ها", + "detail": { + "collapse": "جمع کردن {title}", + "expand": "گسترش {title}", + "copyTitle": "کپی {title}", + "copied": "کپی شد!", + "copy": "کپی", + "autoscrollOn": "اسکرول خودکار: روشن", + "autoscrollOff": "حرکت خودکار: خاموش", + "payload": { + "clientRawRequest": "درخواست خام کلاینت", + "clientRequest": "درخواست مشتری", + "openaiRequest": "درخواست OpenAI", + "providerRequest": "درخواست ارائه‌دهنده", + "providerResponse": "پاسخ ارائه‌دهنده", + "clientResponse": "پاسخ مشتری", + "pipelineError": "خطای پایپ‌لاین" + }, + "payloadMissing": "آرتیفکت بارگذاری دقیق دیگر برای این ورودی لاگ در دسترس نیست.", + "payloadCorrupt": "بارگذاری جزئیات بارگذاری نمی‌تواند تجزیه شود.", + "notAvailable": "غیر قابل استفاده", + "semanticCache": "سمیانتیک (OmniRoute)", + "upstreamCache": "بالا دستی (تامین کننده)", + "ariaLabel": "جزئیات لاگ درخواست", + "completed": "تکمیل شد", + "upstreamStatus": "بالا دستی: {status}", + "statusDiscrepancy": "OmniRoute وضعیت {status} را برگرداند در حالی که ارائه‌دهنده {provider} را برگردانده بود", + "previousRequest": "درخواست قبلی", + "nextRequest": "درخواست بعدی", + "close": "بستن مدال جزئیات", + "startedAt": "شروع شده در", + "endedAt": "پایان یافت در", + "duration": "مدت زمان", + "model": "مدل", + "provider": "ارائه‌دهنده", + "account": "حساب", + "input": "ورودی", + "totalIn": "مجموع ورودی: {value}", + "cacheRead": "خواندن کش: {value}", + "cacheWrite": "نوشتن کش: {value}", + "compressed": "فشرده شده: {from} → {to} ({percent}% صرفه‌جویی شده)", + "output": "خروجی", + "totalOut": "مجموع خروجی: {value}", + "reasoning": "استدلال: {value}", + "requestedModel": "مدل درخواست شده", + "requestProtocol": "پروتکل Req", + "cacheSource": "کش منبع", + "modelPinning": "پین کردن مدل", + "activeModelPinning": "فعال — مدل انتخاب شده از طریق پین کردن جلسه", + "rotated": "چرخش: {initial} -> {final}", + "apiKey": "کلید API", + "noApiKey": "هیچ کلید API وجود ندارد", + "combo": "ترکیب", + "error": "خطا", + "unblockAll": "همه را آنبلاک کن", + "cleared": "پاک شده", + "unblock": "غیرفعال کردن مسدودیت", + "relatedRequests": "درخواست‌های مرتبط ({count})", + "current": "جاری", + "detailStatus": "جزئیات وضعیت", + "loadingDetails": "در حال بارگذاری جزئیات درخواست...", + "providerEventStream": "جریان رویداد ارائه‌دهنده", + "clientEventStream": "جریان رویداد کلاینت", + "eventStream": "جریان رویداد", + "responsePayloadLegacy": "بارگذاری پاسخ (قدیمی)", + "requestPayloadLegacy": "بارگذاری درخواست (قدیمی)", + "noPayload": "هیچ داده بارگذاری شده‌ای برای این ورودی لاگ موجود نیست.", + "correlationId": "شناسه همبستگی", + "correlationIdValue": "شناسه همبستگی: {id}", + "detailedPayloadInfo": "ابتدا لاگ‌برداری دقیق را فعال کنید اگر می‌خواهید نمای بارگذاری چهار مرحله‌ای مشتری/تأمین‌کننده برای درخواست‌های جدید را مشاهده کنید." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} غیرفعال شد", "providerAdded": "{provider} اضافه شد", "add": "اضافه کردن", - "manualApiKey": "از کلید API دستی استفاده کنید" + "manualApiKey": "از کلید API دستی استفاده کنید", + "createDahlTokenFailed": "ایجاد توکن دال ناموفق بود", + "providerProxy": "پراکسی", + "providerProxyConfigureHint": "تنظیم پروکسی", + "providerProxyTitleConfigured": "پروکسی پیکربندی شده: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "دارای محدودیت ToS — بررسی شرایط", "caution": "احتیاط — بندهای استفاده شخصی / پروکسی", "ok": "به‌طور کلی مجاز" - } + }, + "allProviders": "تمام ارائه‌دهندگان", + "noApiKeyRequired": "نیازی به کلید API نیست" }, "providerHealthAutopilot": { "title": "اتوپایلوت سلامت ارائه‌دهنده", @@ -12390,7 +13047,11 @@ "on": "روشن", "off": "خاموش", "availableProviders": "ارائه‌دهندگان موجود ({count})", - "noProviderOverrides": "بدون جایگزینی — همه ارائه‌دهندگان فعال با مدل‌های پیش‌فرض خود مشارکت خواهند کرد" + "noProviderOverrides": "بدون جایگزینی — همه ارائه‌دهندگان فعال با مدل‌های پیش‌فرض خود مشارکت خواهند کرد", + "resetFailed": "بازنشانی ناموفق بود", + "resetSuccess": "تنظیمات به حالت پیش‌فرض بازنشانی شد", + "running": "در حال اجرا...", + "testFailed": "آزمون ناموفق بود" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) دوست متن‌باز بنیان‌گذار OmniRoute است", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "ارائه‌دهنده برای این درخواست تصویر از بینایی پشتیبانی نمی‌کند", "capabilityFilter.toolsMismatch": "ارائه‌دهنده از فراخوانی ابزار پشتیبانی نمی‌کند", "capabilityFilter.structuredOutputMismatch": "ارائه‌دهنده خروجی ساختاریافته را پشتیبانی نمی‌کند", - "capabilityFilter.contextWindowMismatch": "درخواست از حد مجاز پنجره زمینه ارائه‌دهنده فراتر می‌رود" + "capabilityFilter.contextWindowMismatch": "درخواست از حد مجاز پنجره زمینه ارائه‌دهنده فراتر می‌رود", + "publicSystem": { + "notFound": { + "title": "صفحه پیدا نشد", + "description": "صفحه‌ای که به دنبال آن هستید وجود ندارد یا منتقل شده است.", + "dashboardAriaLabel": "بازگشت به داشبورد", + "statusAriaLabel": "صفحه وضعیت سیستم را باز کنید", + "systemStatus": "وضعیت سیستم" + }, + "error": { + "title": "خطای داخلی سرور", + "description": "در حین پردازش درخواست شما مشکلی پیش آمد. تیم ما مطلع شده و در حال کار بر روی یک راه حل است.", + "errorId": "شناسه خطا: {id}", + "detailsAriaLabel": "جزئیات خطا", + "retryAriaLabel": "بار دیگر بارگذاری صفحه را امتحان کنید", + "tryAgain": "دوباره تلاش کنید", + "dashboardAriaLabel": "بازگشت به داشبورد", + "statusAriaLabel": "وضعیت سیستم را باز کنید", + "systemStatus": "وضعیت سیستم" + }, + "globalError": { + "title": "چیزی اشتباه پیش رفت", + "description": "یک خطای غیرمنتظره رخ داده است. این موضوع ثبت شده و تیم ما بررسی خواهد کرد.", + "detailsAriaLabel": "جزئیات خطا", + "retryAriaLabel": "بار دیگر تلاش کنید تا صفحه را بارگذاری کنید", + "tryAgain": "دوباره تلاش کنید", + "statusAriaLabel": "وضعیت سیستم را باز کنید", + "systemStatus": "وضعیت سیستم" + }, + "offline": { + "title": "مشکل اتصال", + "description": "OmniRoute در حال حاضر نمی‌تواند به شبکه دسترسی پیدا کند. تنظیمات اینترنت، VPN یا پروکسی خود را بررسی کنید.", + "connectionRestored": "اتصال دوباره برقرار شد", + "offlineModeDetected": "حالت آفلاین شناسایی شد", + "retryConnection": "تلاش مجدد برای اتصال", + "openStatusPage": "صفحه وضعیت را باز کنید" + }, + "maintenance": { + "title": "نگهداری برنامه‌ریزی‌شده", + "description": "برخی از خدمات در حین انجام تعمیرات به طور موقت در دسترس نیستند. مسیریابی اصلی معمولاً آنلاین باقی می‌ماند، اما ویژگی‌های مدیریتی ممکن است کاهش یابند.", + "suggestion1": "بعد از چند دقیقه دوباره تلاش کنید.", + "suggestion2": "وضعیت فعلی شاخص‌های سلامت و وضعیت ارائه‌دهنده را قبل از تلاش مجدد بررسی کنید.", + "systemStatus": "مشاهده وضعیت سیستم", + "healthDashboard": "داشبورد سلامت را باز کنید" + }, + "status": { + "title": "وضعیت سیستم", + "description": "تصویر عملیاتی زنده برای خدمات هسته OmniRoute.", + "loadingHealth": "در حال بارگذاری معیارهای سلامت...", + "failedToLoad": "بارگذاری وضعیت سیستم ناموفق بود.", + "unableToReachHealth": "نمی‌توان به نقطه پایانی سلامت دسترسی پیدا کرد. اتصال را بررسی کرده و دوباره تلاش کنید.", + "healthCheckFailed": "بررسی سلامت ناموفق بود", + "openConnectivityHelp": "راهنمای اتصال باز", + "maintenanceInfo": "اطلاعات نگهداری", + "service": "سرویس", + "unknown": "ناشناخته", + "notAvailable": "n/a", + "providersTracked": "تأمین‌کنندگان ردیابی‌شده", + "circuitBreakerState": "وضعیت قطع‌کننده مدار ارائه‌دهنده", + "lastUpdate": "آخرین به‌روزرسانی: {timestamp}", + "uptimeMinutes": "{minutes}د", + "uptimeHoursMinutes": "{hours}س {minutes}د" + }, + "statusPages": { + "400": { + "title": "درخواست نامعتبر", + "description": "بار درخواست نامعتبر یا ناقص است.", + "suggestion1": "فیلدهای الزامی و فرمت بارگذاری را قبل از تلاش مجدد بررسی کنید.", + "suggestion2": "اگر از API استفاده می‌کنید، طرح‌واره JSON را به‌صورت محلی اعتبارسنجی کنید.", + "suggestion3": "اگر این مشکل ادامه پیدا کرد، درخواست را در Translator Playground باز کنید تا بارگذاری را بررسی کنید.", + "primaryAction": "مستندات را باز کنید", + "secondaryAction": "مترجم را باز کنید" + }, + "401": { + "title": "غیرمجاز", + "description": "برای دسترسی به این منبع، احراز هویت لازم است.", + "suggestion1": "دوباره وارد شوید و عملیات را دوباره امتحان کنید.", + "suggestion2": "برای تماس‌های API، تأیید کنید که توکن Bearer موجود و معتبر است.", + "suggestion3": "اگر توکن به تازگی چرخش کرده است، اطلاعات کاربری کلاینت خود را به‌روزرسانی کنید.", + "primaryAction": "به صفحه ورود بروید", + "secondaryAction": "مدیریت کلیدهای API" + }, + "403": { + "title": "ممنوع", + "description": "درخواست شما درک شد، اما دسترسی به دلیل سیاست ممنوع است.", + "suggestion1": "قوانین لیست مجاز/مسدود IP را در تنظیمات بررسی کنید.", + "suggestion2": "سیاست‌های مدل و بودجه‌ای که به کلید API شما اختصاص داده شده‌اند را تأیید کنید.", + "suggestion3": "از یک مدیر بخواهید که دامنه مجوزهای مورد نیاز را اعطا کند.", + "primaryAction": "راهنمای دسترسی آزاد", + "secondaryAction": "تنظیمات امنیتی را باز کنید" + }, + "408": { + "title": "زمان درخواست به پایان رسید", + "description": "سرور درخواست کامل را به موقع دریافت نکرد.", + "suggestion1": "درخواست را با بار کمتر دوباره امتحان کنید.", + "suggestion2": "پایداری شبکه و تأخیر VPN/پراکسی خود را بررسی کنید.", + "suggestion3": "برای عملیات طولانی، استریمینگ را فعال کنید یا درخواست را تقسیم کنید.", + "primaryAction": "راهنمای نقطه پایانی را باز کنید", + "secondaryAction": "وضعیت شبکه را بررسی کنید" + }, + "429": { + "title": "بسیاری از درخواست‌ها", + "description": "محدودیت‌های نرخ برای این مشتری، کلید یا ارائه‌دهنده تجاوز شده است.", + "suggestion1": "برای مدت زمان خنک‌سازی صبر کنید و پس از بازه پیشنهادی دوباره تلاش کنید.", + "suggestion2": "به یک ترکیب با ارائه‌دهندگان پشتیبان سوئیچ کنید.", + "suggestion3": "تنظیم پروفایل‌های تاب‌آوری/محدودیت نرخ ارائه‌دهنده در تنظیمات.", + "primaryAction": "تنظیمات تاب‌آوری را باز کنید", + "secondaryAction": "باز کردن کامبوها" + }, + "500": { + "title": "خطای داخلی سرور", + "description": "یک خطای غیرمنتظره در سمت سرور در حین پردازش درخواست شما رخ داد.", + "suggestion1": "چند ثانیه دیگر دوباره تلاش کنید.", + "suggestion2": "سلامت تله‌متری و لاگ‌های سرور را برای شناسه‌های درخواست همبسته بررسی کنید.", + "suggestion3": "اگر مشکل ادامه داشت، مسئله را با زمان و زمینه درخواست گزارش دهید.", + "primaryAction": "داشبورد سلامت را باز کنید", + "secondaryAction": "باز کردن لاگ‌ها" + }, + "502": { + "title": "دروازه نامعتبر", + "description": "تأمین‌کننده بالادستی یا ادغام دروازه پاسخ نامعتبری را برگرداند.", + "suggestion1": "با یک ارائه‌دهنده دیگر یا مسیر ترکیبی فعال دوباره تلاش کنید.", + "suggestion2": "مدارک تأمین‌کننده و در دسترس بودن مدل را بررسی کنید.", + "suggestion3": "خروجی مترجم را بررسی کنید اگر تبدیل فرمت در کار باشد.", + "primaryAction": "باز کردن ارائه‌دهندگان", + "secondaryAction": "مترجم را باز کنید" + }, + "503": { + "title": "سرویس در دسترس نیست", + "description": "این سرویس به‌طور موقت به‌دلیل نگهداری یا وابستگی‌های کاهش‌یافته در دسترس نیست.", + "suggestion1": "لحظه‌ای صبر کنید و دوباره تلاش کنید.", + "suggestion2": "اطلاعیه‌های نگهداری و وضعیت سیستم را بررسی کنید.", + "suggestion3": "از ارائه‌دهندگان پشتیبان استفاده کنید اگر جریان کار شما به تأخیر حساس است.", + "primaryAction": "جزئیات نگهداری", + "secondaryAction": "وضعیت سیستم" + } + } + }, + "kiroAuthModal": { + "title": "اتصال {providerLabel}", + "chooseMethod": "روش احراز هویت خود را انتخاب کنید:", + "builderId": "شناسه سازنده AWS", + "builderDescription": "برای بیشتر کاربران توصیه می‌شود. با حساب AWS مرتبط با {providerLabel} وارد شوید.", + "organization": "سازمان شما (AWS IAM Identity Center)", + "organizationDescription": "از URL شروع SSO شرکت خود استفاده کنید (مثال: {url}).", + "googleAccount": "حساب گوگل", + "googleDescription": "با حساب Google خود وارد شوید.", + "githubAccount": "حساب GitHub", + "githubDescription": "با حساب GitHub خود وارد شوید.", + "importToken": "وارد کردن توکن", + "importDescription": "توکن تازه‌سازی صادر شده از {providerLabel} را بچسبانید.", + "apiKey": "کلید API", + "apiKeyDescription": "کلید API {providerLabel} / CodeWhisperer با عمر طولانی را بچسبانید. این کلید به عنوان یک اعتبار Bearer ذخیره می‌شود و توکن تجدید ندارد؛ کشف پروفایل به صورت بهترین تلاش انجام می‌شود.", + "idcStartUrl": "آدرس شروع IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "آدرس IAM Identity Center AWS سازمان شما", + "awsRegion": "منطقه AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "منطقه AWS برای مرکز هویت شما (پیش‌فرض: us-east-1)", + "continue": "ادامه دهید", + "back": "بازگشت", + "autoDetecting": "شناسایی خودکار توکن...", + "readingCredentials": "خواندن اعتبارنامه‌های {providerLabel} از کش AWS SSO", + "tokenNotDetected": "توکن {providerLabel} به‌طور خودکار شناسایی نشد. لطفاً توکن تازه‌سازی خود را به‌صورت دستی وارد کنید.", + "refreshToken": "توکن تازه سازی", + "tokenPlaceholder": "توکن به‌طور خودکار پر خواهد شد...", + "importing": "در حال وارد کردن...", + "apiKeyPlaceholder": "کلید API {providerLabel} خود را بچسبانید...", + "apiKeyStoredDescription": "به‌صورت رمزنگاری‌شده به‌عنوان یک اعتبارنامه‌ی بلندمدت ذخیره شده است. جریانی برای تازه‌سازی وجود ندارد.", + "apiKeyRegionDescription": "منطقه AWS برای کلید (پیش‌فرض: us-east-1)", + "validating": "در حال اعتبارسنجی...", + "validateAndSaveApiKey": "اعتبارسنجی و ذخیره کلید API", + "errorAutoDetect": "نمی‌توان توکن را به‌طور خودکار شناسایی کرد", + "errorAutoDetectFailed": "شناسایی خودکار توکن ناموفق بود", + "errorRefreshTokenRequired": "لطفاً یک توکن تازه‌سازی وارد کنید", + "errorImportFailed": "واردات ناموفق بود", + "errorApiKeyRequired": "لطفاً یک کلید API کیرو وارد کنید", + "errorApiKeyImportFailed": "وارد کردن کلید API ناموفق بود", + "errorIdcStartUrlRequired": "لطفاً URL شروع IDC خود را وارد کنید" + }, + "kiroSocialOAuthModal": { + "title": "اتصال {providerLabel} از طریق {providerName}", + "errorStartAuthorization": "شروع تأیید هویت ناموفق بود", + "errorAuthorizationExpired": "مجوز منقضی شده است. دوباره فرآیند ورود را آغاز کنید.", + "errorAuthorizationFailed": "مجوز تأیید نشد", + "initializing": "در حال راه‌اندازی...", + "settingUp": "راه‌اندازی احراز هویت {providerName}", + "openIncognito": "این لینک را در یک پنجره ناشناس باز کنید", + "incognitoDescription": "از یک پنجره ناشناس/خصوصی استفاده کنید تا از تداخل جلسه با حساب‌های موجود جلوگیری کنید.", + "copyLink": "کپی لینک", + "verificationCode": "کد تأیید", + "waiting": "در حال انتظار برای تأیید...", + "cancel": "لغو", + "successTitle": "با موفقیت متصل شد!", + "successMessage": "حساب {providerLabel} شما از طریق {providerName} متصل شده است.", + "done": "انجام شد", + "errorTitle": "اتصال ناموفق", + "close": "بستن" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "مجوز تأیید نشد", + "errorPopupBlocked": "پنجره بازشو مسدود شده است — برای این سایت اجازه باز شدن پنجره‌های بازشو را بدهید، یا توکن را به صورت دستی در زیر وارد کنید.", + "errorPopupClosed": "پنجره مجوز قبل از اتمام بسته شد.", + "errorAccessTokenRequired": "توکن دسترسی الزامی است.", + "errorImportFailed": "واردات ناموفق بود", + "title": "اتصال به Trae SOLO", + "authorizeDescription": "از طریق trae.ai در یک پنجره بازشونده مجوز دهید. پنجره بازشونده پس از وارد شدن توکن به طور خودکار بسته خواهد شد.", + "authorizeImportant": "مهم: شما ابتدا باید در trae.ai در این مرورگر وارد شوید. صفحه تأیید فقط یک جلسه موجود را تأیید می‌کند — نمی‌تواند شما را وارد کند. اگر \"ورود ناموفق\" را مشاهده کردید، روی \"باز کردن solo.trae.ai\" کلیک کنید، وارد شوید و سپس به اینجا برگردید.", + "waitingForAuthorization": "در حال انتظار برای trae.ai…", + "authorizeWithBrowser": "با مرورگر تأیید کنید", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "یا یک توکن را به صورت دستی بچسبانید", + "manualInstructions": "وارد solo.trae.ai شوید، DevTools → Network را باز کنید، هر پیامی را ارسال کنید و JWT را از هدر درخواست Authorization: Cloud-IDE-JWT {tokenPlaceholder} کپی کنید. عمر JWT حدود ~14 روز است. فیلدهای هویتی اختیاری از common_params در همان بدنه درخواست می‌آیند.", + "accessTokenLabel": "توکن دسترسی (Cloud-IDE-JWT)", + "webId": "شناسه وب", + "optional": "اختیاری", + "bizUserId": "شناسه کاربر بیز", + "userUniqueId": "شناسه کاربری منحصر به فرد", + "scope": "دامنه", + "tenant": "مستاجر", + "region": "منطقه", + "importing": "در حال وارد کردن…", + "importToken": "وارد کردن توکن", + "cancel": "لغو" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "در حال توزیع...", + "complete": "کامل شده", + "defaultLabel": "توزیع پروکسی‌ها" + } + }, + "providerTest": { + "dialogLabel": "آزمایش {provider}", + "deprecated": "منسوخ شده", + "risk": "ریسک", + "close": "بستن", + "model": "مدل", + "key": "کلید", + "defaultKey": "پیش‌فرض", + "clearConversation": "پاک کردن مکالمه", + "clear": "پاک کردن", + "tabs": { + "test": "آزمایش", + "logs": "لاگ‌ها" + }, + "loadingLogs": "در حال بارگذاری لاگ‌ها…", + "failedToLoadLogs": "بارگذاری لاگ‌ها ناموفق بود", + "noLogsYet": "هنوز هیچ لاگی وجود ندارد", + "noLogsDescription": "پیام آزمایشی را از زبانه آزمایش ارسال کنید — لاگ‌های این ارائه‌دهنده در اینجا ظاهر خواهند شد.", + "openFullLogs": "صفحه کامل لاگ‌ها را باز کنید", + "live": "زنده", + "tailingLast": "آخرین {count} را دنبال می‌کند", + "refreshNow": "اکنون تازه‌سازی کنید", + "refresh": "به‌روزرسانی", + "unknownRequester": "درخواست‌کننده ناشناخته", + "fields": { + "timestamp": "زمان‌نگاشت", + "status": "وضعیت", + "duration": "مدت زمان", + "model": "مدل", + "requestedModel": "مدل درخواست شده", + "provider": "ارائه‌دهنده", + "requester": "درخواست‌کننده", + "tokens": "توکن‌ها" + } + }, + "proxyLog": { + "detailAriaLabel": "جزئیات لاگ پروکسی", + "event": "رویداد پروکسی", + "close": "بستن جزئیات پروکسی", + "time": "زمان", + "latency": "تاخیر", + "clientIp": "آی‌پی کلاینت", + "proxy": "پراکسی", + "direct": "مستقیم", + "type": "نوع", + "level": "سطح", + "provider": "ارائه‌دهنده", + "tlsFingerprint": "اثر انگشت TLS", + "directNative": "مستقیم", + "targetUrl": "آدرس هدف", + "error": "خطا", + "configuration": "پیکربندی پروکسی" + }, + "requestTimeline": { + "title": "زمان‌بندی درخواست", + "modes": { + "follow": "دنبال کنید", + "followDescription": "محور به سمت چپ می‌چرخد، خط NOW در 75% باقی می‌ماند", + "now": "اکنون", + "nowDescription": "به زمان فعلی پرش کنید، خط NOW به مرکز بازنشانی می‌شود", + "pan": "پان", + "panDescription": "بکشید تا کاوش کنید، پس‌زمینه منجمد است" + }, + "reset": "بازنشانی", + "started": "شروع شد", + "ended": "پایان یافت", + "duration": "مدت زمان", + "status": "وضعیت", + "provider": "ارائه‌دهنده", + "tokens": "توکن‌ها", + "active": "فعال", + "other": "دیگر", + "tenMinutes": "۱۰ دقیقه", + "hour": "ساعت", + "day": "روز", + "unknownModel": "ناشناخته", + "pending": "در حال انتظار" + }, + "metadata": { + "compressionTitle": "فشرده‌سازی", + "compressionDescription": "تنظیمات فشرده‌سازی زمینه را پیکربندی کنید تا استفاده از توکن و هزینه‌ها کاهش یابد.", + "relayTitle": "OmniRoute — پروکسی‌های رله", + "relayDescription": "نقاط انتهایی پروکسی رله بدون سرور برای زیرساخت AI شما", + "trafficInspectorTitle": "بازرس ترافیک — OmniRoute", + "trafficInspectorDescription": "تماس‌های LLM را نظارت کنید و ترافیک HTTPS هر برنامه‌ای را اشکال‌زدایی کنید" + }, + "conductor": { + "title": "کنترل‌کننده — ناوگان عامل CLI", + "subtitle": "هاب OmniConductor: اجراکننده‌ها، صف وظایف و شوراها، زنده", + "runners": "دوندگان", + "tasks": "کارها", + "colName": "نام", + "colClis": "CLIها", + "colStatus": "وضعیت", + "colTask": "وظیفه", + "colMode": "حالت", + "colRunner": "راننده", + "colSummary": "خلاصه", + "online": "آنلاین", + "offline": "آفلاین", + "draining": "تخلیه کردن", + "hubOffline": "هاب کاندکتور آفلاین یا پیکربندی نشده (CONDUCTOR_HUB_URL) — هیچ چیزی به جز داده‌های قدیمی نشان نمی‌دهد.", + "noRunners": "هیچ دویدنی ثبت‌نام نشده است", + "noTasks": "هیچ وظیفه‌ای هنوز وجود ندارد", + "detailTitle": "جزئیات وظیفه", + "prompt": "پیشنهاد", + "branch": "شاخه", + "fetchHint": "نتیجه را با: git fetch origin {branch} دریافت کنید", + "council": "شورا", + "candidates": "نامزدها", + "cancel": "لغو وظیفه", + "cancelConfirmTitle": "آیا می‌خواهید این کار را لغو کنید؟", + "cancelConfirmMessage": "هاب اجرای کار را در اجراکننده متوقف خواهد کرد. این عمل غیرقابل بازگشت است.", + "cancelFailed": "هاب درخواست لغو را رد کرد", + "close": "بستن", + "error": "خطا", + "faroTitle": "فارو — سخنگوی ناوگان", + "faroSubtitle": "چت و صدا، مبتنی بر رویدادهای واقعی ناوگان. دستورات مخرب همیشه از تأیید خواسته می‌شود.", + "faroEmpty": "در مورد ناوگان بپرسید — به عنوان مثال \"ناوگان چطور است؟\"", + "faroPending": "فارو در حال درخواست تأیید است", + "faroPlaceholder": "با فارو صحبت کن…", + "faroSend": "ارسال", + "faroOffline": "فاروی (سخنگو) آفلاین است", + "yes": "بله", + "no": "نه", + "pushToTalk": "برای صحبت کردن نگه‌دارید", + "speakAnswers": "پاسخ‌ها را بگویید", + "voiceModels": "مدل‌های صوتی (ارائه‌دهنده/مدل این OmniRoute)", + "voiceIdle": "صحبت کنید", + "voiceListening": "در حال گوش دادن…", + "voiceThinking": "در حال فکر کردن…", + "voiceSpeaking": "در حال صحبت کردن…", + "sttFailed": "ترجمه ناموفق بود (مدل/ارائه‌دهنده STT را بررسی کنید)", + "ttsFailed": "خطای تولید گفتار (مدل/ارائه‌دهنده TTS را بررسی کنید)", + "micDenied": "میکروفن در دسترس نیست یا اجازه دسترسی رد شده است" + }, + "cliproxyProviderExposure": { + "title": "قرار گرفتن در معرض ارائه‌دهنده", + "description": "مدل‌های CLIProxyAPI را به عنوان یک هدف مسیریابی تحت پیشوند cliproxyapi/ افشا کنید.", + "label": "به عنوان cliproxyapi/... در دسترس قرار دهید", + "hint": "زمانی که فعال شود، مدل‌های کشف‌شده در انتخاب‌های ارائه‌دهنده در سرتاسر OmniRoute ظاهر می‌شوند.", + "updateFailed": "به‌روزرسانی ناموفق بود (HTTP {status})", + "networkError": "خطای شبکه — نمی‌توان تنظیمات نمایان‌سازی ارائه‌دهنده را به‌روزرسانی کرد" + } } - diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 617843905d..06e79cf7d8 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -172,6 +172,18 @@ "unselectAll": "Poista valinnat", "visibleModels": "näkyvissä", "selectAllConfirm": "Lisätäänkö {count} mallia tähän yhdistelmään?", + "testSelectedProviders": "Testipalveluntarjoajat", + "testingSelectedProviders": "Testataan {done}/{total}...", + "noProvidersSelectedToTest": "Valitse ensin ainakin yksi tarjoaja alla", + "noModelsToTestForProviders": "Ei malleja testattavaksi valituille palveluntarjoajille", + "testSelectedProvidersResults": "{ok} {total} mallia toimii", + "selectWorkingModels": "Lisää toimiva", + "unselectWorkingModels": "Poista valinta käytöstä", + "noWorkingModelsToSelect": "Ei lisää toimivia malleja lisättäväksi", + "providerTestHint": "Vinkki: tarkista tarjoaja → Testaa → Lisää toimiva. Napsauta uudelleen poistaaksesi valinnan.", + "selectAllProviders": "Tarkista kaikki palveluntarjoajat", + "clearProviderSelection": "Poista valinta tarjoajilta", + "providersSelectedCount": "{count} palveluntarjoajaa tarkistettu", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Koko", + "toggleNoAuthProvider": "Vaihda ei-todennuspalvelinta", + "loadingModels": "Ladataan malleja…", + "selectAModel": "Valitse malli", + "degraded": "Heikentynyt", + "zeroConfigBannerTitle": "Ajetaan nollakonfiguraatiotilassa", + "zeroConfigBannerBody": "OmniRoute luo automaattisesti turvalliset salausavaimet ensimmäisellä käynnistämällä. Ne tallennetaan {dataDir}. Toimenpiteitä ei vaadita — tietosi ovat salattuja ja turvassa. Käyttääksesi mukautettuja avaimia, lisää JWT_SECRET ja STORAGE_ENCRYPTION_KEY kyseiseen tiedostoon.", + "batchRelativeTimeIn": "sisällä {value}", + "batchRelativeTimeAgo": "{value} sitten", + "batchDetailsTitle": "Erä Tiedot", + "batchProgress": "Edistyminen", + "batchCompletedCount": "{count} valmis", + "batchFailedCount": "{count} epäonnistui", + "batchPendingCount": "{count} odottaa", + "batchTimeline": "Aikajana", + "batchTimelineInProgress": "Käynnissä", + "batchTimelineFinalizing": "Viimeistellään", + "batchTimelineCompleted": "Valmis", + "batchTimelineFailed": "Epäonnistui", + "batchTimelineExpires": "Vanhenee", + "batchTimelineExpired": "Vanhentunut", + "batchTimelineCancelling": "Peruutetaan", + "batchTimelineCancelled": "Peruutettu", + "batchTokenUsage": "Tokenin Käyttö", + "batchMetadata": "Metatiedot", + "batchFileContents": "Tiedoston Sisältö", + "batchFileUsedByCount": "Käytetään {count, plural, one {# erä} other {# erää}}", + "batchFilePreview": "Esikatselu", + "batchFilePreviewTruncated": "Näytetään ensimmäiset {shown} riviä ({total} yhteensä riviä)", + "batchFileDownloadFull": "Lataa Koko Tiedosto" }, "disabled": "Poistettu käytöstä", "featureFlagOmnirouteEmergencyFallbackDescription": "Reititä budjettinsa ylittäneet pyynnöt varalla olevalle ilmaiselle varatarjoajalle/-mallille.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Erotin", "discovery": "Löytäminen", "discoverySubtitle": "Skannaa tarjoajat ilmaisen pääsyn varalta", + "conductor": "Konduktori", + "conductorSubtitle": "CLI-agent laivasto", "resilienceConnections": "Yhteyden Kestävyys", "resilienceConnectionsSubtitle": "Jäähdytys, katkaisija, lukitustila", "settingsModalityBridge": "Modaalisilta", - "settingsModalityBridgeSubtitle": "Kuva/ääni → tekstivaraus vain tekstimalleille" + "settingsModalityBridgeSubtitle": "Kuva/ääni → tekstivaraus vain tekstimalleille", + "commandPalette": { + "title": "Komentopaneeli", + "searchPlaceholder": "Etsi sivuja, asetuksia, työkaluja...", + "clearSearch": "Tyhjennä haku", + "noResults": "Ei tuloksia", + "navigate": "navigoi", + "open": "avaa", + "close": "sulje" + }, + "noResults": "Ei tuloksia" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Asetusten päivitys epäonnistui", "sync.token.created": "Synkronointitunnus luotu", "sync.token.revoked": "Synkronointitunnus kumottu" - } + }, + "mcpMetricCalls24h": "Puhelut (24h)", + "mcpMetricSuccessRate": "Onnistumisprosentti", + "mcpMetricAvgDuration": "Keskimääräinen kesto", + "mcpMetricTopTool": "Ykköstyökalu" }, "themesPage": { "title": "Teemat", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Uusi versio on saatavilla. Päivitä napsauttamalla.", "updateStarted": "Päivitys aloitettu...", "reloadingPageAutomatically": "Ladataan sivua automaattisesti uudelleen...", - "providerTopology": "Palveluntarjoajan topologia" + "providerTopology": "Palveluntarjoajan topologia", + "downloadDmg": "Lataa DMG (macOS)", + "downloadDmgDescription": "Uusi versio OmniRoute-työpöytäsovelluksesta on saatavilla. Lataa ja asenna macOS DMG -asennustiedosto päivittääksesi (nykyinen: v{version}).", + "downloadExe": "Lataa EXE (Windows)", + "downloadExeDescription": "Uusi versio OmniRoute-työpöytäsovelluksesta on saatavilla. Lataa ja asenna Windows EXE -asennusohjelma päivittääksesi (nykyinen: v{version}).", + "downloadAppImage": "Lataa AppImage (Linux)", + "downloadAppImageDescription": "Uusi versio OmniRoute-työpöytäsovelluksesta on saatavilla. Lataa Linux AppImage -paketti päivittääksesi (nykyinen: v{version}).", + "downloadUpdate": "Lataa päivitys", + "downloadUpdateDescription": "Uusi versio OmniRoute-työpöytäsovelluksesta on saatavilla. Lataa järjestelmällesi sopiva sovellusmuoto päivittääksesi (nykyinen: v{version}).", + "updateQueued": "Jonossa päivitys versioon v{version}.", + "updateDockerRebuilding": "Docker-kuva rakennetaan taustalla.", + "updateWaitingRestart": "Odotetaan, että OmniRoute käynnistyy uudelleen uudella versiolla.", + "updateInstalling": "Asennetaan v{version}.", + "updateRunning": "OmniRoute on nyt käynnissä versiossa v{version}.", + "updateCompleted": "OmniRoute päivitetty versioon {version}.", + "updateDockerStillRebuilding": "Docker-kuva on edelleen uudelleenrakennettavana versiolle v{version}.", + "updateInstallingBackground": "Asennetaan v{version} taustalla.", + "updateWaitingVersion": "Odotetaan OmniRoute:n palaavan versioon v{version}.", + "updateDockerStillInProgress": "Dockerin uudelleenrakennus on edelleen käynnissä.", + "updateRestarting": "Palvelun uudelleenkäynnistys käynnissä. Odotetaan, että OmniRoute palaa verkkoon...", + "updateTimeout": "Päivitys aloitettiin, mutta v{version} ei tullut saataville ennen aikakatkaisua. Päivitä sivu tai tarkista palvelinlokit.", + "updateTimedOut": "Päivitys versioon v{version} aikakatkaistiin.", + "updateStartFailed": "Päivityksen käynnistys epäonnistui.", + "noResponseStream": "Ei vastausvirtaa vastaanotettu.", + "updateComplete": "Päivitys valmis!", + "updateFailed": "Päivitys epäonnistui.", + "updateNetworkError": "Verkkovirhe — yhteys katkaistu päivityksen aikana.", + "stepInstallPackage": "Asenna Paketti", + "stepRebuildNativeModules": "Uudelleenrakennetaan Natiivimoduulit", + "stepRestartService": "Käynnistä Palvelu Uudelleen", + "stepComplete": "Valmis", + "stepError": "Virhe", + "updateCompleteTitle": "Päivitys valmis!", + "updateFailedTitle": "Päivitys epäonnistui", + "updatingTitle": "Päivitetään OmniRoute...", + "reloadNotice": "Sivu latautuu automaattisesti muutaman sekunnin kuluttua.", + "retryNotice": "Yritä uudelleen tai päivitä manuaalisesti CLI:n kautta.", + "restartNotice": "Älä sulje tätä sivua. Järjestelmä käynnistyy automaattisesti uudelleen.", + "reloadNow": "Lataa Uudelleen Nyt", + "closeUpdate": "Sulje", + "retryUpdate": "Yritä uudelleen", + "updateAvailableTitle": "Päivitys saatavilla: v{version}{desktop}", + "desktopAppLabel": "(Desktop-sovellus)", + "checkingForUpdates": "Tarkistetaan päivityksiä...", + "versionAvailableForDownload": "Versio v{version} on ladattavissa.", + "downloadingUpdate": "Ladataan päivitystä... {percent}% valmis.", + "updateDownloaded": "Päivitys ladattu onnistuneesti! Napsauta Käynnistä uudelleen ja asenna, jotta muutokset tulevat voimaan.", + "autoUpdateFailed": "Automaattinen päivitys epäonnistui: {reason}.", + "unknownUpdateError": "Tuntematon virhe", + "versionAvailableDesktop": "Versio v{version} on saatavilla työpöytäsovelluksessa.", + "manualUpdateRequired": "Manuaalinen päivitys vaaditaan tälle asennustyypille.", + "restartAndInstall": "Käynnistä Uudelleen & Asenna", + "checkForUpdate": "Tarkista päivitys", + "manualUpdate": "Manuaalinen Päivitys", + "directDownloadHint": "Tai lataa vastaava asennustiedosto suoraan:", + "releaseNotes": "Julkaisutiedot", + "readMore": "Lue lisää", + "noAuthLabel": "Ei todennusta" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Päätelty tähän pyyntöön liittyvistä tallennetuista kutsulokeista", "routeRecommendations": "Suositukset", "routeLimitations": "Rajoitukset", - "routeNoKnownLimitations": "Tälle selitykselle ei ole tiedossa olevia rajoituksia." + "routeNoKnownLimitations": "Tälle selitykselle ei ole tiedossa olevia rajoituksia.", + "searchAnalyticsLoading": "Ladataan hakuanalyysejä…", + "searchAnalyticsNoData": "Ei hakutietoja saatavilla vielä.", + "searchAnalyticsNoDataDescription": "Hakupyynnöt näkyvät täällä ensimmäisen haun jälkeen /v1/search.", + "searchAnalyticsToday": "{count} tänään", + "searchAnalyticsCachedRequests": "{count} välimuistissa olevaa pyyntöä", + "searchAnalyticsApiCosts": "hae API-kustannuksia", + "searchAnalyticsErrors": "{count} virhettä", + "searchAnalyticsNoErrors": "Ei virheitä", + "searchAnalyticsProviderBreakdown": "Palveluntarjoajan jakautuminen", + "searchAnalyticsQueries": "kyselyt", + "searchAnalyticsEmptyDescription": "Käytä POST /v1/search aloittaaksesi verkkohakujen reitittämisen.", + "searchAnalyticsFreeTier": "Ilmainen taso saatavilla: Serper (2,500/kk), Brave (2,000/kk), Exa (1,000/kk), Tavily (1,000/kk) — yhteensä 6,500+ ilmaista hakua/kuukausi automaattisella varajärjestelmällä.", + "autoRoutingNoDataAvailable": "Ei automaattista reititysanalytiikkaa saatavilla. Tee pyyntöjä käyttäen auto/ etuliitettä nähdäksesi mittarit.", + "defaultVariantLabel": "Oletusarvoinen", + "freeTierAvailable": "Ilmainen taso saatavilla" }, "apiManager": { "title": "API-avaimet", @@ -2348,7 +2478,9 @@ "providerCount": "{count} tarjoajaa", "imageToTextBridgeAvailable": "Modality Bridge voi nyt kuvata kuvia pelkästään tekstimalleille. Inline-leikkikenttä on saatavilla, kun /api/v1/images/understanding on toteutettu.", "imageToTextBridgeCta": "Määritä Image→Text-silta Modality Bridge -asetuksissa", - "sttBridgeCta": "Määritä Puhe→Teksti-silta Modality Bridge -asetuksissa" + "sttBridgeCta": "Määritä Puhe→Teksti-silta Modality Bridge -asetuksissa", + "existingConnection": "Olemassa oleva yhteys", + "openrouterSttDescription": "OpenRouter puheesta tekstiksi -mallit käyttävät määrittämääsi OpenRouter-yhteyttä. Erillistä tunnistetta ei vaadita." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Liitä kohteeseen:", "copilotReloadInstruction": "Käynnistä sitten VS Code uudelleen ja aseta API-avain syötekehotteessa.", "wireApiChatCompletions": "Keskustelun päättymiset (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Toiminto epäonnistui", + "cliproxyapiActionSucceeded": "Toiminto onnistui", + "cliproxyapiCheckUpdates": "Tarkista päivitykset", + "cliproxyapiDescription": "Ylävirran välityspalvelimen varajärjestelmä (Go-pohjainen OAuth)", + "cliproxyapiHealth": "Terveys", + "cliproxyapiHealthy": "Terveellinen", + "cliproxyapiInstall": "Asenna", + "cliproxyapiNotInstalledValue": "Ei asennettu", + "cliproxyapiPort": "Portti", + "cliproxyapiRequestFailed": "Pyyntö epäonnistui", + "cliproxyapiRestart": "Käynnistä uudelleen", + "cliproxyapiStart": "Aloita", + "cliproxyapiStatusError": "Virhe", + "cliproxyapiStatusInstalled": "Asennettu", + "cliproxyapiStatusNotInstalled": "Ei Asennettu", + "cliproxyapiStatusRunning": "Suoritetaan", + "cliproxyapiStatusStopped": "Pysäytetty", + "cliproxyapiStop": "Pysäytä", + "cliproxyapiUnhealthy": "Epäterveellinen", + "cliproxyapiUnknown": "Tuntematon", + "cliproxyapiUpdate": "Päivitä", + "cliproxyapiUpdateAvailable": "Päivitys saatavilla: v{current} → v{latest}", + "cliproxyapiVersion": "Versio" }, "combos": { "title": "Yhdistelmät", @@ -3236,6 +3391,8 @@ "pricingMissing": "Ei hinnoittelua", "pricingAvailableShort": "hinnoiteltu", "pricingMissingShort": "ei-hintaa", + "fallbackOnlyOnQuotaExhaustion": "Etene vain kiintiön loppuessa", + "fallbackOnlyOnQuotaExhaustionShort": "vain kiintiövaranto", "warningRoundRobinSingleModel": "Round-robin on hyödyllisin vähintään kahdella mallilla.", "warningCostOptimizedPartialPricing": "Vain {priced} {total}-malleista on hinnoiteltu. Reititys voi olla osittain kustannustietoinen.", "warningCostOptimizedNoPricing": "Tälle yhdistelmälle ei löytynyt hintatietoja. Kustannusoptimoitu voi reitittää odottamatta.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Tilapaketti ja painotus säilyvät täällä; katkaisijan ajonaikainen tila säilyy Health-sivulla.", "emailVisibilityHint": "Tämän osion tilien sähköpostiosoitteet noudattavat globaalia yksityisyysasetusta.", "emailVisibilityTooltip": "Käytä silmäkuvaketta näyttääksesi tai piilottaaksesi tilien sähköpostiosoitteet maailmanlaajuisesti yhdistelmissä, tarjoajissa ja kiintiönäkymissä.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Vaihe vaiheelta (Palveluntarjoaja → Malli)", + "builderModeGlobal": "Globaali mallihaku (Mukautettu yhdistelmä)", + "builderGlobalSearchPlaceholder": "Etsi malleja kaikilta tarjoajilta (esim. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Lisää kaikki", + "builderGlobalShortcuts": "Pikanäppäimet:", + "builderGlobalNoResults": "Ei mallia löytynyt hakusanalle \"{query}\".", + "builderGlobalProviderLabel": "Toimittaja:", + "builderGlobalAccountCount": "{count, plural, one {# tili} other {# tiliä}}", + "builderGlobalAdded": "Lisätty", + "builderGlobalAdd": "Lisää", "manualModel": "Manuaalinen malli", "manualModelInvalid": "Syötä malli muodossa tarjoaja/malli.", "manualModelUnknownProvider": "Tuntematon tarjoajan etuliite.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Istunnon saatavuus", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Tarttuvuus pois päältä", "kimiPresetTitle": "Kimi Coding -esiasetus", "kimiPresetDescription": "Kimi K3 ensisijaisena mallina (Moonshot API), automaattisella varayhteydellä Kimi Code -yhteyksiisi (kimi-coding, kimi-web), kun ne on määritetty.", - "kimiPresetCta": "Lisää esiasetus" + "kimiPresetCta": "Lisää esiasetus", + "intelligentComboCount": "{count, plural, one {# älykästä yhdistelmää} other {# älykästä yhdistelmää}}", + "providersInScope": "{count, plural, one {# tarjoaja käytössä} other {# tarjoajaa käytössä}}", + "savingModePack": "Tallennetaan {pack}…", + "errorTitle": "Yhdistelmien lataaminen epäonnistui", + "errorDescription": "Emme voi ladata yhdistelmädataa juuri nyt. Tarkista yhteytesi ja yritä uudelleen.", + "errorId": "Virhe ID: {id}", + "errorRetry": "Yritä uudelleen", + "comboLabel": "Yhdistelmä" }, "costs": { "title": "Kustannukset", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Käyttäjänimi", "obsidianPassword": "Salasana", - "obsidianTailscaleHint": "Käytä Tailscale-IP-osoitettasi localhostin sijaan, jos muodostat yhteyden mobiililaitteesta. Molempien laitteiden on oltava samassa Tailscale-verkossa." + "obsidianTailscaleHint": "Käytä Tailscale-IP-osoitettasi localhostin sijaan, jos muodostat yhteyden mobiililaitteesta. Molempien laitteiden on oltava samassa Tailscale-verkossa.", + "cloudSyncNotConfigured": "Pilvisynkronointia ei ole määritetty tälle instanssille.", + "notionConnect": "Yhdistä", + "notionConnectFailed": "Yhteyden muodostaminen epäonnistui", + "notionConnected": "Yhdistetty", + "notionConnectionFailed": "Yhteyden muodostaminen epäonnistui", + "notionDescription": "Hae, lue, kysy ja kirjoita Notioniin reititettyjen AI-mallien kautta", + "notionDisconnect": "Katkaise yhteys", + "notionDisconnectFailed": "Yhteyden katkaiseminen epäonnistui", + "notionEnterToken": "Ole hyvä ja syötä Notion-integraatiotunnus", + "notionIntegrationHelp": "Luo sisäinen integraatio kohdassa", + "notionIntegrationToken": "Notionin sisäinen integraatiotunnus", + "notionNotConnected": "Ei yhdistetty", + "notionTokenConfigured": "Token on määritetty. Notion-työkalut ovat saatavilla MCP:n kautta." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Tarjoaja / Malli", "noRemoteProviders": "Ei tarjoajia, joille on määritetty API-avain", "selectProviderModel": "Valitse malli", + "customBaseUrlLabel": "Mukautettu perus-URL (valinnainen)", + "customModelIdLabel": "Mukautettu mallin tunnus (valinnainen)", + "customEndpointHelp": "Käytä OpenAI-yhteensopivaa /embeddings-päätepistettä. Paikalliset päätepisteet ovat sallittuja; pilvimetatietokohteet on estetty.", + "customEndpointSave": "Käytä mukautettua päätepistettä", + "customEndpointInvalid": "Syötä sekä voimassa oleva HTTP(S) perus-URL että mallin tunnus, tai jätä molemmat kentät tyhjiksi.", + "customEndpointSaveFailed": "Mukautettua upotuspistettä ei voitu tallentaa.", "staticEnabledLabel": "Ota staattinen Potion käyttöön", "staticEnabledDesc": "Lataa ja käytä potion-base-8M-mallia paikallisesti", "transformersEnabledLabel": "Ota Transformers.js käyttöön", @@ -4258,7 +4443,9 @@ "cleaning": "Siivotaan...", "cleanNow": "Siivoa nyt", "cleanupSuccess": "{count} piste(ttä) poistettu", - "cleanupFailed": "Siivous epäonnistui" + "cleanupFailed": "Siivous epäonnistui", + "hostLabel": "Isäntä", + "collectionLabel": "Kokoelma" }, "rerank": { "enableLabel": "Ota Rerank käyttöön", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-tasoinen varakaavio", "apiKeyMgmt": "API-avainhallinta", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Aseta ilmaiset tarjoajat", + "description": "Valinnaisesti voit ottaa käyttöön valitut ilman rekisteröitymistä toimittajat. Tarkista jokaisen toimittajan ilmoitus ja sivusto ennen jatkamista; saatavuus ja käyttörajoitukset määräytyvät kolmansien osapuolten mukaan.", + "loading": "Ladataan ilmaisia palveluntarjoajia...", + "loadFailed": "Ei voitu ladata ilmaisia tarjoajia.", + "alreadyConfigured": "Kaikki kelpoiset ilmaiset tarjoajat on jo määritetty.", + "reviewProviderSite": "Tarkista palveluntarjoajan sivusto ja ehdot", + "confirmation": "Olen tarkastellut näitä kolmannen osapuolen tarjoajia ja haluan OmniRouten luovan valitut yhteydet.", + "setupSelected": "Aseta valitut tarjoajat", + "settingUp": "Asetetaan...", + "setupFailed": "Valittuja tarjoajia ei voitu määrittää. Mikään olemassa oleva ei muuttunut.", + "retryFailed": "Yritä uudelleen epäonnistuneita tarjoajia", + "orUseApiKey": "tai yhdistä API-avaimella", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "luotu", + "skipped": "jo määritetty", + "failed": "epäonnistui" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Pakollinen. Palveluntarjoajan API-perus-URL-osoite.", "iconUrlLabel": "Kuvakkeen URL-osoite", "iconUrlHint": "Valinnainen. Kuvan URL-osoite, joka näytetään tämän tarjoajan kuvakkeena.", + "iconUrlInvalid": "Virheellinen kuvakkeen URL. Käytä http(s):// tai data:image/*;base64 URL:ia.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Yhteensopiva (tuote)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Istunto on jo voimassa", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Käytä todennusta", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Liitä API-avain…", "zedSaving": "Tallennetaan…", "zedImportAction": "Tuo", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Ota käyttöön automaattinen Cursor-istunnon uusiminen", + "cursorAgentNudgeBody": "Asenna cursor-agent automaattista istunnon uusimista varten — ilman sitä Cursor-yhteydet tarvitsevat säännöllistä manuaalista uudelleenkytkentää noin 24 tunnin välein.", + "cursorAgentNudgeDismiss": "Hylkää", "zedManualImportFailed": "Manuaalinen tuonti epäonnistui", "zedManualImportSuccess": "Tuotiin {provider}-token Zedistä", "grokImportTitle": "Tuo Grok Build -todennus", @@ -5878,7 +6066,6 @@ "friendliai": "Ilmainen taso palvelimettomaan päättelyyn — luottokorttia ei vaadita", "gemini": "Aina ilmainen: 1 500 pyyntöä/päivä Gemini 2.5 Flashille — ei luottokorttia, hanki avain osoitteesta aistudio.google.com", "gigachat": "Yhdistä GigaChat (Sber) API-avaimella.", - "github-models": "Luo GitHub PAT -tunniste 'models: read' -käyttöoikeudella osoitteessa github.com/settings/tokens", "gitlab": "GitLabin henkilökohtainen käyttöoikeustunniste julkiselle Code Suggestions API:lle. Määritä itse isännöity perus-URL, kun et käytä gitlab.com-palvelua.", "gitlawb-gmi": "Hanki API-avaimesi Gitlawb Opengateway -hallintapaneelista.", "gitlawb": "Hanki API-avaimesi Gitlawb Opengateway -hallintapaneelista.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Yhdistä Kimi Coding olemassa olevalla OAuth-työnkululla.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Yhdistä OpenAI Codex olemassa olevalla OAuth-työnkululla.", - "qwen": "Yhdistä Qwen Code olemassa olevalla OAuth-työnkululla." + "qwen": "Yhdistä Qwen Code olemassa olevalla OAuth-työnkululla.", + "github-models": "Luo GitHub PAT -tunniste 'models: read' -käyttöoikeudella osoitteessa github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} hyväksyy palveluntarjoajan alkuperäiset mallitunnukset. Tuo /modelsista tai lisää mukautettuja tunnuksia reititystä varten.", "bedrockModelsDescription": "Amazon Bedrock -mallit on luokiteltu AWS-alueen mukaan. Tuo osoitteesta /models tai lisää valitulla alueella käytössä olevat kallioperän mallitunnukset.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Kun kaikki määritetyt yhteydet on käytetty loppuun (kiintiö, krediitit tai vanhentuminen), käytä väliaikaisesti tämän tarjoajan avaimettomaa tasoa. Poista käytöstä tämän tarjoajan ohittamiseksi sen sijaan, että lähetät nimettömiä pyyntöjä — suositellaan, kun avaimeton taso hylkää ne (401).", "anonymousFallbackEnabled": "Anonyymi varajärjestelmä käytössä {provider} varten", "anonymousFallbackDisabled": "Anonyymi varayhteys pois käytöstä {provider} — loppuneet yhteydet ohittavat tämän tarjoajan", - "anonymousFallbackUpdateFailed": "Anonyymin varasetuksen päivittäminen epäonnistui" + "anonymousFallbackUpdateFailed": "Anonyymin varasetuksen päivittäminen epäonnistui", + "batchDeleteFailed": "Eräpoisto epäonnistui", + "batchDeleteNetworkError": "Verkkovirhe eräpoistossa", + "batchUpdateFailed": "Eräpäivitys epäonnistui", + "batchUpdateNetworkError": "Verkkovirhe eräpäivityksen aikana", + "categoryAudio": "Ääni", + "categoryCloudAgent": "Pilviagentti", + "categoryIde": "IDE", + "categoryLocal": "Paikallinen", + "categorySearch": "Hae", + "categoryWebCookie": "Verkkosivuston eväste", + "claudeExtraUsageBlockingDisabled": "Claude ylimääräisen käytön esto poistettu käytöstä (ylimääräinen käyttö on sallittu)", + "claudeExtraUsageBlockingEnabled": "Claude ylimääräisen käytön esto käytössä (ylimääräinen käyttö estetään)", + "claudeRoutingPreferenceDisabled": "Ilman etuliitettä olevat Claude-mallit eivät enää suosita Claude Codea", + "claudeRoutingPreferenceEnabled": "Ilman etuliitettä olevat Claude-mallit suosivat nyt Claude Codea", + "clearMediaFilter": "Tyhjennä", + "cliproxyRoutingDisabled": "Pyyntöjä käytetään nyt natiivilla OmniRoute (suora)", + "cliproxyRoutingEnabled": "Pyyntöjä reititetään nyt CLIProxyAPI:n kautta (syvempää emulointia)", + "codexLimitPolicyUpdated": "Codex-rajoituspolitiikka päivitetty", + "codexServiceModeUpdated": "Codex-palvelutila päivitetty", + "codexServiceTierActive": "Codex {tier} palvelutaso on aktiivinen", + "codexTierFastLabel": "Nopea", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Komennon koodin auth soveltaminen epäonnistui", + "commandCodeApplyingApproval": "Selaimen hyväksyntä, sovelletaan…", + "commandCodeApplyingKey": "Käytetään selaimen hyväksymää avainta…", + "commandCodeApprovalInstructions": "Avaa auth-URL, hyväksy pääsy, ja liitä sitten palautettu avain/JSON/URL alle…", + "commandCodeAuthExpired": "Komento Koodi on vanhentunut", + "commandCodeConnected": "Komento Koodi yhdistetty", + "commandCodeConnectionAdded": "Komento Koodi-yhteys lisätty", + "commandCodeLinkExpired": "Komentokoodin linkki on vanhentunut", + "commandCodeOpeningStudio": "Avaamassa Command Code Studio…", + "commandCodePopupBlocked": "Ponnahdusikkuna estetty. Salli ponnahdusikkunat ja yritä Command Code Connectia uudelleen.", + "commandCodeStartFailed": "Komennon Code auth käynnistys epäonnistui", + "connectionDeleted": "Yhteys poistettu", + "connectionFallback": "yhteys", + "coolingConnectionsDescription": "Nämä yhteydet palauttivat 429 (nopeusrajoitus) viimeisellä pyynnöllään. OmniRoute ohittaa ne, kunnes ajastin umpeutuu — manuaalista poistamista ei vaadita.", + "coolingConnectionsTitle": "Tällä hetkellä jäähdytys ({count})", + "failedDeleteAlias": "Aliasn poistaminen epäonnistui", + "failedDeleteConnection": "Yhteyden poistaminen epäonnistui", + "failedDistributeProxies": "Proksien jakaminen epäonnistui.", + "failedSaveModelEndpointSettings": "Mallin päätepisteen asetusten tallentaminen epäonnistui", + "failedUpdateClaudeExtraUsagePolicy": "Epäonnistui Claude ylimääräisen käytön politiikan päivittämisessä", + "failedUpdateClaudeRoutingPreference": "Epäonnistui Claude Code -reittivalinnan päivittäminen", + "failedUpdateCliproxyRouting": "CLIProxyAPI-reitityksen päivittäminen epäonnistui", + "failedUpdateCodexLimitPolicy": "Codex-rajoituspolitiikan päivittäminen epäonnistui", + "failedUpdateCodexServiceMode": "Codex-palvelutilan päivittäminen epäonnistui", + "filterByMedia": "Media", + "freeBadge": "Ilmainen", + "kimiCodeApiKeyLabel": "Kimi Code API-avain", + "modelTestFailed": "Mallin testi epäonnistui", + "modelTestNetworkError": "Verkkovirhe testausmalli", + "networkError": "Verkkovirhe", + "networkErrorDeletingAlias": "Verkkovirhe aliasin poistamisessa", + "networkErrorSettingAlias": "Verkkovirhe aliasin asettamisessa", + "noProvidersMatch": "Ei tarjoajia, jotka vastaavat hakuaasi.", + "noSavedProxies": "Ei tallennettuja välityspalvelimia löytynyt. Lisää välityspalvelimet Asetukset → Välityspalvelin ensin.", + "pageLoadErrorDescription": "Emme voi ladata palveluntarjoajan tietoja juuri nyt. Tarkista yhteytesi ja yritä uudelleen.", + "pageLoadErrorId": "Virhe ID: {id}", + "pageLoadErrorRetry": "Yritä uudelleen", + "pageLoadErrorTitle": "Epäonnistui lataamaan tarjoajia", + "playgroundTitle": "Leikkikenttä", + "providerDetailConnectionFlexActive": "Codex flex -palvelutaso on aktiivinen tälle yhteydelle", + "providerDetailConnectionPriorityActive": "Codex-prioriteettipalvelutaso on aktiivinen tälle yhteydelle", + "providerDetailGlobalFlexActive": "Global Codex flex -palvelutaso on aktiivinen", + "providerDetailGlobalPriorityActive": "Globaalin Codexin prioriteettipalvelutaso on aktiivinen", + "proxiesDistributed": "Jakautunut {assigned} välityspalvelimen osoite {tagLabel}{total} yhteyteen.", + "rerankEndpoint": "Uudelleenjärjestä", + "savedModelEndpointSettings": "Tallennetun mallin päätepisteen asetukset", + "searchByModelAria": "Hae mallin mukaan", + "selectSupportedEndpoint": "Valitse vähintään yksi tuettu päätepiste", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Asetukset", @@ -6460,7 +6719,24 @@ "loadFailed": "Tilausluettelon lataaminen epäonnistui", "toggleFailed": "Kytkimen vaihto epäonnistui", "refreshFailed": "Päivitys epäonnistui", - "deleteFailed": "Poistaminen epäonnistui" + "deleteFailed": "Poistaminen epäonnistui", + "add": "Lisää", + "cancel": "Peruuta", + "configure": "Määritä", + "copyEndpoint": "Kopioi päätepiste", + "coreEndpointHint": "Ydinpisteen Vihje", + "coreNodesHint": "Ydin Solmujen Vihje", + "create": "Luo", + "deleteConfirm": "Poista vahvistus", + "empty": "Tyhjää", + "globalModeDescription": "Globaali Moodin Kuvaus", + "localCoreHint": "Paikallinen Ydinvinkki", + "nodeSummary": "Solmun Yhteenveto", + "providerRequired": "Tarjoaja Vaaditaan", + "providerRouting": "Toimittajan reititys", + "refresh": "Päivitä", + "refreshInterval": "Päivitysväli", + "ruleModeDescription": "Sääntötilan kuvaus" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Suorita automaattinen kuva-tekstiksi-varatoiminto ennen kuvapyyntöjen reitittämistä vain tekstiä tukeville malleille.", "visionBridgeEnabledLabel": "Käytössä", "visionBridgeEnabledDesc": "Ota käyttöön tai poista käytöstä esikutsusilta, joka korvaa kuvaosat poimitulla tekstillä.", + "visionBridgeRerouteTextOnlyLabel": "Ohjaa vain tekstimallit uudelleen", + "visionBridgeRerouteTextOnlyDesc": "Lähetä täydellinen pyyntö, mukaan lukien kuvat, sillamallille, kun valitulla mallilla ei ole kuvasyötettä.", "visionBridgeModel": "Sillan malli", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Tässä voidaan käyttää mitä tahansa OmniRoute-mallitunnusta, joka tukee vision-ominaisuutta.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-avaimelta puuttuu manage-käyttöoikeus.", "BYPASS_PREFIX_NOT_ALLOWED": "Yksi tai useampi etuliite kohdistuu spawn-kykyisiin reitteihin, eikä niitä voi ohittaa.", "GENERIC": "Authz-asetusten päivittäminen epäonnistui." - } + }, + "remove": "Poista" }, "resilienceBaseCooldownLabel": "Perusjäähdytys", "scopeLabel": "Laajuus", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testataan ääntä…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klippiä transkriptoitu {model} avulla", "modalityBridgeAudioTestNoop": "Audio Bridge ei aktivoitunut (kohde saattaa tukea ääntä, STT-toimittajaa ei ole liitetty tai silta on poistettu käytöstä)", - "modalityBridgeAudioTestError": "Äänitesti epäonnistui: {message}" + "modalityBridgeAudioTestError": "Äänitesti epäonnistui: {message}", + "modelRoutingDescriptionPlaceholder": "Reititä Opus-mallit frontier-yhdistelmään", + "cliproxyapiFallbackCodes": "Cliproxyapi Varakoodit", + "cliproxyapiFallbackDescription": "Cliproxyapi Varayhteyskuvaus", + "cliproxyapiHealthLabel": "Cliproxyapi Terveysmerkki", + "cliproxyapiImportFailed": "Cliproxyapi Tuonti Epäonnistui", + "cliproxyapiImportResult": "Cliproxyapi Tuontitulos", + "cliproxyapiInvalidUrl": "Cliproxyapi Virheellinen URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Elinkaaritiedote Jälkeen", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Elinkaaritiedote Ennen", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Elinkaaritiedote Linkki", + "cliproxyapiPortLabel": "Cliproxyapi Port -merkintä", + "cliproxyapiStatusLabel": "Cliproxyapi Tila Merkki", + "cliproxyapiVersionLabel": "Cliproxyapi Versio Merkki", + "collection": "Kokoelma", + "errorPage": { + "description": "Emme voi ladata asetuksia juuri nyt. Yritä uudelleen muutaman sekunnin kuluttua.", + "errorId": "Virhe ID: {id}", + "retry": "Yritä uudelleen", + "title": "Asetusten lataaminen epäonnistui" + }, + "host": "Isäntä", + "notInstalled": "Ei asennettu", + "oneproxyActions": "Oneproxy Toiminnot", + "oneproxyActive": "Oneproxy Aktiivinen", + "oneproxyAnonymity": "Oneproxy Anonymiteetti", + "oneproxyCountry": "Oneproxy Maa", + "oneproxyDelete": "Oneproxy Poista", + "oneproxyEmpty": "Oneproxy Tyhjää", + "oneproxyHost": "Oneproxy Isäntä", + "oneproxyLatency": "Oneproxy Viive", + "oneproxyProtocol": "Oneproxy-protokolla", + "oneproxyQuality": "Oneproxy Laatu", + "oneproxySyncFailed": "Synkronointi epäonnistui: {error}", + "oneproxySyncSuccess": "Synkronoidut {total} proxyt ({added} uutta, {updated} päivitetty)", + "proxyDocumentationSocks5DescAfter": "Proxy-dokumentaatio Socks5 Kuvaus Jälkeen", + "proxyFreePoolAddProxy": "Proxy Free Pool Lisää Proxy", + "proxyFreePoolAdding": "Proxy Vapaa Poolin Lisääminen", + "proxyFreePoolSelectProxy": "Proxy Ilmainen Pooli Valitse Proxy", + "proxyStatusActive": "Proxy-tila Aktiivinen", + "proxyStatusInactive": "Proxy-tila Passiivinen", + "routingAddEntry": "Lisää merkintä", + "settingSaveFailed": "Asetuksen tallentaminen epäonnistui", + "settingSaved": "Asetus Tallennettu", + "skillsmpApiKeyHintAfter": ". Nopeusrajoitus: {limit} pyyntöä/päivä.", + "skillsmpApiKeyHintBefore": "Hanki API-avain osoitteesta", + "syncFailed": "Synkronointi epäonnistui", + "unhealthy": "Epäterveellinen", + "oneproxyDescription": "Hae ja kierrätä ilmaisia, validoituja välityspalvelimia 1proxy-yhteisöalustalta", + "oneproxySyncing": "Synkronoidaan...", + "oneproxySyncNow": "Synkronoi Nyt", + "oneproxyClearAll": "Tyhjennä kaikki", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Tyhjennä kaikki 1proxy-proxyt?", + "memorySkillsSkillsmpDescription": "Yhdistä SkillsMP:hen löytääksesi ja asentaaksesi taitoja markkinapaikalta.", + "memorySkillsActiveProviderDescription": "Valitse, mitä palveluntarjoajaa Taitosivusto käyttää haussa ja asennuksessa.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Markkinapaikka", + "memorySkillsSkillsmpProviderDescription": "Vahvistettu markkinapaikka (käyttää SkillsMP API -avaintasi).", + "memorySkillsSkillsshProviderTitle": "skills.sh Hakemisto", + "memorySkillsSkillsshProviderDescription": "Julkinen hakemistopalvelin (ei vaadi API-avainta).", + "routingCcBridgeCatalogName": "Anthropic-yhteensopiva CC-silta", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Natiivi Claude -palveluntarjoaja OAuth:lla myönnetyillä tokeneilla.", + "routingCcBridgeName": "Claude-Koodi Silta", + "routingCcBridgeDescription": "Välitä päätepisteitä API-avaimilla (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Mukautettu tarjoaja.", + "routingUnknownOpKind": "Tuntematon op-tyyppi: {kind}", + "routingInvalidJson": "Virheellinen JSON: {error}", + "routingConfigMustBeObject": "Konfiguraation on oltava JSON-objekti", + "routingEnabledMustBeBoolean": "`enabled` on oltava tosi tai epätosi", + "routingPipelineMustBeArray": "`pipeline` on oltava ops-taulukko", + "routingPipelineTooLong": "Putkiston ei voi ylittää 50 toimintoa", + "routingOpMissingKind": "Op #{index}: puuttuva tai virheellinen `kind`", + "routingOpUnknownKind": "Op #{index}: tuntematon tyyppi \"{kind}\"", + "routingJsonEditorHide": "Piilota JSON-editori", + "routingJsonEditorImportExport": "Tuo / vie JSON", + "routingJsonEditorLabel": "JSON (muokkaa ja sovella tai liitä tuodaksesi)", + "routingApplyJson": "Käytä JSONia", + "routingTransformsFootnote": "Kaikki muunnosoperaatiot ovat idempotentteja uudelleenkäynnistyksessä. Muutokset tulevat voimaan heti seuraavassa pyynnössä.", + "cliproxyapiUnknown": "Tuntematon", + "cliproxyapiVersion": "Versio", + "cliproxyapiHealth": "Terveys", + "cliproxyapiPort": "Portti", + "qdrantHost": "Isäntä", + "qdrantCollection": "Kokoelma" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Täysi", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Oletusarvoinen", + "off": "Pois", + "lite": "Kevyt", + "standard": "Vakio", + "aggressive": "Aggressiivinen", + "ultra": "Ultra", + "responsesToolOutput": "Vastaustyökalun tuloste" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Suoritetaan pinossa viimeisenä (sen jälkeen kun RTK/Caveman puhdistaa tekstin ja OmniGlyph muuntaa loput kuviksi) ja suoritetaan myös itsenäisesti omniglyph-tilan kautta. Tämä on esikatseluversio ja pysyy oletusarvoisesti poissa käytöstä, kunnes päästä päähän -validointi on valmis.", "saved": "Tallennettu.", "saveFailed": "Tallennus epäonnistui.", - "enableAria": "Ota OmniGlyph-moottori käyttöön" + "enableAria": "Ota OmniGlyph-moottori käyttöön", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Upotetut palvelut", @@ -9127,7 +9500,49 @@ "unableToLoad": "Järjestelmän mittareita ei voi ladata", "product": "Tuote", "resources": "Resurssit", - "company": "Yritys" + "company": "Yritys", + "tokenHealthTooltips": { + "allHealthy": "Kaikki tokenit kunnossa", + "needsAttention": "Joidenkin tokenien huomioiminen tarvitaan", + "refreshFailures": "Tokenin uusimisen epäonnistumisia havaittu", + "unknown": "Terveystila tuntematon" + }, + "systemMonitor": { + "metricsAriaLabel": "Järjestelmän mittarit", + "memory": "Muisti", + "memoryShort": "muisti", + "uptime": "Käytettävyysaika", + "ariaLabel": "Järjestelmän valvonta", + "title": "Järjestelmävalvoja", + "version": "Versio", + "connections": "Yhteydet", + "circuitBreakers": "Kytkinlaitteet", + "open": "{count} auki", + "memoryUsage": "Muistin käyttö" + }, + "never": "Ei koskaan", + "justNow": "Juuri nyt", + "minutesAgo": "{count}m sitten", + "hoursAgo": "{count}t sitten", + "tokens": "Tokenit", + "costs": "Kustannukset", + "autoRefresh": "Automaattinen Päivitys ({seconds}s)", + "toggleAutoRefresh": "Vaihda automaattinen päivitys päälle/pois", + "activeRequests": "Aktiiviset Pyyntöjä", + "totalRequests": "Kokonaispyynnöt", + "totalInputTokens": "Yhteensä syöttötokenit", + "model": "Malli", + "provider": "Toimittaja", + "requests": "Pyyntöjä", + "lastUsed": "Viimeksi käytetty", + "inputTokens": "Syöttötokenit", + "totalTokens": "Kokonaismerkit", + "inputCost": "Syöttökustannus", + "outputCost": "Tulostuskustannus", + "noUsageData": "Ei käyttöä vielä tallennettu. Tee joitakin pyyntöjä nähdäksesi tiedot täällä.", + "account": "Tili", + "accountLabel": "Tili {id}", + "noAccountUsage": "Ei tilikohtaisia käyttöjä ole vielä tallennettu. Tee pyyntöjä OAuth-tileillä nähdäksesi tiedot täällä." }, "auth": { "welcome": "Tervetuloa", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Nollaa sovellustietojen kautta", + "resetViaAppDataDescription": "Poista asetustiedosto sovelluksen datakansiosta palauttaaksesi salasanasi:", + "quitDesktopApp": "Lopeta OmniRoute-työpöytäsovellus kokonaan", + "navigateToAppDataDirectory": "Siirry sovelluksen tietohakemistoon:", + "checkSystemAppDataFolder": "(Tarkista järjestelmäsi sovellustietojen kansio)", + "relaunchDesktopFreshSetup": "Käynnistä OmniRoute-työpöytäsovellus uudelleen — se aloittaa uuden asennuksen", + "alternativeSetPasswordTitle": "Vaihtoehto: Aseta Uusi Salasana", + "alternativeSetPasswordDescription": "Aseta uusi alkuperäinen salasana palvelimen ympäristöasetustiedoston kautta:", + "openServerEnvFilePrefix": "Avaa", + "relaunchDesktopApp": "Käynnistä OmniRoute-työpöytäsovellus uudelleen", + "codexLinkInvalidOrExpired": "Tämä linkki on virheellinen tai vanhentunut.", + "codexValidationServerError": "Ei voitu saavuttaa palvelinta tämän linkin vahvistamiseksi.", + "codexSaveConnectionError": "Yhteyden tallentaminen epäonnistui. Linkki saattaa olla vanhentunut.", + "codexDeviceLoginDisabled": "Laitekoodeilla kirjautuminen on poistettu käytöstä tälle OpenAI-tilille. Ota se käyttöön ChatGPT:n tietoturva-asetuksissa (tai kysy työtilan ylläpitäjältäsi).", + "codexAuthorizationTimedOut": "Valtuutus on vanhentunut. Napsauta Aloita uudelleen yrittääksesi uudelleen.", + "authenticationCancelled": "Todennus peruttiin.", + "unexpectedAuthenticationError": "Odottamaton virhe todennuksessa. Yritä uudelleen.", + "connectOpenAiCodexTitle": "Yhdistä OpenAI Codex", + "codexConnectDescription": "Valtuuta ChatGPT-tili tämän yhteyden loppuunsaattamiseksi.", + "validatingCodexLink": "Vahvistetaan linkkiä…", + "codexGenerateCodeDescription": "Napsauta alla olevaa linkkiä luodaksesi kertakäyttöisen koodin, ja kirjaudu sitten OpenAI:hin.", + "startCodexFlow": "Aloita", + "requestingOpenAiCode": "Pyytää koodia OpenAI:lta…", + "codexVerificationInstructions": "1. Avaa OpenAI-vahvistussivu ja 2. syötä tämä koodi. Tämä sivu päivittyy automaattisesti, kun olet valtuuttanut.", + "yourCode": "Koodisi", + "openVerificationPage": "Avaa vahvistussivu", + "copyUrlShort": "Kopioi URL", + "savingConnection": "Tallennetaan yhteyttä…", + "codexConnected": "Yhdistetty!", + "codexConnectionRegistered": "Codex-tili on rekisteröity. Voit sulkea tämän välilehden.", + "tryAgain": "Yritä uudelleen", + "traeAuthorizationSuccess": "Trae-valtuutus ✓", + "traeAuthorizationFailed": "Trae-valtuutus epäonnistui", + "closeAuthorizationWindow": "Voit sulkea tämän ikkunan.", + "returnToDashboard": "Palaa ohjauspaneeliin.", + "resetViaAppData": "Nollaa sovellustietojen kautta", + "deleteSettingsToReset": "Poista asetustiedosto sovelluksen datakansiosta palauttaaksesi salasanasi:", + "quitAppCompletely": "Lopeta OmniRoute-työpöytäsovellus kokonaan", + "navigateToAppData": "Siirry sovelluksen tietohakemistoon", + "checkAppDataFolder": "Tarkista järjestelmän sovellustietojen kansio", + "deleteSettingsJson": "Poista", + "relaunchAppFresh": "Käynnistä OmniRoute-työpöytäsovellus uudelleen — se aloittaa uuden asennuksen", + "alternativeSetPassword": "Vaihtoehto: Aseta Uusi Salasana", + "setNewPasswordViaEnv": "Aseta uusi alkuperäinen salasana palvelimen ympäristöasetustiedoston kautta:", + "openServerEnv": "Avaa", + "inDataDirectory": "data-hakemistossa", + "addOrUpdate": "Lisää tai päivitä", + "deleteAndRelaunch": "Poista", + "settingsJson": "settings.json", + "fromDataDir": "data-hakemistosta", + "relaunchApp": "Käynnistä OmniRoute-työpöytäsovellus uudelleen" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Oletko valmis yksinkertaistamaan tekoäly-infrastruktuuriasi?", "ctaDescription": "Liity kehittäjien joukkoon, jotka virtaviivaistavat tekoälyintegraatiotaan OmniRouten avulla. Avoin lähdekoodi ja ilmainen aloittaa.", "startFree": "Aloita ilmaiseksi", - "readDocumentation": "Lue dokumentaatio" + "readDocumentation": "Lue dokumentaatio", + "company": "Yritys", + "pricing": "Hinnoittelu", + "apiReference": "API-viite", + "helpCenter": "Ohjeet", + "about": "Tietoa", + "blog": "Blogi", + "contact": "Ota Yhteyttä", + "terms": "Ehdot", + "privacy": "Yksityisyys", + "license": "Lisenssi", + "footerDescription": "Yhdistetty käyttöliittymä modernille tekoälyinfrastruktuurille. Turvallinen, havaittavissa oleva ja skaalautuva.", + "communityDiscussions": "Yhteisön Keskustelut" }, "docs": { "title": "Dokumentaatio", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Rekisteröi ja hallitse agentteja ACP-rekisterin kautta agenttien välistä viestintää ja työkalujen jakamista varten.", "protocolAcpStep1": "Siirry kohtaan Dashboard → Agents nähdäksesi rekisteröidyt ACP-agentit.", "protocolAcpStep2": "Rekisteröi uusia agentteja ominaisuuksineen ja päätepistemäärityksineen.", - "protocolAcpStep3": "Käytä CLI-työkaluja agentin viestintäkanavien määrittämiseen." + "protocolAcpStep3": "Käytä CLI-työkaluja agentin viestintäkanavien määrittämiseen.", + "metadataTitleTemplate": "%s — OmniRoute Asiakirjat", + "metadataDefaultTitle": "OmniRoute-dokumentaatio", + "metadataDescription": "Kattava dokumentaatio OmniRoute AI -portille — asennus, API, pakkaus, käyttöönotto ja paljon muuta.", + "layoutNavTitle": "OmniRoute Asiakirjat", + "layoutHomeLink": "Dokumenttien Etusivu", + "layoutDashboardLink": "← Takaisin Hallintapaneeliin", + "homeTitle": "OmniRoute-dokumentaatio", + "homeMetadataDescription": "Kaikki mitä tarvitset AI:n reitittämiseen, pakkaamiseen ja skaalaamiseen — asennusoppaat, API-viite, pakkaus, käyttöönotto ja paljon muuta.", + "homeTwitterDescription": "Kattavat asiakirjat OmniRoute AI -portille", + "homeDescription": "Kaikki, mitä tarvitset AI:si reitittämiseen, pakkaamiseen ja skaalaamiseen", + "homeSearchHint": "Paina Ctrl K etsiäksesi asiakirjat", + "featuredQuickStartTitle": "Pika Aloitus", + "featuredQuickStartDescription": "Käynnistä OmniRoute 3 minuutissa", + "featuredAutoComboTitle": "Auto-Combo Opas", + "featuredAutoComboDescription": "Anna OmniRouten valita paras tekoäly sinulle", + "featuredProvidersTitle": "Palveluntarjoajien Opas", + "featuredProvidersDescription": "Yhdistä AI-toimittajat minuuteissa", + "nonTechUsersTitle": "Ei-teknisille käyttäjille", + "nonTechUsersSubtitle": "Aloita nopeasti — ei tarvita teknistä taustaa", + "techUsersTitle": "Tekniikkakäyttäjille", + "techUsersSubtitle": "Syväsukellus arkkitehtuuriin, API:hin ja sisäisiin toimintoihin", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interaktiivinen API-selain — kokeile OmniRoute-päätteitä livenä reaaliaikaisilla vastauksilla", + "apiExplorerTitle": "API-selain", + "apiExplorerDescription": "Kokeile OmniRoute-päätteitä livenä. Valitse pääte, määritä pyyntösi ja katso vastaus reaaliajassa.", + "apiExplorerSseStarted": "SSE-virta käynnistetty — tarkista terminaali/devtools reaaliaikaista tulostusta varten.", + "apiExplorerError": "Virhe: {message}", + "apiExplorerAuth": "tunnistus", + "apiExplorerResponseLabel": "Vastaus", + "apiExplorerSelectEndpoint": "Valitse päätepiste tutkittavaksi", + "apiExplorerChooseApi": "Valitse API sivupalkista nähdäksesi yksityiskohdat ja kokeillaksesi sitä livenä", + "feedbackThanks": "Kiitos palautteestasi!", + "feedbackQuestion": "Oliko tämä sivu hyödyllinen?", + "pageMetadataTitle": "{title} — OmniRoute Asiakirjat", + "pageMetadataDescription": "OmniRoute-dokumentaatio: {title}", + "breadcrumb": "Naviopalkki", + "apiReferenceTable": { + "parameters": "Parametrit", + "name": "Nimi", + "type": "Tyyppi", + "description": "Kuvaus", + "returns": "Palauttaa", + "typePrefix": "Tyyppi:" + } }, "legal": { "privacyPolicy": "Tietosuojakäytäntö", @@ -9957,7 +10479,42 @@ "successMessage": "{providerName} -tilisi on yhdistetty.", "done": "Valmis", "error": "Yhteys epäonnistui", - "tryAgain": "Yritä uudelleen" + "tryAgain": "Yritä uudelleen", + "errorSessionIncomplete": "OAuth-istunto on epätäydellinen (puuttuu uudelleenohjaus-URI tai koodivahvistin). Käynnistä yhteys uudelleen ja yritä taas.", + "errorExchangeFailed": "Vaihto epäonnistui", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Oletus Google OAuth -tunnistetiedot toimivat vain localhostissa. Etäkäyttöä varten määritä omat OAuth-tunnistetietosi ympäristömuuttujien kautta: ANTIGRAVITY_OAUTH_CLIENT_ID ja ANTIGRAVITY_OAUTH_CLIENT_SECRET. Katso README-osio 'OAuth etäpalvelimella'.", + "errorSaveFailed": "Tallennus epäonnistui", + "errorAuthorizationFailed": "Valtuutus epäonnistui", + "errorAuthorizationTimeout": "Valtuutuksen aikakatkaisu", + "errorRequestFailed": "Pyyntö epäonnistui", + "errorCallbackServerFailed": "Callback-palvelimen käynnistys epäonnistui", + "errorBrowserUnavailable": "Selaimen OAuth ei ole saatavilla tälle tarjoajalle nykyisessä ympäristössä. Käytä sen sijaan tuettua todennusmenetelmää.", + "errorStateMismatch": "OAuth-tilan epäyhtenäisyys. Käynnistä yhteys uudelleen ja yritä taas.", + "errorImportAccessToken": "Pääsyn tunnuksen tuonti epäonnistui", + "errorSessionNotInitialized": "OAuth-istuntoa ei ole alustettu. Käynnistä yhteysprosessi uudelleen ja yritä taas.", + "errorNoAuthorizationCode": "Ei valtuutuskoodia löytynyt. Liitä takaisinsoitto-URL tai Valtuutuskoodi.", + "tabDeviceCode": "Laitetunnus", + "tabBrowserLogin": "Selaimen Kirjautuminen", + "tabImportAuthJson": "Tuo auth.json", + "tabPasteApiKey": "Liitä API-avain", + "windsurfPasteDescription": "Windsurf / VS Code IDE: Suorita \"Windsurf: Provide Auth Token\" -komento komentopaletista (tai napsauta Jupyter \"Get Windsurf Authentication Token\" -painiketta), kopioi sitten näkyvä token ja liitä se alle. windsurf.com/show-auth-token -sivun avaaminen suoraan näyttää vain \"Redirecting\" -sivun — IDE:n on aloitettava prosessi.", + "grokAuthJsonDescription": "Liitä koko sisältö tiedostosta ~/.grok/auth.json (ei vain JWT \"key\" -kenttää). Pelkkä JWT:llä ei ole refresh_tokenia, joten yhteys katkeaa vanhentumisen jälkeen (#7610). Suosi erityistä Import auth.json -modaalia, kun se on saatavilla.", + "devinDesktopPasteDescription": "Liitä olemassa oleva Devin API-avain todennetusta Devin-istunnosta. Avaimen vientimahdollisuudet ja vaiheet vaihtelevat Devin-version ja tilin mukaan.", + "devinPasteDescription": "Anna WINDSURF_API_KEY (saadaksesi sen `devin auth login` -komennolla tai Windsurf IDE:n \"Windsurf: Provide Auth Token\" -komennolla).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API-avain / Token", + "saving": "Tallennetaan…", + "saveConnection": "Tallenna Yhteys", + "gheDescription": "Anna GitHub Enterprise -instanssisi perus-URL-osoite (esim. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise -osoite", + "gheUrlRequired": "GitHub Enterprise -URL on pakollinen", + "gitlabDuoSetupTitle": "GitLab Duo OAuth -asetuksen määrittäminen", + "gitlabDuoSetupMessage": "GitLab Duo OAuthia ei ole määritetty. Rekisteröi OAuth-sovellus osoitteessa {applicationsUrl} uudelleenohjaus-URI:lla {redirectUri} ja käyttöoikeusalueilla \"{scopes}\", sitten aseta {clientIdEnv} (ja valinnaisesti {clientSecretEnv}) ja käynnistä uudelleen.", + "gitlabDuoSetupDescription": "Kun sovellus on rekisteröity ja ympäristömuuttujat on asetettu tälle OmniRoute-instanssille, napsauta Jatka aloittaaksesi OAuth-kirjautumisen.", + "continue": "Jatka" }, "cursorAuthModal": { "title": "Yhdistä kohdistin IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Lataa lisää", - "loadingMore": "Ladataan lisää..." + "loadingMore": "Ladataan lisää...", + "correlationId": "Korrelaatio-ID", + "group": { + "showAllRows": "Näytä kaikki rivit", + "showLatestPerCorrelation": "Näytä uusin korrelaatio-ID:n mukaan", + "grouped": "Ryhmitelty" + }, + "running": "käynnissä", + "interval": { + "decrease": "Vähennä väliä", + "title": "Automaattinen päivitysväli sekunneissa", + "increase": "Lisää väliä" + }, + "status": { + "inProgress": "Käynnissä", + "recoveredByRetry": "Palautettu yrittämällä uudelleen", + "goToParent": "Siirry vanhempaan pyyntöön", + "healedTitle": "Epäonnistui, palautettu {count} uudelleenyrittämisen jälkeen", + "healed": "parantunut", + "failedTitle": "Kaikki {count} yritykset epäonnistuivat", + "failed": "epäonnistui", + "pinnedTitle": "Malli valittu kontekstivälimuistin istunnon kiinnittämisen kautta", + "pinned": "kiinnitetty" + }, + "attempts": "yritykset", + "detail": { + "collapse": "Yhdistele {title}", + "expand": "Laajenna {title}", + "copyTitle": "Kopioi {title}", + "copied": "Kopioitu!", + "copy": "Kopioi", + "autoscrollOn": "Autoskrollaus: päällä", + "autoscrollOff": "Autoskrollaus: pois", + "payload": { + "clientRawRequest": "Asiakkaan Raaka Pyyntö", + "clientRequest": "Asiakaspyyntö", + "openaiRequest": "OpenAI-pyyntö", + "providerRequest": "Palveluntarjoajan Pyyntö", + "providerResponse": "Palveluntarjoajan Vastaus", + "clientResponse": "Asiakkaan Vastaus", + "pipelineError": "Putkivirhe" + }, + "payloadMissing": "Yksityiskohtainen kuormitusartefakti ei ole enää saatavilla tälle lokimerkinnälle.", + "payloadCorrupt": "Yksityiskohtaisia kuormitusartefakteja ei voitu jäsentää.", + "notAvailable": "N/A", + "semanticCache": "Semanttinen (OmniRoute)", + "upstreamCache": "Ylävirta (Palveluntarjoaja)", + "ariaLabel": "Pyyntö lokitiedot", + "completed": "Valmis", + "upstreamStatus": "Ylävirta: {status}", + "statusDiscrepancy": "OmniRoute palautti {status}, vaikka tarjoaja palautti {provider}", + "previousRequest": "Aikaisempi pyyntö", + "nextRequest": "Seuraava pyyntö", + "close": "Sulje yksityiskohtien modal", + "startedAt": "Aloitettu kohdassa", + "endedAt": "Päättynyt Klo", + "duration": "Kesto", + "model": "Malli", + "provider": "Toimittaja", + "account": "Tili", + "input": "Syöte", + "totalIn": "Yhteensä sisään: {value}", + "cacheRead": "Välimuistin Luku: {value}", + "cacheWrite": "Välimuistin kirjoitus: {value}", + "compressed": "Pakattu: {from} → {to} ({percent}% säästetty)", + "output": "Tulostus", + "totalOut": "Yhteensä ulos: {value}", + "reasoning": "Pohdinta: {value}", + "requestedModel": "Pyydetty Malli", + "requestProtocol": "Req-protokolla", + "cacheSource": "Välimuisti Lähde", + "modelPinning": "Mallin Kiinnitys", + "activeModelPinning": "Aktiivinen — malli valittu istunnon kiinnittämisen kautta", + "rotated": "Käännetty: {initial} -> {final}", + "apiKey": "API-avain", + "noApiKey": "Ei API-avainta", + "combo": "Yhdistelmä", + "error": "Virhe", + "unblockAll": "Poista kaikki esto", + "cleared": "Tyhjennetty", + "unblock": "Poista esto", + "relatedRequests": "Liittyvät Pyyntösi ({count})", + "current": "nykyinen", + "detailStatus": "Yksityiskohtainen Tila", + "loadingDetails": "Ladataan pyyntöyksityiskohtia...", + "providerEventStream": "Toimittajan tapahtumavirta", + "clientEventStream": "Asiakas Tapahtumavirta", + "eventStream": "Tapahtumavirta", + "responsePayloadLegacy": "Vastauskuorma (Perinteinen)", + "requestPayloadLegacy": "Pyyntökuorma (Perinteinen)", + "noPayload": "Ei kuormitustietoja saatavilla tälle lokimerkinnälle.", + "correlationId": "Korrelaatio-ID", + "correlationIdValue": "Korrelaatio-ID: {id}", + "detailedPayloadInfo": "Ota ensin käyttöön yksityiskohtainen lokitus, jos haluat nelivaiheisen asiakas/toimittaja kuormitusnäkymän uusille pyyntöille." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} poistettu käytöstä", "providerAdded": "{provider} lisätty", "add": "Lisää", - "manualApiKey": "Käytä manuaalista API-avainta" + "manualApiKey": "Käytä manuaalista API-avainta", + "createDahlTokenFailed": "Dahl-tokenin luominen epäonnistui", + "providerProxy": "Välimuisti", + "providerProxyConfigureHint": "Määritä välityspalvelin", + "providerProxyTitleConfigured": "Proxy on määritetty: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Käyttöehtojen rajoittama — tarkista ehdot", "caution": "Varoitus — henkilökohtaisen käytön / välityspalvelimen lausekkeet", "ok": "Yleisesti salliva" - } + }, + "allProviders": "Kaikki palveluntarjoajat", + "noApiKeyRequired": "Ei API-avainta vaadita" }, "providerHealthAutopilot": { "title": "Palveluntarjoajien kunnon automaattiohjaus", @@ -12390,7 +13047,11 @@ "on": "PÄÄLLÄ", "off": "POIS", "availableProviders": "Saatavilla olevat tarjoajat ({count})", - "noProviderOverrides": "Ei ohituksia — kaikki aktiiviset tarjoajat osallistuvat oletusmalleillaan" + "noProviderOverrides": "Ei ohituksia — kaikki aktiiviset tarjoajat osallistuvat oletusmalleillaan", + "resetFailed": "Nollaus epäonnistui", + "resetSuccess": "Asetukset palautettu oletusarvoihin", + "running": "Suoritetaan...", + "testFailed": "Testi epäonnistui" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) on OmniRouten perustava avoimen lähdekoodin ystävä", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Palveluntarjoaja ei tue näkymää tälle kuvapyynnölle", "capabilityFilter.toolsMismatch": "Toimittaja ei tue työkalun kutsumista", "capabilityFilter.structuredOutputMismatch": "Palveluntarjoaja ei tue jäsenneltyä tulostusta", - "capabilityFilter.contextWindowMismatch": "Pyyntö ylittää tarjoajan kontekstin ikkunan" + "capabilityFilter.contextWindowMismatch": "Pyyntö ylittää tarjoajan kontekstin ikkunan", + "publicSystem": { + "notFound": { + "title": "Sivua ei löytynyt", + "description": "Etsimääsi sivua ei ole olemassa tai se on siirretty.", + "dashboardAriaLabel": "Palaa kojelautaan", + "statusAriaLabel": "Avaa järjestelmän tilasivu", + "systemStatus": "Järjestelmän tila" + }, + "error": { + "title": "Sisäinen palvelinvirhe", + "description": "Jotain meni pieleen käsitellessäsi pyyntöäsi. Tiimimme on saanut ilmoituksen ja työskentelee korjauksen parissa.", + "errorId": "Virhe ID: {id}", + "detailsAriaLabel": "Virheen tiedot", + "retryAriaLabel": "Yritä ladata sivu uudelleen", + "tryAgain": "Yritä uudelleen", + "dashboardAriaLabel": "Palaa kojelautaan", + "statusAriaLabel": "Avaa järjestelmän tila", + "systemStatus": "Järjestelmän tila" + }, + "globalError": { + "title": "Jotain meni pieleen", + "description": "Odottamaton virhe tapahtui. Tämä on kirjattu ja tiimimme tutkii asiaa.", + "detailsAriaLabel": "Virheen tiedot", + "retryAriaLabel": "Yritä ladata sivu uudelleen", + "tryAgain": "Yritä uudelleen", + "statusAriaLabel": "Avaa järjestelmän tila", + "systemStatus": "Järjestelmän tila" + }, + "offline": { + "title": "Yhteysongelma", + "description": "OmniRoute ei voi tällä hetkellä saavuttaa verkkoa. Tarkista internet-, VPN- tai proxy-asetuksesi.", + "connectionRestored": "Yhteys palautettu", + "offlineModeDetected": "Offline-tila havaittu", + "retryConnection": "Yritä uudelleen yhteyttä", + "openStatusPage": "Avaa Tila Sivu" + }, + "maintenance": { + "title": "Suunniteltu Huolto", + "description": "Jotkin palvelut ovat tilapäisesti poissa käytöstä huollon aikana. Ydinreititys pysyy yleensä online-tilassa, mutta hallintatoiminnot voivat olla heikentyneitä.", + "suggestion1": "Yritä uudelleen muutaman minuutin kuluttua.", + "suggestion2": "Tarkista nykyiset terveysindikaattorit ja palveluntarjoajan tila ennen uudelleenyritystä.", + "systemStatus": "Näytä järjestelmän tila", + "healthDashboard": "Avaa Terveyskoontinäyttö" + }, + "status": { + "title": "Järjestelmän tila", + "description": "Reaaliaikainen operatiivinen tilannekuva OmniRoute-ydinpalveluille.", + "loadingHealth": "Ladataan terveysmittareita...", + "failedToLoad": "Järjestelmän terveyden lataaminen epäonnistui.", + "unableToReachHealth": "Ei voida saavuttaa terveyspistettä. Tarkista yhteys ja yritä uudelleen.", + "healthCheckFailed": "Terveystarkastus Epäonnistui", + "openConnectivityHelp": "Avaa Liitettävyysapu", + "maintenanceInfo": "Ylläpitotiedot", + "service": "Palvelu", + "unknown": "tuntematon", + "notAvailable": "e/i", + "providersTracked": "Seurattavat tarjoajat", + "circuitBreakerState": "Palveluntarjoajan piirikatkaisijan tila", + "lastUpdate": "Viimeisin päivitys: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Virheellinen pyyntö", + "description": "Pyyntökuorma on virheellinen tai puutteellinen.", + "suggestion1": "Tarkista vaaditut kentät ja payload-muoto ennen uudelleenyritystä.", + "suggestion2": "Jos käytät APIa, validoi JSON-skeema paikallisesti.", + "suggestion3": "Jos tämä jatkuu, avaa pyyntö Translator Playgroundissa tarkistaaksesi kuorman.", + "primaryAction": "Avaa Dokumentaatio", + "secondaryAction": "Avaa Kääntäjä" + }, + "401": { + "title": "Valtuuttamaton", + "description": "Todennus vaaditaan tämän resurssin käyttämiseksi.", + "suggestion1": "Kirjaudu sisään uudelleen ja yritä toimintoa uudelleen.", + "suggestion2": "API-kutsuja varten varmista, että Bearer-tunnus on läsnä ja voimassa.", + "suggestion3": "Jos tokeni on äskettäin vaihdettu, päivitä asiakastunnuksesi.", + "primaryAction": "Siirry kirjautumiseen", + "secondaryAction": "Hallitse API-avaimia" + }, + "403": { + "title": "Kielletty", + "description": "Pyyntösi ymmärrettiin, mutta pääsy on kielletty politiikan vuoksi.", + "suggestion1": "Tarkista IP-sallinta/estolistaus säännöt asetuksista.", + "suggestion2": "Vahvista mallin ja budjetin politiikat, jotka on liitetty API-avaimeesi.", + "suggestion3": "Pyydä järjestelmänvalvojaa myöntämään tarvittava käyttöoikeusalue.", + "primaryAction": "Avoin pääsy -apu", + "secondaryAction": "Avaa Tietoturva-asetukset" + }, + "408": { + "title": "Pyyntö aikakatkaistu", + "description": "Palvelin ei saanut täydellistä pyyntöä ajoissa.", + "suggestion1": "Yritä pyyntöä pienemmällä kuormalla.", + "suggestion2": "Tarkista verkon vakaus ja VPN/proxy-viive.", + "suggestion3": "Pitkiä toimintoja varten ota käyttöön suoratoisto tai jaa pyyntö.", + "primaryAction": "Avaa Päätepisteopas", + "secondaryAction": "Tarkista Verkon Tila" + }, + "429": { + "title": "Liian monta pyyntöä", + "description": "Käyttäjän, avaimen tai tarjoajan arviointirajoja on ylitetty.", + "suggestion1": "Odota jäähdytysaikaa ja yritä uudelleen ehdotetun aikavälin jälkeen.", + "suggestion2": "Vaihda yhdistelmään, jossa on varapalveluntarjoajia.", + "suggestion3": "Säädä tarjoajan kestävyys-/nopeusrajoitusprofiileja asetuksissa.", + "primaryAction": "Avaa Resilienssiasetukset", + "secondaryAction": "Avaa Combos" + }, + "500": { + "title": "Sisäinen palvelinvirhe", + "description": "Odottamaton palvelinpuolen virhe tapahtui käsitellessäsi pyyntöäsi.", + "suggestion1": "Yritä uudelleen muutaman sekunnin kuluttua.", + "suggestion2": "Tarkista terveystelemetria ja palvelinlokit korreloituville pyyntö-ID:ille.", + "suggestion3": "Jos ongelma jatkuu, raportoi ongelma aikaleiman ja pyyntöyhteyden kanssa.", + "primaryAction": "Avaa Terveysdashboaridi", + "secondaryAction": "Avaa lokit" + }, + "502": { + "title": "Huono Gateway", + "description": "Ylävirran tarjoaja tai porttiteknologian integrointi palautti virheellisen vastauksen.", + "suggestion1": "Yritä uudelleen toisen tarjoajan tai aktiivisen yhdistelmäreitin kanssa.", + "suggestion2": "Tarkista palveluntarjoajan tunnistetiedot ja mallin saatavuus.", + "suggestion3": "Tarkista kääntäjän tulos, jos muotoonmuutos on mukana.", + "primaryAction": "Avaa Palveluntarjoajat", + "secondaryAction": "Avaa Kääntäjä" + }, + "503": { + "title": "Palvelu ei ole käytettävissä", + "description": "Palvelu ei ole tilapäisesti saatavilla huollon tai heikentyneiden riippuvuuksien vuoksi.", + "suggestion1": "Odota hetki ja yritä uudelleen.", + "suggestion2": "Tarkista huoltoviestit ja järjestelmän tila.", + "suggestion3": "Käytä varapalveluntarjoajia, jos työnkulkuusi liittyy viiveherkkyys.", + "primaryAction": "Ylläpidon tiedot", + "secondaryAction": "Järjestelmän tila" + } + } + }, + "kiroAuthModal": { + "title": "Yhdistä {providerLabel}", + "chooseMethod": "Valitse todennusmenetelmäsi:", + "builderId": "AWS Builder ID", + "builderDescription": "Suositeltu useimmille käyttäjille. Kirjaudu sisään AWS-tilillä, joka on liitetty {providerLabel}.", + "organization": "Organisaatiosi (AWS IAM Identity Center)", + "organizationDescription": "Käytä yrityksesi SSO-käynnistys-URL-osoitetta (esimerkki: {url}).", + "googleAccount": "Google-tili", + "googleDescription": "Kirjaudu sisään Google-tililläsi.", + "githubAccount": "GitHub-tili", + "githubDescription": "Kirjaudu sisään GitHub-tililläsi.", + "importToken": "Tuonti Token", + "importDescription": "Liitä {providerLabel} -palvelusta viety päivitystunnus.", + "apiKey": "API-avain", + "apiKeyDescription": "Liitä pitkäikäinen {providerLabel} / CodeWhisperer API-avain. Se tallennetaan bearer-todistuksena ilman refresh-tokenia; profiilin löytäminen on parhaimmillaan.", + "idcStartUrl": "IDC Käynnistys-URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Organisaatiosi AWS IAM Identity Center -URL", + "awsRegion": "AWS-alue", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-alue Identiteettikeskuksellesi (oletus: us-east-1)", + "continue": "Jatka", + "back": "Takaisin", + "autoDetecting": "Automaattinen tunnistaminen...", + "readingCredentials": "Luen {providerLabel} tunnistetiedot AWS SSO välimuistista", + "tokenNotDetected": "{providerLabel} tokenia ei havaittu automaattisesti. Ole hyvä ja liitä päivitystokenisi manuaalisesti.", + "refreshToken": "Päivitä tunnus", + "tokenPlaceholder": "Token täytetään automaattisesti...", + "importing": "Tuodaan...", + "apiKeyPlaceholder": "Liitä {providerLabel} API-avain...", + "apiKeyStoredDescription": "Tallennettu salattuna pitkäaikaisena käyttöoikeustodistuksena. Uudistamisprosessia ei ole.", + "apiKeyRegionDescription": "AWS-alue avaimelle (oletus: us-east-1)", + "validating": "Vahvistetaan...", + "validateAndSaveApiKey": "Vahvista ja Tallenna API-avain", + "errorAutoDetect": "Ei voitu automaattisesti tunnistaa tokenia", + "errorAutoDetectFailed": "Tokenin automaattinen tunnistus epäonnistui", + "errorRefreshTokenRequired": "Ole hyvä ja syötä päivitystunnus", + "errorImportFailed": "Tuonti epäonnistui", + "errorApiKeyRequired": "Ole hyvä ja syötä Kiro API -avain", + "errorApiKeyImportFailed": "API-avaimen tuonti epäonnistui", + "errorIdcStartUrlRequired": "Ole hyvä ja syötä IDC:n aloitus-URL-osoite" + }, + "kiroSocialOAuthModal": { + "title": "Yhdistä {providerLabel} kautta {providerName}", + "errorStartAuthorization": "Valtuutuksen käynnistäminen epäonnistui", + "errorAuthorizationExpired": "Valtuutus on vanhentunut. Aloita kirjautumisprosessi uudelleen.", + "errorAuthorizationFailed": "Valtuutus epäonnistui", + "initializing": "Alustetaan...", + "settingUp": "Asetetaan {providerName} -todennusta", + "openIncognito": "Avaa tämä linkki Incognito-ikkunassa", + "incognitoDescription": "Käytä Incognito/Private-ikkunaa välttääksesi istuntokonflikteja olemassa olevien tilien kanssa.", + "copyLink": "Kopioi linkki", + "verificationCode": "Vahvistuskoodi", + "waiting": "Odotetaan valtuutusta...", + "cancel": "Peruuta", + "successTitle": "Yhdistetty onnistuneesti!", + "successMessage": "{providerLabel}-tilisi {providerName}:n kautta on yhdistetty.", + "done": "Valmis", + "errorTitle": "Yhteyden muodostaminen epäonnistui", + "close": "Sulje" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Valtuutus epäonnistui", + "errorPopupBlocked": "Ponnahdusikkuna estetty — salli ponnahdusikkunat tälle sivustolle tai liitä token manuaalisesti alle.", + "errorPopupClosed": "Valtuutusikkuna suljettiin ennen kuin se saatiin päätökseen.", + "errorAccessTokenRequired": "Pääsytunnus on vaadittu.", + "errorImportFailed": "Tuonti epäonnistui", + "title": "Yhdistä Trae SOLO", + "authorizeDescription": "Valtuuta trae.ai kautta ponnahdusikkunassa. Ponnahdusikkuna sulkeutuu itsestään, kun token on tuotu.", + "authorizeImportant": "Tärkeää: sinun on ensin kirjauduttava sisään trae.ai -selaimessa tässä selaimessa. Valtuuttamissivu vahvistaa vain olemassa olevan istunnon — se ei voi kirjautua sisään. Jos näet \"Kirjautuminen epäonnistui\", napsauta \"Avaa solo.trae.ai\", kirjaudu sisään ja palaa sitten tänne.", + "waitingForAuthorization": "Odotetaan trae.ai…", + "authorizeWithBrowser": "Valtuuta selaimella", + "openSoloTrae": "Avaa solo.trae.ai", + "orPasteManually": "tai liitä token manuaalisesti", + "manualInstructions": "Kirjaudu sisään solo.trae.ai, avaa DevTools → Verkko, lähetä mikä tahansa chat-viesti ja kopioi JWT Authorization: Cloud-IDE-JWT {tokenPlaceholder} -pyynnön otsikosta. JWT:n voimassaoloaika on noin 14 päivää. Valinnaiset identiteettikentät tulevat common_params -pyynnön rungosta.", + "accessTokenLabel": "Pääsytunnus (Cloud-IDE-JWT)", + "webId": "Verkkotunnus", + "optional": "valinnainen", + "bizUserId": "Biz Käyttäjä ID", + "userUniqueId": "Käyttäjän ainutlaatuinen ID", + "scope": "Laajuus", + "tenant": "Vuokralainen", + "region": "Alue", + "importing": "Tuodaan…", + "importToken": "Tuo Token", + "cancel": "Peruuta" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Jakaminen...", + "complete": "Valmis", + "defaultLabel": "Jaa Välityspalvelimet" + } + }, + "providerTest": { + "dialogLabel": "Testi {provider}", + "deprecated": "vanhentunut", + "risk": "riski", + "close": "Sulje", + "model": "Malli", + "key": "Avain", + "defaultKey": "oletusarvoinen", + "clearConversation": "Tyhjennä keskustelu", + "clear": "Tyhjennä", + "tabs": { + "test": "Test", + "logs": "Lokit" + }, + "loadingLogs": "Ladataan lokit…", + "failedToLoadLogs": "Lokien lataaminen epäonnistui", + "noLogsYet": "Ei vielä lokitietoja", + "noLogsDescription": "Lähetä testiviesti Testi-välilehdeltä — tämän tarjoajan lokit näkyvät täällä.", + "openFullLogs": "Avaa täydelliset lokit-sivu", + "live": "Live", + "tailingLast": "seuraavat {count}", + "refreshNow": "Päivitä nyt", + "refresh": "Päivitä", + "unknownRequester": "tuntematon pyytäjä", + "fields": { + "timestamp": "Aikaleima", + "status": "Tila", + "duration": "Kesto", + "model": "Malli", + "requestedModel": "Pyydetty malli", + "provider": "Toimittaja", + "requester": "Pyyntötekijä", + "tokens": "Tokenit" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy-lokin tiedot", + "event": "Proxy-tapahtuma", + "close": "Sulje proxy-yksityiskohtien ikkuna", + "time": "Aika", + "latency": "Viive", + "clientIp": "Asiakkaan IP", + "proxy": "Välimuisti", + "direct": "Suora", + "type": "Tyyppi", + "level": "Taso", + "provider": "Toimittaja", + "tlsFingerprint": "TLS-sormenjälki", + "directNative": "Suora", + "targetUrl": "Kohde-URL", + "error": "Virhe", + "configuration": "Välityspalvelimen asetukset" + }, + "requestTimeline": { + "title": "Pyyntö Aikajana", + "modes": { + "follow": "Seuraa", + "followDescription": "Akseli vierittää vasemmalle, NOW-viiva pysyy 75%:ssa", + "now": "Nyt", + "nowDescription": "Hyppää nykyiseen aikaan, NOW-viiva nollautuu keskelle", + "pan": "Panna", + "panDescription": "Vedä tutkiaksesi, tausta on jäädytetty" + }, + "reset": "Nollaa", + "started": "Aloitettu", + "ended": "Loppunut", + "duration": "Kesto", + "status": "Tila", + "provider": "Toimittaja", + "tokens": "Tokenit", + "active": "Aktiivinen", + "other": "Muut", + "tenMinutes": "10min", + "hour": "tunti", + "day": "päivä", + "unknownModel": "tuntematon", + "pending": "odottaa" + }, + "metadata": { + "compressionTitle": "Pakkaus", + "compressionDescription": "Määritä kontekstin pakkausasetukset tokenien käytön ja kustannusten vähentämiseksi.", + "relayTitle": "OmniRoute — Relay Proxyt", + "relayDescription": "Palvelimettomat välityspalvelin päätepisteet AI-infrastruktuurillesi", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Valvo LLM-kutsuja + vianetsintä minkä tahansa sovelluksen HTTPS-liikennettä" + }, + "conductor": { + "title": "Conductor — CLI-agent laivasto", + "subtitle": "OmniConductor-hubi: juoksijat, tehtäväjono ja neuvostot, live", + "runners": "Juoksijat", + "tasks": "Tehtävät", + "colName": "Nimi", + "colClis": "CLI:t", + "colStatus": "Tila", + "colTask": "Tehtävä", + "colMode": "Tila", + "colRunner": "Juoksija", + "colSummary": "Yhteenveto", + "online": "verkkoyhteydessä", + "offline": "offline", + "draining": "tyhjentäminen", + "hubOffline": "Conductor-hubi offline tai ei konfiguroitu (CONDUCTOR_HUB_URL) — ei näytä mitään vanhentuneen datan sijaan.", + "noRunners": "Ei rekisteröityjä juoksijoita", + "noTasks": "Ei tehtäviä vielä", + "detailTitle": "Tehtävän tiedot", + "prompt": "Kehoite", + "branch": "Haara", + "fetchHint": "Hae tulos komennolla: git fetch origin {branch}", + "council": "Neuvosto", + "candidates": "Ehdokkaat", + "cancel": "Peruuta tehtävä", + "cancelConfirmTitle": "Peruuta tämä tehtävä?", + "cancelConfirmMessage": "Hub keskeyttää suorituksen suorittimella. Tätä ei voi peruuttaa.", + "cancelFailed": "Keskus hylkäsi peruutuksen", + "close": "Sulje", + "error": "Virhe", + "faroTitle": "Faro — laivaston puhemies", + "faroSubtitle": "Chat ja ääni, ankkuroitu todellisiin laivastotapahtumiin. Tuhoavat komennot kysyvät aina vahvistusta.", + "faroEmpty": "Kysy laivastosta — esim. \"miten laivasto voi?\"", + "faroPending": "Faro pyytää vahvistusta", + "faroPlaceholder": "puhu Farolle…", + "faroSend": "lähetä", + "faroOffline": "Faro (puhemies) on offline", + "yes": "Kyllä", + "no": "Ei", + "pushToTalk": "Pidä puhuaksesi", + "speakAnswers": "puhu vastaukset", + "voiceModels": "Äänimallit (toimittaja/malli tästä OmniRoute)", + "voiceIdle": "puhu", + "voiceListening": "kuuntelee…", + "voiceThinking": "ajattelee…", + "voiceSpeaking": "puhuminen…", + "sttFailed": "Transkripti epäonnistui (tarkista STT-malli/toimittaja)", + "ttsFailed": "Puheentunnistus epäonnistui (tarkista TTS-malli/toimittaja)", + "micDenied": "Mikrofoni ei käytettävissä tai lupa evätty" + }, + "cliproxyProviderExposure": { + "title": "Palveluntarjoajan Altistus", + "description": "Altista CLIProxyAPI-mallit reitityskohteena cliproxyapi/-etuliitteen alla.", + "label": "Altista cliproxyapi/...", + "hint": "Kun käytössä, löydetyt mallit näkyvät tarjoajien valinnoissa OmniRoutessa.", + "updateFailed": "Päivitys epäonnistui (HTTP {status})", + "networkError": "Verkkovirhe — ei voitu päivittää tarjoajan altistusasetusta" + } } - diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 875b1b1c4e..f1bf3a2722 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -172,6 +172,18 @@ "unselectAll": "Tout désélectionner", "visibleModels": "visibles", "selectAllConfirm": "Ajouter {count} modèles à cette combinaison ?", + "testSelectedProviders": "Fournisseurs de tests", + "testingSelectedProviders": "Test en cours {done}/{total}...", + "noProvidersSelectedToTest": "Vérifiez d'abord au moins un fournisseur ci-dessous", + "noModelsToTestForProviders": "Aucun modèle à tester pour les fournisseurs sélectionnés", + "testSelectedProvidersResults": "{ok} de {total} modèles fonctionnant", + "selectWorkingModels": "Ajouter en cours", + "unselectWorkingModels": "Désélectionner en cours", + "noWorkingModelsToSelect": "Aucun modèle fonctionnel à ajouter", + "providerTestHint": "Astuce : vérifiez un fournisseur → Test → Ajouter en cours. Cliquez à nouveau pour désélectionner.", + "selectAllProviders": "Vérifiez tous les fournisseurs", + "clearProviderSelection": "Décocher les fournisseurs", + "providersSelectedCount": "{count} fournisseurs vérifiés", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -1263,11 +1275,13 @@ "groupSeparatorLabel": "Séparateur", "discovery": "Découverte", "discoverySubtitle": "Analyser les fournisseurs pour un accès gratuit", -"resilienceConnections": "Résilience de Connexion", -"resilienceConnectionsSubtitle": "Cooldown, disjoncteur, état de blocage", -"settingsModalityBridge": "Pont de Modalité", -"settingsModalityBridgeSubtitle": "Fallback image/audio → texte pour les modèles uniquement textuels", -"commandPalette": { + "conductor": "Conducteur", + "conductorSubtitle": "Flotte d'agent CLI", + "resilienceConnections": "Résilience de Connexion", + "resilienceConnectionsSubtitle": "Cooldown, disjoncteur, état de blocage", + "settingsModalityBridge": "Pont de Modalité", + "settingsModalityBridgeSubtitle": "Fallback image/audio → texte pour les modèles uniquement textuels", + "commandPalette": { "title": "Palette de commandes", "searchPlaceholder": "Rechercher dans les pages, paramètres et outils…", "clearSearch": "Effacer la recherche", @@ -1275,7 +1289,8 @@ "navigate": "naviguer", "open": "ouvrir", "close": "fermer" - } + }, + "noResults": "Aucun résultat" }, "webhooks": { "title": "Webhooks", @@ -2173,7 +2188,8 @@ "searchAnalyticsEmptyDescription": "Utilisez POST /v1/search pour commencer à router des recherches Web.", "searchAnalyticsFreeTier": "Une offre gratuite est disponible : Serper (2 500/mois), Brave (2 000/mois), Exa (1 000/mois), Tavily (1 000/mois) — plus de 6 500 recherches gratuites par mois avec basculement automatique.", "autoRoutingNoDataAvailable": "Aucune analyse d’auto-routing n’est disponible. Faites des demandes avec le préfixe auto/ pour voir les métriques.", - "defaultVariantLabel": "Par défaut" + "defaultVariantLabel": "Par défaut", + "freeTierAvailable": "Niveau gratuit disponible" }, "apiManager": { "title": "Clés API", @@ -2462,7 +2478,9 @@ "providerCount": "{count} fournisseurs", "imageToTextBridgeAvailable": "Le Modality Bridge peut désormais décrire des images pour les modèles uniquement textuels. Le terrain de jeu en ligne sera disponible lorsque /api/v1/images/understanding sera implémenté.", "imageToTextBridgeCta": "Configurer le pont Image→Texte dans les paramètres du Modality Bridge", - "sttBridgeCta": "Configurer le pont Speech→Text dans les paramètres du Modality Bridge" + "sttBridgeCta": "Configurer le pont Speech→Text dans les paramètres du Modality Bridge", + "existingConnection": "Connexion existante", + "openrouterSttDescription": "Les modèles de reconnaissance vocale OpenRouter utilisent votre connexion OpenRouter configurée. Aucune crédentiale séparée n'est requise." }, "search": { "searchQuery": "Search Query", @@ -3098,38 +3116,30 @@ "copilotPasteInto": "Coller dans :", "copilotReloadInstruction": "Rechargez ensuite VS Code et définissez la clé API dans l'invite de saisie.", "wireApiChatCompletions": "Achèvements de chat (/chat/completions)", -"wireApiResponses": "API de réponses (/réponses)", -"ccDiscoveryInfoButton": "Comment activer la découverte dans Claude Code", -"ccDiscoveryInfoTooltip": "Afficher les modèles non-Claude sous forme d'identifiants miroir claude/<provider>/<model> afin que la découverte de modèles de la passerelle Claude Code puisse les répertorier. Cette option double les entrées du catalogue pour tous les clients lorsqu'elle est activée globalement.", -"ccDiscoveryInfoLink": "Ouvrir les indicateurs de fonctionnalités", -"ccOnboardingTitle": "settings.json pour la découverte des modèles de la passerelle", -"ccOnboardingCopy": "Copier", -"ccOnboardingCopied": "Copié", -"ccOnboardingKeyPlaceholder": "", -"ccOnboardingWindowNote": "Claude Code suppose une fenêtre de contexte de 200K pour tout identifiant de modèle qu'il ne reconnaît pas. Pour un modèle dont la fenêtre réelle est différente, ajoutez CLAUDE_CODE_AUTO_COMPACT_WINDOW juste en dessous afin que le compactage automatique ne se déclenche pas trop tôt.", -"cliproxyapiActionFailed": "Échec de l’action", -"cliproxyapiActionSucceeded": "Action réussie", -"cliproxyapiCheckUpdates": "Vérifier les mises à jour", -"cliproxyapiDescription": "Repli vers le proxy amont (OAuth basé sur Go)", -"cliproxyapiHealth": "État", -"cliproxyapiHealthy": "Opérationnel", -"cliproxyapiInstall": "Installer", -"cliproxyapiNotInstalledValue": "Non installé", -"cliproxyapiPort": "Port", -"cliproxyapiRequestFailed": "Échec de la requête", -"cliproxyapiRestart": "Redémarrer", -"cliproxyapiStart": "Démarrer", -"cliproxyapiStatusError": "Erreur", -"cliproxyapiStatusInstalled": "Installé", -"cliproxyapiStatusNotInstalled": "Non installé", -"cliproxyapiStatusRunning": "En cours", -"cliproxyapiStatusStopped": "Arrêté", -"cliproxyapiStop": "Arrêter", -"cliproxyapiUnhealthy": "Dégradé", -"cliproxyapiUnknown": "Inconnu", -"cliproxyapiUpdate": "Mettre à jour", -"cliproxyapiUpdateAvailable": "Mise à jour disponible : v{current} → v{latest}", -"cliproxyapiVersion": "Version" + "wireApiResponses": "API de réponses (/réponses)", + "cliproxyapiActionFailed": "Échec de l’action", + "cliproxyapiActionSucceeded": "Action réussie", + "cliproxyapiCheckUpdates": "Vérifier les mises à jour", + "cliproxyapiDescription": "Repli vers le proxy amont (OAuth basé sur Go)", + "cliproxyapiHealth": "État", + "cliproxyapiHealthy": "Opérationnel", + "cliproxyapiInstall": "Installer", + "cliproxyapiNotInstalledValue": "Non installé", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Échec de la requête", + "cliproxyapiRestart": "Redémarrer", + "cliproxyapiStart": "Démarrer", + "cliproxyapiStatusError": "Erreur", + "cliproxyapiStatusInstalled": "Installé", + "cliproxyapiStatusNotInstalled": "Non installé", + "cliproxyapiStatusRunning": "En cours", + "cliproxyapiStatusStopped": "Arrêté", + "cliproxyapiStop": "Arrêter", + "cliproxyapiUnhealthy": "Dégradé", + "cliproxyapiUnknown": "Inconnu", + "cliproxyapiUpdate": "Mettre à jour", + "cliproxyapiUpdateAvailable": "Mise à jour disponible : v{current} → v{latest}", + "cliproxyapiVersion": "Version" }, "combos": { "title": "Combinaisons", @@ -3381,6 +3391,8 @@ "pricingMissing": "Pas de prix", "pricingAvailableShort": "prix", "pricingMissingShort": "sans prix", + "fallbackOnlyOnQuotaExhaustion": "N'avancer que lors de l'épuisement du quota", + "fallbackOnlyOnQuotaExhaustionShort": "repli uniquement sur quota", "warningRoundRobinSingleModel": "Le round-robin est plus utile avec au moins 2 modèles.", "warningCostOptimizedPartialPricing": "Seuls {priced} des modèles {total} ont un prix. Le routage peut être partiellement axé sur les coûts.", "warningCostOptimizedNoPricing": "Aucune donnée de prix trouvée pour ce combo. Un itinéraire optimisé en termes de coûts peut être inattendu.", @@ -3415,16 +3427,16 @@ "routingInputsHint": "Le pack de mode et la pondération restent ici ; l'état d'exécution du disjoncteur reste sur la page Santé.", "emailVisibilityHint": "Les e-mails de compte ici suivent le paramètre global de confidentialité.", "emailVisibilityTooltip": "Utilisez l'icône d'œil pour afficher ou masquer les e-mails de compte globalement dans les combos, les fournisseurs et les écrans de quota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Étape par étape (Fournisseur → Modèle)", + "builderModeGlobal": "Recherche de modèle global (Combo personnalisé)", + "builderGlobalSearchPlaceholder": "Rechercher des modèles parmi tous les fournisseurs (par ex. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Ajouter tout", + "builderGlobalShortcuts": "Raccourcis :", + "builderGlobalNoResults": "Aucun modèle trouvé pour \"{query}\".", + "builderGlobalProviderLabel": "Fournisseur :", + "builderGlobalAccountCount": "{count, plural, one {# compte} other {# comptes}}", + "builderGlobalAdded": "Ajouté", + "builderGlobalAdd": "Ajouter", "manualModel": "Modèle manuel", "manualModelInvalid": "Saisissez un modèle sous la forme fournisseur/modèle.", "manualModelUnknownProvider": "Préfixe de fournisseur inconnu.", @@ -3469,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilité de la session", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3699,7 +3712,8 @@ "errorTitle": "Impossible de charger les combos", "errorDescription": "Les données des combos ne peuvent pas être chargées pour le moment. Vérifiez votre connexion et réessayez.", "errorId": "ID d'erreur : {id}", - "errorRetry": "Réessayer" + "errorRetry": "Réessayer", + "comboLabel": "Combo" }, "costs": { "title": "Coûts", @@ -4317,6 +4331,12 @@ "providerModelLabel": "Fournisseur / Modèle", "noRemoteProviders": "Aucun fournisseur avec une clé API configurée", "selectProviderModel": "Sélectionner un modèle", + "customBaseUrlLabel": "URL de base personnalisée (facultatif)", + "customModelIdLabel": "ID de modèle personnalisé (facultatif)", + "customEndpointHelp": "Utilisez un point de terminaison /embeddings compatible avec OpenAI. Les points de terminaison locaux sont autorisés ; les cibles de métadonnées cloud sont bloquées.", + "customEndpointSave": "Appliquer un point de terminaison personnalisé", + "customEndpointInvalid": "Entrez à la fois une URL de base HTTP(S) valide et un ID de modèle, ou laissez les deux champs vides.", + "customEndpointSaveFailed": "Le point de terminaison d'intégration personnalisé n'a pas pu être enregistré.", "staticEnabledLabel": "Activer Static Potion", "staticEnabledDesc": "Télécharger et utiliser le modèle potion-base-8M localement", "transformersEnabledLabel": "Activer Transformers.js", @@ -4423,7 +4443,9 @@ "cleaning": "Nettoyage en cours...", "cleanNow": "Nettoyer maintenant", "cleanupSuccess": "{count} point(s) supprimé(s)", - "cleanupFailed": "Échec du nettoyage" + "cleanupFailed": "Échec du nettoyage", + "hostLabel": "Hôte", + "collectionLabel": "Collection" }, "rerank": { "enableLabel": "Activer le Rerank", @@ -4921,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagramme de secours OmniRoute à 3 niveaux", "apiKeyMgmt": "Gestion des clés API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Configurer des fournisseurs gratuits", + "description": "Activez éventuellement les fournisseurs sélectionnés sans inscription. Examinez l'avis et le site de chaque fournisseur avant de continuer ; la disponibilité et les limites de taux sont contrôlées par des tiers.", + "loading": "Chargement des fournisseurs gratuits...", + "loadFailed": "Impossible de charger les fournisseurs gratuits.", + "alreadyConfigured": "Tous les fournisseurs gratuits éligibles sont déjà configurés.", + "reviewProviderSite": "Examinez le site du fournisseur et les conditions", + "confirmation": "J'ai examiné ces fournisseurs tiers et je veux qu'OmniRoute crée les connexions sélectionnées.", + "setupSelected": "Configurer les fournisseurs sélectionnés", + "settingUp": "Configuration en cours...", + "setupFailed": "Impossible de configurer les fournisseurs sélectionnés. Rien d'existant n'a été modifié.", + "retryFailed": "Réessayer les fournisseurs échoués", + "orUseApiKey": "ou connectez-vous avec une clé API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "créé", + "skipped": "déjà configuré", + "failed": "échec" } } }, @@ -5142,6 +5164,7 @@ "baseUrlHint": "Obligatoire. URL de base de l’API du fournisseur.", "iconUrlLabel": "URL de l'icône", "iconUrlHint": "Facultatif. URL de l'image affichée comme icône de ce fournisseur.", + "iconUrlInvalid": "URL d'icône invalide. Utilisez une URL http(s):// ou data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5479,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Session déjà en cours", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Appliquer l'authentification", @@ -5853,9 +5876,9 @@ "zedPasteApiKey": "Coller la clé API…", "zedSaving": "Enregistrement…", "zedImportAction": "Importer", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Activer le renouvellement automatique de la session du curseur", + "cursorAgentNudgeBody": "Installez cursor-agent pour le renouvellement automatique de session — sans cela, les connexions Cursor nécessitent une reconnexion manuelle périodique environ toutes les 24 heures.", + "cursorAgentNudgeDismiss": "Rejeter", "zedManualImportFailed": "L'importation manuelle a échoué", "zedManualImportSuccess": "Jeton {provider} importé depuis Zed", "grokImportTitle": "Importer l'authentification Grok Build", @@ -6043,7 +6066,6 @@ "friendliai": "Offre gratuite pour l'inférence serverless — aucune carte de crédit requise", "gemini": "Gratuit à vie : 1 500 req/jour pour Gemini 2.5 Flash — sans carte de crédit, obtenez la clé sur aistudio.google.com", "gigachat": "Connectez GigaChat (Sber) avec une clé API.", - "github-models": "Créez un PAT GitHub avec la portée 'models: read' sur github.com/settings/tokens", "gitlab": "Jeton d'accès personnel GitLab pour l'API publique Code Suggestions. Configurez une URL de base auto-hébergée si vous n'utilisez pas gitlab.com.", "gitlawb-gmi": "Obtenez votre clé API depuis le tableau de bord Gitlawb Opengateway.", "gitlawb": "Obtenez votre clé API depuis le tableau de bord Gitlawb Opengateway.", @@ -6182,7 +6204,8 @@ "kimi-coding": "Connecter Kimi Coding avec le flux OAuth existant.", "kiro": "Offre gratuite : 50 crédits/mois (~25K–100K tokens). ⚠️ Les conditions d'utilisation de Kiro interdisent l'utilisation de proxys/harness tiers.", "codex": "Connecter OpenAI Codex avec le flux OAuth existant.", - "qwen": "Connecter Qwen Code avec le flux OAuth existant." + "qwen": "Connecter Qwen Code avec le flux OAuth existant.", + "github-models": "Créez un PAT GitHub avec la portée 'models: read' sur github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accepte les ID de modèle natifs du fournisseur. Importez depuis /models ou ajoutez des ID personnalisés pour le routage.", "bedrockModelsDescription": "Les modèles Amazon Bedrock sont définis par région AWS. Importez depuis /models ou ajoutez les ID de modèle Bedrock activés dans la région sélectionnée.", @@ -6237,96 +6260,82 @@ "cheaperInferenceSupporterBadge": "Ami open source", "cheaperInferenceSupporterTooltip": "Cheaper Inference soutient OmniRoute en tant qu'ami open source", "kimiPartnerLinkNote": "Lien partenaire — soutient OmniRoute sans frais supplémentaires pour vous", -"anonymousFallbackTitle": "Fallback anonyme", -"anonymousFallbackDesc": "Lorsque toutes les connexions configurées sont épuisées (quota, crédits ou expiration), utilisez temporairement le niveau sans clé de ce fournisseur. Désactivez cette option pour ignorer ce fournisseur au lieu d'envoyer des requêtes anonymes — recommandé lorsque le niveau sans clé les rejette (401).", -"anonymousFallbackEnabled": "Fallback anonyme activé pour {provider}", -"anonymousFallbackDisabled": "Le secours anonyme désactivé pour {provider} — les connexions épuisées ignoreront ce fournisseur", -"anonymousFallbackUpdateFailed": "Échec de la mise à jour du paramètre de secours anonyme", -"ccAliasSectionTitle": "Exposer dans Claude Code (claude/…)", -"ccAliasSectionHint": "Afficher les modèles de ce fournisseur sous forme d'identifiants miroir claude/<provider>/<model> afin que la découverte de modèles de la passerelle Claude Code puisse les répertorier. Cette option est désactivée par défaut ; son activation double les entrées du catalogue pour tous les clients.", -"ccAliasProviderLevelLabel": "Valeur par défaut du fournisseur", -"ccAliasModelOverridesLabel": "Surcharges par modèle", -"ccAliasModelOverrideAriaLabel": "Surcharge pour {modelId}", -"ccAliasStateInherit": "Hériter", -"ccAliasStateOn": "Activé", -"ccAliasStateOff": "Désactivé", -"ccAliasAddModelPlaceholder": "ID du modèle (par ex. gpt-4o)", -"ccAliasAddModelButton": "Ajouter une surcharge", -"ccAliasLoadError": "Échec du chargement des paramètres d'alias de découverte : {error}", -"ccAliasSaveError": "Échec de l'enregistrement du paramètre d'alias de découverte : {error}", -"apiProtocolLabel": "Protocole API", -"apiProtocolDefault": "Compatible avec OpenAI (par défaut)", -"apiProtocolHint": "Certains fournisseurs publient les mêmes modèles via plusieurs protocoles. Conservez la valeur par défaut sauf si vous avez besoin de l'alternative.", -"batchDeleteFailed": "Échec de la suppression groupée", -"batchDeleteNetworkError": "Erreur réseau lors de la suppression groupée", -"batchUpdateFailed": "Échec de la mise à jour groupée", -"batchUpdateNetworkError": "Erreur réseau lors de la mise à jour groupée", -"categoryAudio": "Audio", -"categoryCloudAgent": "Agent cloud", -"categoryIde": "IDE", -"categoryLocal": "Local", -"categorySearch": "Rechercher", -"categoryWebCookie": "Cookie web", -"claudeExtraUsageBlockingDisabled": "Blocage de l’usage supplémentaire de Claude désactivé (l’usage supplémentaire est autorisé)", -"claudeExtraUsageBlockingEnabled": "Blocage de l’usage supplémentaire de Claude activé (l’usage supplémentaire sera bloqué)", -"claudeRoutingPreferenceDisabled": "Unprefixed Claude modèles no longer prefer Claude Code", -"claudeRoutingPreferenceEnabled": "Unprefixed Claude modèles now prefer Claude Code", -"clearMediaFilter": "Effacer", -"cliproxyRoutingDisabled": "Les requêtes utilisent désormais OmniRoute natif (direct)", -"cliproxyRoutingEnabled": "Les requêtes passent désormais par CLIProxyAPI (émulation renforcée)", -"codexLimitPolicyUpdated": "Politique de limite Codex mise à jour", -"codexServiceModeUpdated": "Mode de service Codex mis à jour", -"codexServiceTierActive": "Le niveau de service Codex {tier} est actif", -"codexTierFastLabel": "Rapide", -"codexTierFlexLabel": "Flex", -"commandCodeApplyFailed": "Échec de apply Command Code auth", -"commandCodeApplyingApproval": "Navigateur approuvé, application en cours…", -"commandCodeApplyingKey": "Application de la clé approuvée par le navigateur…", -"commandCodeApprovalInstructions": "Ouvrez l’URL d’authentification, autorisez l’accès, puis collez ci-dessous la clé/le JSON/l’URL renvoyé(e)…", -"commandCodeAuthExpired": "Authentification Command Code expirée", -"commandCodeConnected": "Command Code connecté", -"commandCodeConnectionAdded": "Command Code connexions added", -"commandCodeLinkExpired": "Lien Command Code expiré", -"commandCodeOpeningStudio": "Ouverture de Command Code Studio…", -"commandCodePopupBlocked": "Fenêtre contextuelle bloquée. Autorisez les fenêtres contextuelles, puis réessayez avec Command Code Connect.", -"commandCodeStartFailed": "Échec de start Command Code auth", -"connectionDeleted": "connexions deleted", -"connectionFallback": "connexions", -"coolingConnectionsDescription": "These connexions returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", -"coolingConnectionsTitle": "Connexions actuellement en refroidissement ({count})", -"failedDeleteAlias": "Échec de delete alias", -"failedDeleteConnection": "Échec de delete connexions", -"failedDistributeProxies": "Échec de distribute proxies.", -"failedSaveModelEndpointSettings": "Échec de save modèles endpoint paramètres", -"failedUpdateClaudeExtraUsagePolicy": "Échec de update Claude extra-usage policy", -"failedUpdateClaudeRoutingPreference": "Échec de update Claude Code routing preference", -"failedUpdateCliproxyRouting": "Échec de update CLIProxyAPI routing", -"failedUpdateCodexLimitPolicy": "Échec de update Codex limit policy", -"failedUpdateCodexServiceMode": "Échec de update Codex service mode", -"filterByMedia": "Média", -"freeBadge": "Gratuit", -"kimiCodeApiKeyLabel": "Clé API Kimi Code", -"modelTestFailed": "modèles test failed", -"modelTestNetworkError": "Network error testing modèles", -"networkError": "Erreur réseau", -"networkErrorDeletingAlias": "Erreur réseau lors de la suppression de l’alias", -"networkErrorSettingAlias": "Erreur réseau lors de la définition de l’alias", -"noProvidersMatch": "Aucun fournisseur ne correspond à votre recherche.", -"noSavedProxies": "Aucun saved proxies found. Ajouter proxies in paramètres → Proxy first.", -"pageLoadErrorDescription": "We could not load fournisseurs data right now. Check your connexions and try again.", -"pageLoadErrorId": "Identifiant d’erreur : {id}", -"pageLoadErrorRetry": "Réessayer", -"pageLoadErrorTitle": "Échec de load fournisseurs", -"playgroundTitle": "Bac à sable", -"providerDetailConnectionFlexActive": "Codex flex service tier is active for this connexions", -"providerDetailConnectionPriorityActive": "Codex priority service tier is active for this connexions", -"providerDetailGlobalFlexActive": "Le niveau de service flex global de Codex est actif", -"providerDetailGlobalPriorityActive": "Le niveau de service priority global de Codex est actif", -"proxiesDistributed": "Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connexions(s).", -"rerankEndpoint": "Rerank", -"savedModelEndpointSettings": "Saved modèles endpoint paramètres", -"searchByModelAria": "Rechercher un modèle", -"selectSupportedEndpoint": "Sélectionnez au moins un endpoint pris en charge" + "anonymousFallbackTitle": "Fallback anonyme", + "anonymousFallbackDesc": "Lorsque toutes les connexions configurées sont épuisées (quota, crédits ou expiration), utilisez temporairement le niveau sans clé de ce fournisseur. Désactivez cette option pour ignorer ce fournisseur au lieu d'envoyer des requêtes anonymes — recommandé lorsque le niveau sans clé les rejette (401).", + "anonymousFallbackEnabled": "Fallback anonyme activé pour {provider}", + "anonymousFallbackDisabled": "Le secours anonyme désactivé pour {provider} — les connexions épuisées ignoreront ce fournisseur", + "anonymousFallbackUpdateFailed": "Échec de la mise à jour du paramètre de secours anonyme", + "batchDeleteFailed": "Échec de la suppression groupée", + "batchDeleteNetworkError": "Erreur réseau lors de la suppression groupée", + "batchUpdateFailed": "Échec de la mise à jour groupée", + "batchUpdateNetworkError": "Erreur réseau lors de la mise à jour groupée", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agent cloud", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Rechercher", + "categoryWebCookie": "Cookie web", + "claudeExtraUsageBlockingDisabled": "Blocage de l’usage supplémentaire de Claude désactivé (l’usage supplémentaire est autorisé)", + "claudeExtraUsageBlockingEnabled": "Blocage de l’usage supplémentaire de Claude activé (l’usage supplémentaire sera bloqué)", + "claudeRoutingPreferenceDisabled": "Unprefixed Claude modèles no longer prefer Claude Code", + "claudeRoutingPreferenceEnabled": "Unprefixed Claude modèles now prefer Claude Code", + "clearMediaFilter": "Effacer", + "cliproxyRoutingDisabled": "Les requêtes utilisent désormais OmniRoute natif (direct)", + "cliproxyRoutingEnabled": "Les requêtes passent désormais par CLIProxyAPI (émulation renforcée)", + "codexLimitPolicyUpdated": "Politique de limite Codex mise à jour", + "codexServiceModeUpdated": "Mode de service Codex mis à jour", + "codexServiceTierActive": "Le niveau de service Codex {tier} est actif", + "codexTierFastLabel": "Rapide", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Échec de apply Command Code auth", + "commandCodeApplyingApproval": "Navigateur approuvé, application en cours…", + "commandCodeApplyingKey": "Application de la clé approuvée par le navigateur…", + "commandCodeApprovalInstructions": "Ouvrez l’URL d’authentification, autorisez l’accès, puis collez ci-dessous la clé/le JSON/l’URL renvoyé(e)…", + "commandCodeAuthExpired": "Authentification Command Code expirée", + "commandCodeConnected": "Command Code connecté", + "commandCodeConnectionAdded": "Command Code connexions added", + "commandCodeLinkExpired": "Lien Command Code expiré", + "commandCodeOpeningStudio": "Ouverture de Command Code Studio…", + "commandCodePopupBlocked": "Fenêtre contextuelle bloquée. Autorisez les fenêtres contextuelles, puis réessayez avec Command Code Connect.", + "commandCodeStartFailed": "Échec de start Command Code auth", + "connectionDeleted": "connexions deleted", + "connectionFallback": "connexions", + "coolingConnectionsDescription": "These connexions returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", + "coolingConnectionsTitle": "Connexions actuellement en refroidissement ({count})", + "failedDeleteAlias": "Échec de delete alias", + "failedDeleteConnection": "Échec de delete connexions", + "failedDistributeProxies": "Échec de distribute proxies.", + "failedSaveModelEndpointSettings": "Échec de save modèles endpoint paramètres", + "failedUpdateClaudeExtraUsagePolicy": "Échec de update Claude extra-usage policy", + "failedUpdateClaudeRoutingPreference": "Échec de update Claude Code routing preference", + "failedUpdateCliproxyRouting": "Échec de update CLIProxyAPI routing", + "failedUpdateCodexLimitPolicy": "Échec de update Codex limit policy", + "failedUpdateCodexServiceMode": "Échec de update Codex service mode", + "filterByMedia": "Média", + "freeBadge": "Gratuit", + "kimiCodeApiKeyLabel": "Clé API Kimi Code", + "modelTestFailed": "modèles test failed", + "modelTestNetworkError": "Network error testing modèles", + "networkError": "Erreur réseau", + "networkErrorDeletingAlias": "Erreur réseau lors de la suppression de l’alias", + "networkErrorSettingAlias": "Erreur réseau lors de la définition de l’alias", + "noProvidersMatch": "Aucun fournisseur ne correspond à votre recherche.", + "noSavedProxies": "Aucun saved proxies found. Ajouter proxies in paramètres → Proxy first.", + "pageLoadErrorDescription": "We could not load fournisseurs data right now. Check your connexions and try again.", + "pageLoadErrorId": "Identifiant d’erreur : {id}", + "pageLoadErrorRetry": "Réessayer", + "pageLoadErrorTitle": "Échec de load fournisseurs", + "playgroundTitle": "Bac à sable", + "providerDetailConnectionFlexActive": "Codex flex service tier is active for this connexions", + "providerDetailConnectionPriorityActive": "Codex priority service tier is active for this connexions", + "providerDetailGlobalFlexActive": "Le niveau de service flex global de Codex est actif", + "providerDetailGlobalPriorityActive": "Le niveau de service priority global de Codex est actif", + "proxiesDistributed": "Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connexions(s).", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Saved modèles endpoint paramètres", + "searchByModelAria": "Rechercher un modèle", + "selectSupportedEndpoint": "Sélectionnez au moins un endpoint pris en charge", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Paramètres", @@ -6656,78 +6665,78 @@ "NEEDS_CORE_NOT_CONFIGURED": "Cet abonnement contient des nœuds qui nécessitent un proxy core local (SS/VMess/Trojan/VLESS) ; ils ne sont pas routés tant que vous n'avez pas configuré le point de terminaison SOCKS5 du local-core.", "NO_USABLE_NODES": "L'abonnement n'a renvoyé aucun nœud utilisable (http/https/socks5 ou nœuds avec un point de terminaison de core local)." }, -"description": "Collez votre lien d'abonnement proxy. Une fois activé, le trafic est acheminé via le pool de proxy en mode global ou en mode règle (fournisseur spécifié). Les nœuds d'abonnement sont automatiquement synchronisés avec le pool de proxy et réutilisent les mécanismes d'interrogation, de contrôle de santé et anti-fuite existants.", -"addSubscription": "Ajouter un abonnement", -"newSubscription": "Ajouter un abonnement", -"editSubscription": "Modifier l'abonnement", -"name": "Nom", -"namePlaceholder": "par ex. Mon abonnement A", -"url": "URL d'abonnement", -"urlPlaceholder": "https://.../subscribe?token=...", -"mode": "Mode", -"globalMode": "Mode global", -"ruleMode": "Mode règle", -"globalModeDesc": "Tout le trafic du fournisseur passe par le pool de proxy de cet abonnement.", -"ruleModeDesc": "Seul le trafic des fournisseurs sélectionnés passe par le proxy ; le reste se connecte directement.", -"localCoreEndpoint": "Point de terminaison local Core SOCKS5/HTTP (facultatif)", -"localCoreEndpointPlaceholder": "chaussettes5://127.0.0.1:1080", -"localCoreEndpointDesc": "N'accepte que 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS nécessitent un noyau sing-box/clash local).", -"routeByProvider": "Itinéraire par fournisseur (sélection multiple)", -"loadingProviders": "Chargement de la liste des fournisseurs…", -"autoRefreshInterval": "Intervalle de rafraîchissement automatique (minutes)", -"enableAfterCreate": "Activer à la création (synchroniser et prendre effet immédiatement)", -"saving": "Sauvegarde…", -"saveChanges": "Enregistrer les modifications", -"createSubscription": "Créer un abonnement", -"loading": "Chargement…", -"noSubscriptions": "Aucun abonnement pour l'instant. Cliquez sur « Ajouter un abonnement » pour commencer.", -"statusOk": "D'accord", -"statusError": "Erreur", -"statusEmpty": "Vide", -"global": "Mondial", -"rule": "Règle", -"enabled": "Activé", -"disabled": "Désactivé", -"nodeCount": "Nœuds : {count}", -"needsCoreCount": "{count} a besoin d'un noyau local", -"lastSynced": "Dernière synchronisation : {time}", -"consecutiveFailures": "{count} échecs consécutifs", -"lastError": "Dernière erreur : {time}", -"coreHintTitle": "Cet abonnement comporte des nœuds {count} qui nécessitent un cœur de proxy local (SS/VMess/Trojan/VLESS, etc.) et ne sont actuellement pas routés.", -"coreHintDesc": "Ces protocoles ne peuvent pas être transmis directement par OmniRoute. Veuillez démarrer un noyau sing-box ou clash (Clash.Meta) sur votre machine, exposez-le en tant que point de terminaison SOCKS5/HTTP et remplissez-le via Edit (seul 127.0.0.1 / localhost est accepté).", -"copy": "Copier", -"goConfigure": "Configurer", -"disable": "Désactiver", -"enable": "Activer", -"refreshNodes": "Actualiser les nœuds", -"edit": "Modifier", -"delete": "Supprimer", -"confirmDelete": "Êtes-vous sûr de vouloir supprimer l'abonnement « {name} » ? Les nœuds proxy associés seront également supprimés.", -"nameRequired": "Veuillez entrer un nom", -"urlRequired": "Veuillez saisir une URL d'abonnement", -"ruleModeProviderRequired": "Veuillez sélectionner au moins un fournisseur en mode règle", -"saveFailed": "Échec de l'enregistrement", -"loadFailed": "Échec du chargement de la liste d'abonnement", -"toggleFailed": "Échec de l'activation du commutateur", -"refreshFailed": "Échec de l'actualisation", -"deleteFailed": "Échec de la suppression", -"add": "Ajouter", -"cancel": "Annuler", -"configure": "Configurer", -"copyEndpoint": "Copier l’endpoint", -"coreEndpointHint": "Indication sur l’endpoint du cœur", -"coreNodesHint": "Core nœuds Hint", -"create": "Créer", -"deleteConfirm": "Supprimer Confirm", -"empty": "Aucun élément", -"globalModeDescription": "Description du mode global", -"localCoreHint": "Indication sur le cœur local", -"nodeSummary": "Résumé des nœuds", -"providerRequired": "fournisseurs Required", -"providerRouting": "fournisseurs Routing", -"refresh": "Actualiser", -"refreshInterval": "Actualiser Interval", -"ruleModeDescription": "Description du mode de règle" + "description": "Collez votre lien d'abonnement proxy. Une fois activé, le trafic est acheminé via le pool de proxy en mode global ou en mode règle (fournisseur spécifié). Les nœuds d'abonnement sont automatiquement synchronisés avec le pool de proxy et réutilisent les mécanismes d'interrogation, de contrôle de santé et anti-fuite existants.", + "addSubscription": "Ajouter un abonnement", + "newSubscription": "Ajouter un abonnement", + "editSubscription": "Modifier l'abonnement", + "name": "Nom", + "namePlaceholder": "par ex. Mon abonnement A", + "url": "URL d'abonnement", + "urlPlaceholder": "https://.../subscribe?token=...", + "mode": "Mode", + "globalMode": "Mode global", + "ruleMode": "Mode règle", + "globalModeDesc": "Tout le trafic du fournisseur passe par le pool de proxy de cet abonnement.", + "ruleModeDesc": "Seul le trafic des fournisseurs sélectionnés passe par le proxy ; le reste se connecte directement.", + "localCoreEndpoint": "Point de terminaison local Core SOCKS5/HTTP (facultatif)", + "localCoreEndpointPlaceholder": "chaussettes5://127.0.0.1:1080", + "localCoreEndpointDesc": "N'accepte que 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS nécessitent un noyau sing-box/clash local).", + "routeByProvider": "Itinéraire par fournisseur (sélection multiple)", + "loadingProviders": "Chargement de la liste des fournisseurs…", + "autoRefreshInterval": "Intervalle de rafraîchissement automatique (minutes)", + "enableAfterCreate": "Activer à la création (synchroniser et prendre effet immédiatement)", + "saving": "Sauvegarde…", + "saveChanges": "Enregistrer les modifications", + "createSubscription": "Créer un abonnement", + "loading": "Chargement…", + "noSubscriptions": "Aucun abonnement pour l'instant. Cliquez sur « Ajouter un abonnement » pour commencer.", + "statusOk": "D'accord", + "statusError": "Erreur", + "statusEmpty": "Vide", + "global": "Mondial", + "rule": "Règle", + "enabled": "Activé", + "disabled": "Désactivé", + "nodeCount": "Nœuds : {count}", + "needsCoreCount": "{count} a besoin d'un noyau local", + "lastSynced": "Dernière synchronisation : {time}", + "consecutiveFailures": "{count} échecs consécutifs", + "lastError": "Dernière erreur : {time}", + "coreHintTitle": "Cet abonnement comporte des nœuds {count} qui nécessitent un cœur de proxy local (SS/VMess/Trojan/VLESS, etc.) et ne sont actuellement pas routés.", + "coreHintDesc": "Ces protocoles ne peuvent pas être transmis directement par OmniRoute. Veuillez démarrer un noyau sing-box ou clash (Clash.Meta) sur votre machine, exposez-le en tant que point de terminaison SOCKS5/HTTP et remplissez-le via Edit (seul 127.0.0.1 / localhost est accepté).", + "copy": "Copier", + "goConfigure": "Configurer", + "disable": "Désactiver", + "enable": "Activer", + "refreshNodes": "Actualiser les nœuds", + "edit": "Modifier", + "delete": "Supprimer", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer l'abonnement « {name} » ? Les nœuds proxy associés seront également supprimés.", + "nameRequired": "Veuillez entrer un nom", + "urlRequired": "Veuillez saisir une URL d'abonnement", + "ruleModeProviderRequired": "Veuillez sélectionner au moins un fournisseur en mode règle", + "saveFailed": "Échec de l'enregistrement", + "loadFailed": "Échec du chargement de la liste d'abonnement", + "toggleFailed": "Échec de l'activation du commutateur", + "refreshFailed": "Échec de l'actualisation", + "deleteFailed": "Échec de la suppression", + "add": "Ajouter", + "cancel": "Annuler", + "configure": "Configurer", + "copyEndpoint": "Copier l’endpoint", + "coreEndpointHint": "Indication sur l’endpoint du cœur", + "coreNodesHint": "Core nœuds Hint", + "create": "Créer", + "deleteConfirm": "Supprimer Confirm", + "empty": "Aucun élément", + "globalModeDescription": "Description du mode global", + "localCoreHint": "Indication sur le cœur local", + "nodeSummary": "Résumé des nœuds", + "providerRequired": "fournisseurs Required", + "providerRouting": "fournisseurs Routing", + "refresh": "Actualiser", + "refreshInterval": "Actualiser Interval", + "ruleModeDescription": "Description du mode de règle" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7501,6 +7510,8 @@ "visionBridgeDesc": "Exécuter un repli automatique de vision-vers-texte avant d'acheminer les requêtes d'images vers des modèles textuels uniquement.", "visionBridgeEnabledLabel": "Activé", "visionBridgeEnabledDesc": "Activer/désactiver le pont de pré-appel qui remplace les parties d'image par du texte extrait.", + "visionBridgeRerouteTextOnlyLabel": "Rerouter les modèles texte uniquement", + "visionBridgeRerouteTextOnlyDesc": "Envoyez la demande complète, y compris les images, au modèle de pont lorsque le modèle sélectionné n'a pas d'entrée d'image.", "visionBridgeModel": "Modèle de pont", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Tout ID de modèle OmniRoute prenant en charge la vision peut être utilisé ici.", @@ -7998,138 +8009,144 @@ "enableCredentialRedactionDesc": "Masque les clés d'API, les jetons, les clés privées et les JWT des messages, des appels d'outils et des réponses.", "pricingAutoSyncDisabled": "Automatic Sync Disabled", "pricingAutoSyncEnabled": "Automatic Sync Enabled", -"modalityBridgeIntro": "Reliez le contenu multimodal au texte avant qu'il n'atteigne les modèles uniquement textuels. La vision est en direct ; l'audio arrive avec l'AudioBridge ; la vidéo est sur la feuille de route.", -"modalityBridgeVisionTab": "Vision", -"modalityBridgeAudioTab": "Audio", -"modalityBridgeVideoTab": "Vidéo", -"modalityBridgeSubTabsAria": "Sections du Pont de Modalité", -"modalityBridgeVisionTitle": "Vision Bridge", -"modalityBridgeVisionDesc": "Décrivez les images avec un modèle de vision et continuez avec le modèle de texte choisi par l'utilisateur.", -"modalityBridgeMode": "Mode", -"modalityBridgeModeAuto": "Automatique (recommandé)", -"modalityBridgeModeAutoHint": "Heuristique héritée : réacheminer des modèles individuels sans identifiants ; décrire autrement.", -"modalityBridgeModeDescribe": "Toujours décrire", -"modalityBridgeModeDescribeHint": "Le modèle que vous avez choisi répond toujours ; les images sont remplacées par des descriptions textuelles.", -"modalityBridgeModeReroute": "Toujours rediriger", -"modalityBridgeModeRerouteHint": "Envoyez l'ensemble de la demande au meilleur modèle capable de vision (retourne à décrire lorsque aucun n'est utilisable).", -"modalityBridgeVisionModel": "Modèle de vision", -"modalityBridgeVisionModelAuto": "Automatique (meilleure disponible)", -"modalityBridgeTaskAware": "Description consciente de la tâche", -"modalityBridgeTaskAwareDesc": "Inclure la question de l'utilisateur comme point focal afin que le modèle de vision décrive ce qui est important et transcrive le texte visible.", -"modalityBridgePrompt": "Invite de description", -"modalityBridgeAdvanced": "Avancé", -"modalityBridgeTimeoutMs": "Délai d'attente (ms)", -"modalityBridgeMaxImages": "Nombre maximal d'images par requête", -"modalityBridgeCacheEnabled": "Descriptions de cache", -"modalityBridgeCacheEnabledDesc": "Réutiliser les descriptions pour les images identiques (clé SHA-256, en mémoire).", -"modalityBridgeCacheTtlMinutes": "Durée de vie du cache (minutes)", -"modalityBridgeCacheMaxEntries": "Entrées max du cache", -"modalityBridgeStatsBridged": "ponté", -"modalityBridgeStatsCacheHits": "hits de cache", -"modalityBridgeStatsFailures": "échecs", -"modalityBridgeStatsLastUsed": "dernier utilisé", -"modalityBridgeStatsNever": "jamais", -"modalityBridgeTestButton": "Tester avec une image d'exemple", -"modalityBridgeTestRunning": "Test en cours…", -"modalityBridgeTestOk": "Pont OK — {count} image(s) décrite(s) par {model}", -"modalityBridgeTestReroute": "Le pont a redirigé la demande vers {model}", -"modalityBridgeTestNoop": "Le pont ne s'est pas activé (le modèle peut prendre en charge la vision nativement ou le pont est désactivé)", -"modalityBridgeTestError": "Test échoué : {message}", -"modalityBridgeAudioComingSoon": "Le pont audio (parole → texte via /v1/audio/transcriptions) sera inclus dans la prochaine version. Ses clés de paramètres sont déjà réservées.", -"modalityBridgeVideoComingSoon": "Le pont vidéo (échantillonnage d'images + sous-titrage) est dans la liste des tâches — voir l'issue #9760.", -"modalityBridgeMovedTitle": "Vision Bridge déplacé", -"modalityBridgeMovedBody": "Les paramètres de Vision Bridge sont désormais disponibles sur la page dédiée à Modality Bridge.", -"modalityBridgeMovedCta": "Ouvrir les paramètres du pont de modalité", -"modalityBridgeAudioTitle": "Pont Audio", -"modalityBridgeAudioDesc": "Transcrivez l'audio avec un modèle de reconnaissance vocale avant de continuer avec le modèle de texte choisi.", -"modalityBridgeAudioEnabled": "Activer le Pont Audio", -"modalityBridgeAudioEnabledDesc": "Remplacez les parties audio par des transcriptions lorsque le modèle cible ne peut pas traiter l'audio.", -"modalityBridgeAudioModel": "Modèle de reconnaissance vocale", -"modalityBridgeAudioModelAuto": "Auto (premier fournisseur STT connecté)", -"modalityBridgeAudioMaxClips": "Nombre maximum de clips audio par demande", -"modalityBridgeAudioTestButton": "Tester avec un audio d'exemple", -"modalityBridgeAudioTestRunning": "Test de l'audio…", -"modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) transcrit(s) par {model}", -"modalityBridgeAudioTestNoop": "Le pont audio ne s'est pas activé (la cible peut prendre en charge l'audio, aucun fournisseur STT n'est connecté, ou le pont est désactivé)", -"modalityBridgeAudioTestError": "Échec du test audio : {message}", -"modelRoutingDescriptionPlaceholder": "Router les modèles Opus vers le combo frontier", -"cliproxyapiFallbackCodes": "Codes de secours Cliproxyapi", -"cliproxyapiFallbackDescription": "Description du mécanisme de repli Cliproxyapi", -"cliproxyapiHealthLabel": "Libellé de l’état Cliproxyapi", -"cliproxyapiImportFailed": "Échec de l’importation Cliproxyapi", -"cliproxyapiImportResult": "Résultat de l’importation Cliproxyapi", -"cliproxyapiInvalidUrl": "URL Cliproxyapi invalide", -"cliproxyapiLifecycleNoticeAfter": "Notification après le cycle de vie Cliproxyapi", -"cliproxyapiLifecycleNoticeBefore": "Notification avant le cycle de vie Cliproxyapi", -"cliproxyapiLifecycleNoticeLink": "Lien de notification du cycle de vie Cliproxyapi", -"cliproxyapiPortLabel": "Libellé du port Cliproxyapi", -"cliproxyapiStatusLabel": "Cliproxyapi Statut Label", -"cliproxyapiVersionLabel": "Libellé de la version Cliproxyapi", -"collection": "Collection", -"errorPage": { + "modalityBridgeIntro": "Reliez le contenu multimodal au texte avant qu'il n'atteigne les modèles uniquement textuels. La vision est en direct ; l'audio arrive avec l'AudioBridge ; la vidéo est sur la feuille de route.", + "modalityBridgeVisionTab": "Vision", + "modalityBridgeAudioTab": "Audio", + "modalityBridgeVideoTab": "Vidéo", + "modalityBridgeSubTabsAria": "Sections du Pont de Modalité", + "modalityBridgeVisionTitle": "Vision Bridge", + "modalityBridgeVisionDesc": "Décrivez les images avec un modèle de vision et continuez avec le modèle de texte choisi par l'utilisateur.", + "modalityBridgeMode": "Mode", + "modalityBridgeModeAuto": "Automatique (recommandé)", + "modalityBridgeModeAutoHint": "Heuristique héritée : réacheminer des modèles individuels sans identifiants ; décrire autrement.", + "modalityBridgeModeDescribe": "Toujours décrire", + "modalityBridgeModeDescribeHint": "Le modèle que vous avez choisi répond toujours ; les images sont remplacées par des descriptions textuelles.", + "modalityBridgeModeReroute": "Toujours rediriger", + "modalityBridgeModeRerouteHint": "Envoyez l'ensemble de la demande au meilleur modèle capable de vision (retourne à décrire lorsque aucun n'est utilisable).", + "modalityBridgeVisionModel": "Modèle de vision", + "modalityBridgeVisionModelAuto": "Automatique (meilleure disponible)", + "modalityBridgeTaskAware": "Description consciente de la tâche", + "modalityBridgeTaskAwareDesc": "Inclure la question de l'utilisateur comme point focal afin que le modèle de vision décrive ce qui est important et transcrive le texte visible.", + "modalityBridgePrompt": "Invite de description", + "modalityBridgeAdvanced": "Avancé", + "modalityBridgeTimeoutMs": "Délai d'attente (ms)", + "modalityBridgeMaxImages": "Nombre maximal d'images par requête", + "modalityBridgeCacheEnabled": "Descriptions de cache", + "modalityBridgeCacheEnabledDesc": "Réutiliser les descriptions pour les images identiques (clé SHA-256, en mémoire).", + "modalityBridgeCacheTtlMinutes": "Durée de vie du cache (minutes)", + "modalityBridgeCacheMaxEntries": "Entrées max du cache", + "modalityBridgeStatsBridged": "ponté", + "modalityBridgeStatsCacheHits": "hits de cache", + "modalityBridgeStatsFailures": "échecs", + "modalityBridgeStatsLastUsed": "dernier utilisé", + "modalityBridgeStatsNever": "jamais", + "modalityBridgeTestButton": "Tester avec une image d'exemple", + "modalityBridgeTestRunning": "Test en cours…", + "modalityBridgeTestOk": "Pont OK — {count} image(s) décrite(s) par {model}", + "modalityBridgeTestReroute": "Le pont a redirigé la demande vers {model}", + "modalityBridgeTestNoop": "Le pont ne s'est pas activé (le modèle peut prendre en charge la vision nativement ou le pont est désactivé)", + "modalityBridgeTestError": "Test échoué : {message}", + "modalityBridgeAudioComingSoon": "Le pont audio (parole → texte via /v1/audio/transcriptions) sera inclus dans la prochaine version. Ses clés de paramètres sont déjà réservées.", + "modalityBridgeVideoComingSoon": "Le pont vidéo (échantillonnage d'images + sous-titrage) est dans la liste des tâches — voir l'issue #9760.", + "modalityBridgeMovedTitle": "Vision Bridge déplacé", + "modalityBridgeMovedBody": "Les paramètres de Vision Bridge sont désormais disponibles sur la page dédiée à Modality Bridge.", + "modalityBridgeMovedCta": "Ouvrir les paramètres du pont de modalité", + "modalityBridgeAudioTitle": "Pont Audio", + "modalityBridgeAudioDesc": "Transcrivez l'audio avec un modèle de reconnaissance vocale avant de continuer avec le modèle de texte choisi.", + "modalityBridgeAudioEnabled": "Activer le Pont Audio", + "modalityBridgeAudioEnabledDesc": "Remplacez les parties audio par des transcriptions lorsque le modèle cible ne peut pas traiter l'audio.", + "modalityBridgeAudioModel": "Modèle de reconnaissance vocale", + "modalityBridgeAudioModelAuto": "Auto (premier fournisseur STT connecté)", + "modalityBridgeAudioMaxClips": "Nombre maximum de clips audio par demande", + "modalityBridgeAudioTestButton": "Tester avec un audio d'exemple", + "modalityBridgeAudioTestRunning": "Test de l'audio…", + "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) transcrit(s) par {model}", + "modalityBridgeAudioTestNoop": "Le pont audio ne s'est pas activé (la cible peut prendre en charge l'audio, aucun fournisseur STT n'est connecté, ou le pont est désactivé)", + "modalityBridgeAudioTestError": "Échec du test audio : {message}", + "modelRoutingDescriptionPlaceholder": "Router les modèles Opus vers le combo frontier", + "cliproxyapiFallbackCodes": "Codes de secours Cliproxyapi", + "cliproxyapiFallbackDescription": "Description du mécanisme de repli Cliproxyapi", + "cliproxyapiHealthLabel": "Libellé de l’état Cliproxyapi", + "cliproxyapiImportFailed": "Échec de l’importation Cliproxyapi", + "cliproxyapiImportResult": "Résultat de l’importation Cliproxyapi", + "cliproxyapiInvalidUrl": "URL Cliproxyapi invalide", + "cliproxyapiLifecycleNoticeAfter": "Notification après le cycle de vie Cliproxyapi", + "cliproxyapiLifecycleNoticeBefore": "Notification avant le cycle de vie Cliproxyapi", + "cliproxyapiLifecycleNoticeLink": "Lien de notification du cycle de vie Cliproxyapi", + "cliproxyapiPortLabel": "Libellé du port Cliproxyapi", + "cliproxyapiStatusLabel": "Cliproxyapi Statut Label", + "cliproxyapiVersionLabel": "Libellé de la version Cliproxyapi", + "collection": "Collection", + "errorPage": { "description": "We could not load paramètres right now. Please retry in a few seconds.", "errorId": "Identifiant d’erreur : {id}", "retry": "Réessayer", "title": "Échec de load paramètres" }, -"host": "Hôte", -"notInstalled": "Non installé", -"oneproxyActions": "Actions Oneproxy", -"oneproxyActive": "Oneproxy actif", -"oneproxyAnonymity": "Oneproxy Anonymat", -"oneproxyCountry": "Oneproxy Pays", -"oneproxyDelete": "Suppression Oneproxy", -"oneproxyEmpty": "Oneproxy vide", -"oneproxyHost": "Hôte Oneproxy", -"oneproxyLatency": "Oneproxy Latence", -"oneproxyProtocol": "Oneproxy Protocole", -"oneproxyQuality": "Oneproxy Qualité", -"oneproxySyncFailed": "Échec de la synchronisation : {error}", -"oneproxySyncSuccess": "Synchronisation de {total} proxys terminée ({added} nouveaux, {updated} mis à jour)", -"proxyDocumentationSocks5DescAfter": "Description après la documentation du proxy SOCKS5", -"proxyFreePoolAddProxy": "Proxy Free Pool Ajouter Proxy", -"proxyFreePoolAdding": "Ajout au pool de proxies gratuits", -"proxyFreePoolSelectProxy": "Sélectionner un proxy dans le pool gratuit", -"proxyStatusActive": "Proxy Statut Active", -"proxyStatusInactive": "Proxy Statut Inactive", -"routingAddEntry": "Ajouter entry", -"settingSaveFailed": "Setting Enregistrer Failed", -"settingSaved": "Paramètre enregistré", -"skillsmpApiKeyHintAfter": ". Limite : {limit} requêtes par jour.", -"skillsmpApiKeyHintBefore": "Obtenez votre clé API sur", -"syncFailed": "Échec de la synchronisation", -"unhealthy": "Dégradé", -"oneproxyDescription": "Récupérez et alternez des proxys gratuits validés depuis la plateforme communautaire 1proxy", -"oneproxySyncing": "Synchronisation...", -"oneproxySyncNow": "Synchroniser maintenant", -"oneproxyClearAll": "Tout effacer", -"oneproxyGoogle": "Google", -"oneproxyClearAllConfirm": "Effacer tous les proxys 1proxy ?", -"memorySkillsSkillsmpDescription": "Connectez-vous à SkillsMP pour découvrir et installer des skills depuis la marketplace.", -"memorySkillsActiveProviderDescription": "Choisissez le fournisseur utilisé par la page Skills pour la recherche et l’installation.", -"memorySkillsSkillsmpProviderTitle": "Marketplace SkillsMP", -"memorySkillsSkillsmpProviderDescription": "Marketplace authentifiée (utilise votre clé API SkillsMP).", -"memorySkillsSkillsshProviderTitle": "Annuaire skills.sh", -"memorySkillsSkillsshProviderDescription": "Fournisseur d’annuaire public (aucune clé API requise).", -"routingCcBridgeCatalogName": "Bridge CC compatible avec Anthropic", -"routingClaudeProviderName": "Claude (OAuth)", -"routingClaudeProviderDescription": "Fournisseur Claude natif avec des jetons émis via OAuth.", -"routingCcBridgeName": "Bridge Claude-Code", -"routingCcBridgeDescription": "Endpoints relais utilisant des clés API (anthropic-compatible-cc-*).", -"routingCustomProviderDescription": "Fournisseur personnalisé.", -"routingUnknownOpKind": "Type d’opération inconnu : {kind}", -"routingInvalidJson": "JSON invalide : {error}", -"routingConfigMustBeObject": "La configuration doit être un objet JSON", -"routingEnabledMustBeBoolean": "`enabled` doit être vrai ou faux", -"routingPipelineMustBeArray": "`pipeline` doit être un tableau d’opérations", -"routingPipelineTooLong": "Le pipeline ne peut pas dépasser 50 opérations", -"routingOpMissingKind": "Opération n°{index} : `kind` manquant ou invalide", -"routingOpUnknownKind": "Opération n°{index} : type inconnu « {kind} »", -"routingJsonEditorHide": "Masquer l’éditeur JSON", -"routingJsonEditorImportExport": "Importer / exporter du JSON", -"routingJsonEditorLabel": "JSON (modifiez et appliquez, ou collez pour importer)", -"routingApplyJson": "Appliquer le JSON", -"routingTransformsFootnote": "Toutes les opérations de transformation sont idempotentes lors d’une nouvelle exécution. Les modifications prennent effet immédiatement à la requête suivante." + "host": "Hôte", + "notInstalled": "Non installé", + "oneproxyActions": "Actions Oneproxy", + "oneproxyActive": "Oneproxy actif", + "oneproxyAnonymity": "Oneproxy Anonymat", + "oneproxyCountry": "Oneproxy Pays", + "oneproxyDelete": "Suppression Oneproxy", + "oneproxyEmpty": "Oneproxy vide", + "oneproxyHost": "Hôte Oneproxy", + "oneproxyLatency": "Oneproxy Latence", + "oneproxyProtocol": "Oneproxy Protocole", + "oneproxyQuality": "Oneproxy Qualité", + "oneproxySyncFailed": "Échec de la synchronisation : {error}", + "oneproxySyncSuccess": "Synchronisation de {total} proxys terminée ({added} nouveaux, {updated} mis à jour)", + "proxyDocumentationSocks5DescAfter": "Description après la documentation du proxy SOCKS5", + "proxyFreePoolAddProxy": "Proxy Free Pool Ajouter Proxy", + "proxyFreePoolAdding": "Ajout au pool de proxies gratuits", + "proxyFreePoolSelectProxy": "Sélectionner un proxy dans le pool gratuit", + "proxyStatusActive": "Proxy Statut Active", + "proxyStatusInactive": "Proxy Statut Inactive", + "routingAddEntry": "Ajouter entry", + "settingSaveFailed": "Setting Enregistrer Failed", + "settingSaved": "Paramètre enregistré", + "skillsmpApiKeyHintAfter": ". Limite : {limit} requêtes par jour.", + "skillsmpApiKeyHintBefore": "Obtenez votre clé API sur", + "syncFailed": "Échec de la synchronisation", + "unhealthy": "Dégradé", + "oneproxyDescription": "Récupérez et alternez des proxys gratuits validés depuis la plateforme communautaire 1proxy", + "oneproxySyncing": "Synchronisation...", + "oneproxySyncNow": "Synchroniser maintenant", + "oneproxyClearAll": "Tout effacer", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Effacer tous les proxys 1proxy ?", + "memorySkillsSkillsmpDescription": "Connectez-vous à SkillsMP pour découvrir et installer des skills depuis la marketplace.", + "memorySkillsActiveProviderDescription": "Choisissez le fournisseur utilisé par la page Skills pour la recherche et l’installation.", + "memorySkillsSkillsmpProviderTitle": "Marketplace SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Marketplace authentifiée (utilise votre clé API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Annuaire skills.sh", + "memorySkillsSkillsshProviderDescription": "Fournisseur d’annuaire public (aucune clé API requise).", + "routingCcBridgeCatalogName": "Bridge CC compatible avec Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Fournisseur Claude natif avec des jetons émis via OAuth.", + "routingCcBridgeName": "Bridge Claude-Code", + "routingCcBridgeDescription": "Endpoints relais utilisant des clés API (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Fournisseur personnalisé.", + "routingUnknownOpKind": "Type d’opération inconnu : {kind}", + "routingInvalidJson": "JSON invalide : {error}", + "routingConfigMustBeObject": "La configuration doit être un objet JSON", + "routingEnabledMustBeBoolean": "`enabled` doit être vrai ou faux", + "routingPipelineMustBeArray": "`pipeline` doit être un tableau d’opérations", + "routingPipelineTooLong": "Le pipeline ne peut pas dépasser 50 opérations", + "routingOpMissingKind": "Opération n°{index} : `kind` manquant ou invalide", + "routingOpUnknownKind": "Opération n°{index} : type inconnu « {kind} »", + "routingJsonEditorHide": "Masquer l’éditeur JSON", + "routingJsonEditorImportExport": "Importer / exporter du JSON", + "routingJsonEditorLabel": "JSON (modifiez et appliquez, ou collez pour importer)", + "routingApplyJson": "Appliquer le JSON", + "routingTransformsFootnote": "Toutes les opérations de transformation sont idempotentes lors d’une nouvelle exécution. Les modifications prennent effet immédiatement à la requête suivante.", + "cliproxyapiUnknown": "Inconnu", + "cliproxyapiVersion": "Version", + "cliproxyapiHealth": "Santé", + "cliproxyapiPort": "Port", + "qdrantHost": "Hôte", + "qdrantCollection": "Collection" }, "contextRtk": { "title": "RTK Engine", @@ -8536,7 +8553,8 @@ "enableDescription": "S'exécute en dernier dans la pile (après que RTK/Caveman a nettoyé le texte, OmniGlyph convertit le reste en images) et s'exécute également de manière autonome via le mode omniglyph. Il s'agit d'une version préliminaire qui reste désactivée par défaut jusqu'à ce que la validation de bout en bout soit terminée.", "saved": "Enregistré.", "saveFailed": "Impossible d'enregistrer.", - "enableAria": "Activer le moteur OmniGlyph" + "enableAria": "Activer le moteur OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Services intégrés", @@ -9625,7 +9643,23 @@ "traeAuthorizationSuccess": "Autorisation Trae ✓", "traeAuthorizationFailed": "Échec de l’autorisation Trae", "closeAuthorizationWindow": "Vous pouvez fermer cette fenêtre.", - "returnToDashboard": "Retournez au tableau de bord." + "returnToDashboard": "Retournez au tableau de bord.", + "resetViaAppData": "Réinitialiser via les données de l'application", + "deleteSettingsToReset": "Supprimez le fichier de paramètres du répertoire des données de l'application pour réinitialiser votre mot de passe :", + "quitAppCompletely": "Quitter complètement l'application de bureau OmniRoute", + "navigateToAppData": "Accédez au répertoire des données de l'application", + "checkAppDataFolder": "Vérifiez votre dossier de données d'application système", + "deleteSettingsJson": "Supprimer", + "relaunchAppFresh": "Relancez l'application de bureau OmniRoute — elle démarrera une nouvelle configuration", + "alternativeSetPassword": "Alternative : Définir un nouveau mot de passe", + "setNewPasswordViaEnv": "Définissez un nouveau mot de passe initial via le fichier d'environnement du serveur :", + "openServerEnv": "Ouvrir", + "inDataDirectory": "dans le répertoire de données", + "addOrUpdate": "Ajouter ou mettre à jour", + "deleteAndRelaunch": "Supprimer", + "settingsJson": "settings.json", + "fromDataDir": "depuis le répertoire de données", + "relaunchApp": "Relancez l'application de bureau OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -12318,13 +12352,13 @@ "updateProviderFailed": "Échec de la mise à jour du fournisseur", "providerEnabled": "{provider} activé", "providerDisabled": "{provider} désactivé", -"providerAdded": "{provider} ajouté", -"add": "Ajouter", -"manualApiKey": "Utiliser une clé API manuelle", -"createDahlTokenFailed": "Échec de create Dahl token", -"providerProxy": "Proxy", -"providerProxyConfigureHint": "Configurer proxy", -"providerProxyTitleConfigured": "Proxy configuré : {host}" + "providerAdded": "{provider} ajouté", + "add": "Ajouter", + "manualApiKey": "Utiliser une clé API manuelle", + "createDahlTokenFailed": "Échec de create Dahl token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configurer proxy", + "providerProxyTitleConfigured": "Proxy configuré : {host}" }, "gamification": { "leaderboardScopes": { @@ -12822,7 +12856,9 @@ "avoid": "Restreint par les CGU — examiner les conditions", "caution": "Attention — clauses d'utilisation personnelle / proxy", "ok": "Généralement permissif" - } + }, + "allProviders": "Tous les fournisseurs", + "noApiKeyRequired": "Aucune clé API requise" }, "providerHealthAutopilot": { "title": "Pilote automatique de l'état des fournisseurs", @@ -13024,8 +13060,8 @@ "partnerLinkNote": "Lien partenaire", "dismissAriaLabel": "Ignorer" }, -"featureFlagExposeFunctionalGatewayMirrorsDescription": "Annoncez les identifiants de miroir / sur /v1/models pour les modèles dont le propriétaire canonique n'a pas de crédentiel actif mais un passerelle de contournement avec un crédentiel actif les achemine. Avertissement : ajoute des entrées de catalogue pour tous les clients lorsqu'il est activé globalement.", -"radarPage": { + "featureFlagExposeFunctionalGatewayMirrorsDescription": "Annoncez les identifiants de miroir / sur /v1/models pour les modèles dont le propriétaire canonique n'a pas de crédentiel actif mais un passerelle de contournement avec un crédentiel actif les achemine. Avertissement : ajoute des entrées de catalogue pour tous les clients lorsqu'il est activé globalement.", + "radarPage": { "title": "Catalogue Radar", "subtitle": "Catalogue de modèles gratuit enrichi par l'intelligence communautaire", "loading": "Chargement du catalogue...", @@ -13081,7 +13117,7 @@ "campaignsUpsellCommunity": "Limited-time campaigns are a supporter extra. Everything on this page's fixed links stays free for everyone.", "campaignsValidUntil": "Valid until {date}" }, -"radarSetupPage": { + "radarSetupPage": { "title": "Configuration du fournisseur", "setupTitle": "Configuration : {provider}", "setupSubtitle": "Suivez les étapes ci-dessous pour configurer ce fournisseur", @@ -13106,7 +13142,7 @@ "addConnectionDescription": "Vous n'avez pas encore de connexion ? Ajoutez-en une dans le tableau de bord des fournisseurs.", "addConnectionLink": "Aller aux fournisseurs →" }, -"resilienceConnections": { + "resilienceConnections": { "title": "Résilience de Connexion", "table": { "status": "Statut", @@ -13200,12 +13236,12 @@ "degraded.source.modelLockouts": "Blocages de Modèle", "degraded.source.count": "Nombre de Connexions" }, -"featureFlagCapabilityFilterEnabledDescription": "Rejeter les demandes avant l'expédition lorsque le modèle cible manque des capacités requises (vision, outils, sortie structurée, fenêtre de contexte). Protège les demandes directes à un seul fournisseur qui contournent le filtre de compatibilité de la couche combo.", -"capabilityFilter.visionMismatch": "Le fournisseur ne prend pas en charge la vision pour cette demande d'image", -"capabilityFilter.toolsMismatch": "Le fournisseur ne prend pas en charge l'appel d'outils", -"capabilityFilter.structuredOutputMismatch": "Le fournisseur ne prend pas en charge la sortie structurée", -"capabilityFilter.contextWindowMismatch": "La demande dépasse la fenêtre de contexte du fournisseur", -"publicSystem": { + "featureFlagCapabilityFilterEnabledDescription": "Rejeter les demandes avant l'expédition lorsque le modèle cible manque des capacités requises (vision, outils, sortie structurée, fenêtre de contexte). Protège les demandes directes à un seul fournisseur qui contournent le filtre de compatibilité de la couche combo.", + "capabilityFilter.visionMismatch": "Le fournisseur ne prend pas en charge la vision pour cette demande d'image", + "capabilityFilter.toolsMismatch": "Le fournisseur ne prend pas en charge l'appel d'outils", + "capabilityFilter.structuredOutputMismatch": "Le fournisseur ne prend pas en charge la sortie structurée", + "capabilityFilter.contextWindowMismatch": "La demande dépasse la fenêtre de contexte du fournisseur", + "publicSystem": { "notFound": { "title": "Page introuvable", "description": "La page que vous recherchez n'existe pas ou a été déplacée.", @@ -13342,7 +13378,7 @@ } } }, -"kiroAuthModal": { + "kiroAuthModal": { "title": "Connecter {providerLabel}", "chooseMethod": "Choisissez votre méthode d'authentification :", "builderId": "AWS Builder ID", @@ -13384,7 +13420,7 @@ "errorApiKeyImportFailed": "Échec de l’importation de la clé API", "errorIdcStartUrlRequired": "Veuillez saisir votre URL de démarrage IDC" }, -"kiroSocialOAuthModal": { + "kiroSocialOAuthModal": { "title": "Connecter {providerLabel} via {providerName}", "errorStartAuthorization": "Échec du démarrage de l’autorisation", "errorAuthorizationExpired": "L’autorisation a expiré. Relancez le flux de connexion.", @@ -13403,7 +13439,7 @@ "errorTitle": "Échec de la connexion", "close": "Fermer" }, -"traeAuthModal": { + "traeAuthModal": { "errorAuthorizationFailed": "L’autorisation a échoué", "errorPopupBlocked": "Fenêtre contextuelle bloquée — autorisez les fenêtres contextuelles pour ce site ou collez le token manuellement ci-dessous.", "errorPopupClosed": "La fenêtre d’autorisation a été fermée avant la fin.", @@ -13429,14 +13465,14 @@ "importToken": "Importer le token", "cancel": "Annuler" }, -"sharedComponents": { + "sharedComponents": { "distributeProxies": { "distributing": "Distribution...", "complete": "Terminé", "defaultLabel": "Distribuer les proxys" } }, -"providerTest": { + "providerTest": { "dialogLabel": "Tester {provider}", "deprecated": "obsolète", "risk": "risque", @@ -13471,7 +13507,7 @@ "tokens": "Jetons" } }, -"proxyLog": { + "proxyLog": { "detailAriaLabel": "Détail du journal proxy", "event": "Événement proxy", "close": "Fermer la fenêtre de détail du proxy", @@ -13489,7 +13525,7 @@ "error": "Erreur", "configuration": "Configuration du proxy" }, -"requestTimeline": { + "requestTimeline": { "title": "Chronologie des requêtes", "modes": { "follow": "Suivre", @@ -13514,12 +13550,70 @@ "unknownModel": "inconnu", "pending": "en attente" }, -"metadata": { + "metadata": { "compressionTitle": "Compression", "compressionDescription": "Configurez la compression du contexte pour réduire l'utilisation des tokens et les coûts.", "relayTitle": "OmniRoute — Proxys relais", "relayDescription": "Points de terminaison de proxys relais serverless pour votre infrastructure IA", "trafficInspectorTitle": "Inspecteur de trafic — OmniRoute", "trafficInspectorDescription": "Surveillez les appels LLM et déboguez le trafic HTTPS de n'importe quelle application" + }, + "conductor": { + "title": "Conducteur — flotte d'agents CLI", + "subtitle": "OmniConductor hub : coureurs, file d'attente des tâches et conseils, en direct", + "runners": "Coureurs", + "tasks": "Tâches", + "colName": "Nom", + "colClis": "CLIs", + "colStatus": "Statut", + "colTask": "Tâche", + "colMode": "Mode", + "colRunner": "Coureur", + "colSummary": "Résumé", + "online": "en ligne", + "offline": "hors ligne", + "draining": "vidange", + "hubOffline": "Le hub du conducteur est hors ligne ou non configuré (CONDUCTOR_HUB_URL) — affichage de rien plutôt que de données obsolètes.", + "noRunners": "Aucun coureur enregistré", + "noTasks": "Aucune tâche pour le moment", + "detailTitle": "Détails de la tâche", + "prompt": "Invite", + "branch": "Branche", + "fetchHint": "Récupérez le résultat avec : git fetch origin {branch}", + "council": "Conseil", + "candidates": "Candidats", + "cancel": "Annuler la tâche", + "cancelConfirmTitle": "Annuler cette tâche ?", + "cancelConfirmMessage": "Le hub va interrompre l'exécution sur le runner. Cela ne peut pas être annulé.", + "cancelFailed": "Le hub a refusé l'annulation", + "close": "Fermer", + "error": "Erreur", + "faroTitle": "Faro — porte-parole de la flotte", + "faroSubtitle": "Chat et voix, ancrés dans les événements réels de la flotte. Les commandes destructrices demandent toujours une confirmation.", + "faroEmpty": "Demandez des nouvelles de la flotte — par exemple : \"comment va la flotte ?\"", + "faroPending": "Faro demande une confirmation", + "faroPlaceholder": "parler à Faro…", + "faroSend": "envoyer", + "faroOffline": "Faro (porte-parole) est hors ligne", + "yes": "Oui", + "no": "Non", + "pushToTalk": "Maintenez pour parler", + "speakAnswers": "répondre par la voix", + "voiceModels": "Modèles vocaux (fournisseur/modèle de cet OmniRoute)", + "voiceIdle": "parler", + "voiceListening": "écoute…", + "voiceThinking": "réflexion…", + "voiceSpeaking": "parlant…", + "sttFailed": "Échec de la transcription (vérifiez le modèle/fournisseur STT)", + "ttsFailed": "Échec de la synthèse vocale (vérifiez le modèle/fournisseur TTS)", + "micDenied": "Microphone indisponible ou permission refusée" + }, + "cliproxyProviderExposure": { + "title": "Exposition du Fournisseur", + "description": "Exposez les modèles CLIProxyAPI comme cible de routage sous le préfixe cliproxyapi/.", + "label": "Expose en tant que cliproxyapi/...", + "hint": "Lorsqu'il est activé, les modèles découverts apparaissent dans les sélecteurs de fournisseur à travers OmniRoute.", + "updateFailed": "Échec de la mise à jour (HTTP {status})", + "networkError": "Erreur réseau — impossible de mettre à jour le paramètre d'exposition du fournisseur" } } diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index 9128f16cd6..be5cd9215e 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -172,6 +172,18 @@ "unselectAll": "પસંદગી રદ કરો", "visibleModels": "દૃશ્યમાન", "selectAllConfirm": "આ કોમ્બોમાં {count} મોડેલ ઉમેરવા?", + "testSelectedProviders": "ટેસ્ટ પ્રદાતાઓ", + "testingSelectedProviders": "પરીક્ષણ {done}/{total}...", + "noProvidersSelectedToTest": "કૃપા કરીને નીચેના ઓછામાં ઓછા એક પ્રદાતા તપાસો", + "noModelsToTestForProviders": "ચૂંટાયેલા પ્રદાતાઓ માટે પરીક્ષણ કરવા માટે કોઈ મોડલ નથી", + "testSelectedProvidersResults": "{ok} ના {total} મોડલ કાર્યરત છે", + "selectWorkingModels": "કામકાજ ઉમેરો", + "unselectWorkingModels": "કાર્યરતને અનસિલેક્ટ કરો", + "noWorkingModelsToSelect": "કોઈ કાર્યરત મોડલ્સ ઉમેરવા માટે બાકી નથી", + "providerTestHint": "ટિપ: પ્રદાતા તપાસો → પરીક્ષણ → કાર્યરત ઉમેરો. ફરી ક્લિક કરો અનસિલેક્ટ કરવા માટે.", + "selectAllProviders": "બધા પ્રદાતાઓની તપાસ કરો", + "clearProviderSelection": "પ્રદાતાઓને અનચેક કરો", + "providersSelectedCount": "{count} પ્રદાતાઓ તપાસવામાં આવ્યા", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "આકાર", + "toggleNoAuthProvider": "નૉ-ઑથ પ્રોવાઇડર ટોગલ કરો", + "loadingModels": "મોડલ લોડ થઈ રહ્યા છે…", + "selectAModel": "મોડલ પસંદ કરો", + "degraded": "ખરાબ થયેલ", + "zeroConfigBannerTitle": "ઝીરો-કન્ફિગ મોડમાં ચલાવી રહ્યા છીએ", + "zeroConfigBannerBody": "OmniRoute પ્રથમ લોંચ પર આપોઆપ જનરેટ થયેલ સુરક્ષિત એન્ક્રિપ્શન કી બનાવે છે. તે {dataDir} પર જાળવવામાં આવે છે. કોઈ ક્રિયા કરવાની જરૂર નથી — તમારું ડેટા એન્ક્રિપ્ટેડ અને સુરક્ષિત છે. કસ્ટમ કીનો ઉપયોગ કરવા માટે, તે ફાઇલમાં JWT_SECRET અને STORAGE_ENCRYPTION_KEY ઉમેરો.", + "batchRelativeTimeIn": "માં {value}", + "batchRelativeTimeAgo": "{value} પહેલા", + "batchDetailsTitle": "બેચ વિગતો", + "batchProgress": "પ્રગતિ", + "batchCompletedCount": "{count} પૂર્ણ થયું", + "batchFailedCount": "{count} નિષ્ફળ", + "batchPendingCount": "{count} બાકી", + "batchTimeline": "ટાઈમલાઇન", + "batchTimelineInProgress": "ચાલુ છે", + "batchTimelineFinalizing": "અંતિમકરણ", + "batchTimelineCompleted": "પૂર્ણ થયું", + "batchTimelineFailed": "ફેલ થયું", + "batchTimelineExpires": "સમાપ્ત થાય છે", + "batchTimelineExpired": "સમાપ્ત", + "batchTimelineCancelling": "રદ કરી રહ્યું છે", + "batchTimelineCancelled": "રદ કરવામાં આવ્યું", + "batchTokenUsage": "ટોકન ઉપયોગ", + "batchMetadata": "મેટાડેટા", + "batchFileContents": "ફાઇલની સામગ્રી", + "batchFileUsedByCount": "{count, plural, one {# બેચ} other {# બેચો}}", + "batchFilePreview": "પૂર્વદર્શન", + "batchFilePreviewTruncated": "પ્રથમ {shown} લાઈનો દર્શાવી રહ્યા છીએ ({total} કુલ લાઈનો)", + "batchFileDownloadFull": "પૂર્ણ ફાઇલ ડાઉનલોડ કરો" }, "disabled": "નિષ્ક્રિય કરેલ", "featureFlagOmnirouteEmergencyFallbackDescription": "બજેટ-સમાપ્ત વિનંતીઓને કટોકટીના મફત ફોલબેક પ્રદાતા/મોડેલ પર રૂટ કરો.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "વિભાજક", "discovery": "ડિસ્કવરી", "discoverySubtitle": "મફત ઍક્સેસ માટે પ્રોવાઇડર્સ સ્કેન કરો", + "conductor": "સંચાલક", + "conductorSubtitle": "CLI-એજન્ટ ફલેટ", "resilienceConnections": "કનેક્શન સ્થિતિસ્થાપકતા", "resilienceConnectionsSubtitle": "કૂલડાઉન, બ્રેકર, લોકઆઉટ સ્થિતિ", "settingsModalityBridge": "મોડાલિટી બ્રિજ", - "settingsModalityBridgeSubtitle": "છબી/ઓડિયો → ટેક્સ્ટ ફોલબેક ટેક્સ્ટ-માત્ર મોડલ્સ માટે" + "settingsModalityBridgeSubtitle": "છબી/ઓડિયો → ટેક્સ્ટ ફોલબેક ટેક્સ્ટ-માત્ર મોડલ્સ માટે", + "commandPalette": { + "title": "કમાન્ડ પેલેટ", + "searchPlaceholder": "પૃષ્ઠો, સેટિંગ્સ, સાધનો શોધો...", + "clearSearch": "શોધ સાફ કરો", + "noResults": "કોઈ પરિણામો નથી", + "navigate": "નેવિગેટ કરો", + "open": "ખોલો", + "close": "બંધ કરો" + }, + "noResults": "કોઈ પરિણામો નથી" }, "webhooks": { "title": "વેબહુક્સ", @@ -1477,7 +1531,11 @@ "settings.update_failed": "સેટિંગ્સ અપડેટ નિષ્ફળ રહ્યું", "sync.token.created": "સિંક ટોકન બનાવવામાં આવ્યું", "sync.token.revoked": "સિંક ટોકન રદ કરવામાં આવ્યું" - } + }, + "mcpMetricCalls24h": "કૉલ્સ (24 કલાક)", + "mcpMetricSuccessRate": "સફળતા દર", + "mcpMetricAvgDuration": "સરેરાશ સમયગાળો", + "mcpMetricTopTool": "ટોપ ટૂલ" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "પૃષ્ઠને આપમેળે ફરીથી લોડ કરી રહ્યું છે...", - "providerTopology": "પ્રદાતા ટોપોલોજી" + "providerTopology": "પ્રદાતા ટોપોલોજી", + "downloadDmg": "DMG ડાઉનલોડ કરો (macOS)", + "downloadDmgDescription": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનનો નવો સંસ્કરણ ઉપલબ્ધ છે. કૃપા કરીને અપડેટ કરવા માટે macOS DMG ઇન્સ્ટોલર ડાઉનલોડ અને ઇન્સ્ટોલ કરો (વર્તમાન: v{version}).", + "downloadExe": "ડાઉનલોડ EXE (Windows)", + "downloadExeDescription": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનનો નવો સંસ્કરણ ઉપલબ્ધ છે. કૃપા કરીને અપડેટ કરવા માટે Windows EXE ઇન્સ્ટોલર ડાઉનલોડ અને ઇન્સ્ટોલ કરો (વર્તમાન: v{version}).", + "downloadAppImage": "એપઇમેજ ડાઉનલોડ કરો (લિનક્સ)", + "downloadAppImageDescription": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનનો નવો સંસ્કરણ ઉપલબ્ધ છે. કૃપા કરીને અપડેટ કરવા માટે લિનક્સ એપઇમેજ પેકેજ ડાઉનલોડ કરો (વર્તમાન: v{version}).", + "downloadUpdate": "અપડેટ ડાઉનલોડ કરો", + "downloadUpdateDescription": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનનો નવો સંસ્કરણ ઉપલબ્ધ છે. કૃપા કરીને તમારા સિસ્ટમ માટે સંબંધિત એપ ફોર્મેટ ડાઉનલોડ કરો (વર્તમાન: v{version}).", + "updateQueued": "v{version} માટે અપડેટ ક્યૂ કરવામાં આવ્યું.", + "updateDockerRebuilding": "ડોકર ઇમેજ પૃષ્ઠભૂમિમાં ફરીથી બનાવાઈ રહી છે.", + "updateWaitingRestart": "નવી આવૃત્તિ સાથે OmniRoute ફરી શરૂ થવાની રાહ જોઈ રહ્યા છીએ.", + "updateInstalling": "v{version} ઇન્સ્ટોલ કરી રહ્યા છીએ.", + "updateRunning": "OmniRoute હવે v{version} ચલાવી રહ્યું છે.", + "updateCompleted": "OmniRoute v{version} પર અપડેટ કરવામાં આવ્યું છે.", + "updateDockerStillRebuilding": "Docker છબી હજુ પણ v{version} માટે પુનઃનિર્માણ થઈ રહી છે.", + "updateInstallingBackground": "પૃષ્ઠભૂમિમાં v{version} સ્થાપિત કરી રહ્યું છે.", + "updateWaitingVersion": "v{version} પર OmniRoute પાછું આવવાની રાહ જોઈ રહ્યા છીએ.", + "updateDockerStillInProgress": "Docker પુનઃબાંધકામ હજુ પણ ચાલુ છે.", + "updateRestarting": "સેવા પુનઃપ્રારંભ થઈ રહ્યો છે. ઓમ્નીરૂટને ફરીથી ઑનલાઇન આવવા માટે રાહ જોઈ રહ્યા છીએ...", + "updateTimeout": "અપડેટ શરૂ થયું, પરંતુ v{version} સમય મર્યાદા પહેલા ઉપલબ્ધ નથી થયું. પૃષ્ઠને રિફ્રેશ કરો અથવા સર્વર લોગ્સ તપાસો.", + "updateTimedOut": "v{version} માટે અપડેટ સમય સમાપ્ત થયો.", + "updateStartFailed": "અપડેટ શરૂ કરવામાં નિષ્ફળ.", + "noResponseStream": "કોઈ પ્રતિસાદ પ્રવાહ પ્રાપ્ત થયો નથી.", + "updateComplete": "અપડેટ પૂર્ણ!", + "updateFailed": "અપડેટ નિષ્ફળ ગયું.", + "updateNetworkError": "નેટવર્ક ભૂલ — અપડેટ દરમિયાન કનેક્શન ગુમ થયું.", + "stepInstallPackage": "પેકેજ સ્થાપિત કરો", + "stepRebuildNativeModules": "નેટિવ મોડ્યુલ્સને પુનઃબનાવો", + "stepRestartService": "સેવા પુનઃપ્રારંભ કરો", + "stepComplete": "પૂર્ણ", + "stepError": "ભૂલ", + "updateCompleteTitle": "અપડેટ પૂર્ણ!", + "updateFailedTitle": "અપડેટ નિષ્ફળ થયું", + "updatingTitle": "OmniRoute ને અપડેટ કરી રહ્યું છે...", + "reloadNotice": "પૃષ્ઠ થોડા સેકન્ડમાં આપોઆપ રિફ્રેશ થશે.", + "retryNotice": "કૃપા કરીને ફરી પ્રયાસ કરો અથવા CLI દ્વારા મેન્યુઅલી અપડેટ કરો.", + "restartNotice": "આ પૃષ્ઠ બંધ ન કરો. સિસ્ટમ આપોઆપ પુનઃપ્રારંભ કરશે.", + "reloadNow": "હવે ફરી લોડ કરો", + "closeUpdate": "બંધ કરો", + "retryUpdate": "ફરીથી પ્રયાસ કરો", + "updateAvailableTitle": "અપડેટ ઉપલબ્ધ છે: v{version}{desktop}", + "desktopAppLabel": "(ડેસ્કટોપ એપ)", + "checkingForUpdates": "અપડેટ્સ માટે તપાસી રહ્યા છીએ...", + "versionAvailableForDownload": "વર્ષ v{version} ડાઉનલોડ માટે ઉપલબ્ધ છે.", + "downloadingUpdate": "અપડેટ ડાઉનલોડ થઈ રહ્યું છે... {percent}% પૂર્ણ.", + "updateDownloaded": "ડાઉનલોડ સફળતાપૂર્વક અપડેટ કરવામાં આવ્યું! લાગુ કરવા માટે Restart & Install પર ક્લિક કરો.", + "autoUpdateFailed": "ઓટો-અપડેટ નિષ્ફળ ગયું: {reason}.", + "unknownUpdateError": "અજ્ઞાત ભૂલ", + "versionAvailableDesktop": "ડેસ્કટોપ એપ્લિકેશન માટે આવૃત્તિ v{version} ઉપલબ્ધ છે.", + "manualUpdateRequired": "આ સ્થાપન પ્રકાર માટે મેન્યુઅલ અપડેટની જરૂર છે.", + "restartAndInstall": "ફરી શરૂ કરો અને સ્થાપિત કરો", + "checkForUpdate": "અપડેટ માટે તપાસો", + "manualUpdate": "હાથથી અપડેટ કરો", + "directDownloadHint": "અથવા સંબંધિત ઇન્સ્ટોલર ફોર્મેટ સીધા ડાઉનલોડ કરો:", + "releaseNotes": "રિલીઝ નોંધો", + "readMore": "વધુ વાંચો", + "noAuthLabel": "કોઈ ઓથેન્ટિકેશન નથી" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "આ વિનંતીની આસપાસના સંગ્રહિત કૉલ લૉગ્સ પરથી અનુમાનિત", "routeRecommendations": "ભલામણો", "routeLimitations": "મર્યાદાઓ", - "routeNoKnownLimitations": "આ સ્પષ્ટીકરણ માટે કોઈ જાણીતી મર્યાદાઓ નથી." + "routeNoKnownLimitations": "આ સ્પષ્ટીકરણ માટે કોઈ જાણીતી મર્યાદાઓ નથી.", + "searchAnalyticsLoading": "શોધ વિશ્લેષણ લોડ થઈ રહ્યું છે…", + "searchAnalyticsNoData": "હજી સુધી કોઈ શોધ ડેટા ઉપલબ્ધ નથી.", + "searchAnalyticsNoDataDescription": "પ્રથમ શોધ પછી શોધ વિનંતીઓ અહીં દેખાશે /v1/search.", + "searchAnalyticsToday": "{count} આજે", + "searchAnalyticsCachedRequests": "{count} કેશ કરેલ વિનંતીઓ", + "searchAnalyticsApiCosts": "શોધ API ખર્ચ", + "searchAnalyticsErrors": "{count} ભૂલો", + "searchAnalyticsNoErrors": "કોઈ ભૂલો નથી", + "searchAnalyticsProviderBreakdown": "પ્રદાતા વિભાજન", + "searchAnalyticsQueries": "ક્વેરીઝ", + "searchAnalyticsEmptyDescription": "POST /v1/search નો ઉપયોગ કરીને વેબ શોધોને રાઉટિંગ શરૂ કરો.", + "searchAnalyticsFreeTier": "મફત સ્તર ઉપલબ્ધ: Serper (2,500/મહિનો), Brave (2,000/મહિનો), Exa (1,000/મહિનો), Tavily (1,000/મહિનો) — કુલ 6,500+ મફત શોધો/મહિને સ્વચાલિત ફેઇલઓવર સાથે.", + "autoRoutingNoDataAvailable": "કોઈ ઓટો-રાઉટિંગ વિશ્લેષણ ઉપલબ્ધ નથી. મેટ્રિક્સ જોવા માટે ઓટો/ પ્રિફિક્સનો ઉપયોગ કરીને વિનંતીઓ કરો.", + "defaultVariantLabel": "ડિફોલ્ટ", + "freeTierAvailable": "મફત સ્તર ઉપલબ્ધ છે" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} પ્રદાતાઓ", "imageToTextBridgeAvailable": "મોડાલિટી બ્રિજ હવે ટેક્સ્ટ-માત્ર મોડલ્સ માટે છબીઓનું વર્ણન કરી શકે છે. ઇનલાઇન પ્લેગ્રાઉન્ડ ઉપલબ્ધ રહેશે જ્યારે /api/v1/images/understanding અમલમાં આવશે.", "imageToTextBridgeCta": "Modality Bridge સેટિંગ્સમાં Image→Text બ્રિજને કન્ફિગર કરો", - "sttBridgeCta": "Modality Bridge સેટિંગ્સમાં Speech→Text બ્રિજને કન્ફિગર કરો" + "sttBridgeCta": "Modality Bridge સેટિંગ્સમાં Speech→Text બ્રિજને કન્ફિગર કરો", + "existingConnection": "મૌજૂદ કનેક્શન", + "openrouterSttDescription": "OpenRouter સ્પીચ-ટુ-ટેક્સ્ટ મોડેલ્સ તમારી રૂપરેખાંકિત OpenRouter કનેક્શનનો ઉપયોગ કરે છે. કોઈ અલગ પ્રમાણપત્રની જરૂર નથી." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "આમાં પેસ્ટ કરો:", "copilotReloadInstruction": "પછી VS Code ફરીથી લોડ કરો અને ઇનપુટ પ્રોમ્પ્ટમાં API કી સેટ કરો.", "wireApiChatCompletions": "ચેટ પૂર્ણતા (/ચેટ/પૂર્ણતા)", - "wireApiResponses": "પ્રતિભાવ API (/પ્રતિસાદો)" + "wireApiResponses": "પ્રતિભાવ API (/પ્રતિસાદો)", + "cliproxyapiActionFailed": "ક્રિયા નિષ્ફળ ગઈ", + "cliproxyapiActionSucceeded": "ક્રિયા સફળ થઈ ગઈ", + "cliproxyapiCheckUpdates": "અપડેટ્સ તપાસો", + "cliproxyapiDescription": "અપસ્ટ્રીમ પ્રોક્સી ફોલબેક (ગો આધારિત ઓથેન્ટિકેશન)", + "cliproxyapiHealth": "આરોગ્ય", + "cliproxyapiHealthy": "સ્વસ્થ", + "cliproxyapiInstall": "સ્થાપિત કરો", + "cliproxyapiNotInstalledValue": "ઇન્સ્ટોલ કરવામાં આવ્યું નથી", + "cliproxyapiPort": "પોર્ટ", + "cliproxyapiRequestFailed": "વિનંતી નિષ્ફળ ગઈ", + "cliproxyapiRestart": "ફરી શરૂ કરો", + "cliproxyapiStart": "શરૂઆત", + "cliproxyapiStatusError": "ભૂલ", + "cliproxyapiStatusInstalled": "સ્થાપિત", + "cliproxyapiStatusNotInstalled": "ઇન્સ્ટોલ કરવામાં આવ્યું નથી", + "cliproxyapiStatusRunning": "ચાલુ છે", + "cliproxyapiStatusStopped": "રોકાઈ ગઈ", + "cliproxyapiStop": "રોકો", + "cliproxyapiUnhealthy": "અસ્વસ્થ", + "cliproxyapiUnknown": "અજ્ઞાત", + "cliproxyapiUpdate": "અપડેટ કરો", + "cliproxyapiUpdateAvailable": "અપડેટ ઉપલબ્ધ છે: v{current} → v{latest}", + "cliproxyapiVersion": "આવૃત્તિ" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "ફક્ત ક્વોટા થાકવા પર આગળ વધો", + "fallbackOnlyOnQuotaExhaustionShort": "ક્વોટા-માત્ર ફોલબેક", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "મોડ પૅક અને વેઇટિંગ અહીં રહે છે; બ્રેકર રનટાઇમ સ્થિતિ Health પૃષ્ઠ પર રહે છે.", "emailVisibilityHint": "અહીં એકાઉન્ટ ઇમેઇલ્સ વૈશ્વિક ગોપનીયતા ટૉગલને અનુસરે છે.", "emailVisibilityTooltip": "કૉમ્બોઝ, પ્રદાતાઓ અને ક્વોટા સ્ક્રીન પર વૈશ્વિક સ્તરે એકાઉન્ટ ઇમેઇલ્સ જાહેર કરવા અથવા છુપાવવા માટે આંખના આઇકનનો ઉપયોગ કરો.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "કદમથી કદમ (પ્રદાતા → મોડેલ)", + "builderModeGlobal": "ગ્લોબલ મોડલ શોધ (કસ્ટમ કોમ્બો)", + "builderGlobalSearchPlaceholder": "બધા પ્રદાતાઓમાં મોડેલ શોધો (જેમ કે opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "બધા ઉમેરો", + "builderGlobalShortcuts": "શોર્ટકટ્સ:", + "builderGlobalNoResults": "\"{query}\" માટે કોઈ મોડેલ મળ્યું નથી.", + "builderGlobalProviderLabel": "પ્રદાતા:", + "builderGlobalAccountCount": "{count, plural, one {# ખાતું} other {# ખાતા}}", + "builderGlobalAdded": "જોડાયું", + "builderGlobalAdd": "જોડો", "manualModel": "મેન્યુઅલ મોડેલ", "manualModelInvalid": "provider/model તરીકે મોડેલ દાખલ કરો.", "manualModelUnknownProvider": "અજ્ઞાત પ્રદાતા પ્રીફિક્સ.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "સત્રની ઉપલબ્ધતા", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "સ્ટીકીનેસ બંધ", "kimiPresetTitle": "Kimi Coding પ્રીસેટ", "kimiPresetDescription": "મુખ્ય મોડેલ તરીકે Kimi K3 (Moonshot API), જ્યારે કન્ફિગર કરેલ હોય ત્યારે તમારા Kimi Code કનેક્શન્સ (kimi-coding, kimi-web) પર સ્વચાલિત ફોલબેક સાથે.", - "kimiPresetCta": "પ્રીસેટ ઉમેરો" + "kimiPresetCta": "પ્રીસેટ ઉમેરો", + "intelligentComboCount": "{count, plural, one {# બુદ્ધિશાળી કોમ્બો} other {# બુદ્ધિશાળી કોમ્બોઝ}}", + "providersInScope": "{count, plural, one {# પ્રદાતા વ્યાપ્તમાં} other {# પ્રદાતાઓ વ્યાપ્તમાં}}", + "savingModePack": "સાચવવું {pack}…", + "errorTitle": "કોમ્બોઝ લોડ કરવામાં નિષ્ફળ રહ્યા", + "errorDescription": "અમે હાલમાં કોમ્બો ડેટા લોડ કરી શક્યા નથી. તમારી કનેક્શન તપાસો અને ફરી પ્રયાસ કરો.", + "errorId": "ભૂલ આઈડી: {id}", + "errorRetry": "ફરીથી પ્રયાસ કરો", + "comboLabel": "કોમ્બો" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "યુઝરનેમ", "obsidianPassword": "પાસવર્ડ", - "obsidianTailscaleHint": "જો મોબાઇલથી કનેક્ટ કરી રહ્યાં હોવ તો localhost ને બદલે તમારા Tailscale IP નો ઉપયોગ કરો. બંને ઉપકરણો સમાન Tailscale નેટવર્ક પર હોવા જોઈએ." + "obsidianTailscaleHint": "જો મોબાઇલથી કનેક્ટ કરી રહ્યાં હોવ તો localhost ને બદલે તમારા Tailscale IP નો ઉપયોગ કરો. બંને ઉપકરણો સમાન Tailscale નેટવર્ક પર હોવા જોઈએ.", + "cloudSyncNotConfigured": "આ ઇન્સ્ટન્સ પર ક્લાઉડ સિંક રૂપરેખાંકિત નથી.", + "notionConnect": "જોડો", + "notionConnectFailed": "કનેક્ટ કરવામાં નિષ્ફળ", + "notionConnected": "જોડાયેલ", + "notionConnectionFailed": "કનેક્શન નિષ્ફળ થયું", + "notionDescription": "Notion પર માર્ગદર્શિત AI મોડલ દ્વારા શોધો, વાંચો, પૂછપરછ કરો અને લખો", + "notionDisconnect": "અન્યાયિત કરો", + "notionDisconnectFailed": "ડિસ્કનેક્ટ કરવામાં નિષ્ફળ", + "notionEnterToken": "કૃપા કરીને Notion ઇન્ટિગ્રેશન ટોકન દાખલ કરો", + "notionIntegrationHelp": "આંતરિક એકીકરણ બનાવો પર", + "notionIntegrationToken": "Notion આંતરિક ઇન્ટિગ્રેશન ટોકન", + "notionNotConnected": "જોડાયેલ નથી", + "notionTokenConfigured": "ટોકન કન્ફિગર કરાયું છે. Notion ટૂલ્સ MCP દ્વારા ઉપલબ્ધ છે." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "પ્રોવાઇડર / મોડેલ", "noRemoteProviders": "રૂપરેખાંકિત API કી સાથે કોઈ પ્રોવાઇડર નથી", "selectProviderModel": "મોડેલ પસંદ કરો", + "customBaseUrlLabel": "કસ્ટમ બેઝ URL (વૈકલ્પિક)", + "customModelIdLabel": "કસ્ટમ મોડેલ આઈડી (વૈકલ્પિક)", + "customEndpointHelp": "OpenAI-સંગત /embeddings એન્ડપોઈન્ટનો ઉપયોગ કરો. સ્થાનિક એન્ડપોઈન્ટ્સની મંજૂરી છે; ક્લાઉડ મેટાડેટા લક્ષ્યો અવરોધિત છે.", + "customEndpointSave": "કસ્ટમ એન્ડપોઈન્ટ લાગુ કરો", + "customEndpointInvalid": "કૃપા કરીને માન્ય HTTP(S) આધાર URL અને મોડેલ ID દાખલ કરો, અથવા બંને ક્ષેત્રો ખાલી રાખો.", + "customEndpointSaveFailed": "કસ્ટમ એમ્બેડિંગ એન્ડપોઈન્ટ સાચવવામાં આવ્યો નથી.", "staticEnabledLabel": "Static Potion સક્ષમ કરો", "staticEnabledDesc": "સ્થાનિક રીતે potion-base-8M મોડેલ ડાઉનલોડ કરો અને તેનો ઉપયોગ કરો", "transformersEnabledLabel": "Transformers.js સક્ષમ કરો", @@ -4258,7 +4443,9 @@ "cleaning": "સફાઈ ચાલુ છે...", "cleanNow": "અત્યારે સાફ કરો", "cleanupSuccess": "{count} પોઇન્ટ(્સ) દૂર કરવામાં આવ્યા", - "cleanupFailed": "સફાઈ નિષ્ફળ ગઈ" + "cleanupFailed": "સફાઈ નિષ્ફળ ગઈ", + "hostLabel": "હોસ્ટ", + "collectionLabel": "સંગ્રહ" }, "rerank": { "enableLabel": "Rerank સક્ષમ કરો", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-ટાયર ફોલબેક ડાયાગ્રામ", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "મફત પ્રદાતાઓને સેટ કરો", + "description": "વૈકલ્પિક રીતે પસંદ કરેલ કોઈ સાઇનઅપ પ્રદાતાઓને સક્રિય કરો. આગળ વધતા પહેલા દરેક પ્રદાતા નો નોટિસ અને સાઇટની સમીક્ષા કરો; ઉપલબ્ધતા અને દર મર્યાદાઓ ત્રીજા પક્ષો દ્વારા નિયંત્રિત કરવામાં આવે છે.", + "loading": "મફત પ્રદાતાઓ લોડ થઈ રહ્યા છે...", + "loadFailed": "મફત પ્રદાતાઓ લોડ કરી શક્યા નથી.", + "alreadyConfigured": "બધા યોગ્ય મફત પ્રદાતાઓ પહેલેથી જ રૂપરેખાંકિત કરવામાં આવ્યા છે.", + "reviewProviderSite": "પ્રદાતા સાઇટ અને શરતોની સમીક્ષા કરો", + "confirmation": "મેં આ ત્રીજા પક્ષના પ્રદાતાઓની સમીક્ષા કરી છે અને હું ઓમ્નીરૂટને પસંદ કરેલ કનેક્શન બનાવવા માંગું છું.", + "setupSelected": "ચૂંટાયેલા પ્રદાતાઓને સેટ કરો", + "settingUp": "સેટિંગ અપ...", + "setupFailed": "ચૂંટાયેલા પ્રદાતાઓને સેટ અપ કરવામાં અસમર્થ. કશુંપણ અસ્તિત્વમાં બદલાયું નથી.", + "retryFailed": "ફેલ થયેલા પ્રદાતાઓને ફરીથી પ્રયાસ કરો", + "orUseApiKey": "અથવા API કી સાથે જોડાઓ", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "બનાવ્યું", + "skipped": "હવે જ કન્ફિગર કરેલ છે", + "failed": "ફેલ થયું" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "આઇકન URL", "iconUrlHint": "વૈકલ્પિક. આ પ્રદાતાના આઇકન તરીકે દર્શાવેલ છબી URL.", + "iconUrlInvalid": "અમાન્ય આઇકન URL. http(s):// અથવા data:image/*;base64 URL નો ઉપયોગ કરો.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "આ પ્રદાતા ના મોડલ્સને claude/<provider>/<model> મિરર આઈડીઓ હેઠળ જાહેરાત આપો જેથી Claude Code ના ગેટવે મોડલ શોધી શકે. ડિફોલ્ટ દ્વારા બંધ - આને સક્રિય કરવાથી તમામ ક્લાયન્ટો માટે કેટલોગ એન્ટ્રીઓ ડબલ થાય છે.", "ccAliasProviderLevelLabel": "પ્રદાતા ડિફોલ્ટ", "ccAliasModelOverridesLabel": "પ્રતિ-મોડલ ઓવરરાઇડ્સ", - "ccAliasModelOverrideAriaLabel": "{name} માટે ઓવરરાઈડ", + "ccAliasModelOverrideAriaLabel": "{modelId} માટે ઓવરરાઈડ", "ccAliasStateInherit": "વંશજ", "ccAliasStateOn": "પર", "ccAliasStateOff": "બંધ", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "સત્ર પહેલેથી જ વર્તમાન છે", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "પ્રમાણીકરણ લાગુ કરો", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API કી પેસ્ટ કરો…", "zedSaving": "સાચવી રહ્યું છે…", "zedImportAction": "આયાત કરો", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "સ્વચાલિત કર્સર સત્ર પુનઃનવિકરણ સક્રિય કરો", + "cursorAgentNudgeBody": "સ્વચાલિત સત્ર નવીનીકરણ માટે cursor-agent સ્થાપિત કરો — તેના વિના, Cursor કનેક્શનને લગભગ 24 કલાકમાં સમયાંતરે મેન્યુઅલ પુનઃકનેક્ટ કરવાની જરૂર છે.", + "cursorAgentNudgeDismiss": "અસ્વીકૃત કરો", "zedManualImportFailed": "મેન્યુઅલ આયાત નિષ્ફળ રહી", "zedManualImportSuccess": "Zed માંથી {provider} ટોકન આયાત કર્યું", "grokImportTitle": "Grok Build Auth આયાત કરો", @@ -5878,7 +6066,6 @@ "friendliai": "સર્વરલેસ ઇન્ફરન્સ માટે મફત સ્તર — કોઈ ક્રેડિટ કાર્ડની જરૂર નથી", "gemini": "હંમેશા માટે મફત: Gemini 2.5 Flash માટે દરરોજ 1,500 વિનંતીઓ — કોઈ ક્રેડિટ કાર્ડ નહીં, aistudio.google.com પર કી મેળવો", "gigachat": "API કી વડે GigaChat (Sber) ને કનેક્ટ કરો.", - "github-models": "github.com/settings/tokens પર 'models: read' સ્કોપ સાથે GitHub PAT બનાવો", "gitlab": "સાર્વજનિક Code Suggestions API માટે GitLab વ્યક્તિગત ઍક્સેસ ટોકન. જ્યારે gitlab.com નો ઉપયોગ ન કરી રહ્યા હોવ ત્યારે સેલ્ફ-હોસ્ટેડ બેઝ URL કન્ફિગર કરો.", "gitlawb-gmi": "Gitlawb Opengateway ડેશબોર્ડ પરથી તમારી API કી મેળવો.", "gitlawb": "Gitlawb Opengateway ડેશબોર્ડ પરથી તમારી API કી મેળવો.", @@ -6017,7 +6204,8 @@ "kimi-coding": "હાલના OAuth ફ્લો વડે Kimi Coding ને કનેક્ટ કરો.", "kiro": "મફત સ્તર: 50 ક્રેડિટ્સ/મહિનો (~25K–100K ટોકન્સ). ⚠️ Kiro ToS તૃતીય-પક્ષ પ્રોક્સી/હાર્નેસના ઉપયોગ પર પ્રતિબંધ મૂકે છે.", "codex": "OpenAI Codex ને હાલના OAuth ફ્લો સાથે કનેક્ટ કરો.", - "qwen": "Qwen Code ને હાલના OAuth ફ્લો સાથે કનેક્ટ કરો." + "qwen": "Qwen Code ને હાલના OAuth ફ્લો સાથે કનેક્ટ કરો.", + "github-models": "github.com/settings/tokens પર 'models: read' સ્કોપ સાથે GitHub PAT બનાવો" }, "passthroughModelsDescription": "{provider} પ્રદાતા-મૂળ મોડેલ ID સ્વીકારે છે. /મોડેલ્સમાંથી આયાત કરો અથવા રૂટીંગ માટે કસ્ટમ ID ઉમેરો.", "bedrockModelsDescription": "એમેઝોન બેડરોક મોડલ્સ AWS પ્રદેશ દ્વારા સ્કોપ્ડ છે. /મોડેલ્સમાંથી આયાત કરો અથવા પસંદ કરેલ પ્રદેશમાં સક્ષમ કરેલ બેડરોક મોડેલ ID ઉમેરો.", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "પાર્ટનર લિંક — તમારા માટે કોઈ વધારાના ખર્ચ વિના OmniRoute ને સપોર્ટ કરે છે", "anonymousFallbackTitle": "ગૂઢ ફોલબેક", "anonymousFallbackDesc": "જ્યારે તમામ કન્ફિગર કરેલ કનેક્શનનો ઉપયોગ થઈ જાય છે (ક્વોટા, ક્રેડિટ, અથવા સમાપ્તી), ત્યારે આ પ્રદાતા ની કીલેસ ટિયરનો તાત્કાલિક ઉપયોગ કરો. અનામિક વિનંતીઓ મોકલવા માટે આ પ્રદાતાને છોડી દેવા માટે બંધ કરો - જ્યારે કીલેસ ટિયર તેમને નકારી દે ત્યારે ભલામણ કરવામાં આવે છે (401).", - "anonymousFallbackEnabled": "{name} માટે અજ્ઞાત ફોલબેક સક્રિય છે", + "anonymousFallbackEnabled": "{provider} માટે અજ્ઞાત ફોલબેક સક્રિય છે", "anonymousFallbackDisabled": "{provider} માટે અજ્ઞાત ફોલબેક નિષ્ક્રિય છે — થાકેલા કનેક્શન આ પ્રદાતા અવગણશે", - "anonymousFallbackUpdateFailed": "અનામિક ફોલબેક સેટિંગને અપડેટ કરવામાં નિષ્ફળ થયું" + "anonymousFallbackUpdateFailed": "અનામિક ફોલબેક સેટિંગને અપડેટ કરવામાં નિષ્ફળ થયું", + "batchDeleteFailed": "બેચ ડિલીટ નિષ્ફળ થયું", + "batchDeleteNetworkError": "બેચ ડિલીટ દરમિયાન નેટવર્ક ભૂલ", + "batchUpdateFailed": "બેચ અપડેટ નિષ્ફળ થયું", + "batchUpdateNetworkError": "બેચ અપડેટ દરમિયાન નેટવર્ક ભૂલ", + "categoryAudio": "ઓડિયો", + "categoryCloudAgent": "ક્લાઉડ એજન્ટ", + "categoryIde": "IDE", + "categoryLocal": "સ્થાનિક", + "categorySearch": "શોધો", + "categoryWebCookie": "વેબ કૂકી", + "claudeExtraUsageBlockingDisabled": "Claude વધારાના ઉપયોગનું અવરોધન નિષ્ક્રિય છે (વધારાનો ઉપયોગ મંજૂર છે)", + "claudeExtraUsageBlockingEnabled": "ક્લોડ વધારાના ઉપયોગની અવરોધન સક્રિય છે (વધારાનો ઉપયોગ અવરોધિત કરવામાં આવશે)", + "claudeRoutingPreferenceDisabled": "અનપ્રીફિક્સ્ડ ક્લોડ મોડલ હવે ક્લોડ કોડને પ્રાથમિકતા આપતા નથી", + "claudeRoutingPreferenceEnabled": "અનપ્રીફિક્સ્ડ ક્લોડ મોડલ હવે ક્લોડ કોડને પ્રાથમિકતા આપે છે", + "clearMediaFilter": "સ્પષ્ટ કરો", + "cliproxyRoutingDisabled": "હવે વિનંતીઓ નેટિવ ઓમ્નીરૂટ (સિધો) નો ઉપયોગ કરે છે", + "cliproxyRoutingEnabled": "હવે વિનંતિઓ CLIProxyAPI (ગહન અનુકરણ) મારફતે માર્ગદર્શિત થાય છે", + "codexLimitPolicyUpdated": "કોડેક્સ મર્યાદા નીતિ અપડેટ કરવામાં આવી છે", + "codexServiceModeUpdated": "Codex સેવા મોડ અપડેટ કરવામાં આવ્યું", + "codexServiceTierActive": "Codex {tier} સેવા સ્તર સક્રિય છે", + "codexTierFastLabel": "ઝડપી", + "codexTierFlexLabel": "ફ્લેક્સ", + "commandCodeApplyFailed": "કમાન્ડ કોડ ઓથ લાગુ કરવામાં નિષ્ફળ રહ્યું", + "commandCodeApplyingApproval": "બ્રાઉઝર મંજૂર, લાગુ કરી રહ્યા છીએ…", + "commandCodeApplyingKey": "બ્રાઉઝર-મંજૂર કરેલ કી લાગુ કરી રહ્યા છીએ…", + "commandCodeApprovalInstructions": "પ્રમાણિત URL ખોલો, પ્રવેશ મંજૂર કરો, પછી નીચે પાછો મળેલ કી/JSON/URL પેસ્ટ કરો…", + "commandCodeAuthExpired": "કમાન્ડ કોડ ઓથ સમાપ્ત થઈ ગયો", + "commandCodeConnected": "કમાન્ડ કોડ જોડાયેલ છે", + "commandCodeConnectionAdded": "કમાન્ડ કોડ કનેક્શન ઉમેરાયું", + "commandCodeLinkExpired": "કમાન્ડ કોડ લિંક સમાપ્ત થઈ ગઈ છે", + "commandCodeOpeningStudio": "કમાન્ડ કોડ સ્ટુડિયો ખોલી રહ્યું છે…", + "commandCodePopupBlocked": "પોપઅપ અવરોધિત. કૃપા કરીને પોપઅપને મંજૂરી આપો અને ફરીથી Command Code Connect પ્રયાસ કરો.", + "commandCodeStartFailed": "Command Code auth શરૂ કરવામાં નિષ્ફળ રહ્યું", + "connectionDeleted": "કનેક્શન કાઢી નાખવામાં આવ્યું", + "connectionFallback": "સંબંધ", + "coolingConnectionsDescription": "આ કનેક્શનોએ તેમના છેલ્લા વિનંતી પર 429 (દર-મર્યાદા) પાછું આપ્યું. ઓમ્નીરૂટ તેમને ટાઈમર સમાપ્ત થાય ત્યાં સુધી છોડી દેશે - કોઈ મેન્યુઅલ નિષ્ક્રિય કરવાની જરૂર નથી.", + "coolingConnectionsTitle": "હાલમાં ઠંડું કરી રહ્યા છીએ ({count})", + "failedDeleteAlias": "એલિયસ કાઢવામાં નિષ્ફળ થયું", + "failedDeleteConnection": "કનેક્શન કાઢવામાં નિષ્ફળ થયું", + "failedDistributeProxies": "પ્રોક્સી વિતરણમાં નિષ્ફળ.", + "failedSaveModelEndpointSettings": "મોડલ એન્ડપોઈન્ટ સેટિંગ્સ સાચવવામાં નિષ્ફળ થયું", + "failedUpdateClaudeExtraUsagePolicy": "Claude વધારાના ઉપયોગની નીતિ અપડેટ કરવામાં નિષ્ફળ થયું", + "failedUpdateClaudeRoutingPreference": "Claude Code રાઉટિંગ પસંદગીને અપડેટ કરવામાં નિષ્ફળ થયું", + "failedUpdateCliproxyRouting": "CLIProxyAPI રાઉટિંગને અપડેટ કરવામાં નિષ્ફળ થયું", + "failedUpdateCodexLimitPolicy": "Codex મર્યાદા નીતિ અપડેટ કરવામાં નિષ્ફળ થયું", + "failedUpdateCodexServiceMode": "Codex સેવા મોડને અપડેટ કરવામાં નિષ્ફળ", + "filterByMedia": "મિડિયા", + "freeBadge": "મફત", + "kimiCodeApiKeyLabel": "કિમિ કોડ API કી", + "modelTestFailed": "મોડલ પરીક્ષણ નિષ્ફળ ગયું", + "modelTestNetworkError": "નેટવર્ક ભૂલ પરીક્ષણ મોડેલ", + "networkError": "નેટવર્ક ભૂલ", + "networkErrorDeletingAlias": "એલિયસ કાઢતી વખતે નેટવર્ક ભૂલ", + "networkErrorSettingAlias": "એલિયસ સેટ કરતી વખતે નેટવર્ક ભૂલ", + "noProvidersMatch": "તમારા શોધ સાથે કોઈ પ્રદાતા મેળ ખાતા નથી.", + "noSavedProxies": "કોઈ સંગ્રહિત પ્રોક્સી મળી નથી. પહેલા સેટિંગ્સ → પ્રોક્સીમાં પ્રોક્સી ઉમેરો.", + "pageLoadErrorDescription": "અમે હાલમાં પ્રદાતા ડેટા લોડ કરી શક્યા નથી. કૃપા કરીને તમારી કનેક્શન તપાસો અને ફરી પ્રયાસ કરો.", + "pageLoadErrorId": "એરર આઈડી: {id}", + "pageLoadErrorRetry": "ફરીથી પ્રયાસ કરો", + "pageLoadErrorTitle": "પ્રદાતાઓ લોડ કરવામાં નિષ્ફળ રહ્યા", + "playgroundTitle": "પ્લેગ્રાઉન્ડ", + "providerDetailConnectionFlexActive": "આ કનેક્શન માટે કોડેક્સ ફ્લેક્સ સેવા સ્તર સક્રિય છે", + "providerDetailConnectionPriorityActive": "Codex પ્રાથમિકતા સેવા સ્તર આ કનેક્શન માટે સક્રિય છે", + "providerDetailGlobalFlexActive": "ગ્લોબલ કોડેક્સ ફ્લેક્સ સેવા સ્તર સક્રિય છે", + "providerDetailGlobalPriorityActive": "ગ્લોબલ કોડેક્સ પ્રાથમિકતા સેવા સ્તર સક્રિય છે", + "proxiesDistributed": "{tagLabel}{total} કનેક્શન(ઓ)માં વિતરિત {assigned} પ્રોક્સી નિમણૂક(ઓ).", + "rerankEndpoint": "ફરીથી ક્રમબદ્ધ કરો", + "savedModelEndpointSettings": "સાચવેલ મોડેલ અંતિમ બિંદુની સેટિંગ્સ", + "searchByModelAria": "મોડલ દ્વારા શોધો", + "selectSupportedEndpoint": "કમથી કમ એક સમર્થિત અંતિમ બિંદુ પસંદ કરો", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "સબ્સ્ક્રિપ્શન સૂચિ લોડ કરવામાં નિષ્ફળ", "toggleFailed": "સ્વિચ ટૉગલ કરવામાં નિષ્ફળ", "refreshFailed": "તાજું કરવામાં નિષ્ફળ", - "deleteFailed": "કાઢી નાખવામાં નિષ્ફળ" + "deleteFailed": "કાઢી નાખવામાં નિષ્ફળ", + "add": "જોડો", + "cancel": "રદ કરો", + "configure": "કન્ફિગર કરો", + "copyEndpoint": "એન્ડપોઈન્ટ નકલ કરો", + "coreEndpointHint": "કોર એન્ડપોઈન્ટ હિન્ટ", + "coreNodesHint": "કોર નોડ્સ સૂચન", + "create": "બનાવો", + "deleteConfirm": "મિટાવો પુષ્ટિ", + "empty": "ખાલી", + "globalModeDescription": "ગ્લોબલ મોડ વર્ણન", + "localCoreHint": "સ્થાનિક કોર સંકેત", + "nodeSummary": "નોડ સારાંશ", + "providerRequired": "પ્રદાતા જરૂરી છે", + "providerRouting": "પ્રદાતા માર્ગદર્શન", + "refresh": "ફરીથી તાજા કરો", + "refreshInterval": "ફરીથી તાજા કરવાની અંતરાલ", + "ruleModeDescription": "નિયમ મોડ વર્ણન" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "ઇમેજ વિનંતીઓને ફક્ત-ટેક્સ્ટ મોડેલો પર રૂટ કરતા પહેલા સ્વચાલિત વિઝન-ટુ-ટેક્સ્ટ ફોલબેક ચલાવો.", "visionBridgeEnabledLabel": "સક્ષમ કરેલ", "visionBridgeEnabledDesc": "ઇમેજના ભાગોને એક્સટ્રેક્ટ કરેલ ટેક્સ્ટ સાથે બદલતા પ્રી-કૉલ બ્રિજને ટૉગલ કરો.", + "visionBridgeRerouteTextOnlyLabel": "ટેક્સ્ટ-માત્ર મોડલને ફરીથી માર્ગદર્શન આપો", + "visionBridgeRerouteTextOnlyDesc": "ચૂંટાયેલ મોડેલમાં છબીનો ઇનપુટ ન હોય ત્યારે છબીઓ સહિત સંપૂર્ણ વિનંતી બ્રિજ મોડેલને મોકલો.", "visionBridgeModel": "બ્રિજ મોડલ", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "વિઝનને સપોર્ટ કરતું કોઈપણ OmniRoute મોડેલ ID અહીં વાપરી શકાય છે.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API કીમાં manage સ્કોપનો અભાવ છે.", "BYPASS_PREFIX_NOT_ALLOWED": "એક અથવા વધુ પ્રીફિક્સ સ્પૉન-સક્ષમ રૂટ્સને લક્ષ્ય બનાવે છે અને તેને બાયપાસ કરી શકાતા નથી.", "GENERIC": "authz સેટિંગ્સ અપડેટ કરવામાં નિષ્ફળ." - } + }, + "remove": "હટાવો" }, "resilienceBaseCooldownLabel": "બેઝ કૂલડાઉન", "scopeLabel": "અવકાશ", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "ઓડિયોનું પરીક્ષણ કરી રહ્યું છે…", "modalityBridgeAudioTestOk": "ઓડિયો બ્રિજ ઠીક છે — {count} ક્લિપ(ઓ) {model} દ્વારા લખવામાં આવ્યા", "modalityBridgeAudioTestNoop": "ઓડિયો બ્રિજ સક્રિય થયો નથી (લક્ષ્ય ઓડિયોને સપોર્ટ કરી શકે છે, કોઈ STT પ્રદાતા જોડાયેલ નથી, અથવા બ્રિજ નિષ્ક્રિય છે)", - "modalityBridgeAudioTestError": "ઓડિયો પરીક્ષણ નિષ્ફળ ગયું: {message}" + "modalityBridgeAudioTestError": "ઓડિયો પરીક્ષણ નિષ્ફળ ગયું: {message}", + "modelRoutingDescriptionPlaceholder": "ફ્રન્ટિયર કોમ્બો માટે રૂટ ઓપસ મોડલ્સ", + "cliproxyapiFallbackCodes": "ક્લિપ્રોક્સીએપી ફોલબેક કોડ્સ", + "cliproxyapiFallbackDescription": "ક્લિપ્રોક્સીએપી ફોલબેક વર્ણન", + "cliproxyapiHealthLabel": "ક્લિપ્રોક્સીએપી આરોગ્ય લેબલ", + "cliproxyapiImportFailed": "Cliproxyapi આયાત નિષ્ફળ ગઈ", + "cliproxyapiImportResult": "ક્લિપ્રોક્સીએપી આયાત પરિણામ", + "cliproxyapiInvalidUrl": "Cliproxyapi અમાન્ય URL", + "cliproxyapiLifecycleNoticeAfter": "ક્લિપ્રોક્સીએપી જીવનચક્ર સૂચના પછી", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi જીવનચક્ર સૂચના પહેલા", + "cliproxyapiLifecycleNoticeLink": "ક્લિપ્રોક્સીએપી જીવનચક્ર સૂચના લિંક", + "cliproxyapiPortLabel": "ક્લિપ્રોક્સીએપી પોર્ટ લેબલ", + "cliproxyapiStatusLabel": "ક્લિપ્રોક્સીએપી સ્થિતિ લેબલ", + "cliproxyapiVersionLabel": "ક્લિપ્રોક્સીએપી સંસ્કરણ લેબલ", + "collection": "સંગ્રહ", + "errorPage": { + "description": "અમે હાલમાં સેટિંગ્સ લોડ કરી શક્યા નથી. કૃપા કરીને થોડા સેકન્ડમાં ફરી પ્રયાસ કરો.", + "errorId": "ભૂલ ID: {id}", + "retry": "ફરીથી પ્રયાસ કરો", + "title": "સેટિંગ્સ લોડ કરવામાં નિષ્ફળ રહ્યા" + }, + "host": "હોસ્ટ", + "notInstalled": "સ્થાપિત નથી", + "oneproxyActions": "Oneproxy ક્રિયાઓ", + "oneproxyActive": "Oneproxy સક્રિય", + "oneproxyAnonymity": "Oneproxy ગોપનીયતા", + "oneproxyCountry": "ઓનપ્રોક્સી દેશ", + "oneproxyDelete": "Oneproxy કાઢો", + "oneproxyEmpty": "Oneproxy ખાલી", + "oneproxyHost": "ઓનપ્રોક્સી હોસ્ટ", + "oneproxyLatency": "Oneproxy વિલંબ", + "oneproxyProtocol": "ઓનપ્રોક્સી પ્રોટોકોલ", + "oneproxyQuality": "Oneproxy ગુણવત્તા", + "oneproxySyncFailed": "સિંક નિષ્ફળ: {error}", + "oneproxySyncSuccess": "સંકલિત {total} પ્રોક્સી ({added} નવા, {updated} અપડેટેડ)", + "proxyDocumentationSocks5DescAfter": "પ્રોક્સી દસ્તાવેજીકરણ Socks5 વર્ણન પછી", + "proxyFreePoolAddProxy": "પ્રોક્સી ફ્રી પૂલ પ્રોક્સી ઉમેરો", + "proxyFreePoolAdding": "પ્રોક્સી ફ્રી પૂલ ઉમેરવું", + "proxyFreePoolSelectProxy": "પ્રોક્સી ફ્રી પૂલ પસંદ કરો", + "proxyStatusActive": "પ્રોક્સી સ્થિતિ સક્રિય", + "proxyStatusInactive": "પ્રોક્સી સ્થિતિ અક્રિય છે", + "routingAddEntry": "પ્રવેશ ઉમેરો", + "settingSaveFailed": "સેટિંગ્સ સાચવવા માંડ્યું.", + "settingSaved": "સેટિંગ્સ સાચવવામાં આવી છે", + "skillsmpApiKeyHintAfter": ". દરરોજ {limit} વિનંતીઓ માટે દર મર્યાદા.", + "skillsmpApiKeyHintBefore": "તમારો API કી મેળવો", + "syncFailed": "સંકલન નિષ્ફળ થયું", + "unhealthy": "અસ્વસ્થ", + "oneproxyDescription": "1proxy સમુદાય પ્લેટફોર્મમાંથી મફત માન્ય પ્રોક્સી મેળવવા અને ફેરવવા", + "oneproxySyncing": "સંકલન થઈ રહ્યું છે...", + "oneproxySyncNow": "હવે સમન્વય કરો", + "oneproxyClearAll": "બધું સાફ કરો", + "oneproxyGoogle": "ગૂગલ", + "oneproxyClearAllConfirm": "બધા 1proxy પ્રોક્સી સાફ કરો?", + "memorySkillsSkillsmpDescription": "SkillsMP સાથે જોડાઓ અને માર્કેટપ્લેસમાંથી કુશળતાઓ શોધો અને સ્થાપિત કરો.", + "memorySkillsActiveProviderDescription": "કૌશલ્ય પૃષ્ઠ શોધવા અને સ્થાપિત કરવા માટે કયો પ્રદાતા પસંદ કરવો.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP માર્કેટપ્લેસ", + "memorySkillsSkillsmpProviderDescription": "પ્રમાણિત બજાર (તમારા SkillsMP API કીનો ઉપયોગ કરે છે).", + "memorySkillsSkillsshProviderTitle": "skills.sh ડિરેક્ટરી", + "memorySkillsSkillsshProviderDescription": "જાહેર ડિરેક્ટરી પ્રદાતા (API કીની જરૂર નથી).", + "routingCcBridgeCatalogName": "એન્થ્રોપિક-સંગત CC બ્રિજ", + "routingClaudeProviderName": "ક્લોડ (OAuth)", + "routingClaudeProviderDescription": "OAuth દ્વારા જારી કરાયેલા ટોકન સાથે નેટિવ ક્લોડ પ્રદાતા.", + "routingCcBridgeName": "ક્લોડ-કોડ બ્રિજ", + "routingCcBridgeDescription": "API કીનો ઉપયોગ કરીને રિલે અંતિમ બિંદુઓ (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "કસ્ટમ પ્રદાતા.", + "routingUnknownOpKind": "અજ્ઞાત ઓપ પ્રકાર: {kind}", + "routingInvalidJson": "અમાન્ય JSON: {error}", + "routingConfigMustBeObject": "કન્ફિગ એક JSON ઑબ્જેક્ટ હોવો જોઈએ", + "routingEnabledMustBeBoolean": "`enabled` સાચું અથવા ખોટું હોવું જોઈએ", + "routingPipelineMustBeArray": "`pipeline` ઓપરેશન્સની એક શ્રેણી હોવી જોઈએ", + "routingPipelineTooLong": "પાઇપલાઇન 50 ઓપ્સથી વધુ નથી હોઈ શકે", + "routingOpMissingKind": "Op #{index}: ખોવાઈ ગયેલ અથવા અમાન્ય `kind`", + "routingOpUnknownKind": "ઓપ #{index}: અજાણ્યો પ્રકાર \"{kind}\"", + "routingJsonEditorHide": "JSON સંપાદક છુપાવો", + "routingJsonEditorImportExport": "આયાત / નિકાસ JSON", + "routingJsonEditorLabel": "JSON (સંપાદિત કરો અને લાગુ કરો, અથવા આયાત કરવા માટે પેસ્ટ કરો)", + "routingApplyJson": "JSON લાગુ કરો", + "routingTransformsFootnote": "બધા ટ્રાન્સફોર્મ ઓપરેશન્સ પુનરાવૃત્તિ પર આઈડેમ્પોટન્ટ છે. ફેરફારો તરત જ આગામી વિનંતી પર લાગુ પડે છે.", + "cliproxyapiUnknown": "અજ્ઞાત", + "cliproxyapiVersion": "આવૃત્તિ", + "cliproxyapiHealth": "આરોગ્ય", + "cliproxyapiPort": "પોર્ટ", + "qdrantHost": "હોસ્ટ", + "qdrantCollection": "સંગ્રહ" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "પૂર્ણ", "ultra": "અલ્ટ્રા" } + }, + "modeOptions": { + "default": "ડિફોલ્ટ", + "off": "બંધ", + "lite": "લાઇટ", + "standard": "માણક", + "aggressive": "આક્રમક", + "ultra": "અલ્ટ્રા", + "responsesToolOutput": "પ્રતિસાદ સાધન આઉટપુટ" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "સ્ટેકમાં છેલ્લે ચાલે છે (RTK/Caveman લખાણ સાફ કરે તે પછી, OmniGlyph બાકીના ભાગને છબીઓમાં રૂપાંતરિત કરે છે) અને omniglyph મોડ દ્વારા સ્વતંત્ર રીતે પણ ચાલે છે. આ એક પૂર્વાવલોકન છે અને એન્ડ-ટુ-એન્ડ માન્યતા પૂર્ણ ન થાય ત્યાં સુધી ડિફૉલ્ટ રૂપે બંધ રહે છે.", "saved": "સાચવ્યું.", "saveFailed": "સાચવી શકાયું નથી.", - "enableAria": "OmniGlyph એન્જિન સક્ષમ કરો" + "enableAria": "OmniGlyph એન્જિન સક્ષમ કરો", + "title": "OmniGlyph" }, "embeddedServices": { "title": "એમ્બેડેડ સેવાઓ", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "બધા ટોકન સ્વસ્થ છે", + "needsAttention": "કેટલાક ટોકનને ધ્યાનની જરૂર છે", + "refreshFailures": "ટોકન રિફ્રેશ નિષ્ફળતાઓ શોધાઈ છે", + "unknown": "આરોગ્ય સ્થિતિ અજ્ઞાત" + }, + "systemMonitor": { + "metricsAriaLabel": "સિસ્ટમ મેટ્રિક્સ", + "memory": "મેમરી", + "memoryShort": "મેમ", + "uptime": "ઉપલબ્ધતા", + "ariaLabel": "સિસ્ટમ મોનિટરિંગ", + "title": "સિસ્ટમ મોનિટર", + "version": "આવૃત્તિ", + "connections": "કનેક્શનસ", + "circuitBreakers": "સર્કિટ બ્રેકર્સ", + "open": "{count} ખુલ્લા", + "memoryUsage": "મેમરી ઉપયોગ" + }, + "never": "ક્યારેય", + "justNow": "હમણાં જ", + "minutesAgo": "{count} મિનિટ પહેલા", + "hoursAgo": "{count} કલાક પહેલા", + "tokens": "ટોકન્‍સ", + "costs": "ખર્ચ", + "autoRefresh": "ઓટો રિફ્રેશ ({seconds}s)", + "toggleAutoRefresh": "ઓટો રિફ્રેશ ટોગલ કરો", + "activeRequests": "સક્રિય વિનંતીઓ", + "totalRequests": "કુલ વિનંતીઓ", + "totalInputTokens": "કુલ ઇનપુટ ટોકન્સ", + "model": "મોડલ", + "provider": "પ્રદાતા", + "requests": "વિનંતીઓ", + "lastUsed": "છેલ્લા ઉપયોગમાં લેવાયેલા", + "inputTokens": "ઇનપુટ ટોકન્સ", + "totalTokens": "કુલ ટોકન", + "inputCost": "ઇનપુટ ખર્ચ", + "outputCost": "આઉટપુટ ખર્ચ", + "noUsageData": "હજી સુધી કોઈ ઉપયોગ નોંધાયો નથી. અહીં ડેટા જોવા માટે કેટલાક વિનંતીઓ કરો.", + "account": "ખાતું", + "accountLabel": "ખાતું {id}", + "noAccountUsage": "હજી સુધી કોઈ ખાતા-વિશિષ્ટ ઉપયોગ નોંધાયો નથી. અહીં ડેટા જોવા માટે OAuth ખાતા ઉપયોગ કરીને વિનંતીઓ કરો." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "એપ ડેટા દ્વારા પુનઃસેટ કરો", + "resetViaAppDataDescription": "એપ ડેટા ડિરેક્ટરીમાંથી સેટિંગ્સ ફાઇલને કાઢી નાખો જેથી તમારું પાસવર્ડ પુનઃસેટ કરી શકાય:", + "quitDesktopApp": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશન સંપૂર્ણપણે બંધ કરો", + "navigateToAppDataDirectory": "એપ ડેટા ડિરેક્ટરીમાં જાઓ:", + "checkSystemAppDataFolder": "(તમારા સિસ્ટમ એપ્લિકેશન ડેટા ફોલ્ડર તપાસો)", + "relaunchDesktopFreshSetup": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનને ફરી શરૂ કરો - તે નવી સેટઅપ શરૂ કરશે", + "alternativeSetPasswordTitle": "વિકલ્પ: નવી પાસવર્ડ સેટ કરો", + "alternativeSetPasswordDescription": "સર્વર પર્યાવરણ ફાઇલ દ્વારા નવી પ્રારંભિક પાસવર્ડ સેટ કરો:", + "openServerEnvFilePrefix": "ખોલો", + "relaunchDesktopApp": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશન ફરી શરૂ કરો", + "codexLinkInvalidOrExpired": "આ લિંક અમાન્ય છે અથવા સમાપ્ત થઈ ગઈ છે.", + "codexValidationServerError": "આ લિંકને માન્ય કરવા માટે સર્વર સુધી પહોંચી શક્યું નથી.", + "codexSaveConnectionError": "કનેક્શન સાચવવામાં અસમર્થ. લિંક સમાપ્ત થઈ ગઈ હોઈ શકે છે.", + "codexDeviceLoginDisabled": "આ OpenAI ખાતા માટે ડિવાઇસ કોડ લોગિન નિષ્ક્રિય છે. તેને ChatGPT સુરક્ષા સેટિંગ્સમાં સક્રિય કરો (અથવા તમારા વર્કસ્પેસ એડમિનને પૂછો).", + "codexAuthorizationTimedOut": "અધિકૃતતા સમયસર સમાપ્ત થઈ ગઈ. ફરી પ્રયાસ કરવા માટે Start again પર ક્લિક કરો.", + "authenticationCancelled": "પ્રમાણિકરણ રદ કરવામાં આવ્યું.", + "unexpectedAuthenticationError": "પ્રમાણિકરણ દરમિયાન અણધાર્યા ભૂલ. કૃપા કરીને ફરી પ્રયાસ કરો.", + "connectOpenAiCodexTitle": "OpenAI Codex સાથે જોડાઓ", + "codexConnectDescription": "આ કનેક્શનને પૂર્ણ કરવા માટે ChatGPT ખાતાને અધિકૃત કરો.", + "validatingCodexLink": "લિંકની માન્યતા તપાસી રહી છે…", + "codexGenerateCodeDescription": "નીચે ક્લિક કરો એક વખતનો કોડ જનરેટ કરવા માટે, પછી OpenAI માં સાઇન ઇન કરો.", + "startCodexFlow": "શરૂઆત", + "requestingOpenAiCode": "OpenAI માંથી કોડની વિનંતી કરી રહ્યા છીએ…", + "codexVerificationInstructions": "1. OpenAI માન્યતા પૃષ્ઠ ખોલો અને 2. આ કોડ દાખલ કરો. એકવાર તમે અધિકૃત કરો ત્યારે આ પૃષ્ઠ આપોઆપ અપડેટ થાય છે.", + "yourCode": "તમારો કોડ", + "openVerificationPage": "ખાતરી પૃષ્ઠ ખોલો", + "copyUrlShort": "યુઆરએલ નકલ કરો", + "savingConnection": "કનેક્શન બચાવી રહ્યું છે…", + "codexConnected": "જોડાયેલ!", + "codexConnectionRegistered": "Codex ખાતું નોંધાયું હતું. તમે આ ટેબ બંધ કરી શકો છો.", + "tryAgain": "ફરીથી પ્રયાસ કરો", + "traeAuthorizationSuccess": "ટ્રે અધિકૃતતા ✓", + "traeAuthorizationFailed": "ટ્રે અધિકૃતતા નિષ્ફળ ગઈ", + "closeAuthorizationWindow": "તમે આ વિન્ડોને બંધ કરી શકો છો.", + "returnToDashboard": "ડેશબોર્ડ પર પાછા જાઓ.", + "resetViaAppData": "એપ ડેટા દ્વારા પુનઃસેટ કરો", + "deleteSettingsToReset": "એપ ડેટા ડિરેક્ટરીમાંથી સેટિંગ્સ ફાઇલ કાઢી નાખો તમારા પાસવર્ડને પુનઃસેટ કરવા માટે:", + "quitAppCompletely": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશન સંપૂર્ણપણે બંધ કરો", + "navigateToAppData": "એપ ડેટા ડિરેક્ટરીમાં જાઓ", + "checkAppDataFolder": "તમારા સિસ્ટમ એપ્લિકેશન ડેટા ફોલ્ડર તપાસો", + "deleteSettingsJson": "મિટાવો", + "relaunchAppFresh": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશનને ફરી શરૂ કરો — તે નવી સેટઅપ શરૂ કરશે", + "alternativeSetPassword": "વિકલ્પ: નવી પાસવર્ડ સેટ કરો", + "setNewPasswordViaEnv": "સર્વર પર્યાવરણ ફાઇલ દ્વારા નવું પ્રારંભિક પાસવર્ડ સેટ કરો:", + "openServerEnv": "ખોલો", + "inDataDirectory": "ડેટા ડિરેક્ટરીમાં", + "addOrUpdate": "જોડો અથવા અપડેટ કરો", + "deleteAndRelaunch": "મિટાવો", + "settingsJson": "settings.json", + "fromDataDir": "ડેટા ડિરેક્ટરીમાંથી", + "relaunchApp": "ઓમ્નીરૂટ ડેસ્કટોપ એપ્લિકેશન ફરી શરૂ કરો" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "કંપની", + "pricing": "ભાવનામા", + "apiReference": "એપીઆઈ સંદર્ભ", + "helpCenter": "મદદ કેન્દ્ર", + "about": "વિશે", + "blog": "બ્લોગ", + "contact": "સંપર્ક", + "terms": "શરતો", + "privacy": "ગોપનીયતા", + "license": "લાઇસન્સ", + "footerDescription": "આધુનિક AI ઇન્ફ્રાસ્ટ્રક્ચર માટેનું એકીકૃત ઇન્ટરફેસ. સુરક્ષિત, દેખાય તેવા, અને સ્કેલેબલ.", + "communityDiscussions": "સમુદાય ચર્ચાઓ" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — ઓમ્નીરૂટ દસ્તાવેજો", + "metadataDefaultTitle": "ઓમ્નીરૂટ દસ્તાવેજીકરણ", + "metadataDescription": "OmniRoute AI ગેટવે માટે વ્યાપક દસ્તાવેજીકરણ — સેટઅપ, API, સંકોચન, ડિપ્લોયમેન્ટ, અને વધુ.", + "layoutNavTitle": "ઓમ્નીરૂટ ડોક્સ", + "layoutHomeLink": "દસ્તાવેજો હોમ", + "layoutDashboardLink": "← ડેશબોર્ડ પર પાછા", + "homeTitle": "ઓમ્નિરાઉટ દસ્તાવેજીકરણ", + "homeMetadataDescription": "તમારા AI ને રૂટ, સંકોચન અને સ્કેલ કરવા માટેની તમામ વસ્તુઓ - સેટઅપ માર્ગદર્શિકાઓ, API સંદર્ભ, સંકોચન, ડિપ્લોયમેન્ટ અને વધુ.", + "homeTwitterDescription": "OmniRoute AI ગેટવે માટે વ્યાપક દસ્તાવેજો", + "homeDescription": "તમારા AI ને રૂટ, સંકોચિત અને સ્કેલ કરવા માટેની તમામ વસ્તુઓ", + "homeSearchHint": "દસ્તાવેજો શોધવા માટે Ctrl K દબાવો", + "featuredQuickStartTitle": "ઝડપી શરૂઆત", + "featuredQuickStartDescription": "3 મિનિટમાં OmniRoute ચલાવો", + "featuredAutoComboTitle": "ઓટો-કોમ્બો માર્ગદર્શિકા", + "featuredAutoComboDescription": "ઓમ્નીરૂટને તમારા માટે શ્રેષ્ઠ એઆઈ પસંદ કરવા દો", + "featuredProvidersTitle": "પ્રદાતાઓની માર્ગદર્શિકા", + "featuredProvidersDescription": "મિનિટોમાં AI પ્રદાતાઓને જોડો", + "nonTechUsersTitle": "ગેર-ટેક યુઝર્સ માટે", + "nonTechUsersSubtitle": "ઝડપી શરૂઆત કરો — કોઈ ટેકનિકલ પૃષ્ઠભૂમિની જરૂર નથી", + "techUsersTitle": "ટેક યુઝર્સ માટે", + "techUsersSubtitle": "આર્કિટેક્ચર, APIs, અને આંતરિક બાબતોમાં ઊંડાણપૂર્વક જાઓ", + "apiExplorerMetadataTitle": "API એક્સપ્લોરર — ઓમ્નીરૂટ ડોક્સ", + "apiExplorerMetadataDescription": "ઇન્ટરેક્ટિવ API એક્સપ્લોરર — વાસ્તવિક સમયની પ્રતિસાદ સાથે OmniRoute અંતિમ બિંદુઓને જીવંત રીતે અજમાવો", + "apiExplorerTitle": "એપીઆઈ એક્સપ્લોરર", + "apiExplorerDescription": "ઓમ્નીરૂટ એન્ડપોઈન્ટ્સને જીવંત રીતે અજમાવો. એક એન્ડપોઈન્ટ પસંદ કરો, તમારી વિનંતી કન્ફિગર કરો, અને વાસ્તવિક સમયમાં પ્રતિસાદ જુઓ.", + "apiExplorerSseStarted": "SSE સ્ટ્રીમ શરૂ થયો — વાસ્તવિક-સમયના આઉટપુટ માટે ટર્મિનલ/devtools તપાસો.", + "apiExplorerError": "ભૂલ: {message}", + "apiExplorerAuth": "પ્રમાણિત કરો", + "apiExplorerResponseLabel": "પ્રતિસાદ", + "apiExplorerSelectEndpoint": "એક એન્ડપોઈન્ટ પસંદ કરો જેનું અન્વેષણ કરવું છે", + "apiExplorerChooseApi": "સાઇડબારમાંથી એક API પસંદ કરો જેથી કરીને વિગતો જુઓ અને તેને જીવંત અજમાવો", + "feedbackThanks": "તમારા પ્રતિસાદ માટે આભાર!", + "feedbackQuestion": "શું આ પાનું મદદરૂપ હતું?", + "pageMetadataTitle": "{title} — ઓમ્નીરૂટ ડોક્સ", + "pageMetadataDescription": "OmniRoute દસ્તાવેજીકરણ: {title}", + "breadcrumb": "બ્રેડક્રંબ", + "apiReferenceTable": { + "parameters": "પેરામીટર્સ", + "name": "નામ", + "type": "ટાઇપ", + "description": "વર્ણન", + "returns": "પરત આપે છે", + "typePrefix": "ટાઇપ:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth સત્ર અધૂરો છે (રિડાયરેક્ટ URI અથવા કોડ વેરિફાયર ગુમ છે). કનેક્શન ફરી શરૂ કરો અને ફરી પ્રયાસ કરો.", + "errorExchangeFailed": "વિનિમય નિષ્ફળ ગયો", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: ડિફોલ્ટ Google OAuth ક્રેડેંશિયલ્સ ફક્ત localhost પર જ કાર્ય કરે છે. રિમોટ ઉપયોગ માટે, તમારા પોતાના OAuth ક્રેડેંશિયલ્સને પર્યાવરણ ચલોથી કન્ફિગર કરો: ANTIGRAVITY_OAUTH_CLIENT_ID અને ANTIGRAVITY_OAUTH_CLIENT_SECRET. README વિભાગ 'OAuth on a Remote Server' જુઓ.", + "errorSaveFailed": "સંગ્રહ કરવામાં નિષ્ફળ થયું", + "errorAuthorizationFailed": "અધિકૃતતા નિષ્ફળ ગઈ", + "errorAuthorizationTimeout": "અધિકૃતતા સમયમર્યાદા", + "errorRequestFailed": "વિનંતી નિષ્ફળ ગઈ", + "errorCallbackServerFailed": "કૉલબેક સર્વર શરૂ કરવામાં નિષ્ફળ થયું", + "errorBrowserUnavailable": "આ પ્રદાતા માટે બ્રાઉઝર OAuth વર્તમાન પર્યાવરણમાં ઉપલબ્ધ નથી. તેના બદલે સમર્થિત ઓથેન્ટિકેશન પદ્ધતિનો ઉપયોગ કરો.", + "errorStateMismatch": "OAuth રાજ્ય મિસમેચ. કનેક્શન ફરી શરૂ કરો અને ફરી પ્રયાસ કરો.", + "errorImportAccessToken": "એક્સેસ ટોકન આયાત કરવામાં નિષ્ફળ થયું", + "errorSessionNotInitialized": "OAuth સત્ર આરંભિત નથી. કનેક્શન પ્રવાહને ફરી શરૂ કરો અને ફરી પ્રયાસ કરો.", + "errorNoAuthorizationCode": "કોઈ અધિકૃતતા કોડ મળ્યો નથી. કૉલબેક URL અથવા અધિકૃતતા કોડ પેસ્ટ કરો.", + "tabDeviceCode": "ડિવાઇસ કોડ", + "tabBrowserLogin": "બ્રાઉઝર લોગિન", + "tabImportAuthJson": "આધાર.json આયાત કરો", + "tabPasteApiKey": "API કી પેસ્ટ કરો", + "windsurfPasteDescription": "Windsurf / VS Code IDE માં, કમાન્ડ પેલેટમાંથી \"Windsurf: Provide Auth Token\" કમાન્ડ ચલાવો (અથવા Jupyter \"Get Windsurf Authentication Token\" બટન પર ક્લિક કરો), પછી દર્શાવેલ ટોકનને નકલ કરો અને નીચે પેસ્ટ કરો. windsurf.com/show-auth-token ને સીધા ખોલવાથી માત્ર \"Redirecting\" પાનું જ દેખાય છે — IDE ને પ્રવાહ શરૂ કરવો જરૂરી છે.", + "grokAuthJsonDescription": "~/.grok/auth.json ની સંપૂર્ણ સામગ્રી પેસ્ટ કરો (ફક્ત JWT \"કી\" ક્ષેત્ર નહીં). એક નગ્ન JWT માં refresh_token નથી, તેથી કનેક્શન સમાપ્ત થયા પછી મરવા જાય છે (#7610). ઉપલબ્ધ હોય ત્યારે સમર્પિત Import auth.json મોડલને પ્રાથમિકતા આપો.", + "devinDesktopPasteDescription": "પ્રમાણિત ડેવિન સત્રમાંથી એક અસ્તિત્વમાં રહેલ ડેવિન API કી પેસ્ટ કરો. કી નિકાસ ઉપલબ્ધતા અને પગલાં ડેવિન સંસ્કરણ અને ખાતા દ્વારા બદલાય છે.", + "devinPasteDescription": "તમારો WINDSURF_API_KEY પ્રદાન કરો (જેને `devin auth login` દ્વારા અથવા Windsurf IDE \"Windsurf: Provide Auth Token\" આદેશ દ્વારા પ્રાપ્ત કરવામાં આવ્યો છે).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "એપીઆઈ કી / ટોકન", + "saving": "સંગ્રહિત કરી રહ્યું છે…", + "saveConnection": "કનેક્શન સાચવો", + "gheDescription": "તમારા GitHub Enterprise ઇન્સ્ટન્સનો આધાર URL દાખલ કરો (ઉદાહરણ તરીકે https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub એન્ટરપ્રાઇઝ URL", + "gheUrlRequired": "GitHub Enterprise URL જરૂરી છે", + "gitlabDuoSetupTitle": "GitLab Duo OAuth સેટઅપ", + "gitlabDuoSetupMessage": "GitLab Duo OAuth કન્ફિગર નથી કરવામાં આવ્યું. {applicationsUrl} પર એક OAuth એપ્લિકેશન નોંધણી કરો જેમાં રીડાયરેક્ટ URI {redirectUri} અને સ્કોપ્સ \"{scopes}\" છે, પછી {clientIdEnv} (અને વૈકલ્પિક રીતે {clientSecretEnv}) સેટ કરો અને પુનઃપ્રારંભ કરો.", + "gitlabDuoSetupDescription": "આ એપ્લિકેશન નોંધણી થયા પછી અને આ OmniRoute ઉદાહરણ પર env vars સેટ થયા પછી, OAuth લોગિન શરૂ કરવા માટે ચાલુ રાખવા માટે ક્લિક કરો.", + "continue": "ચાલુ રાખો" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "વધુ લોડ કરો", - "loadingMore": "વધુ લોડ થઈ રહ્યું છે..." + "loadingMore": "વધુ લોડ થઈ રહ્યું છે...", + "correlationId": "સંબંધ ઓળખપત્ર", + "group": { + "showAllRows": "બધા પંક્તિઓ દર્શાવો", + "showLatestPerCorrelation": "સંબંધ ID મુજબ તાજેતરના દર્શાવો", + "grouped": "સમૂહબદ્ધ" + }, + "running": "ચાલુ છે", + "interval": { + "decrease": "અંતર ઘટાડો", + "title": "સેકન્ડમાં ઓટો-રીફ્રેશ અંતર", + "increase": "અંતર વધારવો" + }, + "status": { + "inProgress": "ચાલુ છે", + "recoveredByRetry": "પુનઃપ્રાપ્ત કરવામાં આવ્યું છે_retry", + "goToParent": "મૂળ વિનંતી પર જાઓ", + "healedTitle": "અસફળ, {count} પુનરાયણો પછી પુનઃપ્રાપ્ત થયું", + "healed": "સ્વસ્થ", + "failedTitle": "બધા {count} પ્રયાસો નિષ્ફળ ગયા", + "failed": "ફેલ થયું", + "pinnedTitle": "સંદર્ભ-કેશ સત્ર પિનિંગ દ્વારા મોડેલ પસંદ કરવામાં આવ્યું", + "pinned": "પિન કરેલું" + }, + "attempts": "પ્રયત્નો", + "detail": { + "collapse": "કોલેપ્સ {title}", + "expand": "{title} વિસ્તૃત કરો", + "copyTitle": "કોપી {title}", + "copied": "કોપી કરવામાં આવ્યું!", + "copy": "કોપી", + "autoscrollOn": "ઓટોસ્ક્રોલ: ચાલુ", + "autoscrollOff": "ઑટોસ્ક્રોલ: બંધ", + "payload": { + "clientRawRequest": "ક્લાયન્ટ કાચી વિનંતી", + "clientRequest": "ક્લાયન્ટ વિનંતી", + "openaiRequest": "OpenAI વિનંતી", + "providerRequest": "પ્રદાતા વિનંતી", + "providerResponse": "પ્રદાતા પ્રતિસાદ", + "clientResponse": "ક્લાયન્ટ પ્રતિસાદ", + "pipelineError": "પાઇપલાઇન ભૂલ" + }, + "payloadMissing": "આ લોગ એન્ટ્રી માટે વિગતવાર પેઇલોડ આર્ટિફેક્ટ હવે ઉપલબ્ધ નથી.", + "payloadCorrupt": "વિસ્તૃત પેલોડ આર્ટિફેક્ટને પાર્સ કરી શકાયું નથી.", + "notAvailable": "N/A", + "semanticCache": "સેમેન્ટિક (ઓમ્નીરૂટ)", + "upstreamCache": "અપસ્ટ્રીમ (પ્રદાતા)", + "ariaLabel": "વિનંતી લોગ વિગતો", + "completed": "પૂર્ણ થયું", + "upstreamStatus": "અપસ્ટ્રીમ: {status}", + "statusDiscrepancy": "OmniRoute એ {provider} પાછું આપ્યા છતાં {status} પાછું આપ્યું", + "previousRequest": "પહેલાનો વિનંતી", + "nextRequest": "આગળનો વિનંતી", + "close": "વિગત મોડલ બંધ કરો", + "startedAt": "શરૂઆતમાં", + "endedAt": "સમાપ્ત થયું છે", + "duration": "ગાળવણી", + "model": "મોડલ", + "provider": "પ્રદાતા", + "account": "ખાતું", + "input": "આવક", + "totalIn": "કુલ અંદર: {value}", + "cacheRead": "કેશ વાંચો: {value}", + "cacheWrite": "કેશ લખો: {value}", + "compressed": "સંકોચિત: {from} → {to} ({percent}% બચાવેલ)", + "output": "આઉટપુટ", + "totalOut": "કુલ બહાર: {value}", + "reasoning": "કારણ: {value}", + "requestedModel": "વિનંતી કરેલ મોડેલ", + "requestProtocol": "આવશ્યક પ્રોટોકોલ", + "cacheSource": "કેશ સોર્સ", + "modelPinning": "મોડલ પિનિંગ", + "activeModelPinning": "સક્રિય — સત્ર પિનિંગ દ્વારા પસંદ કરેલ મોડેલ", + "rotated": "ઘૂમાવ્યું: {initial} -> {final}", + "apiKey": "એપી આઈ કી", + "noApiKey": "કોઈ API કી નથી", + "combo": "કોમ્બો", + "error": "ભૂલ", + "unblockAll": "બ્લોક હટાવો બધા", + "cleared": "સફાઈ કરવામાં આવી", + "unblock": "અનબ્લોક કરો", + "relatedRequests": "સંબંધિત વિનંતીઓ ({count})", + "current": "વર્તમાન", + "detailStatus": "વિગત સ્થિતિ", + "loadingDetails": "લોડ થઈ રહ્યું છે વિનંતી વિગતો...", + "providerEventStream": "પ્રદાતા ઇવેન્ટ સ્ટ્રીમ", + "clientEventStream": "ક્લાયન્ટ ઇવેન્ટ સ્ટ્રીમ", + "eventStream": "ઇવેન્ટ સ્ટ્રીમ", + "responsePayloadLegacy": "પ્રતિસાદ પેલોડ (લેગસી)", + "requestPayloadLegacy": "વિનંતી પેઇલોડ (લેગસી)", + "noPayload": "આ લોગ એન્ટ્રી માટે કોઈ પેલોડ ડેટા ઉપલબ્ધ નથી.", + "correlationId": "સંબંધ ઓળખપત્ર", + "correlationIdValue": "સંબંધિત ID: {id}", + "detailedPayloadInfo": "નવા વિનંતીઓ માટે ચાર-ચરણ ક્લાયન્ટ/પ્રદાતા પેલોડ દૃશ્ય મેળવવા માટે પ્રથમ વિગતવાર લોગિંગ સક્રિય કરો." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} અક્ષમ કરેલ છે", "providerAdded": "{provider} ઉમેરવામાં આવ્યું", "add": "જોડો", - "manualApiKey": "હાથથી API કીનો ઉપયોગ કરો" + "manualApiKey": "હાથથી API કીનો ઉપયોગ કરો", + "createDahlTokenFailed": "Dahl ટોકન બનાવવામાં નિષ્ફળ", + "providerProxy": "પ્રોક્સી", + "providerProxyConfigureHint": "પ્રોક્સી સેટ કરો", + "providerProxyTitleConfigured": "પ્રોક્સી કન્ફિગર કરેલ: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-પ્રતિબંધિત — શરતોની સમીક્ષા કરો", "caution": "સાવધાની — વ્યક્તિગત-ઉપયોગ / પ્રોક્સી કલમો", "ok": "સામાન્ય રીતે પરવાનગી આપનાર" - } + }, + "allProviders": "બધા પ્રદાતાઓ", + "noApiKeyRequired": "કોઈ API કીની જરૂર નથી" }, "providerHealthAutopilot": { "title": "પ્રોવાઇડર હેલ્થ ઑટોપાયલટ", @@ -12390,7 +13047,11 @@ "on": "ચાલુ", "off": "બંધ", "availableProviders": "ઉપલબ્ધ પ્રોવાઇડર્સ ({count})", - "noProviderOverrides": "કોઈ ઓવરરાઇડ્સ નથી — બધા સક્રિય પ્રોવાઇડર્સ તેમના ડિફૉલ્ટ મોડેલ્સ સાથે ભાગ લેશે" + "noProviderOverrides": "કોઈ ઓવરરાઇડ્સ નથી — બધા સક્રિય પ્રોવાઇડર્સ તેમના ડિફૉલ્ટ મોડેલ્સ સાથે ભાગ લેશે", + "resetFailed": "પુનઃસેટ નિષ્ફળ થયું", + "resetSuccess": "કન્ફિગ ડિફોલ્ટ પર પુનઃસ્થાપિત કરવામાં આવ્યું", + "running": "ચાલુ છે...", + "testFailed": "ટેસ્ટ નિષ્ફળ થયું" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) એ OmniRoute નો સ્થાપક ઓપન સોર્સ મિત્ર છે", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "આ છબીની વિનંતી માટે પ્રદાતા દ્રષ્ટિનું સમર્થન નથી આપતું", "capabilityFilter.toolsMismatch": "પ્રદાતા ટૂલ કોલિંગને સપોર્ટ કરતો નથી", "capabilityFilter.structuredOutputMismatch": "પ્રદાતા સંરચિત આઉટપુટને સમર્થન આપતો નથી", - "capabilityFilter.contextWindowMismatch": "વિનંતી પ્રદાતા સંદર્ભ વિન્ડોને પાર કરે છે" + "capabilityFilter.contextWindowMismatch": "વિનંતી પ્રદાતા સંદર્ભ વિન્ડોને પાર કરે છે", + "publicSystem": { + "notFound": { + "title": "પૃષ્ઠ મળ્યું નથી", + "description": "જેથી તમે શોધી રહ્યા છો તે પાનું અસ્તિત્વમાં નથી અથવા ખસેડવામાં આવ્યું છે.", + "dashboardAriaLabel": "ડેશબોર્ડ પર પાછા જાઓ", + "statusAriaLabel": "સિસ્ટમ સ્થિતિ પૃષ્ઠ ખોલો", + "systemStatus": "સિસ્ટમ સ્થિતિ" + }, + "error": { + "title": "આંતરિક સર્વર ભૂલ", + "description": "તમારી વિનંતી પ્રક્રિયા કરતી વખતે કંઈક ખોટું થયું. અમારી ટીમને જાણ કરવામાં આવી છે અને તે સુધારણા પર કામ કરી રહી છે.", + "errorId": "ભૂલ ID: {id}", + "detailsAriaLabel": "ભૂલ વિગતો", + "retryAriaLabel": "પૃષ્ઠને ફરીથી લોડ કરવાનો પ્રયાસ કરો", + "tryAgain": "ફરીથી પ્રયાસ કરો", + "dashboardAriaLabel": "ડેશબોર્ડ પર પાછા જાઓ", + "statusAriaLabel": "સિસ્ટમ સ્થિતિ ખોલો", + "systemStatus": "સિસ્ટમ સ્થિતિ" + }, + "globalError": { + "title": "કંઈક ખોટું થયું", + "description": "અણધારિત ભૂલ થઈ છે. આ નોંધવામાં આવી છે અને અમારી ટીમ તપાસ કરશે.", + "detailsAriaLabel": "ભૂલ વિગતો", + "retryAriaLabel": "પૃષ્ઠને ફરીથી લોડ કરવાનો પ્રયાસ કરો", + "tryAgain": "ફરીથી પ્રયાસ કરો", + "statusAriaLabel": "સિસ્ટમ સ્થિતિ ખોલો", + "systemStatus": "સિસ્ટમ સ્થિતિ" + }, + "offline": { + "title": "કનેક્ટિવિટી સમસ્યા", + "description": "OmniRoute હાલમાં નેટવર્ક સુધી પહોંચી શકતું નથી. તમારા ઇન્ટરનેટ, VPN, અથવા પ્રોક્સી સેટિંગ્સ તપાસો.", + "connectionRestored": "કનેક્શન પુનઃસ્થાપિત થયું", + "offlineModeDetected": "ઓફલાઇન મોડ શોધાયો", + "retryConnection": "કનેક્શન ફરી પ્રયાસ કરો", + "openStatusPage": "સ્ટેટસ પેજ ખોલો" + }, + "maintenance": { + "title": "નિયોજિત જાળવણી", + "description": "કેટલાક સેવાઓ તાત્કાલિક ઉપલબ્ધ નથી જ્યારે જાળવણી ચાલી રહી છે. કોર રૂટિંગ સામાન્ય રીતે ઑનલાઇન રહે છે, પરંતુ વ્યવસ્થાપન સુવિધાઓમાં ઘટાડો થઈ શકે છે.", + "suggestion1": "થોડી મિનિટો પછી ફરી પ્રયાસ કરો.", + "suggestion2": "પુનઃપ્રયાસ કરતા પહેલા વર્તમાન આરોગ્ય સૂચકાંકો અને પ્રદાતા સ્થિતિની તપાસ કરો.", + "systemStatus": "સિસ્ટમની સ્થિતિ જુઓ", + "healthDashboard": "હેલ્થ ડેશબોર્ડ ખોલો" + }, + "status": { + "title": "સિસ્ટમ સ્થિતિ", + "description": "ઓમ્નીરૂટ કોર સેવાઓ માટે જીવંત કાર્યાત્મક સ્નેપશોટ.", + "loadingHealth": "હેલ્થ મેટ્રિક્સ લોડ થઈ રહી છે...", + "failedToLoad": "સિસ્ટમ આરોગ્ય લોડ કરવામાં નિષ્ફળ.", + "unableToReachHealth": "હેલ્થ એન્ડપોઈન્ટ સુધી પહોંચવામાં અસમર્થ. કનેક્ટિવિટી તપાસો અને ફરીથી પ્રયાસ કરો.", + "healthCheckFailed": "હેલ્થ ચેક નિષ્ફળ ગયો", + "openConnectivityHelp": "ઓપન કનેક્ટિવિટી મદદ", + "maintenanceInfo": "મરામત માહિતી", + "service": "સેવા", + "unknown": "અજ્ઞાત", + "notAvailable": "n/a", + "providersTracked": "પ્રદાતાઓને ટ્રેક કરવામાં આવ્યા", + "circuitBreakerState": "પ્રદાતા સર્કિટ બ્રેકર સ્થિતિ", + "lastUpdate": "છેલ્લી અપડેટ: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}ક {minutes}મ" + }, + "statusPages": { + "400": { + "title": "ખોટી વિનંતી", + "description": "વિનંતી પેઇલોડ અમાન્ય અથવા અધૂરો છે.", + "suggestion1": "ફરીથી પ્રયાસ કરતા પહેલા જરૂરી ક્ષેત્રો અને પેલોડ ફોર્મેટની સમીક્ષા કરો.", + "suggestion2": "જો તમે API નો ઉપયોગ કરી રહ્યા છો, તો સ્થાનિક રીતે JSON સ્કીમાને માન્ય બનાવો.", + "suggestion3": "જો આ ચાલુ રહે છે, તો પેલોડની તપાસ કરવા માટે અનુવાદક પ્લેગ્રાઉન્ડમાં વિનંતી ખોલો.", + "primaryAction": "દસ્તાવેજો ખોલો", + "secondaryAction": "ટ્રાન્સલેટર ખોલો" + }, + "401": { + "title": "અધિકૃત નથી", + "description": "આ સંસાધનને ઍક્સેસ કરવા માટે પ્રમાણપત્રની જરૂર છે.", + "suggestion1": "ફરીથી સાઇન ઇન કરો અને ઓપરેશનને ફરીથી પ્રયાસ કરો.", + "suggestion2": "API કૉલ્સ માટે, ખાતરી કરો કે બેરર ટોકન હાજર અને માન્ય છે.", + "suggestion3": "જો ટોકન તાજેતરમાં ફેરવાયું છે, તો તમારા ક્લાયન્ટ ક્રેડેન્શિયલ્સને અપડેટ કરો.", + "primaryAction": "લોગિન પર જાઓ", + "secondaryAction": "API કીનું સંચાલન" + }, + "403": { + "title": "નિષિદ્ધ", + "description": "તમારી વિનંતી સમજી લેવામાં આવી, પરંતુ નીતિ દ્વારા પ્રવેશ નકારી લેવામાં આવ્યો છે.", + "suggestion1": "સેટિંગ્સમાં IP મંજૂરી યાદી/બંધ યાદી નિયમો તપાસો.", + "suggestion2": "તમારા API કી માટે નિર્ધારિત મોડેલ અને બજેટ નીતિઓની પુષ્ટિ કરો.", + "suggestion3": "એક પ્રશાસકને જરૂરી પરવાનગીની વ્યાપકતા આપવાની વિનંતી કરો.", + "primaryAction": "ઓપન એક્સેસ મદદ", + "secondaryAction": "સુરક્ષા સેટિંગ્સ ખોલો" + }, + "408": { + "title": "વિનંતી સમય સમાપ્ત", + "description": "સર્વરે સમયસર સંપૂર્ણ વિનંતી પ્રાપ્ત કરી નથી.", + "suggestion1": "નાના પેલોડ સાથે વિનંતી ફરી પ્રયાસ કરો.", + "suggestion2": "તમારા નેટવર્કની સ્થિરતા અને VPN/પ્રોક્સી લેટન્સી તપાસો.", + "suggestion3": "લાંબા ઓપરેશન્સ માટે, સ્ટ્રીમિંગ સક્રિય કરો અથવા વિનંતીને વિભાજિત કરો.", + "primaryAction": "એન્ડપોઈન્ટ માર્ગદર્શિકા ખોલો", + "secondaryAction": "નેટવર્ક સ્થિતિ તપાસો" + }, + "429": { + "title": "ખૂબ જ વધુ વિનંતીઓ", + "description": "આ ક્લાયન્ટ, કી, અથવા પ્રદાતા માટે દર મર્યાદાઓને પાર કરવામાં આવી છે.", + "suggestion1": "કૂલડાઉન માટે રાહ જુઓ અને સૂચિત અંતરાલ પછી ફરી પ્રયાસ કરો.", + "suggestion2": "ફોલબેક પ્રદાતાઓ સાથે કોમ્બોમાં સ્વિચ કરો.", + "suggestion3": "સેટિંગ્સમાં પ્રદાતા પ્રતિસાદ/દર-મર્યાદા પ્રોફાઇલ્સને સુસંગત બનાવો.", + "primaryAction": "રેઝિલિયન્સ સેટિંગ્સ ખોલો", + "secondaryAction": "ઓપન કોમ્બોઝ" + }, + "500": { + "title": "આંતરિક સર્વર ભૂલ", + "description": "તમારી વિનંતી પ્રક્રિયા કરતી વખતે એક અણધાર્યા સર્વર-પક્ષની ભૂલ થઈ છે.", + "suggestion1": "કેટલાક સેકન્ડમાં ફરી પ્રયાસ કરો.", + "suggestion2": "હેલ્થ ટેલેમેટ્રી અને સર્વર લોગ્સને સંબંધિત વિનંતી ID માટે તપાસો.", + "suggestion3": "જો સતત રહે, તો સમયચિહ્ન અને વિનંતી સંદર્ભ સાથે સમસ્યાની જાણ કરો.", + "primaryAction": "હેલ્થ ડેશબોર્ડ ખોલો", + "secondaryAction": "લોગ્સ ખોલો" + }, + "502": { + "title": "ખરાબ ગેટવે", + "description": "અપસ્ટ્રીમ પ્રદાતા અથવા ગેટવે ઇન્ટિગ્રેશને અમાન્ય પ્રતિસાદ આપ્યો.", + "suggestion1": "બીજાં પ્રદાતા અથવા સક્રિય કોમ્બો માર્ગ સાથે ફરી પ્રયાસ કરો.", + "suggestion2": "પ્રદાતાના પ્રમાણપત્રો અને મોડલની ઉપલબ્ધતા તપાસો.", + "suggestion3": "ફોર્મેટ રૂપાંતરણ સામેલ હોય ત્યારે અનુવાદકના આઉટપુટની તપાસ કરો.", + "primaryAction": "પ્રદાતાઓ ખોલો", + "secondaryAction": "ટ્રાન્સલેટર ખોલો" + }, + "503": { + "title": "સેવા ઉપલબ્ધ નથી", + "description": "સેવા જાળવણી અથવા ઘટી ગયેલ આધારભૂત વસ્તુઓના કારણે તાત્કાલિક ઉપલબ્ધ નથી.", + "suggestion1": "થોડીવાર રાહ જુઓ અને ફરી પ્રયાસ કરો.", + "suggestion2": "મરામતની સૂચનાઓ અને સિસ્ટમની સ્થિતિ તપાસો.", + "suggestion3": "જો તમારું વર્કફ્લો લેટન્સી-સેન્સિટિવ છે, તો ફોલબેક પ્રદાતાઓનો ઉપયોગ કરો.", + "primaryAction": "મરામત વિગતો", + "secondaryAction": "સિસ્ટમ સ્થિતિ" + } + } + }, + "kiroAuthModal": { + "title": "જોડો {providerLabel}", + "chooseMethod": "તમારી ઓળખપત્ર પદ્ધતિ પસંદ કરો:", + "builderId": "AWS બિલ્ડર ID", + "builderDescription": "વધુतर વપરાશકર્તાઓ માટે ભલામણ કરેલ. {providerLabel} સાથે જોડાયેલ AWS ખાતા સાથે સાઇન ઇન કરો.", + "organization": "તમારી સંસ્થા (AWS IAM ઓળખ કેન્દ્ર)", + "organizationDescription": "તમારી કંપનીના SSO શરૂ કરવા માટેના URL નો ઉપયોગ કરો (ઉદાહરણ: {url}).", + "googleAccount": "ગૂગલ ખાતું", + "googleDescription": "તમારા Google ખાતા સાથે લોગિન કરો.", + "githubAccount": "GitHub ખાતું", + "githubDescription": "તમારા GitHub ખાતા સાથે લોગિન કરો.", + "importToken": "ટોકન આયાત કરો", + "importDescription": "{providerLabel} માંથી નિકાસ કરેલ રિફ્રેશ ટોકન પેસ્ટ કરો.", + "apiKey": "એપીઆઈ કી", + "apiKeyDescription": "લાંબા સમય સુધી ચાલતી {providerLabel} / CodeWhisperer API કી પેસ્ટ કરો. તે રિફ્રેશ ટોકન વગર બેરર ક્રેડેન્શિયલ તરીકે સંગ્રહિત છે; પ્રોફાઇલ શોધ શ્રેષ્ઠ પ્રયાસ છે.", + "idcStartUrl": "IDC શરૂ URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "તમારા સંસ્થાના AWS IAM ઓળખ કેન્દ્રનો URL", + "awsRegion": "AWS પ્રદેશ", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "તમારા આઈડેન્ટિટી સેન્ટર માટે AWS પ્રદેશ (ડિફોલ્ટ: us-east-1)", + "continue": "ચાલુ રાખો", + "back": "પાછા", + "autoDetecting": "ટોકન આપોઆપ શોધી રહ્યું છે...", + "readingCredentials": "AWS SSO કેશમાંથી {providerLabel} પ્રમાણપત્રો વાંચી રહ્યા છે", + "tokenNotDetected": "{providerLabel} ટોકન આપોઆપ શોધવામાં આવ્યું નથી. કૃપા કરીને તમારો રિફ્રેશ ટોકન હસ્તકશેર કરો.", + "refreshToken": "ફરીથી ટોકન", + "tokenPlaceholder": "ટોકન આપોઆપ ભરી દેવામાં આવશે...", + "importing": "આયાત કરી રહ્યા છીએ...", + "apiKeyPlaceholder": "તમારો {providerLabel} API કી પેસ્ટ કરો...", + "apiKeyStoredDescription": "લાંબા સમય સુધી ચાલનારા બેરર ક્રેડેંશિયલ તરીકે સંગ્રહિત એન્ક્રિપ્ટેડ. રિફ્રેશ ફ્લો નથી.", + "apiKeyRegionDescription": "કી માટે AWS પ્રદેશ (ડિફોલ્ટ: us-east-1)", + "validating": "માન્યતા કરી રહ્યા છીએ...", + "validateAndSaveApiKey": "API કી માન્ય કરો અને સાચવો", + "errorAutoDetect": "ટોકન આપોઆપ ઓળખી શક્યું નથી", + "errorAutoDetectFailed": "ટોકન આપમેળે ઓળખવામાં નિષ્ફળ થયું", + "errorRefreshTokenRequired": "કૃપા કરીને એક રિફ્રેશ ટોકન દાખલ કરો", + "errorImportFailed": "આયાત નિષ્ફળ ગઈ", + "errorApiKeyRequired": "કૃપા કરીને Kiro API કી દાખલ કરો", + "errorApiKeyImportFailed": "API કી આયાત નિષ્ફળ ગઈ", + "errorIdcStartUrlRequired": "કૃપા કરીને તમારું IDC શરૂ URL દાખલ કરો" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} ને {providerName} દ્વારા જોડો", + "errorStartAuthorization": "અધિકૃતતા શરૂ કરવામાં નિષ્ફળ રહ્યું", + "errorAuthorizationExpired": "અધિકૃતતા સમાપ્ત થઈ ગઈ છે. ફરીથી લોગિન પ્રવાહ શરૂ કરો.", + "errorAuthorizationFailed": "અધિકૃતતા નિષ્ફળ ગઈ", + "initializing": "પ્રારંભ કરી રહ્યું છે...", + "settingUp": "{providerName} ઓથેન્ટિકેશન સેટઅપ કરી રહ્યા છીએ", + "openIncognito": "આ લિંકને ઇન્કોગ્નિટો વિન્ડોમાં ખોલો", + "incognitoDescription": "અસ્તિત્વમાં આવેલા ખાતાઓ સાથે સત્રના વિવાદોને ટાળવા માટે ઇન્કોગ્નિટો/પ્રાઇવેટ વિન્ડોનો ઉપયોગ કરો.", + "copyLink": "લિંક નકલ કરો", + "verificationCode": "પરીક્ષણ કોડ", + "waiting": "અધિકૃતતા માટે રાહ જોઈ રહ્યા છીએ...", + "cancel": "રદ કરો", + "successTitle": "સફળતાપૂર્વક જોડાયું!", + "successMessage": "તમારો {providerLabel} ખાતો {providerName} દ્વારા જોડાયો છે.", + "done": "કામ પૂર્ણ થયું", + "errorTitle": "કનેક્શન નિષ્ફળ થયું", + "close": "બંધ કરો" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "અધિકૃતતા નિષ્ફળ ગઈ", + "errorPopupBlocked": "પોપઅપ અવરોધિત — આ સાઇટ માટે પોપઅપની મંજૂરી આપો, અથવા નીચે ટોકન હેન્ડથી પેસ્ટ કરો.", + "errorPopupClosed": "અધિકૃતતા વિન્ડો પૂર્ણ થાય તે પહેલાં બંધ કરવામાં આવી હતી.", + "errorAccessTokenRequired": "એક્સેસ ટોકન જરૂરી છે.", + "errorImportFailed": "આયાત નિષ્ફળ ગઈ", + "title": "Connect Trae SOLO", + "authorizeDescription": "trae.ai મારફતે પોપઅપમાં અધિકૃત કરો. ટોકન આયાત થયા પછી પોપઅપ પોતે બંધ થઈ જશે.", + "authorizeImportant": "મહત્વપૂર્ણ: તમે પહેલા trae.ai માં બ્રાઉઝરમાં લોગિન કરેલ હોવું જોઈએ. અધિકૃત પાનું માત્ર એક અસ્તિત્વમાં રહેલ સત્રને પુષ્ટિ કરે છે — તે તમને લોગિન કરી શકતું નથી. જો તમે \"લોગિન નિષ્ફળ\" જુઓ, તો \"Open solo.trae.ai\" પર ક્લિક કરો, લોગિન કરો, પછી અહીં પાછા આવો.", + "waitingForAuthorization": "trae.ai માટે રાહ જોઈ રહ્યા છીએ…", + "authorizeWithBrowser": "બ્રાઉઝર સાથે અધિકૃત કરો", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "અથવા ટોકન હાથે પેસ્ટ કરો", + "manualInstructions": "solo.trae.ai પર સાઇન ઇન કરો, DevTools → Network ખોલો, કોઈપણ ચેટ સંદેશ મોકલો, અને Authorization: Cloud-IDE-JWT {tokenPlaceholder} વિનંતી હેડરમાંથી JWT નકલ કરો. JWT ની આયુષ્ય ~14 દિવસ છે. વૈકલ્પિક ઓળખ ક્ષેત્રો સમાન વિનંતી શરીરમાં common_params માંથી આવે છે.", + "accessTokenLabel": "એક્સેસ ટોકન (ક્લાઉડ-આઈડી-જેડબ્લ્યુટી)", + "webId": "વેબ આઈડી", + "optional": "વૈકલ્પિક", + "bizUserId": "બિઝ યુઝર આઈડી", + "userUniqueId": "વપરાશકર્તા અનન્ય ID", + "scope": "વિસ્તાર", + "tenant": "ભાડુઆત", + "region": "પ્રદેશ", + "importing": "આયાત કરી રહ્યું છે…", + "importToken": "ટોકન આયાત કરો", + "cancel": "રદ કરો" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "વિતરણ કરી રહ્યું છે...", + "complete": "પૂર્ણ", + "defaultLabel": "પ્રોક્સી વિતરણ કરો" + } + }, + "providerTest": { + "dialogLabel": "ટેસ્ટ {provider}", + "deprecated": "વિલુપ્ત", + "risk": "જોખમ", + "close": "બંધ કરો", + "model": "મોડલ", + "key": "કી", + "defaultKey": "ડિફોલ્ટ", + "clearConversation": "વાર્તાલાપ સાફ કરો", + "clear": "સફાઈ કરો", + "tabs": { + "test": "ટેસ્ટ", + "logs": "લોગ્સ" + }, + "loadingLogs": "લોગ્સ લોડ થઈ રહ્યા છે…", + "failedToLoadLogs": "લોગ્સ લોડ કરવામાં નિષ્ફળ રહ્યા", + "noLogsYet": "અત્યારે કોઈ લોગ્સ નથી", + "noLogsDescription": "ટેસ્ટ ટેબમાંથી એક પરીક્ષણ સંદેશ મોકલો — આ પ્રદાતા માટેના લોગ્સ અહીં દેખાશે.", + "openFullLogs": "પૂર્ણ લોગ્સ પૃષ્ઠ ખોલો", + "live": "લાઇવ", + "tailingLast": "છેલ્લા {count} ને ટેલિંગ", + "refreshNow": "હવે રિફ્રેશ કરો", + "refresh": "ફરીથી તાજું કરો", + "unknownRequester": "અજ્ઞાત વિનંતીકાર", + "fields": { + "timestamp": "ટાઈમસ્ટેમ્પ", + "status": "સ્થિતિ", + "duration": "ગાળવણી", + "model": "મોડલ", + "requestedModel": "વિનંતી કરેલ મોડેલ", + "provider": "પ્રદાતા", + "requester": "વિનંતીકાર", + "tokens": "ટોકનસ" + } + }, + "proxyLog": { + "detailAriaLabel": "પ્રોક્સી લોગ વિગતો", + "event": "પ્રોક્સી ઇવેન્ટ", + "close": "પ્રોક્સી વિગતો મોડલ બંધ કરો", + "time": "સમય", + "latency": "લેટન્સી", + "clientIp": "ક્લાયન્ટ IP", + "proxy": "પ્રોક્સી", + "direct": "સિધો", + "type": "ટાઇપ", + "level": "સ્તર", + "provider": "પ્રદાતા", + "tlsFingerprint": "TLS ફિંગરપ્રિન્ટ", + "directNative": "સિધો (મૂળ)", + "targetUrl": "લક્ષ્ય URL", + "error": "ભૂલ", + "configuration": "પ્રોક્સી રૂપરેખાંકન" + }, + "requestTimeline": { + "title": "વિનંતી સમયરેખા", + "modes": { + "follow": "અનુસરણ કરો", + "followDescription": "ઍક્સિસ ડાબે સ્ક્રોલ થાય છે, હવે લાઇન 75% પર રહે છે", + "now": "હવે", + "nowDescription": "હાલના સમય પર જાઓ, NOW રેખા કેન્દ્રમાં પુનઃસેટ થાય છે", + "pan": "પેન", + "panDescription": "ખસેડો શોધવા માટે, પૃષ્ઠભૂમિ જમાવટમાં છે" + }, + "reset": "ફરીથી સેટ કરો", + "started": "શરૂઆત થઈ ગઈ", + "ended": "સમાપ્ત થયું", + "duration": "અવધિ", + "status": "સ્થિતિ", + "provider": "પ્રદાતા", + "tokens": "ટોકન્‍સ", + "active": "સક્રિય", + "other": "અન્ય", + "tenMinutes": "10મિન", + "hour": "કલાક", + "day": "દિવસ", + "unknownModel": "અજ્ઞાત", + "pending": "લંબિત" + }, + "metadata": { + "compressionTitle": "સંકોચન", + "compressionDescription": "સંદર્ભ સંકોચન સેટિંગ્સને રૂપરેખાંકિત કરો જેથી ટોકનનો ઉપયોગ અને ખર્ચ ઘટાડાય.", + "relayTitle": "ઓમ્નીરૂટ — રિલે પ્રોક્સી", + "relayDescription": "તમારા AI ઇન્ફ્રાસ્ટ્રક્ચર માટે સર્વરલેસ રિલે પ્રોક્સી એન્ડપોઈન્ટ્સ", + "trafficInspectorTitle": "ટ્રાફિક ઇન્સ્પેક્ટર — ઓમ્નીરૂટ", + "trafficInspectorDescription": "LLM કોલ્સને મોનિટર કરો + કોઈપણ એપ્લિકેશનના HTTPS ટ્રાફિકને ડિબગ કરો" + }, + "conductor": { + "title": "કંડક્ટર — CLI-એજન્ટ ફલિટ", + "subtitle": "OmniConductor હબ: રનર્સ, કાર્ય ક્યૂ અને કાઉન્સિલ્સ, જીવંત", + "runners": "રનર્સ", + "tasks": "કાર્યો", + "colName": "નામ", + "colClis": "CLIs", + "colStatus": "સ્થિતિ", + "colTask": "કાર્ય", + "colMode": "મોડ્", + "colRunner": "રનર", + "colSummary": "સારાંશ", + "online": "ઓનલાઇન", + "offline": "ઓફલાઇન", + "draining": "નિકાલ કરવો", + "hubOffline": "કન્ડક્ટર હબ ઑફલાઇન છે અથવા કન્ફિગર નથી કરેલ (CONDUCTOR_HUB_URL) — જૂના ડેટા કરતાં કંઈપણ દર્શાવતું નથી.", + "noRunners": "કોઈ રનર્સ નોંધાયેલા નથી", + "noTasks": "અત્યારે કોઈ કાર્ય નથી", + "detailTitle": "કાર્ય વિગતો", + "prompt": "પ્રેરણા", + "branch": "શાખા", + "fetchHint": "પરિણામ મેળવો: git fetch origin {branch}", + "council": "કાઉન્સિલ", + "candidates": "ઉમેદવારો", + "cancel": "કાર્ય રદ કરો", + "cancelConfirmTitle": "આ કાર્ય રદ કરવું?", + "cancelConfirmMessage": "હબ રનર પર અમલને રદ કરશે. આ પાછું લેવામાં નહીં આવે.", + "cancelFailed": "હબે રદ કરવાની વિનંતી નકારી છે", + "close": "બંધ કરો", + "error": "ભૂલ", + "faroTitle": "ફારો — ફલિટ પ્રવક્તા", + "faroSubtitle": "ચેટ અને અવાજ, વાસ્તવિક ફલિટ ઇવેન્ટ્સમાં સ્થિર. વિનાશક આદેશો હંમેશા પુષ્ટિ માટે પૂછે છે.", + "faroEmpty": "ફ્લીટ વિશે પૂછો — ઉદાહરણ તરીકે \"ફ્લીટ કેવી છે?\"", + "faroPending": "ફારોએ પુષ્ટિ માટે પૂછ્યું છે", + "faroPlaceholder": "Faro સાથે વાત કરો…", + "faroSend": "મોકલો", + "faroOffline": "ફારો (પ્રવક્તા) ઑફલાઇન છે", + "yes": "હા", + "no": "ના", + "pushToTalk": "બોલવા માટે પકડી રાખો", + "speakAnswers": "જવાબો બોલો", + "voiceModels": "વોઇસ મોડલ્સ (પ્રદાતા/મોડલ આ ઓમ્નીરૂટ માટે)", + "voiceIdle": "બાતચીત કરો", + "voiceListening": "સૂનવા…", + "voiceThinking": "વિચારતા…", + "voiceSpeaking": "બોલતા…", + "sttFailed": "ટ્રાન્સક્રિપ્શન નિષ્ફળ થયું (STT મોડેલ/પ્રદાતા તપાસો)", + "ttsFailed": "વાણી સંશ્લેષણ નિષ્ફળ થયું (TTS મોડેલ/પ્રદાતા તપાસો)", + "micDenied": "માઇક્રોફોન ઉપલબ્ધ નથી અથવા પરવાનગી નકારી દેવામાં આવી છે" + }, + "cliproxyProviderExposure": { + "title": "પ્રદાતા એક્સપોઝર", + "description": "cliproxyapi/ પ્રિફિક્સ હેઠળ રાઉટિંગ લક્ષ્ય તરીકે CLIProxyAPI મોડેલ્સને પ્રદર્શિત કરો.", + "label": "ક્લિપ્રોક્સીએપીઆઈ/...", + "hint": "જ્યારે સક્રિય કરવામાં આવે છે, ત્યારે શોધાયેલા મોડલ્સ ઓમ્નીરૂટમાં પ્રદાતા પસંદગીઓમાં દેખાય છે.", + "updateFailed": "અપડેટ કરવામાં નિષ્ફળ (HTTP {status})", + "networkError": "નેટવર્ક ભૂલ — પ્રદાતા એક્સપોઝર સેટિંગને અપડેટ કરી શકતા નથી" + } } - diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 27dc4060a2..1455d49f41 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -172,6 +172,18 @@ "unselectAll": "בטל בחירה", "visibleModels": "גלויים", "selectAllConfirm": "להוסיף {count} מודלים לשילוב הזה?", + "testSelectedProviders": "ספקי בדיקות", + "testingSelectedProviders": "בודק {done}/{total}...", + "noProvidersSelectedToTest": "בדוק לפחות ספק אחד למטה קודם", + "noModelsToTestForProviders": "אין מודלים לבדוק עבור הספקים שנבחרו", + "testSelectedProvidersResults": "{ok} מתוך {total} מודלים פועלים", + "selectWorkingModels": "הוסף עובד", + "unselectWorkingModels": "ביטול בחירת עבודה", + "noWorkingModelsToSelect": "אין דגמים פעילים להוסיף", + "providerTestHint": "טיפ: בדוק ספק → בדוק → הוסף עובד. לחץ שוב כדי לבטל את הבחירה.", + "selectAllProviders": "בדוק את כל הספקים", + "clearProviderSelection": "בטל את הסימון של ספקים", + "providersSelectedCount": "נבדקו {count} ספקים", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "גודל", + "toggleNoAuthProvider": "החלף ספק ללא אימות", + "loadingModels": "טוען מודלים…", + "selectAModel": "בחר מודל", + "degraded": "מופחת", + "zeroConfigBannerTitle": "פועל במצב ללא קונפיגורציה", + "zeroConfigBannerBody": "OmniRoute יצר מפתחות הצפנה מאובטחים באופן אוטומטי בהשקה הראשונה. הם נשמרים ב{dataDir}. אין צורך בפעולה — הנתונים שלך מוצפנים ובטוחים. כדי להשתמש במפתחות מותאמים אישית, הוסף JWT_SECRET וSTORAGE_ENCRYPTION_KEY לקובץ זה.", + "batchRelativeTimeIn": "ב-{value}", + "batchRelativeTimeAgo": "לפני {value}", + "batchDetailsTitle": "פרטי אצווה", + "batchProgress": "התקדמות", + "batchCompletedCount": "{count} הושלמו", + "batchFailedCount": "{count} נכשל", + "batchPendingCount": "{count} ממתין", + "batchTimeline": "ציר זמן", + "batchTimelineInProgress": "בתהליך", + "batchTimelineFinalizing": "סיום", + "batchTimelineCompleted": "הושלם", + "batchTimelineFailed": "נכשל", + "batchTimelineExpires": "פג תוקף", + "batchTimelineExpired": "פג תוקף", + "batchTimelineCancelling": "מבוטל", + "batchTimelineCancelled": "בוטל", + "batchTokenUsage": "שימוש בטוקן", + "batchMetadata": "מטאדאטה", + "batchFileContents": "תוכן הקובץ", + "batchFileUsedByCount": "שימוש ב{count, plural, one {# קבוצת} other {# קבוצות}}", + "batchFilePreview": "תצוגה מקדימה", + "batchFilePreviewTruncated": "מציג {shown} שורות ראשונות ({total} שורות סך הכל)", + "batchFileDownloadFull": "הורד קובץ מלא" }, "disabled": "מושבת", "featureFlagOmnirouteEmergencyFallbackDescription": "ניתוב בקשות שחרגו מהתקציב לספק/מודל גיבוי חינמי לשעת חירום.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "מפריד", "discovery": "גילוי", "discoverySubtitle": "סריקת ספקים לגישה חינמית", + "conductor": "מנחה", + "conductorSubtitle": "צוות CLI-agent", "resilienceConnections": "עמידות חיבור", "resilienceConnectionsSubtitle": "צינון, נתיק, מצב נעילה", "settingsModalityBridge": "גשר מודליות", - "settingsModalityBridgeSubtitle": "גיבוי תמונה/שמע → טקסט עבור מודלים רק טקסט" + "settingsModalityBridgeSubtitle": "גיבוי תמונה/שמע → טקסט עבור מודלים רק טקסט", + "commandPalette": { + "title": "פלטת פקודות", + "searchPlaceholder": "חפש דפים, הגדרות, כלים...", + "clearSearch": "נקה חיפוש", + "noResults": "אין תוצאות", + "navigate": "נווט", + "open": "פתח", + "close": "סגור" + }, + "noResults": "אין תוצאות" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "עדכון ההגדרות נכשל", "sync.token.created": "אסימון הסנכרון נוצר", "sync.token.revoked": "אסימון הסנכרון נשלל" - } + }, + "mcpMetricCalls24h": "שיחות (24ש')", + "mcpMetricSuccessRate": "שיעור הצלחה", + "mcpMetricAvgDuration": "משך ממוצע", + "mcpMetricTopTool": "כלי מוביל" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "גרסה חדשה זמינה. לחץ לעדכון.", "updateStarted": "העדכון התחיל...", "reloadingPageAutomatically": "טוען מחדש את הדף באופן אוטומטי...", - "providerTopology": "טופולוגיה של ספק" + "providerTopology": "טופולוגיה של ספק", + "downloadDmg": "הורד DMG (macOS)", + "downloadDmgDescription": "גרסה חדשה של אפליקציית OmniRoute למחשב שולחני זמינה. אנא הורד והתקן את מתקין ה-DMG של macOS כדי לעדכן (נוכחי: v{version}).", + "downloadExe": "הורד EXE (Windows)", + "downloadExeDescription": "גרסה חדשה של אפליקציית OmniRoute לשולחן העבודה זמינה. אנא הורד והתקן את מתקין ה-Windows EXE כדי לעדכן (נוכחי: v{version}).", + "downloadAppImage": "הורד AppImage (לינוקס)", + "downloadAppImageDescription": "גרסה חדשה של אפליקציית OmniRoute לדסקטופ זמינה. אנא הורד את חבילת AppImage עבור Linux כדי לעדכן (נוכחי: v{version}).", + "downloadUpdate": "הורד עדכון", + "downloadUpdateDescription": "גרסה חדשה של אפליקציית OmniRoute לשולחן העבודה זמינה. אנא הורד את פורמט האפליקציה המתאים למערכת שלך כדי לעדכן (נוכחי: v{version}).", + "updateQueued": "עדכון ממתין לגרסה v{version}.", + "updateDockerRebuilding": "תמונת Docker מתבצעת מחדש ברקע.", + "updateWaitingRestart": "ממתין ל-OmniRoute להפעיל מחדש עם הגרסה החדשה.", + "updateInstalling": "מתקין v{version}.", + "updateRunning": "OmniRoute פועל כעת בגרסה v{version}.", + "updateCompleted": "OmniRoute עודכן לגרסה {version}.", + "updateDockerStillRebuilding": "תמונת Docker עדיין נבנית עבור v{version}.", + "updateInstallingBackground": "מתקין v{version} ברקע.", + "updateWaitingVersion": "מחכה ל-OmniRoute לחזור ב-v{version}.", + "updateDockerStillInProgress": "שחזור Docker עדיין בתהליך.", + "updateRestarting": "שירות מתחדש. מחכים ל-OmniRoute לחזור לפעולה...", + "updateTimeout": "העדכון התחיל, אך v{version} לא הפך לזמין לפני שזמן ההמתנה הסתיים. רענן את הדף או בדוק את יומני השרת.", + "updateTimedOut": "עדכון לגרסה v{version} לא הצליח.", + "updateStartFailed": "נכשל בהתחלת העדכון.", + "noResponseStream": "לא התקבלה זרימת תגובות.", + "updateComplete": "עדכון הושלם!", + "updateFailed": "עדכון נכשל.", + "updateNetworkError": "שגיאת רשת — החיבור אבד במהלך העדכון.", + "stepInstallPackage": "התקן חבילה", + "stepRebuildNativeModules": "שחזור מודולים מקומיים", + "stepRestartService": "הפעל מחדש את השירות", + "stepComplete": "מלא", + "stepError": "שגיאה", + "updateCompleteTitle": "עדכון הושלם!", + "updateFailedTitle": "עדכון נכשל", + "updatingTitle": "מעדכן את OmniRoute...", + "reloadNotice": "העמוד יתחדש אוטומטית בעוד כמה שניות.", + "retryNotice": "אנא נסה שוב או עדכן ידנית דרך ה-CLI.", + "restartNotice": "אל סוגר את הדף הזה. המערכת תתחדש אוטומטית.", + "reloadNow": "טען מחדש עכשיו", + "closeUpdate": "סגור", + "retryUpdate": "נסה שוב", + "updateAvailableTitle": "עדכון זמין: v{version}{desktop}", + "desktopAppLabel": "(אפליקציית שולחן עבודה)", + "checkingForUpdates": "בודק עדכונים...", + "versionAvailableForDownload": "גרסה v{version} זמינה להורדה.", + "downloadingUpdate": "מוריד עדכון... {percent}% הושלם.", + "updateDownloaded": "העדכון הורד בהצלחה! לחץ על הפעל מחדש והתקן כדי ליישם.", + "autoUpdateFailed": "עדכון אוטומטי נכשל: {reason}.", + "unknownUpdateError": "שגיאה לא ידועה", + "versionAvailableDesktop": "הגרסה v{version} זמינה עבור אפליקציית הדסקטופ.", + "manualUpdateRequired": "דרוש עדכון ידני עבור סוג התקנה זה.", + "restartAndInstall": "אתחל והתקן", + "checkForUpdate": "בדוק אם יש עדכון", + "manualUpdate": "עדכון ידני", + "directDownloadHint": "או הורד את פורמט המתקין המתאים ישירות:", + "releaseNotes": "הערות שחרור", + "readMore": "קרא עוד", + "noAuthLabel": "אין אימות" }, "analytics": { "title": "אנליטיקס", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "הוסק מיומני קריאות שנשמרו סביב בקשה זו", "routeRecommendations": "המלצות", "routeLimitations": "מגבלות", - "routeNoKnownLimitations": "אין מגבלות ידועות עבור הסבר זה." + "routeNoKnownLimitations": "אין מגבלות ידועות עבור הסבר זה.", + "searchAnalyticsLoading": "טוען אנליטיקות חיפוש…", + "searchAnalyticsNoData": "אין נתוני חיפוש זמינים עדיין.", + "searchAnalyticsNoDataDescription": "בקשות החיפוש יופיעו כאן לאחר החיפוש הראשון באמצעות /v1/search.", + "searchAnalyticsToday": "{count} היום", + "searchAnalyticsCachedRequests": "{count} בקשות במטמון", + "searchAnalyticsApiCosts": "עלות ה-API של חיפוש", + "searchAnalyticsErrors": "{count} שגיאות", + "searchAnalyticsNoErrors": "אין שגיאות", + "searchAnalyticsProviderBreakdown": "פירוט ספקים", + "searchAnalyticsQueries": "שאילתות", + "searchAnalyticsEmptyDescription": "השתמש בPOST /v1/search כדי להתחיל לנתב חיפושי רשת.", + "searchAnalyticsFreeTier": "שכבת חינם זמינה: Serper (2,500/חודש), Brave (2,000/חודש), Exa (1,000/חודש), Tavily (1,000/חודש) — סך הכל 6,500+ חיפושים חינם/חודש עם כשלון אוטומטי.", + "autoRoutingNoDataAvailable": "אין נתוני ניתוח אוטומטיים זמינים. בצע בקשות באמצעות הקידומת auto/ כדי לראות מדדים.", + "defaultVariantLabel": "ברירת מחדל", + "freeTierAvailable": "שכבת חינם זמינה" }, "apiManager": { "title": "מפתחות API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} ספקים", "imageToTextBridgeAvailable": "גשר המודאליות יכול לתאר תמונות עבור מודלים טקסטואליים בלבד עכשיו. מגרש המשחקים המובנה יהיה זמין כאשר /api/v1/images/understanding ייושם.", "imageToTextBridgeCta": "הגדר את גשר התמונה→טקסט בהגדרות גשר המודאליות", - "sttBridgeCta": "הגדר את גשר דיבור→טקסט בהגדרות גשר מודליות" + "sttBridgeCta": "הגדר את גשר דיבור→טקסט בהגדרות גשר מודליות", + "existingConnection": "חיבור קיים", + "openrouterSttDescription": "מודלים של OpenRouter להמרת דיבור לטקסט משתמשים בחיבור OpenRouter שהגדרת. אין צורך באישור נפרד." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "הדבק לתוך:", "copilotReloadInstruction": "לאחר מכן טען מחדש את VS Code והגדר את מפתח ה-API בשורת הקלט.", "wireApiChatCompletions": "השלמות של צ'אט (/chat/completions)", - "wireApiResponses": "ממשק API של תגובות (/תגובות)" + "wireApiResponses": "ממשק API של תגובות (/תגובות)", + "cliproxyapiActionFailed": "הפעולה נכשלה", + "cliproxyapiActionSucceeded": "הפעולה הצליחה", + "cliproxyapiCheckUpdates": "בדוק עדכונים", + "cliproxyapiDescription": "נפילה של פרוקסי עליון (OAuth מבוסס Go)", + "cliproxyapiHealth": "בריאות", + "cliproxyapiHealthy": "בריא", + "cliproxyapiInstall": "התקן", + "cliproxyapiNotInstalledValue": "לא מותקן", + "cliproxyapiPort": "פורט", + "cliproxyapiRequestFailed": "הבקשה נכשלה", + "cliproxyapiRestart": "הפעל מחדש", + "cliproxyapiStart": "התחל", + "cliproxyapiStatusError": "שגיאה", + "cliproxyapiStatusInstalled": "מותקן", + "cliproxyapiStatusNotInstalled": "לא מותקן", + "cliproxyapiStatusRunning": "ריצה", + "cliproxyapiStatusStopped": "נעצר", + "cliproxyapiStop": "עצור", + "cliproxyapiUnhealthy": "לא בריא", + "cliproxyapiUnknown": "לא ידוע", + "cliproxyapiUpdate": "עדכון", + "cliproxyapiUpdateAvailable": "עדכון זמין: v{current} → v{latest}", + "cliproxyapiVersion": "גרסה" }, "combos": { "title": "שילובים", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "רק התקדמות כאשר מכסה מתמלאת", + "fallbackOnlyOnQuotaExhaustionShort": "גיבוי רק לפי מכסה", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "חבילת המצב (Mode pack) והשקילה נשארים כאן; מצב הריצה של ה-breaker נשאר בדף הבריאות.", "emailVisibilityHint": "כתובות האימייל של החשבון כאן כפופות למתג הפרטיות הגלובלי.", "emailVisibilityTooltip": "השתמש בסמל העין כדי לחשוף או להסתיר כתובות אימייל של חשבונות באופן גלובלי בין שילובים, ספקים ומסכי מכסות.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "שלב אחר שלב (ספק → מודל)", + "builderModeGlobal": "חיפוש מודל גלובלי (שילוב מותאם אישית)", + "builderGlobalSearchPlaceholder": "חפש מודלים בכל הספקים (למשל opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "הוסף הכל", + "builderGlobalShortcuts": "קיצורים:", + "builderGlobalNoResults": "לא נמצא מודל עבור \"{query}\".", + "builderGlobalProviderLabel": "ספק:", + "builderGlobalAccountCount": "{count, plural, one {# חשבון} other {# חשבונות}}", + "builderGlobalAdded": "נוסף", + "builderGlobalAdd": "הוסף", "manualModel": "מודל ידני", "manualModelInvalid": "הזן מודל בפורמט provider/model.", "manualModelUnknownProvider": "תחילית ספק לא מוכרת.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "זמינות מפגש", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "דביקות כבויה", "kimiPresetTitle": "הגדרה מראש של Kimi Coding", "kimiPresetDescription": "Kimi K3 כמודל הראשי (Moonshot API), עם מעבר אוטומטי לגיבוי לחיבורי Kimi Code שלך (kimi-coding, kimi-web) כאשר הם מוגדרים.", - "kimiPresetCta": "הוסף הגדרה מראש" + "kimiPresetCta": "הוסף הגדרה מראש", + "intelligentComboCount": "{count, plural, one {# קומבינציה אינטליגנטית} other {# קומבינציות אינטליגנטיות}}", + "providersInScope": "{count, plural, one {# ספק בתחום} other {# ספקים בתחום}}", + "savingModePack": "שומר {pack}…", + "errorTitle": "נכשל בטעינת קומבואים", + "errorDescription": "לא הצלחנו לטעון את נתוני הקומבו כרגע. בדוק את החיבור שלך ונסה שוב.", + "errorId": "שגיאת מזהה: {id}", + "errorRetry": "נסה שוב", + "comboLabel": "קומבו" }, "costs": { "title": "עלויות", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "כתובת URL של WebDAV", "obsidianUsername": "שם משתמש", "obsidianPassword": "סיסמה", - "obsidianTailscaleHint": "השתמש ב-IP של Tailscale במקום ב-localhost אם אתה מתחבר מהמובייל. שני המכשירים חייבים להיות באותה רשת Tailscale." + "obsidianTailscaleHint": "השתמש ב-IP של Tailscale במקום ב-localhost אם אתה מתחבר מהמובייל. שני המכשירים חייבים להיות באותה רשת Tailscale.", + "cloudSyncNotConfigured": "סנכרון בענן לא מוגדר במופע הזה.", + "notionConnect": "חבר", + "notionConnectFailed": "נכשל בחיבור", + "notionConnected": "מחובר", + "notionConnectionFailed": "חיבור נכשל", + "notionDescription": "חפש, קרא, שאל וכתוב ל-Notion דרך מודלים מנותבים של AI", + "notionDisconnect": "התנתק", + "notionDisconnectFailed": "נכשל בהתחברות מחדש", + "notionEnterToken": "אנא הזן אסימון אינטגרציה של Notion", + "notionIntegrationHelp": "צור אינטגרציה פנימית ב", + "notionIntegrationToken": "אסימון אינטגרציה פנימית של Notion", + "notionNotConnected": "לא מחובר", + "notionTokenConfigured": "האסימון הוגדר. כלים של Notion זמינים דרך MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "ספק / מודל", "noRemoteProviders": "אין ספקים עם מפתח API מוגדר", "selectProviderModel": "בחר מודל", + "customBaseUrlLabel": "כתובת בסיס מותאמת אישית (אופציונלי)", + "customModelIdLabel": "מזהה מודל מותאם אישית (אופציונלי)", + "customEndpointHelp": "השתמש בנקודת הקצה /embeddings תואמת OpenAI. נקודות קצה מקומיות מותרות; מטרות מטא-נתונים בענן חסומות.", + "customEndpointSave": "החל נקודת קצה מותאמת", + "customEndpointInvalid": "הזן גם כתובת URL בסיסית חוקית HTTP(S) וגם מזהה מודל, או השאר את שני השדות ריקים.", + "customEndpointSaveFailed": "לא ניתן היה לשמור את נקודת הקצה של ההטמעה המותאמת.", "staticEnabledLabel": "הפעלת Static Potion", "staticEnabledDesc": "הורדה ושימוש במודל potion-base-8M באופן מקומי", "transformersEnabledLabel": "הפעלת Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "מנקה...", "cleanNow": "נקה עכשיו", "cleanupSuccess": "{count} נקודות הוסרו", - "cleanupFailed": "הניקוי נכשל" + "cleanupFailed": "הניקוי נכשל", + "hostLabel": "מארח", + "collectionLabel": "אוסף" }, "rerank": { "enableLabel": "הפעל Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "דיאגרמת OmniRoute 3-tier fallback", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "הגדר ספקים חינמיים", + "description": "אפשר להפעיל ספקים נבחרים ללא רישום. עיין בהודעה ובאתר של כל ספק לפני ההמשך; זמינות ומגבלות קצב נשלטות על ידי צדדים שלישיים.", + "loading": "טוען ספקים חינמיים...", + "loadFailed": "לא ניתן לטעון ספקים חינמיים.", + "alreadyConfigured": "כל הספקים החינמיים הזכאים כבר מוגדרים.", + "reviewProviderSite": "סקור את אתר הספק ואת התנאים", + "confirmation": "סקנתי את ספקי הצד השלישי הללו ורוצה ש-OminiRoute ייצור את החיבורים שנבחרו.", + "setupSelected": "הגדר ספקים שנבחרו", + "settingUp": "מגדיר...", + "setupFailed": "לא ניתן להגדיר את הספקים שנבחרו. שום דבר קיים לא שונה.", + "retryFailed": "נסה שוב ספקים שנכשלו", + "orUseApiKey": "או להתחבר עם מפתח API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "נוצר", + "skipped": "כבר מוגדר", + "failed": "נכשל" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "חובה. כתובת האתר הבסיסית של ספק API.", "iconUrlLabel": "כתובת URL של סמל", "iconUrlHint": "אופציונלי. כתובת URL של תמונה שתוצג כסמל של ספק זה.", + "iconUrlInvalid": "כתובת ה-URL של האייקון אינה חוקית. השתמש ב-http(s):// או ב-data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} תואם (פרוד)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "הסשן כבר נוכחי", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "החל אישור", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "הדבק מפתח API…", "zedSaving": "שומר…", "zedImportAction": "ייבוא", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "אפשר חידוש אוטומטי של מושב הסמן", + "cursorAgentNudgeBody": "התקן את cursor-agent לחדש את המושבים באופן אוטומטי — ללא זה, חיבורי Cursor זקוקים לחיבור ידני תקופתי בערך כל 24 שעות.", + "cursorAgentNudgeDismiss": "סגור", "zedManualImportFailed": "הייבוא הידני נכשל", "zedManualImportSuccess": "יובא אסימון {provider} מ-Zed", "grokImportTitle": "ייבוא אימות Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "מסלול חינמי להסקה ללא שרת — ללא צורך בכרטיס אשראי", "gemini": "חינם לתמיד: 1,500 בקשות/יום עבור Gemini 2.5 Flash — ללא כרטיס אשראי, קבל מפתח ב-aistudio.google.com", "gigachat": "חבר את GigaChat (Sber) באמצעות מפתח API.", - "github-models": "צור GitHub PAT עם הרשאת 'models: read' ב-github.com/settings/tokens", "gitlab": "טוקן גישה אישי של GitLab עבור ה-API הציבורי של Code Suggestions. הגדר כתובת URL בסיסית באירוח עצמי כאשר אינך משתמש ב-gitlab.com.", "gitlawb-gmi": "קבל את מפתח ה-API שלך מלוח הבקרה של Gitlawb Opengateway.", "gitlawb": "קבל את מפתח ה-API שלך מלוח הבקרה של Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "חבר את Kimi Coding באמצעות תהליך ה-OAuth הקיים.", "kiro": "מסלול חינמי: 50 קרדיטים לחודש (~25K–100K טוקנים). ⚠️ תנאי השימוש של Kiro אוסרים על שימוש בפרוקסי/harness של צד שלישי.", "codex": "חבר את OpenAI Codex באמצעות תהליך ה-OAuth הקיים.", - "qwen": "חבר את Qwen Code באמצעות תהליך ה-OAuth הקיים." + "qwen": "חבר את Qwen Code באמצעות תהליך ה-OAuth הקיים.", + "github-models": "צור GitHub PAT עם הרשאת 'models: read' ב-github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} מקבל מזהי מודל מקוריים של ספק. ייבא מ /models או הוסף מזהים מותאמים אישית לניתוב.", "bedrockModelsDescription": "הדגמים של Amazon Bedrock נמצאים לפי אזור AWS. ייבא מ-/models או הוסף מזהי דגמי Bedrock המופעלים באזור הנבחר.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "כאשר כל החיבורים המוגדרים נוצלו (מכסה, אשראי או תאריך תפוגה), השתמש זמנית בשכבת ללא מפתח של ספק זה. כבה כדי לדלג על ספק זה במקום לשלוח בקשות אנונימיות - מומלץ כאשר שכבת ללא מפתח דוחה אותן (401).", "anonymousFallbackEnabled": "גיבוי אנונימי מופעל עבור {provider}", "anonymousFallbackDisabled": "גיבוי אנונימי מושבת עבור {provider} — חיבורים שנוצלו ידלגו על ספק זה", - "anonymousFallbackUpdateFailed": "נכשל בעדכון הגדרת גיבוי אנונימית" + "anonymousFallbackUpdateFailed": "נכשל בעדכון הגדרת גיבוי אנונימית", + "batchDeleteFailed": "מחיקת אצווה נכשלה", + "batchDeleteNetworkError": "שגיאת רשת במהלך מחיקת אצווה", + "batchUpdateFailed": "עדכון קבוצתי נכשל", + "batchUpdateNetworkError": "שגיאת רשת במהלך עדכון קבוצתי", + "categoryAudio": "אודיו", + "categoryCloudAgent": "סוכן ענן", + "categoryIde": "IDE", + "categoryLocal": "מקומי", + "categorySearch": "חפש", + "categoryWebCookie": "עוגיית רשת", + "claudeExtraUsageBlockingDisabled": "חסימת שימוש יתר של Claude מושבתת (שימוש יתר מותר)", + "claudeExtraUsageBlockingEnabled": "חסימת שימוש יתר של Claude מופעלת (שימוש יתר יחסם)", + "claudeRoutingPreferenceDisabled": "מודלים של קלוד ללא תחילית כבר לא מעדיפים את קלוד קוד", + "claudeRoutingPreferenceEnabled": "מודלים של קלוד ללא תחילית מעדיפים עכשיו קלוד קוד", + "clearMediaFilter": "נקה", + "cliproxyRoutingDisabled": "בקשות עכשיו משתמשות ב-OmniRoute המקורי (ישיר)", + "cliproxyRoutingEnabled": "בקשות עכשיו מנותבות דרך CLIProxyAPI (הדמיה עמוקה יותר)", + "codexLimitPolicyUpdated": "מדיניות מגבלת קודקס עודכנה", + "codexServiceModeUpdated": "מצב שירות Codex עודכן", + "codexServiceTierActive": "שכבת השירות Codex {tier} פעילה", + "codexTierFastLabel": "מהיר", + "codexTierFlexLabel": "פלקס", + "commandCodeApplyFailed": "כישלון בהחלת קוד הפקודה auth", + "commandCodeApplyingApproval": "הדפדפן אושר, מיישם…", + "commandCodeApplyingKey": "מיישם מפתח מאושר על ידי הדפדפן…", + "commandCodeApprovalInstructions": "פתח את כתובת ה-URL של האימות, אשר גישה, ואז הדבק את המפתח/JSON/כתובת ה-URL שהוחזרה למטה…", + "commandCodeAuthExpired": "קוד הפקודה פג תוקף", + "commandCodeConnected": "קוד הפקודה מחובר", + "commandCodeConnectionAdded": "חיבור קוד הפקודה נוסף", + "commandCodeLinkExpired": "קישור קוד הפקודה פג תוקף", + "commandCodeOpeningStudio": "פותח את Command Code Studio…", + "commandCodePopupBlocked": "חלון קופץ חסום. אנא אפשר חלונות קופצים ונסה שוב את Command Code Connect.", + "commandCodeStartFailed": "נכשל בהפעלה של Command Code auth", + "connectionDeleted": "החיבור נמחק", + "connectionFallback": "חיבור", + "coolingConnectionsDescription": "חיבורים אלה החזירו 429 (מגבלת קצב) בבקשה האחרונה שלהם. OmniRoute ידלג עליהם עד שהטיימר יפוג — אין צורך להשבית ידנית.", + "coolingConnectionsTitle": "כרגע מקרר ({count})", + "failedDeleteAlias": "כישלון במחיקת הכינוי", + "failedDeleteConnection": "כישלון במחקת החיבור", + "failedDistributeProxies": "נכשל בהפצת פרוקסים.", + "failedSaveModelEndpointSettings": "שגיאה בשמירת הגדרות נקודת הקצה של המודל", + "failedUpdateClaudeExtraUsagePolicy": "כישלון בעדכון מדיניות השימוש הנוסף של Claude", + "failedUpdateClaudeRoutingPreference": "נכשל בעדכון העדפת ניתוב קוד קלוד", + "failedUpdateCliproxyRouting": "נכשל בעדכון ניתוב CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "כישלון בעדכון מדיניות מגבלת Codex", + "failedUpdateCodexServiceMode": "כישלון בעדכון מצב שירות Codex", + "filterByMedia": "מדיה", + "freeBadge": "חינם", + "kimiCodeApiKeyLabel": "מפתח API של Kimi Code", + "modelTestFailed": "המבחן של המודל נכשל", + "modelTestNetworkError": "שגיאת רשת בבדיקת מודל", + "networkError": "שגיאת רשת", + "networkErrorDeletingAlias": "שגיאת רשת במחיקת כינוי", + "networkErrorSettingAlias": "שגיאת רשת בהגדרת כינוי", + "noProvidersMatch": "אין ספקים התואמים את החיפוש שלך.", + "noSavedProxies": "לא נמצאו פרוקסים שמורים. הוסף פרוקסים בהגדרות → פרוקסי קודם.", + "pageLoadErrorDescription": "לא הצלחנו לטעון את נתוני הספק כרגע. בדוק את החיבור שלך ונסה שוב.", + "pageLoadErrorId": "מזהה שגיאה: {id}", + "pageLoadErrorRetry": "נסה שוב", + "pageLoadErrorTitle": "כישלון בטעינת ספקים", + "playgroundTitle": "גן משחקים", + "providerDetailConnectionFlexActive": "שכבת שירות Codex Flex פעילה עבור חיבור זה", + "providerDetailConnectionPriorityActive": "שכבת שירות עדיפות Codex פעילה עבור חיבור זה", + "providerDetailGlobalFlexActive": "שכבת שירות גמישה של Global Codex פעילה", + "providerDetailGlobalPriorityActive": "שכבת שירות עדיפות של Global Codex פעילה", + "proxiesDistributed": "הוקצו {assigned} משימות פרוקסי מפוזרות על פני {tagLabel}{total} חיבור(ים).", + "rerankEndpoint": "שוב דירוג", + "savedModelEndpointSettings": "הגדרות נקודת הקצה של המודל השמור", + "searchByModelAria": "חפש לפי דגם", + "selectSupportedEndpoint": "בחר לפחות נקודת קצה אחת נתמכת", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "הגדרות", @@ -6460,7 +6719,24 @@ "loadFailed": "טעינת רשימת המנויים נכשלה", "toggleFailed": "החלפת המתג נכשלה", "refreshFailed": "הרענון נכשל", - "deleteFailed": "המחיקה נכשלה" + "deleteFailed": "המחיקה נכשלה", + "add": "הוסף", + "cancel": "ביטול", + "configure": "הגדר", + "copyEndpoint": "העתק נקודת קצה", + "coreEndpointHint": "רמז לנקודת הקצה הליבה", + "coreNodesHint": "רמז לצמתים הליבתיים", + "create": "צור", + "deleteConfirm": "אישור מחיקה", + "empty": "ריק", + "globalModeDescription": "תיאור מצב גלובלי", + "localCoreHint": "רמז ליבה מקומית", + "nodeSummary": "סיכום צומת", + "providerRequired": "דרוש ספק", + "providerRouting": "נתיב ספק", + "refresh": "רענן", + "refreshInterval": "מרווח רענון", + "ruleModeDescription": "תיאור מצב חוק" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "הרץ גיבוי אוטומטי של ראייה לטקסט (vision-to-text) לפני ניתוב בקשות תמונה למודלים של טקסט בלבד.", "visionBridgeEnabledLabel": "מופעל", "visionBridgeEnabledDesc": "הפעל/השבת את גשר טרום-הקריאה שמחליף חלקי תמונה בטקסט שחולץ.", + "visionBridgeRerouteTextOnlyLabel": "שנה כיוון למודלים טקסטואליים בלבד", + "visionBridgeRerouteTextOnlyDesc": "שלח את הבקשה המלאה, כולל תמונות, למודל הגשר כאשר המודל הנבחר אין לו קלט תמונה.", "visionBridgeModel": "דגם גשר", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "ניתן להשתמש כאן בכל מזהה מודל של OmniRoute התומך בראייה.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "למפתח ה-API חסר ה-scope של manage.", "BYPASS_PREFIX_NOT_ALLOWED": "קידומת אחת או יותר מכוונות לנתיבים בעלי יכולת Spawn ולא ניתן לעקוף אותן.", "GENERIC": "עדכון הגדרות ה-authz נכשל." - } + }, + "remove": "הסר" }, "resilienceBaseCooldownLabel": "קירור בסיס", "scopeLabel": "היקף", @@ -7764,7 +8043,7 @@ "modalityBridgeTestButton": "בדוק עם תמונת דוגמה", "modalityBridgeTestRunning": "בדיקה…", "modalityBridgeTestOk": "גשר בסדר — {count} תמונה/ות המתוארת/ות על ידי {model}", - "modalityBridgeTestReroute": "הגשר הפנה את הבקשה ל{name}", + "modalityBridgeTestReroute": "הגשר הפנה את הבקשה ל{model}", "modalityBridgeTestNoop": "הגשר לא הופעל (המודל עשוי לתמוך בראייה באופן מקורי או שהגשר מושבת)", "modalityBridgeTestError": "המבחן נכשל: {message}", "modalityBridgeAudioComingSoon": "הגשר האודיו (דיבור → טקסט דרך /v1/audio/transcriptions) יושק בגרסה הבאה. מפתחות ההגדרות שלו כבר שמורים.", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "בודק אודיו…", "modalityBridgeAudioTestOk": "גשר שמע בסדר — {count} קליפ(ים) שהוקלטו על ידי {model}", "modalityBridgeAudioTestNoop": "Audio Bridge לא הופעל (ייתכן שהיעד תומך באודיו, אין ספק STT מחובר, או שהגשר מושבת)", - "modalityBridgeAudioTestError": "בדיקת שמע נכשלה: {message}" + "modalityBridgeAudioTestError": "בדיקת שמע נכשלה: {message}", + "modelRoutingDescriptionPlaceholder": "נתב מודלים של Opus לקומבו של frontier", + "cliproxyapiFallbackCodes": "קודי גיבוי של Cliproxyapi", + "cliproxyapiFallbackDescription": "תיאור גיבוי של Cliproxyapi", + "cliproxyapiHealthLabel": "תווית בריאות Cliproxyapi", + "cliproxyapiImportFailed": "ייבוא Cliproxyapi נכשל", + "cliproxyapiImportResult": "תוצאת ייבוא Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi כתובת URL לא חוקית", + "cliproxyapiLifecycleNoticeAfter": "הודעת מחזור חיים של Cliproxyapi לאחר", + "cliproxyapiLifecycleNoticeBefore": "הודעת מחזור חיים של Cliproxyapi לפני", + "cliproxyapiLifecycleNoticeLink": "קישור להודעת מחזור חיים של Cliproxyapi", + "cliproxyapiPortLabel": "תגית פורט Cliproxyapi", + "cliproxyapiStatusLabel": "סטטוס Cliproxyapi", + "cliproxyapiVersionLabel": "תווית גרסת Cliproxyapi", + "collection": "אוסף", + "errorPage": { + "description": "לא הצלחנו לטעון את ההגדרות כרגע. אנא נסה שוב בעוד כמה שניות.", + "errorId": "שגיאת מזהה: {id}", + "retry": "נסה שוב", + "title": "כישלון בטעינת ההגדרות" + }, + "host": "מארח", + "notInstalled": "לא מותקן", + "oneproxyActions": "פעולות Oneproxy", + "oneproxyActive": "Oneproxy פעיל", + "oneproxyAnonymity": "אנונימיות Oneproxy", + "oneproxyCountry": "מדינת Oneproxy", + "oneproxyDelete": "מחק Oneproxy", + "oneproxyEmpty": "Oneproxy ריק", + "oneproxyHost": "Oneproxy מארח", + "oneproxyLatency": "לייטנסי של Oneproxy", + "oneproxyProtocol": "פרוטוקול Oneproxy", + "oneproxyQuality": "איכות Oneproxy", + "oneproxySyncFailed": "סנכרון נכשל: {error}", + "oneproxySyncSuccess": "סנכרנו {total} פרוקסים ({added} חדשים, {updated} מעודכנים)", + "proxyDocumentationSocks5DescAfter": "תיעוד פרוקסי Socks5 תיאור לאחר", + "proxyFreePoolAddProxy": "הוסף פרוקסי לבריכת פרוקסי חינמית", + "proxyFreePoolAdding": "הוספת בריכת פרוקסי חינמית", + "proxyFreePoolSelectProxy": "בחר פרוקסי מתוך מאגר פרוקסים חינמיים", + "proxyStatusActive": "סטטוס פרוקסי פעיל", + "proxyStatusInactive": "סטטוס פרוקסי לא פעיל", + "routingAddEntry": "הוסף רשומה", + "settingSaveFailed": "שגיאת שמירת ההגדרות", + "settingSaved": "הגדרה נשמרה", + "skillsmpApiKeyHintAfter": ". מגבלת קצב: {limit} בקשות/יום.", + "skillsmpApiKeyHintBefore": "קבל את מפתח ה-API שלך מ-", + "syncFailed": "סנכרון נכשל", + "unhealthy": "לא בריא", + "oneproxyDescription": "שחזר וסובב פרוקסים מאומתים חינמיים מפלטפורמת הקהילה 1proxy", + "oneproxySyncing": "סנכרון...", + "oneproxySyncNow": "סנכרן עכשיו", + "oneproxyClearAll": "נקה הכל", + "oneproxyGoogle": "גוגל", + "oneproxyClearAllConfirm": "לנקות את כל פרוקסי 1proxy?", + "memorySkillsSkillsmpDescription": "התחבר לSkillsMP כדי לגלות ולהתקין מיומנויות מהשוק.", + "memorySkillsActiveProviderDescription": "בחר איזה ספק עמוד הכישורים משתמש לחיפוש והתקנה.", + "memorySkillsSkillsmpProviderTitle": "שוק SkillsMP", + "memorySkillsSkillsmpProviderDescription": "שוק מאומת (משתמש במפתח ה-API שלך של SkillsMP).", + "memorySkillsSkillsshProviderTitle": "תיקיית skills.sh", + "memorySkillsSkillsshProviderDescription": "ספק תיקייה ציבורית (אין צורך במפתח API).", + "routingCcBridgeCatalogName": "גשר CC תואם לאנתרופיק", + "routingClaudeProviderName": "קלוד (OAuth)", + "routingClaudeProviderDescription": "ספק קלוד מקורי עם אסימוני OAuth שהונפקו.", + "routingCcBridgeName": "גשר קלוד-קוד", + "routingCcBridgeDescription": "שדר קצוות באמצעות מפתחות API (תואם אנתרופיק-cc-*).", + "routingCustomProviderDescription": "ספק מותאם אישית.", + "routingUnknownOpKind": "סוג פעולה לא ידוע: {kind}", + "routingInvalidJson": "JSON לא חוקי: {error}", + "routingConfigMustBeObject": "הקונפיגורציה חייבת להיות אובייקט JSON", + "routingEnabledMustBeBoolean": "`enabled` חייב להיות true או false", + "routingPipelineMustBeArray": "`pipeline` חייב להיות מערך של ops", + "routingPipelineTooLong": "הצינור לא יכול לעלות על 50 פעולות", + "routingOpMissingKind": "אופציה #{index}: חסר או לא תקין `kind`", + "routingOpUnknownKind": "אופרטור #{index}: סוג לא ידוע \"{kind}\"", + "routingJsonEditorHide": "הסתר עורך JSON", + "routingJsonEditorImportExport": "ייבוא / ייצוא JSON", + "routingJsonEditorLabel": "JSON (ערוך והחל, או הדבק לייבוא)", + "routingApplyJson": "החל JSON", + "routingTransformsFootnote": "כל פעולות ההמרה הן אידמפטות בריצה חוזרת. השינויים נכנסים לתוקף מיד בבקשה הבאה.", + "cliproxyapiUnknown": "לא ידוע", + "cliproxyapiVersion": "גרסה", + "cliproxyapiHealth": "בריאות", + "cliproxyapiPort": "פורט", + "qdrantHost": "מארח", + "qdrantCollection": "אוסף" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "מלא", "ultra": "אולטרה" } + }, + "modeOptions": { + "default": "ברירת מחדל", + "off": "כבוי", + "lite": "לייט", + "standard": "סטנדרט", + "aggressive": "אגרסיבי", + "ultra": "אולטרה", + "responsesToolOutput": "פלט כלי התגובות" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "רץ אחרון במחסנית (לאחר ש-RTK/Caveman מנקה את הטקסט, OmniGlyph ממיר את השאר לתמונות) ורץ גם באופן עצמאי דרך מצב omniglyph. זוהי תצוגה מקדימה והיא נשארת כבויה כברירת מחדל עד להשלמת אימות מקצה לקצה.", "saved": "נשמר.", "saveFailed": "לא ניתן היה לשמור.", - "enableAria": "הפעל את מנוע OmniGlyph" + "enableAria": "הפעל את מנוע OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "שירותים מובנים", @@ -9127,7 +9500,49 @@ "unableToLoad": "לא ניתן לטעון מדדי מערכת", "product": "מוצר", "resources": "משאבים", - "company": "חברה" + "company": "חברה", + "tokenHealthTooltips": { + "allHealthy": "כל הטוקנים בריאים", + "needsAttention": "כמה טוקנים זקוקים לתשומת לב", + "refreshFailures": "זוהו כישלונות ברענון טוקן", + "unknown": "סטטוס בריאות לא ידוע" + }, + "systemMonitor": { + "metricsAriaLabel": "מדדי מערכת", + "memory": "זיכרון", + "memoryShort": "זיכרון", + "uptime": "זמן פעולה", + "ariaLabel": "ניטור מערכת", + "title": "מוניטור מערכת", + "version": "גרסה", + "connections": "חיבורים", + "circuitBreakers": "מפסקי מעגל", + "open": "{count} פתוח", + "memoryUsage": "שימוש בזיכרון" + }, + "never": "אף פעם", + "justNow": "עכשיו בדיוק", + "minutesAgo": "לפני {count} דקות", + "hoursAgo": "לפני {count}ש", + "tokens": "אסימונים", + "costs": "עלויות", + "autoRefresh": "רענון אוטומטי ({seconds}s)", + "toggleAutoRefresh": "הפעל/כבה רענון אוטומטי", + "activeRequests": "בקשות פעילות", + "totalRequests": "סך הבקשות", + "totalInputTokens": "סך כל הטוקנים הקלטיים", + "model": "מודל", + "provider": "ספק", + "requests": "בקשות", + "lastUsed": "שימוש אחרון", + "inputTokens": "אסימוני קלט", + "totalTokens": "סך כל הטוקנים", + "inputCost": "עלות קלט", + "outputCost": "עלות הפלט", + "noUsageData": "עדיין לא נרשמה שום שימוש. בצע כמה בקשות כדי לראות נתונים כאן.", + "account": "חשבון", + "accountLabel": "חשבון {id}", + "noAccountUsage": "לא נרשמה עדיין שימוש ספציפי לחשבון. בצע בקשות באמצעות חשבונות OAuth כדי לראות נתונים כאן." }, "auth": { "welcome": "ברוך הבא", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "איפוס דרך נתוני אפליקציה", + "resetViaAppDataDescription": "מחק את קובץ ההגדרות מתוך תיקיית נתוני האפליקציה כדי לאפס את הסיסמה שלך:", + "quitDesktopApp": "סגור את אפליקציית OmniRoute בשולחן העבודה לחלוטין", + "navigateToAppDataDirectory": "נווט לתיקיית נתוני האפליקציה:", + "checkSystemAppDataFolder": "(בדוק את תיקיית נתוני האפליקציה של המערכת שלך)", + "relaunchDesktopFreshSetup": "הפעל מחדש את אפליקציית OmniRoute לשולחן העבודה — היא תתחיל התקנה חדשה", + "alternativeSetPasswordTitle": "אפשרות: קבע סיסמה חדשה", + "alternativeSetPasswordDescription": "קבע סיסמה ראשונית חדשה דרך קובץ הסביבה של השרת:", + "openServerEnvFilePrefix": "פתח", + "relaunchDesktopApp": "שוב השקת את אפליקציית OmniRoute לדסקטופ", + "codexLinkInvalidOrExpired": "הקישור הזה אינו תקף או פג תוקף.", + "codexValidationServerError": "לא ניתן היה להגיע לשרת כדי לאמת את הקישור הזה.", + "codexSaveConnectionError": "לא ניתן לשמור את החיבור. הקישור עשוי להיות פג תוקף.", + "codexDeviceLoginDisabled": "כניסת קוד התקן מושבתת עבור חשבון OpenAI זה. אפשר אותה בהגדרות האבטחה של ChatGPT (או שאל את מנהל העבודה שלך).", + "codexAuthorizationTimedOut": "ההרשאה פגה. לחץ על התחל שוב כדי לנסות שוב.", + "authenticationCancelled": "האימות בוטל.", + "unexpectedAuthenticationError": "שגיאה בלתי צפויה במהלך האימות. אנא נסה שוב.", + "connectOpenAiCodexTitle": "חבר את OpenAI Codex", + "codexConnectDescription": "אשר חשבון ChatGPT כדי להשלים את הגדרת החיבור הזה.", + "validatingCodexLink": "מאמת קישור…", + "codexGenerateCodeDescription": "לחץ למטה כדי ליצור קוד חד-פעמי, ואז היכנס ל-OpenAI.", + "startCodexFlow": "התחל", + "requestingOpenAiCode": "מבקש קוד מ-OpenAI…", + "codexVerificationInstructions": "1. פתח את דף האימות של OpenAI ו-2. הזן את הקוד הזה. דף זה מתעדכן אוטומטית ברגע שתאשר.", + "yourCode": "הקוד שלך", + "openVerificationPage": "פתח את דף האימות", + "copyUrlShort": "העתק כתובת URL", + "savingConnection": "שומר חיבור…", + "codexConnected": "מחובר!", + "codexConnectionRegistered": "חשבון Codex נרשם. אתה יכול לסגור את הלשונית הזו.", + "tryAgain": "נסה שוב", + "traeAuthorizationSuccess": "אישור Trae ✓", + "traeAuthorizationFailed": "אישור Trae נכשל", + "closeAuthorizationWindow": "אתה יכול לסגור את החלון הזה.", + "returnToDashboard": "חזור ללוח המחוונים.", + "resetViaAppData": "איפוס דרך נתוני אפליקציה", + "deleteSettingsToReset": "מחק את קובץ ההגדרות מתוך תיקיית נתוני האפליקציה כדי לאפס את הסיסמה שלך:", + "quitAppCompletely": "סגור את אפליקציית OmniRoute במחשב לחלוטין", + "navigateToAppData": "נווט לתיקיית נתוני האפליקציה", + "checkAppDataFolder": "בדוק את תיקיית נתוני האפליקציה של המערכת שלך", + "deleteSettingsJson": "מחק", + "relaunchAppFresh": "שוב השקת את אפליקציית OmniRoute לשולחן העבודה — היא תתחיל התקנה חדשה", + "alternativeSetPassword": "אפשרות: קבע סיסמה חדשה", + "setNewPasswordViaEnv": "קבע סיסמה ראשונית חדשה דרך קובץ הסביבה של השרת:", + "openServerEnv": "פתח", + "inDataDirectory": "בתיקיית הנתונים", + "addOrUpdate": "הוסף או עדכן", + "deleteAndRelaunch": "מחק", + "settingsJson": "settings.json", + "fromDataDir": "מתיקיית הנתונים", + "relaunchApp": "שוב השקת את אפליקציית OmniRoute לשולחן העבודה" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "מוכן לפשט את תשתית הבינה המלאכותית שלך?", "ctaDescription": "הצטרפו למפתחים שמייעלים את שילובי הבינה המלאכותית שלהם עם OmniRoute. קוד פתוח וחינמי להפעלה.", "startFree": "התחל בחינם", - "readDocumentation": "קרא תיעוד" + "readDocumentation": "קרא תיעוד", + "company": "חברה", + "pricing": "תמחור", + "apiReference": "מדריך API", + "helpCenter": "מרכז עזרה", + "about": "אודות", + "blog": "בלוג", + "contact": "צור קשר", + "terms": "תנאים", + "privacy": "פרטיות", + "license": "רישיון", + "footerDescription": "הממשק המאוחד עבור תשתית AI מודרנית. מאובטח, נצפה וניתן להרחבה.", + "communityDiscussions": "דיונים קהילתיים" }, "docs": { "title": "תיעוד", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "רישום ונהל סוכנים באמצעות רישום ACP לתקשורת בין סוכנים ושיתוף כלים.", "protocolAcpStep1": "נווט אל לוח המחוונים ← סוכנים כדי להציג סוכני ACP רשומים.", "protocolAcpStep2": "רשום סוכנים חדשים עם יכולות ותצורת נקודות קצה.", - "protocolAcpStep3": "השתמש בכלי CLI כדי להגדיר ערוצי תקשורת של סוכן." + "protocolAcpStep3": "השתמש בכלי CLI כדי להגדיר ערוצי תקשורת של סוכן.", + "metadataTitleTemplate": "%s — מסמכי OmniRoute", + "metadataDefaultTitle": "תיעוד OmniRoute", + "metadataDescription": "תיעוד מקיף עבור שער OmniRoute AI — התקנה, API, דחיסה, פריסה ועוד.", + "layoutNavTitle": "מסמכי OmniRoute", + "layoutHomeLink": "דף הבית של המסמכים", + "layoutDashboardLink": "← חזרה ללוח הבקרה", + "homeTitle": "תיעוד OmniRoute", + "homeMetadataDescription": "כל מה שאתה צריך כדי לנתב, לדחוס ולהגדיל את ה-AI שלך — מדריכי התקנה, הפניה ל-API, דחיסה, פריסה ועוד.", + "homeTwitterDescription": "מסמכים מקיפים עבור שער OmniRoute AI", + "homeDescription": "כל מה שאתה צריך כדי לנתב, לדחוס ולהגדיל את ה-AI שלך", + "homeSearchHint": "לחץ על Ctrl K כדי לחפש במסמכים", + "featuredQuickStartTitle": "התחלה מהירה", + "featuredQuickStartDescription": "הפעל את OmniRoute תוך 3 דקות", + "featuredAutoComboTitle": "מדריך אוטו-קומבו", + "featuredAutoComboDescription": "תן לOmniRoute לבחור את ה-AI הטוב ביותר עבורך", + "featuredProvidersTitle": "מדריך ספקים", + "featuredProvidersDescription": "חבר ספקי AI בתוך דקות", + "nonTechUsersTitle": "למשתמשים לא טכניים", + "nonTechUsersSubtitle": "התחל במהירות — אין צורך ברקע טכני", + "techUsersTitle": "למשתמשי טכנולוגיה", + "techUsersSubtitle": "צלילה עמוקה לארכיטקטורה, APIs ופנימיות", + "apiExplorerMetadataTitle": "חוקר API — מסמכי OmniRoute", + "apiExplorerMetadataDescription": "חוקר API אינטראקטיבי — נסה את נקודות הקצה של OmniRoute בשידור חי עם תגובות בזמן אמת", + "apiExplorerTitle": "חוקר API", + "apiExplorerDescription": "נסה את נקודות הקצה של OmniRoute בשידור חי. בחר נקודת קצה, הגדר את הבקשה שלך, וראה את התגובה בזמן אמת.", + "apiExplorerSseStarted": "זרם SSE התחיל — בדוק את הטרמינל/כלי הפיתוח עבור פלט בזמן אמת.", + "apiExplorerError": "שגיאה: {message}", + "apiExplorerAuth": "אימות", + "apiExplorerResponseLabel": "תגובה", + "apiExplorerSelectEndpoint": "בחר נקודת קצה לחקר", + "apiExplorerChooseApi": "בחר API מהסרגל הצדדי כדי לראות פרטים ולנסות אותו בשידור חי", + "feedbackThanks": "תודה על המשוב שלך!", + "feedbackQuestion": "האם דף זה היה מועיל?", + "pageMetadataTitle": "{title} — מסמכי OmniRoute", + "pageMetadataDescription": "תיעוד OmniRoute: {title}", + "breadcrumb": "נתיב ניווט", + "apiReferenceTable": { + "parameters": "פרמטרים", + "name": "שם", + "type": "סוג", + "description": "תיאור", + "returns": "החזרות", + "typePrefix": "סוג:" + } }, "legal": { "privacyPolicy": "מדיניות פרטיות", @@ -9957,7 +10479,42 @@ "successMessage": "חשבון {providerName} שלך חובר.", "done": "בוצע", "error": "החיבור נכשל", - "tryAgain": "נסה שוב" + "tryAgain": "נסה שוב", + "errorSessionIncomplete": "הסשן של OAuth אינו שלם (חסר URI הפניה או מאמת קוד). התחל מחדש את החיבור ונסה שוב.", + "errorExchangeFailed": "החלפה נכשלה", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: האישורים המוגדרים כברירת מחדל של Google OAuth פועלים רק על localhost. לשימוש מרחוק, הגדר את האישורים שלך באמצעות משתני סביבה: ANTIGRAVITY_OAUTH_CLIENT_ID ו-ANTIGRAVITY_OAUTH_CLIENT_SECRET. ראה את סעיף ה-README 'OAuth על שרת מרוחק'.", + "errorSaveFailed": "שימור נכשל", + "errorAuthorizationFailed": "ההתחברות נכשלה", + "errorAuthorizationTimeout": "זמן פג תוקף של הרשאה", + "errorRequestFailed": "הבקשה נכשלה", + "errorCallbackServerFailed": "נכשל בהפעלת שרת הקריאות חזרה", + "errorBrowserUnavailable": "OAuth בדפדפן אינו זמין עבור ספק זה בסביבה הנוכחית. השתמש בשיטת האימות הנתמכת במקום זאת.", + "errorStateMismatch": "חוסר התאמה במצב OAuth. הפעל מחדש את החיבור ונסה שוב.", + "errorImportAccessToken": "נכשל בייבוא אסימון הגישה", + "errorSessionNotInitialized": "המושב של OAuth לא הוקם. הפעל מחדש את זרימת החיבור ונסה שוב.", + "errorNoAuthorizationCode": "לא נמצא קוד אישור. הדבק את כתובת ה-URL של ההחזרה או את קוד האימות.", + "tabDeviceCode": "קוד מכשיר", + "tabBrowserLogin": "כניסת דפדפן", + "tabImportAuthJson": "ייבוא auth.json", + "tabPasteApiKey": "הדבק את מפתח ה-API", + "windsurfPasteDescription": "ב- Windsurf / VS Code IDE, הרץ את הפקודה \"Windsurf: Provide Auth Token\" מתוך לוח הפקודות (או לחץ על כפתור Jupyter \"Get Windsurf Authentication Token\"), ואז העתק את הטוקן המוצג והדבק אותו למטה. פתיחת windsurf.com/show-auth-token ישירות מראה רק דף \"מופנה\" — ה- IDE חייב להתחיל את התהליך.", + "grokAuthJsonDescription": "הדבק את התוכן המלא של ~/.grok/auth.json (לא רק את שדה ה-JWT \"key\"). JWT בסיסי אין לו refresh_token, כך שהחיבור מתנתק לאחר פקיעת התוקף (#7610). העדף את מודל הייבוא המיועד auth.json כאשר הוא זמין.", + "devinDesktopPasteDescription": "הדבק מפתח API קיים של Devin מתוך סשן מאומת של Devin. זמינות ייצוא המפתח וצעדיו משתנים לפי גרסת Devin וחשבון.", + "devinPasteDescription": "ספק את ה-WINDSURF_API_KEY שלך (שהושג באמצעות `devin auth login`, או באמצעות הפקודה \"Windsurf: Provide Auth Token\" ב-Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "מפתח API / טוקן", + "saving": "שומר…", + "saveConnection": "שמור חיבור", + "gheDescription": "הזן את כתובת ה-URL הבסיסית של מופע GitHub Enterprise שלך (למשל https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "כתובת ה-URL של GitHub Enterprise", + "gheUrlRequired": "דרוש URL של GitHub Enterprise", + "gitlabDuoSetupTitle": "הגדרת OAuth Duo ב-GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth לא מוגדר. רישום אפליקציית OAuth ב-{applicationsUrl} עם URI הפניה {redirectUri} וסקופים \"{scopes}\", ואז הגדר את {clientIdEnv} (ואופציונלית את {clientSecretEnv}) והפעל מחדש.", + "gitlabDuoSetupDescription": "לאחר שהיישום נרשם והמשתנים הסביבתיים הוגדרו על מופע ה-OmniRoute הזה, לחץ על המשך כדי להתחיל את הכניסה באמצעות OAuth.", + "continue": "להמשיך" }, "cursorAuthModal": { "title": "חבר את הסמן IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "טען עוד", - "loadingMore": "טוען עוד..." + "loadingMore": "טוען עוד...", + "correlationId": "מזהה קורלציה", + "group": { + "showAllRows": "הצג את כל השורות", + "showLatestPerCorrelation": "הצג את האחרון לפי מזהה קורלציה", + "grouped": "ממויין" + }, + "running": "ריצה", + "interval": { + "decrease": "הקטן את המרווח", + "title": "מרווח רענון אוטומטי בשניות", + "increase": "הגדל את המרווח" + }, + "status": { + "inProgress": "בתהליך", + "recoveredByRetry": "שוחזר על ידי ניסיון חוזר", + "goToParent": "עבור לבקשה ההורית", + "healedTitle": "נכשל, שוחזר לאחר {count} ניסיונות", + "healed": "החלים", + "failedTitle": "כל {count} הניסיונות נכשלו", + "failed": "נכשל", + "pinnedTitle": "המודל נבחר באמצעות נעילת מושב מטמון ההקשר", + "pinned": "מוצמד" + }, + "attempts": "ניסיונות", + "detail": { + "collapse": "מזער {title}", + "expand": "הרחב {title}", + "copyTitle": "העתק {title}", + "copied": "הועתק!", + "copy": "העתק", + "autoscrollOn": "גלילה אוטומטית: מופעלת", + "autoscrollOff": "גלילה אוטומטית: כבוי", + "payload": { + "clientRawRequest": "בקשת גולש גולמית", + "clientRequest": "בקשת לקוח", + "openaiRequest": "בקשת OpenAI", + "providerRequest": "בקשת ספק", + "providerResponse": "תגובה של ספק", + "clientResponse": "תגובה מהלקוח", + "pipelineError": "שגיאת צינור" + }, + "payloadMissing": "פרטי העמסה מפורטים אינם זמינים יותר עבור רשומת הלוג הזו.", + "payloadCorrupt": "לא ניתן לנתח את הארטיפקט של העומס המפורט.", + "notAvailable": "לא זמין", + "semanticCache": "סמנטי (OmniRoute)", + "upstreamCache": "מעלה (ספק)", + "ariaLabel": "פרטי יומן הבקשה", + "completed": "הושלם", + "upstreamStatus": "מעלה: {status}", + "statusDiscrepancy": "OmniRoute החזירה {status} למרות שהספק החזיר {provider}", + "previousRequest": "בקשה קודמת", + "nextRequest": "בקשה הבאה", + "close": "סגור את מודל הפרטים", + "startedAt": "החל מ", + "endedAt": "נמשך עד", + "duration": "משך", + "model": "מודל", + "provider": "ספק", + "account": "חשבון", + "input": "קלט", + "totalIn": "סך הכל נכנס: {value}", + "cacheRead": "קריאת מטמון: {value}", + "cacheWrite": "כתיבת מטמון: {value}", + "compressed": "דחוס: {from} → {to} ({percent}% חסכון)", + "output": "פלט", + "totalOut": "סך הכל יוצא: {value}", + "reasoning": "הנמקה: {value}", + "requestedModel": "מודל שביקשת", + "requestProtocol": "פרוטוקול Req", + "cacheSource": "מקור מטמון", + "modelPinning": "הצמדת מודל", + "activeModelPinning": "פעיל — מודל שנבחר באמצעות נעילת סשן", + "rotated": "סובב: {initial} -> {final}", + "apiKey": "מפתח API", + "noApiKey": "אין מפתח API", + "combo": "קומבו", + "error": "שגיאה", + "unblockAll": "בטל חסימה של כולם", + "cleared": "נוקה", + "unblock": "בטל חסימה", + "relatedRequests": "בקשות קשורות ({count})", + "current": "נוכחי", + "detailStatus": "סטטוס מפורט", + "loadingDetails": "טוען פרטי בקשה...", + "providerEventStream": "זרם אירועי ספק", + "clientEventStream": "זרם אירועי לקוח", + "eventStream": "זרם אירועים", + "responsePayloadLegacy": "Payload תגובה (מורשת)", + "requestPayloadLegacy": "Payload בקשה (מורשת)", + "noPayload": "אין נתוני payload זמינים עבור רשומת יומן זו.", + "correlationId": "מזהה קורלציה", + "correlationIdValue": "מזהה קורלציה: {id}", + "detailedPayloadInfo": "אפשר לוגים מפורטים קודם אם אתה רוצה את תצוגת העומס של הלקוח/ספק בארבעה שלבים עבור בקשות חדשות." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} הושבת", "providerAdded": "{provider} נוסף", "add": "הוסף", - "manualApiKey": "השתמש במפתח API ידני" + "manualApiKey": "השתמש במפתח API ידני", + "createDahlTokenFailed": "נכשל ביצירת טוקן דל", + "providerProxy": "פרוקסי", + "providerProxyConfigureHint": "הגדר פרוקסי", + "providerProxyTitleConfigured": "פרוקסי מוגדר: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "מוגבל תנאי שימוש — עיין בתנאים", "caution": "זהירות — סעיפי שימוש אישי / פרוקסי", "ok": "מתירני בדרך כלל" - } + }, + "allProviders": "כל הספקים", + "noApiKeyRequired": "אין צורך במפתח API" }, "providerHealthAutopilot": { "title": "טייס אוטומטי לבריאות ספקים", @@ -12390,7 +13047,11 @@ "on": "פעיל", "off": "כבוי", "availableProviders": "ספקים זמינים ({count})", - "noProviderOverrides": "אין דריסות — כל הספקים הפעילים ישתתפו עם מודלי ברירת המחדל שלהם" + "noProviderOverrides": "אין דריסות — כל הספקים הפעילים ישתתפו עם מודלי ברירת המחדל שלהם", + "resetFailed": "איפוס נכשל", + "resetSuccess": "איפוס הגדרות לברירות מחדל", + "running": "ריצה...", + "testFailed": "המבחן נכשל" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) הוא חבר הקוד הפתוח המייסד של OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "הספק אינו תומך בראייה עבור בקשה זו של תמונה", "capabilityFilter.toolsMismatch": "הספק אינו תומך בקריאת כלים", "capabilityFilter.structuredOutputMismatch": "הספק אינו תומך בפלט מובנה", - "capabilityFilter.contextWindowMismatch": "הבקשה חורגת מגבול ההקשר של הספק" + "capabilityFilter.contextWindowMismatch": "הבקשה חורגת מגבול ההקשר של הספק", + "publicSystem": { + "notFound": { + "title": "העמוד לא נמצא", + "description": "העמוד שאתה מחפש אינו קיים או הועבר.", + "dashboardAriaLabel": "חזור ללוח הבקרה", + "statusAriaLabel": "פתח את דף מצב המערכת", + "systemStatus": "סטטוס מערכת" + }, + "error": { + "title": "שגיאת שרת פנימית", + "description": "משהו השתבש בעת עיבוד הבקשה שלך. הצוות שלנו קיבל הודעה ועובד על תיקון.", + "errorId": "שגיאת מזהה: {id}", + "detailsAriaLabel": "פרטי שגיאה", + "retryAriaLabel": "נסה לטעון את הדף שוב", + "tryAgain": "נסה שוב", + "dashboardAriaLabel": "חזור ללוח הבקרה", + "statusAriaLabel": "פתח את מצב המערכת", + "systemStatus": "סטטוס מערכת" + }, + "globalError": { + "title": "משהו השתבש", + "description": "אירעה שגיאה בלתי צפויה. זה נרשם וצוותנו יחקור את העניין.", + "detailsAriaLabel": "פרטי שגיאה", + "retryAriaLabel": "נסה לטעון את הדף שוב", + "tryAgain": "נסה שוב", + "statusAriaLabel": "פתח את מצב המערכת", + "systemStatus": "סטטוס מערכת" + }, + "offline": { + "title": "בעיה בחיבור", + "description": "OmniRoute לא מצליח להתחבר לרשת כרגע. בדוק את הגדרות האינטרנט, VPN או פרוקסי שלך.", + "connectionRestored": "החיבור שוחזר", + "offlineModeDetected": "מצב לא מקוון זוהה", + "retryConnection": "נסה שוב להתחבר", + "openStatusPage": "פתח את דף הסטטוס" + }, + "maintenance": { + "title": "תחזוקה מתוכננת", + "description": "חלק מהשירותים אינם זמינים זמנית בזמן שהתחזוקה מתבצעת. ניהול הכיוונים בדרך כלל נשאר באינטרנט, אך תכונות הניהול עשויות להיות פגומות.", + "suggestion1": "נסה שוב לאחר כמה דקות.", + "suggestion2": "בדוק את מדדי הבריאות הנוכחיים ואת מצב הספק לפני שתנסה שוב.", + "systemStatus": "צפה במצב המערכת", + "healthDashboard": "פתח לוח מחוונים לבריאות" + }, + "status": { + "title": "סטטוס מערכת", + "description": "תמונת מצב חיה לפעולות עבור שירותי הליבה של OmniRoute.", + "loadingHealth": "טוען מדדי בריאות...", + "failedToLoad": "לא הצלחנו לטעון את בריאות המערכת.", + "unableToReachHealth": "לא ניתן להגיע לנקודת הקצה של הבריאות. בדוק את החיבור ונסה שוב.", + "healthCheckFailed": "בדיקת בריאות נכשלה", + "openConnectivityHelp": "עזרה בפתיחת חיבוריות", + "maintenanceInfo": "מידע על תחזוקה", + "service": "שירות", + "unknown": "לא ידוע", + "notAvailable": "לא זמין", + "providersTracked": "ספקים שנעקבים", + "circuitBreakerState": "מצב מפסק מעגל ספק", + "lastUpdate": "עדכון אחרון: {timestamp}", + "uptimeMinutes": "{minutes}ד", + "uptimeHoursMinutes": "{hours}ש {minutes}ד" + }, + "statusPages": { + "400": { + "title": "בקשה רעה", + "description": "העמסה של הבקשה אינה תקפה או חסרה.", + "suggestion1": "בדוק את השדות הנדרשים ואת פורמט ה-payload לפני שתנסה שוב.", + "suggestion2": "אם אתה משתמש ב-API, אמת את סכמת ה-JSON באופן מקומי.", + "suggestion3": "אם זה ימשיך לקרות, פתח את הבקשה ב-Translator Playground כדי לבדוק את ה-payload.", + "primaryAction": "פתח תיעוד", + "secondaryAction": "פתח מתרגם" + }, + "401": { + "title": "לא מורשה", + "description": "נדרשת אימות כדי לגשת למשאב זה.", + "suggestion1": "התחבר שוב ונסה את הפעולה שוב.", + "suggestion2": "לקריאות API, אשר שהטוקן Bearer קיים ותקף.", + "suggestion3": "אם הטוקן שונה לאחרונה, עדכן את אישורי הלקוח שלך.", + "primaryAction": "עבור לכניסה", + "secondaryAction": "נהל מפתחות API" + }, + "403": { + "title": "אסור", + "description": "בקשתך הובנה, אך הגישה נדחתה לפי מדיניות.", + "suggestion1": "בדוק את כללי הרשימה המותרת/חסומה של כתובות IP בהגדרות.", + "suggestion2": "אמת את מדיניות המודל והתקציב שהוקצו למפתח ה-API שלך.", + "suggestion3": "בקש ממנהל להעניק את טווח ההרשאות הנדרש.", + "primaryAction": "עזרה בגישה פתוחה", + "secondaryAction": "פתח את הגדרות האבטחה" + }, + "408": { + "title": "זמן הבקשה פג", + "description": "השרת לא קיבל בקשה מלאה בזמן.", + "suggestion1": "נסה את הבקשה עם מטען קטן יותר.", + "suggestion2": "בדוק את יציבות הרשת שלך ואת השיהוי של ה-VPN/פרוקסי.", + "suggestion3": "לפעולות ארוכות, אפשר הזרמת נתונים או חלק את הבקשה.", + "primaryAction": "פתח מדריך נקודת קצה", + "secondaryAction": "בדוק את מצב הרשת" + }, + "429": { + "title": "יותר מדי בקשות", + "description": "הוגבלו מגבלות הדירוג עבור לקוח, מפתח או ספק זה.", + "suggestion1": "חכה להמתנה וחזור על הניסיון לאחר הפרק הזמן המומלץ.", + "suggestion2": "עבור לקומבינציה עם ספקי גיבוי.", + "suggestion3": "כוונן את פרופילי החוסן/הגבלת הקצב של הספק בהגדרות.", + "primaryAction": "פתח את הגדרות החוסן", + "secondaryAction": "פתח קומבואים" + }, + "500": { + "title": "שגיאת שרת פנימית", + "description": "אירעה שגיאה בלתי צפויה בצד השרת במהלך עיבוד הבקשה שלך.", + "suggestion1": "נסה שוב בעוד כמה שניות.", + "suggestion2": "בדוק את טלמטריית הבריאות ואת יומני השרת עבור מזהי בקשה מקושרים.", + "suggestion3": "אם הבעיה מתמשכת, דווח על הבעיה עם חותמת זמן והקשר הבקשה.", + "primaryAction": "פתח לוח מחוונים לבריאות", + "secondaryAction": "פתח יומנים" + }, + "502": { + "title": "שער רע", + "description": "ספק עליון או אינטגרציית שער החזירו תגובה לא חוקית.", + "suggestion1": "נסה שוב עם ספק אחר או מסלול קומבו פעיל.", + "suggestion2": "בדוק את האישורים של הספק וזמינות המודל.", + "suggestion3": "בדוק את פלט המתרגם אם המעבר בפורמט מעורב.", + "primaryAction": "פתח ספקים", + "secondaryAction": "פתח מתרגם" + }, + "503": { + "title": "שירות אינו זמין", + "description": "השירות אינו זמין זמנית עקב תחזוקה או תלויות ירודות.", + "suggestion1": "חכה רגע ונסה שוב.", + "suggestion2": "בדוק הודעות תחזוקה ומצב מערכת.", + "suggestion3": "השתמש בספקי גיבוי אם הזרימה שלך רגישה לעיכובים.", + "primaryAction": "פרטי תחזוקה", + "secondaryAction": "סטטוס מערכת" + } + } + }, + "kiroAuthModal": { + "title": "חבר את {providerLabel}", + "chooseMethod": "בחר את שיטת האימות שלך:", + "builderId": "AWS Builder ID", + "builderDescription": "מומלץ לרוב המשתמשים. התחבר עם חשבון ה-AWS הקשור ל-{providerLabel}.", + "organization": "הארגון שלך (AWS IAM Identity Center)", + "organizationDescription": "השתמש ב-SSO של החברה שלך בכתובת ההתחלה (דוגמה: {url}).", + "googleAccount": "חשבון Google", + "googleDescription": "התחבר עם חשבון Google שלך.", + "githubAccount": "חשבון GitHub", + "githubDescription": "התחבר עם חשבון ה-GitHub שלך.", + "importToken": "ייבוא טוקן", + "importDescription": "הדבק טוקן רענון שהוצא מ-{providerLabel}.", + "apiKey": "מפתח API", + "apiKeyDescription": "הדבק מפתח API ארוך טווח של {providerLabel} / CodeWhisperer. הוא מאוחסן כאסימון נשיאה ללא אסימון רענון; גילוי פרופיל הוא במאמץ הטוב ביותר.", + "idcStartUrl": "כתובת ה-URL של IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "כתובת ה-URL של מרכז הזהויות AWS IAM של הארגון שלך", + "awsRegion": "אזור AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "אזור AWS עבור מרכז הזהות שלך (ברירת מחדל: us-east-1)", + "continue": "להמשיך", + "back": "חזור", + "autoDetecting": "זיהוי אוטומטי של טוקן...", + "readingCredentials": "קורא את האישורים של {providerLabel} ממטמון AWS SSO", + "tokenNotDetected": "האסימון {providerLabel} לא זוהה אוטומטית. אנא הדבק את אסימון הרענון שלך ידנית.", + "refreshToken": "רענן טוקן", + "tokenPlaceholder": "האסימון יתמלא אוטומטית...", + "importing": "מייבא...", + "apiKeyPlaceholder": "הדבק את מפתח ה-API של {providerLabel} שלך...", + "apiKeyStoredDescription": "מאוחסן מוצפן כקרדנציה נושאת ארוכת טווח. אין זרימת רענון.", + "apiKeyRegionDescription": "אזור AWS עבור המפתח (ברירת מחדל: us-east-1)", + "validating": "מאמת...", + "validateAndSaveApiKey": "אמת ושמור את מפתח ה-API", + "errorAutoDetect": "לא ניתן לזהות אוטומטית את הטוקן", + "errorAutoDetectFailed": "נכשל בזיהוי אוטומטי של טוקן", + "errorRefreshTokenRequired": "אנא הזן טוקן רענון", + "errorImportFailed": "ייבוא נכשל", + "errorApiKeyRequired": "אנא הזן מפתח API של Kiro", + "errorApiKeyImportFailed": "ייבוא מפתח ה-API נכשל", + "errorIdcStartUrlRequired": "אנא הזן את כתובת ה-URL להתחלת IDC שלך" + }, + "kiroSocialOAuthModal": { + "title": "חבר את {providerLabel} דרך {providerName}", + "errorStartAuthorization": "כישלון בהתחלת האישור", + "errorAuthorizationExpired": "ההרשאה פגה. התחל את תהליך הכניסה שוב.", + "errorAuthorizationFailed": "אישור נכשל", + "initializing": "מאתחל...", + "settingUp": "הגדרת אימות {providerName}", + "openIncognito": "פתח קישור זה בחלון אינקוגניטו", + "incognitoDescription": "השתמש בחלון אינקוגניטו/פרטי כדי להימנע מעימותי סשן עם חשבונות קיימים.", + "copyLink": "העתק קישור", + "verificationCode": "קוד אימות", + "waiting": "ממתין לאישור...", + "cancel": "ביטול", + "successTitle": "מחובר בהצלחה!", + "successMessage": "החשבון שלך ב-{providerLabel} דרך {providerName} חובר.", + "done": "בוצע", + "errorTitle": "חיבור נכשל", + "close": "סגור" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "ההתחברות נכשלה", + "errorPopupBlocked": "חלון קופץ חסום — אפשר חלונות קופצים לאתר הזה, או הדבק את הטוקן ידנית למטה.", + "errorPopupClosed": "חלון האישור נסגר לפני שהושלם.", + "errorAccessTokenRequired": "דרוש אסימון גישה.", + "errorImportFailed": "ייבוא נכשל", + "title": "חבר את Trae SOLO", + "authorizeDescription": "אשר דרך trae.ai בחלון קופץ. החלון הקופץ יסגור את עצמו ברגע שהאסימון ייובא.", + "authorizeImportant": "חשוב: עליך להיות מחובר לtrae.ai בדפדפן זה קודם. דף ההרשאה מאשר רק מושב קיים — הוא לא יכול לחבר אותך. אם אתה רואה \"התחברות נכשלה\", לחץ על \"פתח solo.trae.ai\", התחבר, ואז חזור לכאן.", + "waitingForAuthorization": "ממתין ל trae.ai…", + "authorizeWithBrowser": "אשר עם דפדפן", + "openSoloTrae": "פתח solo.trae.ai", + "orPasteManually": "או להדביק טוקן ידנית", + "manualInstructions": "התחבר לsolo.trae.ai, פתח את DevTools → Network, שלח כל הודעת צ'אט, והעתק את ה-JWT מהכותרת Authorization: Cloud-IDE-JWT {tokenPlaceholder}. חיי ה-JWT הם ~14 ימים. שדות זהות אופציונליים מגיעים מcommon_params באותו גוף בקשה.", + "accessTokenLabel": "אסימון גישה (Cloud-IDE-JWT)", + "webId": "מזהה רשת", + "optional": "אופציונלי", + "bizUserId": "מזהה משתמש עסקי", + "userUniqueId": "מזהה ייחודי של משתמש", + "scope": "טווח", + "tenant": "שוכר", + "region": "אזור", + "importing": "מייבא…", + "importToken": "ייבוא טוקן", + "cancel": "ביטול" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "מפיץ...", + "complete": "מלא", + "defaultLabel": "הפץ פרוקסים" + } + }, + "providerTest": { + "dialogLabel": "בדוק {provider}", + "deprecated": "מופסל", + "risk": "סיכון", + "close": "סגור", + "model": "מודל", + "key": "מפתח", + "defaultKey": "ברירת מחדל", + "clearConversation": "נקה שיחה", + "clear": "נקה", + "tabs": { + "test": "מבחן", + "logs": "יומנים" + }, + "loadingLogs": "טוען יומנים…", + "failedToLoadLogs": "כישלון בטעינת יומנים", + "noLogsYet": "אין עדיין יומנים", + "noLogsDescription": "שלח הודעת בדיקה מהכרטיסייה בדיקה — יומנים עבור ספק זה יופיעו כאן.", + "openFullLogs": "פתח את עמוד היומנים המלא", + "live": "חי", + "tailingLast": "מזרים את האחרונים {count}", + "refreshNow": "רענן עכשיו", + "refresh": "רענן", + "unknownRequester": "מבקש לא ידוע", + "fields": { + "timestamp": "חותמת זמן", + "status": "סטטוס", + "duration": "משך", + "model": "מודל", + "requestedModel": "מודל שביקשת", + "provider": "ספק", + "requester": "מבקש", + "tokens": "אסימונים" + } + }, + "proxyLog": { + "detailAriaLabel": "פרטי יומן פרוקסי", + "event": "אירוע פרוקסי", + "close": "סגור את מודל פרטי הפרוקסי", + "time": "זמן", + "latency": "שהות", + "clientIp": "כתובת IP של הלקוח", + "proxy": "פרוקסי", + "direct": "ישיר", + "type": "סוג", + "level": "רמה", + "provider": "ספק", + "tlsFingerprint": "טביעת אצבע TLS", + "directNative": "ישיר", + "targetUrl": "כתובת URL יעד", + "error": "שגיאה", + "configuration": "הגדרת פרוקסי" + }, + "requestTimeline": { + "title": "ציר זמן הבקשה", + "modes": { + "follow": "עקוב", + "followDescription": "הציר גולל שמאלה, קו NOW נשאר ב-75%", + "now": "עכשיו", + "nowDescription": "קפיצה לזמן הנוכחי, שורת NOW מת-reset למרכז", + "pan": "פאן", + "panDescription": "גרור כדי לחקור, הרקע קפוא" + }, + "reset": "איפוס", + "started": "התחלתי", + "ended": "הסתיים", + "duration": "משך", + "status": "סטטוס", + "provider": "ספק", + "tokens": "אסימונים", + "active": "פעיל", + "other": "אחר", + "tenMinutes": "10דק", + "hour": "שעה", + "day": "יום", + "unknownModel": "לא ידוע", + "pending": "ממתין" + }, + "metadata": { + "compressionTitle": "דחיסה", + "compressionDescription": "הגדר את הגדרות דחיסת ההקשר כדי להפחית את השימוש בטוקנים ועלויות.", + "relayTitle": "OmniRoute — פרוקסי ריליי", + "relayDescription": "נקודות קצה של פרוקסי רליי ללא שרת עבור התשתית של ה-AI שלך", + "trafficInspectorTitle": "מפקח תנועה — OmniRoute", + "trafficInspectorDescription": "ניטור קריאות LLM + ניפוי שגיאות בתעבורת HTTPS של כל יישום" + }, + "conductor": { + "title": "קונקטור — צבא סוכני CLI", + "subtitle": "OmniConductor מרכז: ראנרים, תור משימות ומועצות, חי", + "runners": "רצים", + "tasks": "משימות", + "colName": "שם", + "colClis": "שורות פקודה", + "colStatus": "סטטוס", + "colTask": "משימה", + "colMode": "מצב", + "colRunner": "רץ", + "colSummary": "סיכום", + "online": "באינטרנט", + "offline": "לא מחובר", + "draining": "מנקז", + "hubOffline": "המרכז של הקונקטור לא מחובר או לא מוגדר (CONDUCTOR_HUB_URL) — מציג כלום במקום נתונים מיושנים.", + "noRunners": "אין רוכבים רשומים", + "noTasks": "אין משימות עדיין", + "detailTitle": "פרטי משימה", + "prompt": "הנחיה", + "branch": "סניף", + "fetchHint": "שחזר את התוצאה עם: git fetch origin {branch}", + "council": "מועצה", + "candidates": "מועמדים", + "cancel": "בטל משימה", + "cancelConfirmTitle": "לבטל את המשימה הזו?", + "cancelConfirmMessage": "המרכז יפסיק את הביצוע על הרץ. זה לא ניתן לביטול.", + "cancelFailed": "המרכז סירב לבטל את ההזמנה", + "close": "סגור", + "error": "שגיאה", + "faroTitle": "פארו — דובר הצי", + "faroSubtitle": "שיחה וקול, מעוגנים באירועי צי אמיתיים. פקודות הרסניות תמיד מבקשות אישור.", + "faroEmpty": "שאל על הצי — לדוגמה \"איך הצי?\"", + "faroPending": "פארו מבקש אישור", + "faroPlaceholder": "דבר עם פארו…", + "faroSend": "שלח", + "faroOffline": "פארו (דובר) לא מחובר", + "yes": "כן", + "no": "לא", + "pushToTalk": "לחץ כדי לדבר", + "speakAnswers": "דבר תשובות", + "voiceModels": "מודלים קוליים (ספק/מודל של OmniRoute זה)", + "voiceIdle": "לדבר", + "voiceListening": "מקשיב…", + "voiceThinking": "חושב…", + "voiceSpeaking": "מדבר…", + "sttFailed": "ההקלטה נכשלה (בדוק את מודל/ספק ה-STT)", + "ttsFailed": "כישלון בסינתזת דיבור (בדוק את מודל/ספק ה-TTS)", + "micDenied": "המיקרופון אינו זמין או שהרשאה נדחתה" + }, + "cliproxyProviderExposure": { + "title": "חשיפת ספק", + "description": "חשוף את מודלי CLIProxyAPI כמטרה לנתיב תחת הקידומת cliproxyapi/ .", + "label": "חשוף כ cliproxyapi/...", + "hint": "כאשר זה מופעל, מודלים שהתגלו מופיעים בבחירות ספקים ברחבי OmniRoute.", + "updateFailed": "נכשל בעדכון (HTTP {status})", + "networkError": "שגיאת רשת — לא ניתן לעדכן את הגדרת החשיפה של הספק" + } } - diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index a0e9dc236e..da9a7e5db2 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -172,6 +172,18 @@ "unselectAll": "चयन हटाएँ", "visibleModels": "दृश्यमान", "selectAllConfirm": "इस कॉम्बो में {count} मॉडल जोड़ें?", + "testSelectedProviders": "परीक्षण प्रदाता", + "testingSelectedProviders": "परीक्षण {done}/{total}...", + "noProvidersSelectedToTest": "नीचे पहले कम से कम एक प्रदाता की जांच करें", + "noModelsToTestForProviders": "चुने गए प्रदाताओं के लिए परीक्षण करने के लिए कोई मॉडल नहीं है", + "testSelectedProvidersResults": "{ok} में {total} मॉडल काम कर रहे हैं", + "selectWorkingModels": "काम जोड़ें", + "unselectWorkingModels": "काम कर रहा है अनचुनें", + "noWorkingModelsToSelect": "कोई कार्यशील मॉडल जोड़ने के लिए शेष नहीं है", + "providerTestHint": "टिप: एक प्रदाता की जांच करें → परीक्षण → कार्यशील जोड़ें। फिर से क्लिक करें ताकि चयन हटा सकें।", + "selectAllProviders": "सभी प्रदाताओं की जांच करें", + "clearProviderSelection": "प्रदाताओं को अनचेक करें", + "providersSelectedCount": "{count} प्रदाताओं की जांच की गई", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "आकार", + "toggleNoAuthProvider": "नो-ऑथ प्रदाता टॉगल करें", + "loadingModels": "मॉडल लोड हो रहे हैं…", + "selectAModel": "एक मॉडल चुनें", + "degraded": "अवमूल्यित", + "zeroConfigBannerTitle": "शून्य-कॉन्फ़िगरेशन मोड में चल रहा है", + "zeroConfigBannerBody": "OmniRoute ने पहले लॉन्च पर स्वचालित रूप से सुरक्षित एन्क्रिप्शन कुंजियाँ उत्पन्न कीं। इन्हें {dataDir} में संग्रहीत किया गया है। कोई कार्रवाई की आवश्यकता नहीं है — आपका डेटा एन्क्रिप्टेड और सुरक्षित है। कस्टम कुंजियों का उपयोग करने के लिए, उस फ़ाइल में JWT_SECRET और STORAGE_ENCRYPTION_KEY जोड़ें।", + "batchRelativeTimeIn": "में {value}", + "batchRelativeTimeAgo": "{value} पहले", + "batchDetailsTitle": "बैच विवरण", + "batchProgress": "प्रगति", + "batchCompletedCount": "{count} पूर्ण हुआ", + "batchFailedCount": "{count} विफल", + "batchPendingCount": "{count} लंबित", + "batchTimeline": "कालक्रम", + "batchTimelineInProgress": "प्रगति में", + "batchTimelineFinalizing": "अंतिम रूप देना", + "batchTimelineCompleted": "पूर्ण हुआ", + "batchTimelineFailed": "विफल", + "batchTimelineExpires": "समाप्त होता है", + "batchTimelineExpired": "समाप्त हो गया", + "batchTimelineCancelling": "रद्द करना", + "batchTimelineCancelled": "रद्द कर दिया गया", + "batchTokenUsage": "टोकन उपयोग", + "batchMetadata": "मेटाडेटा", + "batchFileContents": "फाइल सामग्री", + "batchFileUsedByCount": "{count, plural, one {# बैच} other {# बैचों}}", + "batchFilePreview": "पूर्वावलोकन", + "batchFilePreviewTruncated": "पहले {shown} पंक्तियाँ दिखा रहे हैं ({total} कुल पंक्तियाँ)", + "batchFileDownloadFull": "पूर्ण फ़ाइल डाउनलोड करें" }, "disabled": "अक्षम", "featureFlagOmnirouteEmergencyFallbackDescription": "बजट समाप्त हो चुके अनुरोधों को आपातकालीन निःशुल्क फ़ॉलबैक प्रदाता/मॉडल पर रूट करें।", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "विभाजक", "discovery": "डिस्कवरी", "discoverySubtitle": "मुफ़्त एक्सेस के लिए प्रोवाइडर्स को स्कैन करें", + "conductor": "संवहनकर्ता", + "conductorSubtitle": "CLI-एजेंट बेड़ा", "resilienceConnections": "कनेक्शन रेज़िलिएंस", "resilienceConnectionsSubtitle": "कूलडाउन, ब्रेकर, लॉकआउट स्थिति", "settingsModalityBridge": "मोडालिटी ब्रिज", - "settingsModalityBridgeSubtitle": "छवि/ऑडियो → केवल पाठ मॉडल के लिए पाठ बैकअप" + "settingsModalityBridgeSubtitle": "छवि/ऑडियो → केवल पाठ मॉडल के लिए पाठ बैकअप", + "commandPalette": { + "title": "कमांड पैलेट", + "searchPlaceholder": "पृष्ठ, सेटिंग्स, उपकरणों की खोज करें...", + "clearSearch": "खोज साफ करें", + "noResults": "कोई परिणाम नहीं", + "navigate": "नेविगेट", + "open": "खोलें", + "close": "बंद करें" + }, + "noResults": "कोई परिणाम नहीं" }, "webhooks": { "title": "वेबहुक", @@ -1477,7 +1531,11 @@ "settings.update_failed": "सेटिंग्स अपडेट विफल रहा", "sync.token.created": "सिंक टोकन बनाया गया", "sync.token.revoked": "सिंक टोकन निरस्त किया गया" - } + }, + "mcpMetricCalls24h": "कॉल (24घंटे)", + "mcpMetricSuccessRate": "सफलता दर", + "mcpMetricAvgDuration": "औसत अवधि", + "mcpMetricTopTool": "शीर्ष उपकरण" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "पृष्ठ स्वचालित रूप से पुनः लोड हो रहा है...", - "providerTopology": "प्रदाता टोपोलॉजी" + "providerTopology": "प्रदाता टोपोलॉजी", + "downloadDmg": "DMG डाउनलोड करें (macOS)", + "downloadDmgDescription": "OmniRoute डेस्कटॉप ऐप का एक नया संस्करण उपलब्ध है। कृपया अपडेट करने के लिए macOS DMG इंस्टॉलर डाउनलोड और इंस्टॉल करें (वर्तमान: v{version})।", + "downloadExe": "EXE डाउनलोड करें (Windows)", + "downloadExeDescription": "OmniRoute डेस्कटॉप ऐप का एक नया संस्करण उपलब्ध है। कृपया अपडेट करने के लिए Windows EXE इंस्टॉलर डाउनलोड और इंस्टॉल करें (वर्तमान: v{version})।", + "downloadAppImage": "AppImage डाउनलोड करें (Linux)", + "downloadAppImageDescription": "OmniRoute डेस्कटॉप ऐप का एक नया संस्करण उपलब्ध है। कृपया अपडेट करने के लिए Linux AppImage पैकेज डाउनलोड करें (वर्तमान: v{version})।", + "downloadUpdate": "अपडेट डाउनलोड करें", + "downloadUpdateDescription": "OmniRoute डेस्कटॉप ऐप का एक नया संस्करण उपलब्ध है। कृपया अपने सिस्टम के लिए संबंधित ऐप प्रारूप डाउनलोड करें ताकि अपडेट किया जा सके (वर्तमान: v{version})।", + "updateQueued": "v{version} के लिए अपडेट कतारबद्ध किया गया।", + "updateDockerRebuilding": "Docker छवि पृष्ठभूमि में पुनर्निर्माण हो रही है।", + "updateWaitingRestart": "नई संस्करण के साथ OmniRoute के पुनः आरंभ होने की प्रतीक्षा कर रहे हैं।", + "updateInstalling": "v{version} स्थापित कर रहा है।", + "updateRunning": "OmniRoute अब v{version} चला रहा है।", + "updateCompleted": "OmniRoute को v{version} में अपडेट किया गया।", + "updateDockerStillRebuilding": "Docker छवि अभी भी v{version} के लिए पुनर्निर्माण कर रही है।", + "updateInstallingBackground": "पृष्ठभूमि में v{version} स्थापित किया जा रहा है।", + "updateWaitingVersion": "OmniRoute v{version} पर वापस आने का इंतज़ार कर रहा है।", + "updateDockerStillInProgress": "Docker पुनर्निर्माण अभी भी प्रगति में है।", + "updateRestarting": "सेवा पुनः प्रारंभ हो रहा है। OmniRoute के ऑनलाइन आने का इंतज़ार कर रहे हैं...", + "updateTimeout": "अपडेट शुरू हुआ, लेकिन v{version} टाइमआउट से पहले उपलब्ध नहीं हुआ। पृष्ठ को रिफ्रेश करें या सर्वर लॉग की जांच करें।", + "updateTimedOut": "v{version} पर अपडेट समय समाप्त हो गया।", + "updateStartFailed": "अपडेट शुरू करने में विफल।", + "noResponseStream": "कोई प्रतिक्रिया स्ट्रीम प्राप्त नहीं हुई।", + "updateComplete": "अपडेट पूरा!", + "updateFailed": "अपडेट विफल हो गया।", + "updateNetworkError": "नेटवर्क त्रुटि — अपडेट के दौरान कनेक्शन खो गया।", + "stepInstallPackage": "पैकेज स्थापित करें", + "stepRebuildNativeModules": "नेटिव मॉड्यूल्स को फिर से बनाएं", + "stepRestartService": "सेवा पुनः प्रारंभ करें", + "stepComplete": "पूर्ण करें", + "stepError": "त्रुटि", + "updateCompleteTitle": "अपडेट पूरा हुआ!", + "updateFailedTitle": "अद्यतन विफल हुआ", + "updatingTitle": "OmniRoute को अपडेट कर रहे हैं...", + "reloadNotice": "पृष्ठ कुछ सेकंड में स्वचालित रूप से पुनः लोड होगा।", + "retryNotice": "कृपया फिर से प्रयास करें या CLI के माध्यम से मैन्युअल रूप से अपडेट करें।", + "restartNotice": "इस पृष्ठ को बंद न करें। सिस्टम स्वचालित रूप से पुनः आरंभ होगा।", + "reloadNow": "अब पुनः लोड करें", + "closeUpdate": "बंद करें", + "retryUpdate": "पुनः प्रयास करें", + "updateAvailableTitle": "अपडेट उपलब्ध: v{version}{desktop}", + "desktopAppLabel": "(डेस्कटॉप ऐप)", + "checkingForUpdates": "अपडेट के लिए जाँच कर रहा है...", + "versionAvailableForDownload": "संस्करण v{version} डाउनलोड के लिए उपलब्ध है।", + "downloadingUpdate": "अपडेट डाउनलोड हो रहा है... {percent}% पूरा।", + "updateDownloaded": "डाउनलोड सफलतापूर्वक अपडेट हो गया! लागू करने के लिए पुनः प्रारंभ करें और इंस्टॉल पर क्लिक करें।", + "autoUpdateFailed": "स्वतः अपडेट विफल: {reason}.", + "unknownUpdateError": "अज्ञात त्रुटि", + "versionAvailableDesktop": "डेस्कटॉप ऐप के लिए संस्करण v{version} उपलब्ध है।", + "manualUpdateRequired": "इस स्थापना प्रकार के लिए मैनुअल अपडेट आवश्यक है।", + "restartAndInstall": "पुनः प्रारंभ करें और स्थापित करें", + "checkForUpdate": "अपडेट के लिए जाँच करें", + "manualUpdate": "मैनुअल अपडेट", + "directDownloadHint": "या संबंधित इंस्टॉलर प्रारूप को सीधे डाउनलोड करें:", + "releaseNotes": "रिलीज़ नोट्स", + "readMore": "और पढ़ें", + "noAuthLabel": "कोई प्रमाणीकरण नहीं" }, "analytics": { "title": "विश्लेषिकी", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "इस अनुरोध के आसपास के सहेजे गए कॉल लॉग से अनुमानित", "routeRecommendations": "सिफारिशें", "routeLimitations": "सीमाएं", - "routeNoKnownLimitations": "इस स्पष्टीकरण के लिए कोई ज्ञात सीमाएं नहीं हैं।" + "routeNoKnownLimitations": "इस स्पष्टीकरण के लिए कोई ज्ञात सीमाएं नहीं हैं।", + "searchAnalyticsLoading": "खोज विश्लेषण लोड हो रहा है…", + "searchAnalyticsNoData": "अभी तक कोई खोज डेटा उपलब्ध नहीं है।", + "searchAnalyticsNoDataDescription": "पहली खोज के बाद खोज अनुरोध यहाँ दिखाई देंगे /v1/search के माध्यम से।", + "searchAnalyticsToday": "{count} आज", + "searchAnalyticsCachedRequests": "{count} कैश की गई अनुरोध", + "searchAnalyticsApiCosts": "खोज API लागत", + "searchAnalyticsErrors": "{count} त्रुटियाँ", + "searchAnalyticsNoErrors": "कोई त्रुटियाँ नहीं", + "searchAnalyticsProviderBreakdown": "प्रदाता विवरण", + "searchAnalyticsQueries": "क्वेरीज़", + "searchAnalyticsEmptyDescription": "POST /v1/search का उपयोग करके वेब खोजों को रूट करना शुरू करें।", + "searchAnalyticsFreeTier": "मुफ्त स्तर उपलब्ध: Serper (2,500/माह), Brave (2,000/माह), Exa (1,000/माह), Tavily (1,000/माह) — कुल 6,500+ मुफ्त खोजें/माह स्वचालित फेलओवर के साथ।", + "autoRoutingNoDataAvailable": "कोई ऑटो-रूटिंग एनालिटिक्स उपलब्ध नहीं हैं। मैट्रिक्स देखने के लिए ऑटो/ प्रीफिक्स का उपयोग करके अनुरोध करें।", + "defaultVariantLabel": "डिफ़ॉल्ट", + "freeTierAvailable": "फ्री टियर उपलब्ध है" }, "apiManager": { "title": "एपीआई कुंजी", @@ -2348,7 +2478,9 @@ "providerCount": "{count} प्रदाता", "imageToTextBridgeAvailable": "Modality Bridge अब टेक्स्ट-केवल मॉडलों के लिए छवियों का वर्णन कर सकता है। इनलाइन प्लेग्राउंड तब उपलब्ध होगा जब /api/v1/images/understanding लागू किया जाएगा।", "imageToTextBridgeCta": "Modality Bridge सेटिंग्स में Image→Text ब्रिज़ कॉन्फ़िगर करें", - "sttBridgeCta": "Modality Bridge सेटिंग्स में Speech→Text ब्रिज कॉन्फ़िगर करें" + "sttBridgeCta": "Modality Bridge सेटिंग्स में Speech→Text ब्रिज कॉन्फ़िगर करें", + "existingConnection": "मौजूदा कनेक्शन", + "openrouterSttDescription": "OpenRouter स्पीच-टू-टेक्स्ट मॉडल आपके कॉन्फ़िगर किए गए OpenRouter कनेक्शन का उपयोग करते हैं। कोई अलग क्रेडेंशियल की आवश्यकता नहीं है।" }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "इसमें चिपकाएँ:", "copilotReloadInstruction": "फिर VS Code को पुनः लोड करें और इनपुट प्रॉम्प्ट में API कुंजी सेट करें।", "wireApiChatCompletions": "चैट पूर्णताएँ (/चैट/पूर्णियाँ)", - "wireApiResponses": "प्रतिक्रियाएँ एपीआई (/प्रतिक्रियाएँ)" + "wireApiResponses": "प्रतिक्रियाएँ एपीआई (/प्रतिक्रियाएँ)", + "cliproxyapiActionFailed": "क्रिया विफल हुई", + "cliproxyapiActionSucceeded": "कार्य सफल हुआ", + "cliproxyapiCheckUpdates": "अपडेट्स की जांच करें", + "cliproxyapiDescription": "उपधारा प्रॉक्सी फॉलबैक (Go-आधारित OAuth)", + "cliproxyapiHealth": "स्वास्थ्य", + "cliproxyapiHealthy": "स्वस्थ", + "cliproxyapiInstall": "स्थापित करें", + "cliproxyapiNotInstalledValue": "स्थापित नहीं किया गया", + "cliproxyapiPort": "पोर्ट", + "cliproxyapiRequestFailed": "अनुरोध विफल हुआ", + "cliproxyapiRestart": "पुनः प्रारंभ करें", + "cliproxyapiStart": "शुरू करें", + "cliproxyapiStatusError": "त्रुटि", + "cliproxyapiStatusInstalled": "स्थापित किया गया", + "cliproxyapiStatusNotInstalled": "स्थापित नहीं हुआ", + "cliproxyapiStatusRunning": "चल रहा है", + "cliproxyapiStatusStopped": "रुका हुआ", + "cliproxyapiStop": "रोकें", + "cliproxyapiUnhealthy": "अस्वस्थ", + "cliproxyapiUnknown": "अज्ञात", + "cliproxyapiUpdate": "अपडेट करें", + "cliproxyapiUpdateAvailable": "अपडेट उपलब्ध: v{current} → v{latest}", + "cliproxyapiVersion": "संस्करण" }, "combos": { "title": "संयोजन", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "केवल कोटा समाप्ति पर आगे बढ़ें", + "fallbackOnlyOnQuotaExhaustionShort": "कोटा-केवल बैकअप", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "मोड पैक और वेटिंग यहीं रहते हैं; ब्रेकर रनटाइम स्थिति Health पेज पर रहती है।", "emailVisibilityHint": "यहाँ खाता ईमेल वैश्विक गोपनीयता टॉगल का पालन करते हैं।", "emailVisibilityTooltip": "कॉम्बो, प्रदाताओं और कोटा स्क्रीन पर वैश्विक रूप से खाता ईमेल को दिखाने या छिपाने के लिए आंख के आइकन का उपयोग करें।", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "चरण दर चरण (प्रदाता → मॉडल)", + "builderModeGlobal": "वैश्विक मॉडल खोज (कस्टम कॉम्बो)", + "builderGlobalSearchPlaceholder": "सभी प्रदाताओं (जैसे opus, sonnet, deepseek, kimi, qwen) में मॉडल खोजें...", + "builderGlobalAddAll": "सभी जोड़ें", + "builderGlobalShortcuts": "शॉर्टकट्स:", + "builderGlobalNoResults": "\"{query}\" के लिए कोई मॉडल नहीं मिला।", + "builderGlobalProviderLabel": "प्रदाता:", + "builderGlobalAccountCount": "{count, plural, one {# खाता} other {# खाते}}", + "builderGlobalAdded": "जोड़ा गया", + "builderGlobalAdd": "जोड़ें", "manualModel": "मैनुअल मॉडल", "manualModelInvalid": "मॉडल को provider/model के रूप में दर्ज करें।", "manualModelUnknownProvider": "अज्ञात प्रदाता प्रीफिक्स।", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "सत्र उपलब्धता", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "स्टिकिनेस बंद", "kimiPresetTitle": "Kimi Coding प्रीसेट", "kimiPresetDescription": "मुख्य मॉडल के रूप में Kimi K3 (Moonshot API), कॉन्फ़िगर होने पर आपके Kimi Code कनेक्शन (kimi-coding, kimi-web) पर स्वचालित फ़ॉलबैक के साथ।", - "kimiPresetCta": "प्रीसेट जोड़ें" + "kimiPresetCta": "प्रीसेट जोड़ें", + "intelligentComboCount": "{count, plural, one {# बुद्धिमान संयोजन} other {# बुद्धिमान संयोजन}}", + "providersInScope": "{count, plural, one {# प्रदाता दायरे में} other {# प्रदाता दायरे में}}", + "savingModePack": "{pack} को सहेजना…", + "errorTitle": "कॉम्बोज़ लोड करने में विफल रहा", + "errorDescription": "हम अभी कॉम्बो डेटा लोड नहीं कर सके। कृपया अपनी कनेक्शन की जांच करें और फिर से प्रयास करें।", + "errorId": "त्रुटि आईडी: {id}", + "errorRetry": "फिर से प्रयास करें", + "comboLabel": "कॉम्बो" }, "costs": { "title": "लागत", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "यूज़रनेम", "obsidianPassword": "पासवर्ड", - "obsidianTailscaleHint": "यदि मोबाइल से कनेक्ट कर रहे हैं तो localhost के बजाय अपने Tailscale IP का उपयोग करें। दोनों डिवाइस एक ही Tailscale नेटवर्क पर होने चाहिए।" + "obsidianTailscaleHint": "यदि मोबाइल से कनेक्ट कर रहे हैं तो localhost के बजाय अपने Tailscale IP का उपयोग करें। दोनों डिवाइस एक ही Tailscale नेटवर्क पर होने चाहिए।", + "cloudSyncNotConfigured": "इस उदाहरण पर क्लाउड सिंक कॉन्फ़िगर नहीं किया गया है।", + "notionConnect": "जोड़ें", + "notionConnectFailed": "कनेक्ट करने में विफल", + "notionConnected": "जुड़ा हुआ", + "notionConnectionFailed": "कनेक्शन विफल हुआ", + "notionDescription": "Notion के माध्यम से रूटेड AI मॉडल के जरिए खोजें, पढ़ें, प्रश्न पूछें और लिखें", + "notionDisconnect": "अलग करें", + "notionDisconnectFailed": "डिस्कनेक्ट करने में विफल", + "notionEnterToken": "कृपया एक Notion एकीकरण टोकन दर्ज करें", + "notionIntegrationHelp": "एक आंतरिक एकीकरण बनाएं at", + "notionIntegrationToken": "Notion आंतरिक एकीकरण टोकन", + "notionNotConnected": "कनेक्टेड नहीं", + "notionTokenConfigured": "टोकन कॉन्फ़िगर किया गया। Notion उपकरण MCP के माध्यम से उपलब्ध हैं।" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "प्रदाता / मॉडल", "noRemoteProviders": "कॉन्फ़िगर की गई API कुंजी वाला कोई प्रदाता नहीं है", "selectProviderModel": "एक मॉडल चुनें", + "customBaseUrlLabel": "कस्टम बेस यूआरएल (वैकल्पिक)", + "customModelIdLabel": "कस्टम मॉडल आईडी (वैकल्पिक)", + "customEndpointHelp": "OpenAI-संगत /embeddings एंडपॉइंट का उपयोग करें। स्थानीय एंडपॉइंट की अनुमति है; क्लाउड मेटाडेटा लक्ष्यों को अवरुद्ध किया गया है।", + "customEndpointSave": "कस्टम एंडपॉइंट लागू करें", + "customEndpointInvalid": "एक मान्य HTTP(S) बेस URL और एक मॉडल ID दोनों दर्ज करें, या दोनों फ़ील्ड खाली छोड़ दें।", + "customEndpointSaveFailed": "कस्टम एम्बेडिंग एंडपॉइंट को सहेजा नहीं जा सका।", "staticEnabledLabel": "स्टैटिक Potion सक्षम करें", "staticEnabledDesc": "स्थानीय रूप से potion-base-8M मॉडल डाउनलोड करें और उपयोग करें", "transformersEnabledLabel": "Transformers.js सक्षम करें", @@ -4258,7 +4443,9 @@ "cleaning": "सफ़ाई की जा रही है...", "cleanNow": "अभी साफ़ करें", "cleanupSuccess": "{count} पॉइंट हटाए गए", - "cleanupFailed": "सफ़ाई विफल रही" + "cleanupFailed": "सफ़ाई विफल रही", + "hostLabel": "होस्ट", + "collectionLabel": "संग्रह" }, "rerank": { "enableLabel": "रीरैंक सक्षम करें", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "ओम्निरूट 3-स्तरीय फ़ॉलबैक आरेख", "apiKeyMgmt": "एपीआई कुंजी प्रबंधन", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "नि:शुल्क प्रदाताओं को सेट करें", + "description": "वैकल्पिक रूप से चयनित बिना-साइनअप प्रदाताओं को सक्षम करें। आगे बढ़ने से पहले प्रत्येक प्रदाता की सूचना और साइट की समीक्षा करें; उपलब्धता और दर सीमाएँ तीसरे पक्ष द्वारा नियंत्रित की जाती हैं।", + "loading": "मुफ्त प्रदाताओं को लोड कर रहा है...", + "loadFailed": "मुफ्त प्रदाताओं को लोड नहीं कर सका।", + "alreadyConfigured": "सभी योग्य मुफ्त प्रदाता पहले से ही कॉन्फ़िगर किए गए हैं।", + "reviewProviderSite": "प्रदाता साइट और शर्तों की समीक्षा करें", + "confirmation": "मैंने इन तृतीय-पक्ष प्रदाताओं की समीक्षा की है और चाहता हूँ कि OmniRoute चयनित कनेक्शन बनाए।", + "setupSelected": "चुने हुए प्रदाताओं को सेट करें", + "settingUp": "सेटिंग अप हो रहा है...", + "setupFailed": "चुने गए प्रदाताओं को सेट अप नहीं किया जा सका। कोई मौजूदा चीज़ें नहीं बदली गईं।", + "retryFailed": "असफल प्रदाताओं को पुनः प्रयास करें", + "orUseApiKey": "या एक API कुंजी के साथ कनेक्ट करें", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "बनाया गया", + "skipped": "पहले से कॉन्फ़िगर किया गया", + "failed": "असफल" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "आवश्यक. प्रदाता एपीआई आधार यूआरएल।", "iconUrlLabel": "आइकन URL", "iconUrlHint": "वैकल्पिक। इस प्रदाता के आइकन के रूप में दिखाया जाने वाला छवि URL।", + "iconUrlInvalid": "अमान्य आइकन URL। http(s):// या data:image/*;base64 URL का उपयोग करें।", "anthropicPrefixPlaceholder": "एसी-उत्पाद", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "इस प्रदाता के मॉडल को claude/<provider>/<model> मिरर आईडी के तहत विज्ञापित करें ताकि Claude Code का गेटवे मॉडल खोज उन्हें सूचीबद्ध कर सके। डिफ़ॉल्ट रूप से बंद — इसे सक्षम करने से सभी ग्राहकों के लिए कैटलॉग प्रविष्टियाँ दोगुनी हो जाती हैं।", "ccAliasProviderLevelLabel": "प्रदाता डिफ़ॉल्ट", "ccAliasModelOverridesLabel": "प्रति-मॉडल ओवरराइड्स", - "ccAliasModelOverrideAriaLabel": "{name} के लिए ओवरराइड", + "ccAliasModelOverrideAriaLabel": "{modelId} के लिए ओवरराइड", "ccAliasStateInherit": "विरासत", "ccAliasStateOn": "चालू", "ccAliasStateOff": "बंद", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} संगत (उत्पाद)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "सत्र पहले से ही वर्तमान है", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "प्रमाणीकरण लागू करें", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API कुंजी पेस्ट करें…", "zedSaving": "सहेज रहा है…", "zedImportAction": "आयात करें", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "स्वचालित कर्सर सत्र नवीनीकरण सक्षम करें", + "cursorAgentNudgeBody": "स्वचालित सत्र नवीनीकरण के लिए cursor-agent स्थापित करें — इसके बिना, Cursor कनेक्शनों को लगभग हर 24 घंटे में मैन्युअल रूप से पुन: कनेक्ट करने की आवश्यकता होती है।", + "cursorAgentNudgeDismiss": "अस्वीकृत करें", "zedManualImportFailed": "मैन्युअल आयात विफल रहा", "zedManualImportSuccess": "Zed से {provider} टोकन आयात किया गया", "grokImportTitle": "Grok Build Auth आयात करें", @@ -5878,7 +6066,6 @@ "friendliai": "सर्वरलेस इनफेरेंस के लिए निःशुल्क टियर — किसी क्रेडिट कार्ड की आवश्यकता नहीं है", "gemini": "हमेशा के लिए निःशुल्क: Gemini 2.5 Flash के लिए 1,500 req/day — कोई क्रेडिट कार्ड नहीं, aistudio.google.com पर कुंजी प्राप्त करें", "gigachat": "GigaChat (Sber) को एक API कुंजी से कनेक्ट करें।", - "github-models": "github.com/settings/tokens पर 'models: read' स्कोप के साथ एक GitHub PAT बनाएं", "gitlab": "सार्वजनिक Code Suggestions API के लिए GitLab व्यक्तिगत एक्सेस टोकन। gitlab.com का उपयोग न करते समय एक स्व-होस्टेड बेस URL कॉन्फ़िगर करें।", "gitlawb-gmi": "Gitlawb Opengateway डैशबोर्ड से अपनी API कुंजी प्राप्त करें।", "gitlawb": "Gitlawb Opengateway डैशबोर्ड से अपनी API कुंजी प्राप्त करें।", @@ -6017,7 +6204,8 @@ "kimi-coding": "मौजूदा OAuth फ़्लो के साथ Kimi Coding को कनेक्ट करें।", "kiro": "फ्री टियर: 50 क्रेडिट/महीना (~25K–100K टोकन)। ⚠️ Kiro ToS तृतीय-पक्ष प्रॉक्सी/हार्नेस के उपयोग को प्रतिबंधित करता है।", "codex": "OpenAI Codex को मौजूदा OAuth फ़्लो से कनेक्ट करें।", - "qwen": "Qwen Code को मौजूदा OAuth फ़्लो से कनेक्ट करें।" + "qwen": "Qwen Code को मौजूदा OAuth फ़्लो से कनेक्ट करें।", + "github-models": "github.com/settings/tokens पर 'models: read' स्कोप के साथ एक GitHub PAT बनाएं" }, "passthroughModelsDescription": "{provider} प्रदाता-मूल मॉडल आईडी स्वीकार करता है। /मॉडल से आयात करें या रूटिंग के लिए कस्टम आईडी जोड़ें।", "bedrockModelsDescription": "अमेज़ॅन बेडरॉक मॉडल का दायरा AWS क्षेत्र द्वारा तय किया गया है। /मॉडल से आयात करें या चयनित क्षेत्र में सक्षम बेडरॉक मॉडल आईडी जोड़ें।", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "पार्टनर लिंक — बिना किसी अतिरिक्त लागत के OmniRoute का समर्थन करता है", "anonymousFallbackTitle": "गुमनाम बैकअप", "anonymousFallbackDesc": "जब सभी कॉन्फ़िगर की गई कनेक्शन समाप्त हो जाते हैं (कोटा, क्रेडिट, या समाप्ति), तो अस्थायी रूप से इस प्रदाता की कीलेस श्रेणी का उपयोग करें। इस प्रदाता को छोड़ने के लिए बंद करें बजाय गुमनाम अनुरोध भेजने के — जब कीलेस श्रेणी उन्हें अस्वीकार करती है (401) तो यह अनुशंसित है।", - "anonymousFallbackEnabled": "{name} के लिए गुमनाम फॉलबैक सक्षम किया गया", + "anonymousFallbackEnabled": "{provider} के लिए गुमनाम फॉलबैक सक्षम किया गया", "anonymousFallbackDisabled": "{provider} के लिए गुमनाम फॉलबैक बंद कर दिया गया है — समाप्त कनेक्शन इस प्रदाता को छोड़ देंगे", - "anonymousFallbackUpdateFailed": "गुमनाम फॉलबैक सेटिंग को अपडेट करने में विफल" + "anonymousFallbackUpdateFailed": "गुमनाम फॉलबैक सेटिंग को अपडेट करने में विफल", + "batchDeleteFailed": "बैच हटाना विफल हुआ", + "batchDeleteNetworkError": "बैच डिलीट के दौरान नेटवर्क त्रुटि", + "batchUpdateFailed": "बैच अपडेट विफल हो गया", + "batchUpdateNetworkError": "बैच अपडेट के दौरान नेटवर्क त्रुटि", + "categoryAudio": "ऑडियो", + "categoryCloudAgent": "क्लाउड एजेंट", + "categoryIde": "आईडीई", + "categoryLocal": "स्थानीय", + "categorySearch": "खोजें", + "categoryWebCookie": "वेब कुकी", + "claudeExtraUsageBlockingDisabled": "Claude अतिरिक्त उपयोग अवरोधन निष्क्रिय (अतिरिक्त उपयोग की अनुमति है)", + "claudeExtraUsageBlockingEnabled": "Claude अतिरिक्त उपयोग अवरुद्ध करना सक्षम किया गया है (अतिरिक्त उपयोग अवरुद्ध किया जाएगा)", + "claudeRoutingPreferenceDisabled": "अनप्रीफिक्स्ड क्लॉड मॉडल अब क्लॉड कोड को प्राथमिकता नहीं देते हैं", + "claudeRoutingPreferenceEnabled": "अनप्रिफिक्स्ड क्लॉड मॉडल अब क्लॉड कोड को प्राथमिकता देते हैं", + "clearMediaFilter": "स्पष्ट करें", + "cliproxyRoutingDisabled": "अनुरोध अब मूल OmniRoute (प्रत्यक्ष) का उपयोग करते हैं", + "cliproxyRoutingEnabled": "अब अनुरोध CLIProxyAPI (गहरे अनुकरण) के माध्यम से रूट होते हैं", + "codexLimitPolicyUpdated": "कोडेक्स सीमा नीति अपडेट की गई", + "codexServiceModeUpdated": "Codex सेवा मोड अपडेट किया गया", + "codexServiceTierActive": "Codex {tier} सेवा स्तर सक्रिय है", + "codexTierFastLabel": "तेज़", + "codexTierFlexLabel": "फ्लेक्स", + "commandCodeApplyFailed": "Command Code auth लागू करने में विफल रहा", + "commandCodeApplyingApproval": "ब्राउज़र स्वीकृत, लागू कर रहा है…", + "commandCodeApplyingKey": "ब्राउज़र-स्वीकृत कुंजी लागू कर रहा है…", + "commandCodeApprovalInstructions": "प्रमाणन यूआरएल खोलें, पहुँच को स्वीकृत करें, फिर नीचे लौटाए गए कुंजी/JSON/URL को चिपकाएँ…", + "commandCodeAuthExpired": "कमांड कोड प्रमाणपत्र समाप्त हो गया", + "commandCodeConnected": "कमांड कोड कनेक्टेड", + "commandCodeConnectionAdded": "कमांड कोड कनेक्शन जोड़ा गया", + "commandCodeLinkExpired": "कमांड कोड लिंक समाप्त हो गया", + "commandCodeOpeningStudio": "कमांड कोड स्टूडियो खोलना…", + "commandCodePopupBlocked": "पॉपअप अवरुद्ध कर दिया गया है। कृपया पॉपअप की अनुमति दें और फिर से Command Code Connect आजमाएँ।", + "commandCodeStartFailed": "Command Code auth शुरू करने में विफल रहा", + "connectionDeleted": "कनेक्शन हटा दिया गया", + "connectionFallback": "संयोग", + "coolingConnectionsDescription": "इन कनेक्शनों ने अपनी अंतिम अनुरोध पर 429 (रेट-सीमा) लौटाया। OmniRoute उन्हें तब तक छोड़ देगा जब तक टाइमर समाप्त नहीं हो जाता — कोई मैनुअल अक्षम करने की आवश्यकता नहीं है।", + "coolingConnectionsTitle": "वर्तमान में ठंडा कर रहे हैं ({count})", + "failedDeleteAlias": "उपनाम हटाने में विफल", + "failedDeleteConnection": "कनेक्शन हटाने में विफल", + "failedDistributeProxies": "प्रॉक्सी वितरित करने में विफल।", + "failedSaveModelEndpointSettings": "मॉडल एंडपॉइंट सेटिंग्स को सहेजने में विफल रहा", + "failedUpdateClaudeExtraUsagePolicy": "Claude अतिरिक्त-उपयोग नीति को अपडेट करने में विफल रहा", + "failedUpdateClaudeRoutingPreference": "Claude Code रूटिंग प्राथमिकता को अपडेट करने में विफल रहा", + "failedUpdateCliproxyRouting": "CLIProxyAPI रूटिंग को अपडेट करने में विफल रहा", + "failedUpdateCodexLimitPolicy": "Codex सीमा नीति को अपडेट करने में विफल", + "failedUpdateCodexServiceMode": "Codex सेवा मोड को अपडेट करने में विफल रहा", + "filterByMedia": "मीडिया", + "freeBadge": "मुफ्त", + "kimiCodeApiKeyLabel": "किमी कोड एपीआई कुंजी", + "modelTestFailed": "मॉडल परीक्षण विफल हुआ", + "modelTestNetworkError": "नेटवर्क त्रुटि परीक्षण मॉडल", + "networkError": "नेटवर्क त्रुटि", + "networkErrorDeletingAlias": "उपनाम हटाते समय नेटवर्क त्रुटि", + "networkErrorSettingAlias": "उपनाम सेट करते समय नेटवर्क त्रुटि", + "noProvidersMatch": "कोई प्रदाता आपकी खोज से मेल नहीं खाता।", + "noSavedProxies": "कोई सहेजे गए प्रॉक्सी नहीं मिले। पहले सेटिंग्स → प्रॉक्सी में प्रॉक्सी जोड़ें।", + "pageLoadErrorDescription": "हम अभी प्रदाता डेटा लोड नहीं कर सके। अपने कनेक्शन की जांच करें और फिर से प्रयास करें।", + "pageLoadErrorId": "त्रुटि आईडी: {id}", + "pageLoadErrorRetry": "फिर से प्रयास करें", + "pageLoadErrorTitle": "प्रदाताओं को लोड करने में विफल रहा", + "playgroundTitle": "प्लेग्राउंड", + "providerDetailConnectionFlexActive": "Codex फ्लेक्स सेवा स्तर इस कनेक्शन के लिए सक्रिय है", + "providerDetailConnectionPriorityActive": "Codex प्राथमिक सेवा स्तर इस कनेक्शन के लिए सक्रिय है", + "providerDetailGlobalFlexActive": "ग्लोबल कोडेक्स फ्लेक्स सेवा स्तर सक्रिय है", + "providerDetailGlobalPriorityActive": "ग्लोबल कोडेक्स प्राथमिकता सेवा स्तर सक्रिय है", + "proxiesDistributed": "{assigned} प्रॉक्सी असाइनमेंट(s) को {tagLabel}{total} कनेक्शन(s) में वितरित किया गया।", + "rerankEndpoint": "फिर से रैंक करें", + "savedModelEndpointSettings": "सहेजे गए मॉडल एंडपॉइंट सेटिंग्स", + "searchByModelAria": "मॉडल द्वारा खोजें", + "selectSupportedEndpoint": "कम से कम एक समर्थित एंडपॉइंट चुनें", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "सेटिंग्स", @@ -6460,7 +6719,24 @@ "loadFailed": "सदस्यता सूची लोड करने में विफल", "toggleFailed": "स्विच टॉगल करने में विफल", "refreshFailed": "ताज़ा करने में विफल", - "deleteFailed": "हटाने में विफल" + "deleteFailed": "हटाने में विफल", + "add": "जोड़ें", + "cancel": "रद्द करें", + "configure": "कॉन्फ़िगर करें", + "copyEndpoint": "एंडपॉइंट कॉपी करें", + "coreEndpointHint": "कोर एंडपॉइंट हिंट", + "coreNodesHint": "कोर नोड्स_HINT", + "create": "बनाएँ", + "deleteConfirm": "हटाने की पुष्टि", + "empty": "खाली", + "globalModeDescription": "वैश्विक मोड विवरण", + "localCoreHint": "स्थानीय कोर संकेत", + "nodeSummary": "नोड सारांश", + "providerRequired": "प्रदाता आवश्यक है", + "providerRouting": "प्रदाता रूटिंग", + "refresh": "रीफ्रेश", + "refreshInterval": "रीफ्रेश अंतराल", + "ruleModeDescription": "नियम मोड विवरण" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "छवि अनुरोधों को केवल-टेक्स्ट मॉडल पर रूट करने से पहले एक स्वचालित विज़न-टू-टेक्स्ट फ़ॉलबैक चलाएं।", "visionBridgeEnabledLabel": "सक्षम", "visionBridgeEnabledDesc": "प्री-कॉल ब्रिज को टॉगल करें जो छवि भागों को निकाले गए टेक्स्ट से बदल देता है।", + "visionBridgeRerouteTextOnlyLabel": "टेक्स्ट-केवल मॉडल को फिर से रूट करें", + "visionBridgeRerouteTextOnlyDesc": "चुने गए मॉडल के पास कोई छवि इनपुट नहीं होने पर, छवियों सहित पूरा अनुरोध ब्रिज मॉडल को भेजें।", "visionBridgeModel": "ब्रिज मॉडल", "visionBridgeModelPlaceholder": "openai/gpt-4o-मिनी", "visionBridgeModelHint": "कोई भी OmniRoute मॉडल ID जो विज़न का समर्थन करता है, यहाँ उपयोग किया जा सकता है।", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API कुंजी में manage स्कोप नहीं है।", "BYPASS_PREFIX_NOT_ALLOWED": "एक या अधिक प्रीफिक्स स्पॉन-सक्षम रूटों को लक्षित करते हैं और उन्हें बायपास नहीं किया जा सकता है।", "GENERIC": "authz सेटिंग्स को अपडेट करने में विफल।" - } + }, + "remove": "हटाएँ" }, "resilienceBaseCooldownLabel": "आधार ठंडा हो गया", "scopeLabel": "दायरा", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "ऑडियो का परीक्षण कर रहा है…", "modalityBridgeAudioTestOk": "ऑडियो ब्रिज ठीक है — {count} क्लिप(स) {model} द्वारा ट्रांसक्राइब की गई", "modalityBridgeAudioTestNoop": "ऑडियो ब्रिज सक्रिय नहीं हुआ (लक्ष्य ऑडियो का समर्थन कर सकता है, कोई STT प्रदाता कनेक्ट नहीं है, या ब्रिज अक्षम है)", - "modalityBridgeAudioTestError": "ऑडियो परीक्षण विफल: {message}" + "modalityBridgeAudioTestError": "ऑडियो परीक्षण विफल: {message}", + "modelRoutingDescriptionPlaceholder": "फ्रंटियर कॉम्बो के लिए रूट ओपस मॉडल्स", + "cliproxyapiFallbackCodes": "Cliproxyapi फॉलबैक कोड्स", + "cliproxyapiFallbackDescription": "Cliproxyapi फॉलबैक विवरण", + "cliproxyapiHealthLabel": "क्लिप्रॉक्सीएपीआई स्वास्थ्य लेबल", + "cliproxyapiImportFailed": "Cliproxyapi आयात विफल हुआ", + "cliproxyapiImportResult": "क्लिप्रॉक्सीएपीआई आयात परिणाम", + "cliproxyapiInvalidUrl": "Cliproxyapi अमान्य URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi जीवनचक्र सूचना बाद", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi जीवनचक्र सूचना पहले", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi जीवनचक्र सूचना लिंक", + "cliproxyapiPortLabel": "क्लिप्रॉक्सीएपीआई पोर्ट लेबल", + "cliproxyapiStatusLabel": "क्लिप्रॉक्सीएपीआई स्थिति लेबल", + "cliproxyapiVersionLabel": "क्लिप्रॉक्सीएपीआई संस्करण लेबल", + "collection": "संग्रह", + "errorPage": { + "description": "हम अभी सेटिंग्स लोड नहीं कर सके। कृपया कुछ सेकंड में पुनः प्रयास करें।", + "errorId": "त्रुटि आईडी: {id}", + "retry": "फिर से प्रयास करें", + "title": "सेटिंग्स लोड करने में विफल" + }, + "host": "होस्ट", + "notInstalled": "स्थापित नहीं किया गया", + "oneproxyActions": "Oneproxy क्रियाएँ", + "oneproxyActive": "Oneproxy सक्रिय", + "oneproxyAnonymity": "Oneproxy गुमनामी", + "oneproxyCountry": "Oneproxy देश", + "oneproxyDelete": "Oneproxy हटाएँ", + "oneproxyEmpty": "Oneproxy खाली", + "oneproxyHost": "Oneproxy होस्ट", + "oneproxyLatency": "Oneproxy विलंबता", + "oneproxyProtocol": "वनप्रॉक्सी प्रोटोकॉल", + "oneproxyQuality": "Oneproxy गुणवत्ता", + "oneproxySyncFailed": "सिंक विफल: {error}", + "oneproxySyncSuccess": "सिंक किए गए {total} प्रॉक्सी ({added} नए, {updated} अपडेट किए गए)", + "proxyDocumentationSocks5DescAfter": "प्रॉक्सी दस्तावेज़ीकरण Socks5 विवरण के बाद", + "proxyFreePoolAddProxy": "प्रॉक्सी फ्री पूल प्रॉक्सी जोड़ें", + "proxyFreePoolAdding": "प्रॉक्सी फ्री पूल जोड़ना", + "proxyFreePoolSelectProxy": "प्रॉक्सी फ्री पूल प्रॉक्सी चुनें", + "proxyStatusActive": "प्रॉक्सी स्थिति सक्रिय", + "proxyStatusInactive": "प्रॉक्सी स्थिति निष्क्रिय", + "routingAddEntry": "एंट्री जोड़ें", + "settingSaveFailed": "सेटिंग्स सहेजना विफल हुआ", + "settingSaved": "सेटिंग्स सहेजी गईं", + "skillsmpApiKeyHintAfter": ". दर सीमा: {limit} अनुरोध/दिन.", + "skillsmpApiKeyHintBefore": "अपने API कुंजी प्राप्त करें", + "syncFailed": "सिंक विफल हुआ", + "unhealthy": "अस्वस्थ", + "oneproxyDescription": "1proxy समुदाय प्लेटफ़ॉर्म से मुफ्त मान्य प्रॉक्सी प्राप्त करें और घुमाएँ", + "oneproxySyncing": "सिंक हो रहा है...", + "oneproxySyncNow": "अब समन्वय करें", + "oneproxyClearAll": "सभी हटाएँ", + "oneproxyGoogle": "गूगल", + "oneproxyClearAllConfirm": "सभी 1proxy प्रॉक्सी साफ़ करें?", + "memorySkillsSkillsmpDescription": "SkillsMP से कनेक्ट करें ताकि आप मार्केटप्लेस से कौशल खोज सकें और इंस्टॉल कर सकें।", + "memorySkillsActiveProviderDescription": "चुनें कि Skills पृष्ठ खोज और इंस्टॉल के लिए किस प्रदाता का उपयोग करता है।", + "memorySkillsSkillsmpProviderTitle": "SkillsMP मार्केटप्लेस", + "memorySkillsSkillsmpProviderDescription": "प्रमाणित मार्केटप्लेस (आपकी SkillsMP API कुंजी का उपयोग करता है)।", + "memorySkillsSkillsshProviderTitle": "skills.sh निर्देशिका", + "memorySkillsSkillsshProviderDescription": "सार्वजनिक निर्देशिका प्रदाता (कोई API कुंजी आवश्यक नहीं)।", + "routingCcBridgeCatalogName": "Anthropic-compatible CC ब्रिज", + "routingClaudeProviderName": "क्लॉड (OAuth)", + "routingClaudeProviderDescription": "OAuth-जारी किए गए टोकनों के साथ मूल क्लॉड प्रदाता।", + "routingCcBridgeName": "क्लॉड-कोड ब्रिज", + "routingCcBridgeDescription": "API कुंजी (anthropic-compatible-cc-*) का उपयोग करके रिले एंडपॉइंट्स।", + "routingCustomProviderDescription": "कस्टम प्रदाता।", + "routingUnknownOpKind": "अज्ञात ऑप प्रकार: {kind}", + "routingInvalidJson": "अमान्य JSON: {error}", + "routingConfigMustBeObject": "कॉन्फ़िग एक JSON ऑब्जेक्ट होना चाहिए", + "routingEnabledMustBeBoolean": "`enabled` सत्य या असत्य होना चाहिए", + "routingPipelineMustBeArray": "`pipeline` एक ops की सूची होनी चाहिए", + "routingPipelineTooLong": "पाइपलाइन 50 ऑप्स से अधिक नहीं हो सकती", + "routingOpMissingKind": "Op #{index}: गायब या अमान्य `kind`", + "routingOpUnknownKind": "Op #{index}: अज्ञात प्रकार \"{kind}\"", + "routingJsonEditorHide": "JSON संपादक छिपाएँ", + "routingJsonEditorImportExport": "JSON आयात / निर्यात", + "routingJsonEditorLabel": "JSON (संपादित करें और लागू करें, या आयात करने के लिए पेस्ट करें)", + "routingApplyJson": "JSON लागू करें", + "routingTransformsFootnote": "सभी ट्रांसफॉर्म ऑप्स पुनः चलाने पर आइडेम्पोटेंट होते हैं। परिवर्तन अगले अनुरोध पर तुरंत प्रभावी होते हैं।", + "cliproxyapiUnknown": "अज्ञात", + "cliproxyapiVersion": "संस्करण", + "cliproxyapiHealth": "स्वास्थ्य", + "cliproxyapiPort": "पोर्ट", + "qdrantHost": "होस्ट", + "qdrantCollection": "संग्रह" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "पूर्ण", "ultra": "अल्ट्रा" } + }, + "modeOptions": { + "default": "डिफ़ॉल्ट", + "off": "बंद", + "lite": "लाइट", + "standard": "मानक", + "aggressive": "आक्रामक", + "ultra": "अल्ट्रा", + "responsesToolOutput": "प्रतिक्रियाएँ उपकरण आउटपुट" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "स्टैक में सबसे अंत में चलता है (RTK/Caveman द्वारा टेक्स्ट साफ़ करने के बाद, OmniGlyph शेष को छवियों में परिवर्तित करता है) और omniglyph मोड के माध्यम से स्टैंडअलोन भी चलता है। यह एक पूर्वावलोकन है और एंड-टू-एंड सत्यापन पूरा होने तक डिफ़ॉल्ट रूप से बंद रहता है।", "saved": "सहेजा गया।", "saveFailed": "सहेजा नहीं जा सका।", - "enableAria": "OmniGlyph इंजन सक्षम करें" + "enableAria": "OmniGlyph इंजन सक्षम करें", + "title": "OmniGlyph" }, "embeddedServices": { "title": "एम्बेडेड सेवाएँ", @@ -9127,7 +9500,49 @@ "unableToLoad": "सिस्टम मेट्रिक्स लोड करने में असमर्थ", "product": "उत्पाद", "resources": "संसाधन", - "company": "कंपनी" + "company": "कंपनी", + "tokenHealthTooltips": { + "allHealthy": "सभी टोकन स्वस्थ हैं", + "needsAttention": "कुछ टोकन को ध्यान देने की आवश्यकता है", + "refreshFailures": "टोकन रिफ्रेश विफलताएँ पाई गईं", + "unknown": "स्वास्थ्य स्थिति अज्ञात" + }, + "systemMonitor": { + "metricsAriaLabel": "सिस्टम मेट्रिक्स", + "memory": "स्मृति", + "memoryShort": "mem", + "uptime": "अपटाइम", + "ariaLabel": "सिस्टम मॉनिटरिंग", + "title": "सिस्टम मॉनिटर", + "version": "संस्करण", + "connections": "संयोग", + "circuitBreakers": "सर्किट ब्रेकर", + "open": "{count} खुला", + "memoryUsage": "मेमोरी उपयोग" + }, + "never": "कभी नहीं", + "justNow": "अभी अभी", + "minutesAgo": "{count}मिनट पहले", + "hoursAgo": "{count}घंटे पहले", + "tokens": "टोकन", + "costs": "लागतें", + "autoRefresh": "स्वतः ताज़ा करें ({seconds}s)", + "toggleAutoRefresh": "ऑटो रिफ्रेश टॉगल करें", + "activeRequests": "सक्रिय अनुरोध", + "totalRequests": "कुल अनुरोध", + "totalInputTokens": "कुल इनपुट टोकन", + "model": "मॉडल", + "provider": "प्रदाता", + "requests": "अनुरोध", + "lastUsed": "अंतिम उपयोग किया गया", + "inputTokens": "इनपुट टोकन", + "totalTokens": "कुल टोकन", + "inputCost": "इनपुट लागत", + "outputCost": "आउटपुट लागत", + "noUsageData": "अभी तक कोई उपयोग रिकॉर्ड नहीं किया गया है। डेटा देखने के लिए कुछ अनुरोध करें।", + "account": "खाता", + "accountLabel": "खाता {id}", + "noAccountUsage": "अभी तक कोई खाता-विशिष्ट उपयोग रिकॉर्ड नहीं किया गया है। डेटा देखने के लिए OAuth खातों का उपयोग करके अनुरोध करें।" }, "auth": { "welcome": "स्वागत है", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "ऐप डेटा के माध्यम से रीसेट करें", + "resetViaAppDataDescription": "ऐप डेटा निर्देशिका से सेटिंग्स फ़ाइल हटाएँ ताकि आपका पासवर्ड रीसेट हो सके:", + "quitDesktopApp": "OmniRoute डेस्कटॉप ऐप को पूरी तरह से बंद करें", + "navigateToAppDataDirectory": "ऐप डेटा निर्देशिका पर जाएं:", + "checkSystemAppDataFolder": "(अपने सिस्टम ऐप डेटा फ़ोल्डर की जांच करें)", + "relaunchDesktopFreshSetup": "OmniRoute डेस्कटॉप ऐप को फिर से लॉन्च करें — यह नया सेटअप शुरू करेगा", + "alternativeSetPasswordTitle": "वैकल्पिक: नया पासवर्ड सेट करें", + "alternativeSetPasswordDescription": "सर्वर पर्यावरण फ़ाइल के माध्यम से एक नया प्रारंभिक पासवर्ड सेट करें:", + "openServerEnvFilePrefix": "खोलें", + "relaunchDesktopApp": "OmniRoute डेस्कटॉप ऐप को फिर से लॉन्च करें", + "codexLinkInvalidOrExpired": "यह लिंक अमान्य या समाप्त हो गया है।", + "codexValidationServerError": "इस लिंक को मान्य करने के लिए सर्वर तक पहुँच नहीं सका।", + "codexSaveConnectionError": "संयोग को सहेज नहीं सके। लिंक समाप्त हो सकता है।", + "codexDeviceLoginDisabled": "इस OpenAI खाते के लिए डिवाइस कोड लॉगिन अक्षम है। इसे ChatGPT सुरक्षा सेटिंग्स में सक्षम करें (या अपने कार्यक्षेत्र के व्यवस्थापक से पूछें)।", + "codexAuthorizationTimedOut": "अधिकृतता समय समाप्त हो गई। पुनः प्रयास करने के लिए फिर से प्रारंभ पर क्लिक करें।", + "authenticationCancelled": "प्रमाणीकरण रद्द कर दिया गया।", + "unexpectedAuthenticationError": "प्रमाणीकरण के दौरान अप्रत्याशित त्रुटि। कृपया पुनः प्रयास करें।", + "connectOpenAiCodexTitle": "OpenAI Codex से कनेक्ट करें", + "codexConnectDescription": "इस कनेक्शन को सेट अप करने के लिए ChatGPT खाते को अधिकृत करें।", + "validatingCodexLink": "लिंक की पुष्टि की जा रही है…", + "codexGenerateCodeDescription": "नीचे क्लिक करें एक बार का कोड उत्पन्न करने के लिए, फिर OpenAI में साइन इन करें।", + "startCodexFlow": "शुरू करें", + "requestingOpenAiCode": "OpenAI से कोड मांग रहे हैं…", + "codexVerificationInstructions": "1. OpenAI सत्यापन पृष्ठ खोलें और 2. इस कोड को दर्ज करें। यह पृष्ठ स्वचालित रूप से अपडेट होता है जब आप अधिकृत करते हैं।", + "yourCode": "आपका कोड", + "openVerificationPage": "सत्यापन पृष्ठ खोलें", + "copyUrlShort": "यूआरएल कॉपी करें", + "savingConnection": "कनेक्शन सहेजना…", + "codexConnected": "जुड़ा हुआ!", + "codexConnectionRegistered": "Codex खाता पंजीकृत हो गया है। आप इस टैब को बंद कर सकते हैं।", + "tryAgain": "फिर से प्रयास करें", + "traeAuthorizationSuccess": "ट्राए अधिकृत ✓", + "traeAuthorizationFailed": "Trae प्राधिकरण विफल हुआ", + "closeAuthorizationWindow": "आप इस विंडो को बंद कर सकते हैं।", + "returnToDashboard": "डैशबोर्ड पर वापस जाएं।", + "resetViaAppData": "ऐप डेटा के माध्यम से रीसेट करें", + "deleteSettingsToReset": "अपने पासवर्ड को रीसेट करने के लिए ऐप डेटा निर्देशिका से सेटिंग्स फ़ाइल हटाएँ:", + "quitAppCompletely": "OmniRoute डेस्कटॉप ऐप को पूरी तरह से बंद करें", + "navigateToAppData": "ऐप डेटा निर्देशिका पर जाएं", + "checkAppDataFolder": "अपने सिस्टम ऐप डेटा फ़ोल्डर की जांच करें", + "deleteSettingsJson": "हटाएँ", + "relaunchAppFresh": "OmniRoute डेस्कटॉप ऐप को फिर से लॉन्च करें — यह नया सेटअप शुरू करेगा", + "alternativeSetPassword": "वैकल्पिक: नया पासवर्ड सेट करें", + "setNewPasswordViaEnv": "सर्वर पर्यावरण फ़ाइल के माध्यम से एक नया प्रारंभिक पासवर्ड सेट करें:", + "openServerEnv": "खोलें", + "inDataDirectory": "डेटा निर्देशिका में", + "addOrUpdate": "जोड़ें या अपडेट करें", + "deleteAndRelaunch": "हटाएँ", + "settingsJson": "settings.json", + "fromDataDir": "डेटा निर्देशिका से", + "relaunchApp": "OmniRoute डेस्कटॉप ऐप को फिर से लॉन्च करें" }, "landing": { "brandName": "ओम्निरूट", @@ -9275,7 +9741,19 @@ "ctaTitle": "क्या आप अपने एआई इंफ्रास्ट्रक्चर को सरल बनाने के लिए तैयार हैं?", "ctaDescription": "उन डेवलपर्स से जुड़ें जो ओमनीरूट के साथ अपने एआई एकीकरण को सुव्यवस्थित कर रहे हैं। खुला स्रोत और प्रारंभ करने के लिए निःशुल्क।", "startFree": "निःशुल्क प्रारंभ करें", - "readDocumentation": "दस्तावेज़ीकरण पढ़ें" + "readDocumentation": "दस्तावेज़ीकरण पढ़ें", + "company": "कंपनी", + "pricing": "मूल्य निर्धारण", + "apiReference": "एपीआई संदर्भ", + "helpCenter": "सहायता केंद्र", + "about": "के बारे में", + "blog": "ब्लॉग", + "contact": "संपर्क", + "terms": "शर्तें", + "privacy": "गोपनीयता", + "license": "लाइसेंस", + "footerDescription": "आधुनिक एआई अवसंरचना के लिए एकीकृत इंटरफ़ेस। सुरक्षित, अवलोकनीय, और स्केलेबल।", + "communityDiscussions": "समुदाय चर्चा" }, "docs": { "title": "दस्तावेज़ीकरण", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "अंतर-एजेंट संचार और टूल साझाकरण के लिए एसीपी रजिस्ट्री के माध्यम से एजेंटों को पंजीकृत और प्रबंधित करें।", "protocolAcpStep1": "पंजीकृत एसीपी एजेंटों को देखने के लिए डैशबोर्ड → एजेंटों पर जाएँ।", "protocolAcpStep2": "क्षमताओं और समापन बिंदु कॉन्फ़िगरेशन के साथ नए एजेंटों को पंजीकृत करें।", - "protocolAcpStep3": "एजेंट संचार चैनलों को कॉन्फ़िगर करने के लिए सीएलआई टूल्स का उपयोग करें।" + "protocolAcpStep3": "एजेंट संचार चैनलों को कॉन्फ़िगर करने के लिए सीएलआई टूल्स का उपयोग करें।", + "metadataTitleTemplate": "%s — OmniRoute दस्तावेज़", + "metadataDefaultTitle": "OmniRoute दस्तावेज़ीकरण", + "metadataDescription": "OmniRoute AI गेटवे के लिए व्यापक दस्तावेज़ — सेटअप, API, संकुचन, तैनाती, और अधिक।", + "layoutNavTitle": "OmniRoute दस्तावेज़", + "layoutHomeLink": "दस्तावेज़ होम", + "layoutDashboardLink": "← डैशबोर्ड पर वापस जाएं", + "homeTitle": "OmniRoute दस्तावेज़ीकरण", + "homeMetadataDescription": "आपको अपने AI को रूट, संकुचित और स्केल करने के लिए आवश्यक सभी चीज़ें - सेटअप गाइड, API संदर्भ, संकुचन, तैनाती, और भी बहुत कुछ।", + "homeTwitterDescription": "OmniRoute AI गेटवे के लिए व्यापक दस्तावेज़", + "homeDescription": "आपकी AI को रूट, संकुचित और स्केल करने के लिए आपको जो कुछ भी चाहिए", + "homeSearchHint": "Ctrl K दबाएँ दस्तावेज़ों की खोज करने के लिए", + "featuredQuickStartTitle": "त्वरित प्रारंभ", + "featuredQuickStartDescription": "OmniRoute को 3 मिनट में चालू करें", + "featuredAutoComboTitle": "ऑटो-कॉम्बो गाइड", + "featuredAutoComboDescription": "OmniRoute आपके लिए सबसे अच्छा AI चुनने दे।", + "featuredProvidersTitle": "प्रदाता गाइड", + "featuredProvidersDescription": "कुछ ही मिनटों में AI प्रदाताओं से कनेक्ट करें", + "nonTechUsersTitle": "गैर-तकनीकी उपयोगकर्ताओं के लिए", + "nonTechUsersSubtitle": "जल्दी शुरू करें — किसी तकनीकी पृष्ठभूमि की आवश्यकता नहीं है", + "techUsersTitle": "तकनीकी उपयोगकर्ताओं के लिए", + "techUsersSubtitle": "आर्किटेक्चर, APIs, और आंतरिक विवरणों में गहराई से जाएं", + "apiExplorerMetadataTitle": "API एक्सप्लोरर — OmniRoute दस्तावेज़", + "apiExplorerMetadataDescription": "इंटरएक्टिव एपीआई एक्सप्लोरर — वास्तविक समय की प्रतिक्रियाओं के साथ OmniRoute एंडपॉइंट्स को लाइव आजमाएं", + "apiExplorerTitle": "एपीआई एक्सप्लोरर", + "apiExplorerDescription": "OmniRoute एंडपॉइंट्स को लाइव आजमाएं। एक एंडपॉइंट चुनें, अपने अनुरोध को कॉन्फ़िगर करें, और वास्तविक समय में प्रतिक्रिया देखें।", + "apiExplorerSseStarted": "SSE स्ट्रीम शुरू हो गई — वास्तविक समय के आउटपुट के लिए टर्मिनल/devtools की जांच करें।", + "apiExplorerError": "त्रुटि: {message}", + "apiExplorerAuth": "प्रमाणीकरण", + "apiExplorerResponseLabel": "प्रतिक्रिया", + "apiExplorerSelectEndpoint": "एक एंडपॉइंट चुनें जिसे आप एक्सप्लोर करना चाहते हैं", + "apiExplorerChooseApi": "साइडबार से एक API चुनें ताकि विवरण देख सकें और इसे लाइव आजमा सकें", + "feedbackThanks": "आपकी प्रतिक्रिया के लिए धन्यवाद!", + "feedbackQuestion": "क्या यह पृष्ठ सहायक था?", + "pageMetadataTitle": "{title} — OmniRoute दस्तावेज़", + "pageMetadataDescription": "OmniRoute दस्तावेज़: {title}", + "breadcrumb": "ब्रेडक्रंब", + "apiReferenceTable": { + "parameters": "पैरामीटरस", + "name": "नाम", + "type": "टाइप", + "description": "विवरण", + "returns": "वापसी", + "typePrefix": "टाइप:" + } }, "legal": { "privacyPolicy": "गोपनीयता नीति", @@ -9957,7 +10479,42 @@ "successMessage": "आपका {providerName} खाता कनेक्ट कर दिया गया है।", "done": "हो गया", "error": "कनेक्शन विफल", - "tryAgain": "पुनः प्रयास करें" + "tryAgain": "पुनः प्रयास करें", + "errorSessionIncomplete": "OAuth सत्र अधूरा है (रीडायरेक्ट यूआरआई या कोड वेरिफायर गायब है)। कनेक्शन को पुनः प्रारंभ करें और फिर से प्रयास करें।", + "errorExchangeFailed": "विनिमय विफल हुआ", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: डिफ़ॉल्ट Google OAuth क्रेडेंशियल्स केवल localhost पर काम करते हैं। दूरस्थ उपयोग के लिए, अपने स्वयं के OAuth क्रेडेंशियल्स को पर्यावरण चर के माध्यम से कॉन्फ़िगर करें: ANTIGRAVITY_OAUTH_CLIENT_ID और ANTIGRAVITY_OAUTH_CLIENT_SECRET। README अनुभाग 'दूरस्थ सर्वर पर OAuth' देखें।", + "errorSaveFailed": "सहेजना विफल हुआ", + "errorAuthorizationFailed": "अधिकृत करना विफल हुआ", + "errorAuthorizationTimeout": "अधिकारिता समय सीमा समाप्त हो गई", + "errorRequestFailed": "अनुरोध विफल हुआ", + "errorCallbackServerFailed": "कॉलबैक सर्वर शुरू करने में विफल रहा", + "errorBrowserUnavailable": "इस प्रदाता के लिए वर्तमान वातावरण में ब्राउज़र OAuth उपलब्ध नहीं है। इसके बजाय समर्थित प्रमाणीकरण विधि का उपयोग करें।", + "errorStateMismatch": "OAuth स्थिति असंगत है। कनेक्शन को पुनः प्रारंभ करें और फिर से प्रयास करें।", + "errorImportAccessToken": "एक्सेस टोकन आयात करने में विफल रहा", + "errorSessionNotInitialized": "OAuth सत्र प्रारंभ नहीं हुआ है। कनेक्शन प्रवाह को पुनः प्रारंभ करें और फिर से प्रयास करें।", + "errorNoAuthorizationCode": "कोई प्राधिकरण कोड नहीं मिला। कॉलबैक URL या प्रमाणीकरण कोड पेस्ट करें।", + "tabDeviceCode": "डिवाइस कोड", + "tabBrowserLogin": "ब्राउज़र लॉगिन", + "tabImportAuthJson": "auth.json आयात करें", + "tabPasteApiKey": "API कुंजी चिपकाएँ", + "windsurfPasteDescription": "Windsurf / VS Code IDE में, कमांड पैलेट से \"Windsurf: Provide Auth Token\" कमांड चलाएँ (या Jupyter \"Get Windsurf Authentication Token\" बटन पर क्लिक करें), फिर दिखाए गए टोकन को कॉपी करें और नीचे पेस्ट करें। सीधे windsurf.com/show-auth-token खोलने से केवल \"Redirecting\" पृष्ठ दिखाई देता है — फ्लो को IDE द्वारा प्रारंभ करना आवश्यक है।", + "grokAuthJsonDescription": "~/.grok/auth.json की पूरी सामग्री चिपकाएँ (केवल JWT \"key\" फ़ील्ड नहीं)। एक साधारण JWT में कोई refresh_token नहीं होता है, इसलिए कनेक्शन समाप्ति के बाद बंद हो जाता है (#7610)। उपलब्ध होने पर समर्पित Import auth.json मोडल का उपयोग करना पसंद करें।", + "devinDesktopPasteDescription": "एक प्रमाणित Devin सत्र से मौजूदा Devin API कुंजी पेस्ट करें। कुंजी निर्यात उपलब्धता और चरण Devin संस्करण और खाते के अनुसार भिन्न होते हैं।", + "devinPasteDescription": "अपना WINDSURF_API_KEY प्रदान करें (जो `devin auth login` के माध्यम से प्राप्त किया गया है, या Windsurf IDE \"Windsurf: Provide Auth Token\" कमांड के माध्यम से)।", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "एपीआई कुंजी / टोकन", + "saving": "सहेजना…", + "saveConnection": "संपर्क सहेजें", + "gheDescription": "अपने GitHub Enterprise उदाहरण का आधार URL दर्ज करें (जैसे https://ghe.yourcompany.com)।", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL आवश्यक है", + "gitlabDuoSetupTitle": "GitLab Duo OAuth सेटअप", + "gitlabDuoSetupMessage": "GitLab Duo OAuth कॉन्फ़िगर नहीं किया गया है। {applicationsUrl} पर एक OAuth एप्लिकेशन रजिस्टर करें जिसमें रीडायरेक्ट URI {redirectUri} और स्कोप्स \"{scopes}\" हों, फिर {clientIdEnv} (और वैकल्पिक रूप से {clientSecretEnv}) सेट करें और पुनः प्रारंभ करें।", + "gitlabDuoSetupDescription": "आवेदन पंजीकृत होने के बाद और इस OmniRoute उदाहरण पर env vars सेट होने के बाद, OAuth लॉगिन शुरू करने के लिए जारी रखें पर क्लिक करें।", + "continue": "जारी रखें" }, "cursorAuthModal": { "title": "कर्सर आईडीई कनेक्ट करें", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "और लोड करें", - "loadingMore": "और लोड हो रहा है..." + "loadingMore": "और लोड हो रहा है...", + "correlationId": "संबंध पहचानकर्ता", + "group": { + "showAllRows": "सभी पंक्तियाँ दिखाएँ", + "showLatestPerCorrelation": "संबंध ID के अनुसार नवीनतम दिखाएँ", + "grouped": "समूहबद्ध" + }, + "running": "चल रहा है", + "interval": { + "decrease": "अवधि घटाएँ", + "title": "सेकंड में ऑटो-रीफ्रेश अंतराल", + "increase": "अवधि बढ़ाएँ" + }, + "status": { + "inProgress": "प्रगति में", + "recoveredByRetry": "पुनर्प्राप्त किया गया पुनः प्रयास द्वारा", + "goToParent": "माता-पिता के अनुरोध पर जाएं", + "healedTitle": "विफल, {count} पुनः प्रयासों के बाद पुनर्प्राप्त हुआ", + "healed": "ठीक हुआ", + "failedTitle": "सभी {count} प्रयास विफल हो गए", + "failed": "विफल", + "pinnedTitle": "संदर्भ-कैश सत्र पिनिंग के माध्यम से मॉडल चुना गया", + "pinned": "पिन किया गया" + }, + "attempts": "प्रयास", + "detail": { + "collapse": "{title} को संकुचित करें", + "expand": "{title} का विस्तार करें", + "copyTitle": "कॉपी {title}", + "copied": "कॉपी किया गया!", + "copy": "कॉपी", + "autoscrollOn": "ऑटोस्क्रॉल: चालू", + "autoscrollOff": "ऑटोस्क्रॉल: बंद", + "payload": { + "clientRawRequest": "क्लाइंट कच्चा अनुरोध", + "clientRequest": "क्लाइंट अनुरोध", + "openaiRequest": "OpenAI अनुरोध", + "providerRequest": "प्रदाता अनुरोध", + "providerResponse": "प्रदाता प्रतिक्रिया", + "clientResponse": "क्लाइंट प्रतिक्रिया", + "pipelineError": "पाइपलाइन त्रुटि" + }, + "payloadMissing": "इस लॉग प्रविष्टि के लिए विस्तृत पेलोड आर्टिफैक्ट अब उपलब्ध नहीं है।", + "payloadCorrupt": "विस्तृत पेलोड आर्टिफैक्ट को पार्स नहीं किया जा सका।", + "notAvailable": "N/A", + "semanticCache": "सेमांटिक (OmniRoute)", + "upstreamCache": "उपस्ट्रीम (प्रदाता)", + "ariaLabel": "अनुरोध लॉग विवरण", + "completed": "पूर्ण हुआ", + "upstreamStatus": "उपधारा: {status}", + "statusDiscrepancy": "OmniRoute ने {provider} लौटाने के बावजूद {status} लौटाया", + "previousRequest": "पिछला अनुरोध", + "nextRequest": "अगली अनुरोध", + "close": "डिटेल मोडल बंद करें", + "startedAt": "शुरू हुआ", + "endedAt": "समाप्त हुआ", + "duration": "अवधि", + "model": "मॉडल", + "provider": "प्रदाता", + "account": "खाता", + "input": "इनपुट", + "totalIn": "कुल इन: {value}", + "cacheRead": "कैश पढ़ें: {value}", + "cacheWrite": "कैश लिखें: {value}", + "compressed": "संकुचित: {from} → {to} ({percent}% बचत)", + "output": "आउटपुट", + "totalOut": "कुल बाहर: {value}", + "reasoning": "कारण: {value}", + "requestedModel": "अनुरोधित मॉडल", + "requestProtocol": "अनुरोध प्रोटोकॉल", + "cacheSource": "कैश स्रोत", + "modelPinning": "मॉडल पिनिंग", + "activeModelPinning": "सक्रिय — सत्र पिनिंग के माध्यम से मॉडल चुना गया", + "rotated": "घुमाया गया: {initial} -> {final}", + "apiKey": "एपीआई कुंजी", + "noApiKey": "कोई API कुंजी नहीं", + "combo": "कॉम्बो", + "error": "त्रुटि", + "unblockAll": "सभी अनब्लॉक करें", + "cleared": "साफ किया गया", + "unblock": "अनब्लॉक करें", + "relatedRequests": "संबंधित अनुरोध ({count})", + "current": "वर्तमान", + "detailStatus": "विवरण स्थिति", + "loadingDetails": "अनुरोध विवरण लोड हो रहा है...", + "providerEventStream": "प्रदाता इवेंट स्ट्रीम", + "clientEventStream": "क्लाइंट इवेंट स्ट्रीम", + "eventStream": "इवेंट स्ट्रीम", + "responsePayloadLegacy": "प्रतिक्रिया पेलोड (विरासत)", + "requestPayloadLegacy": "अनुरोध पेलोड (विरासत)", + "noPayload": "इस लॉग प्रविष्टि के लिए कोई पेलोड डेटा उपलब्ध नहीं है।", + "correlationId": "संबंध पहचानकर्ता", + "correlationIdValue": "संबंध पहचानकर्ता: {id}", + "detailedPayloadInfo": "यदि आप नए अनुरोधों के लिए चार-चरणीय क्लाइंट/प्रदाता पेलोड दृश्य चाहते हैं, तो पहले विस्तृत लॉगिंग सक्षम करें।" + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} अक्षम किया गया", "providerAdded": "{provider} जोड़ा गया", "add": "जोड़ें", - "manualApiKey": "मैनुअल एपीआई कुंजी का उपयोग करें" + "manualApiKey": "मैनुअल एपीआई कुंजी का उपयोग करें", + "createDahlTokenFailed": "Dahl टोकन बनाने में विफल", + "providerProxy": "प्रॉक्सी", + "providerProxyConfigureHint": "प्रॉक्सी कॉन्फ़िगर करें", + "providerProxyTitleConfigured": "प्रॉक्सी कॉन्फ़िगर की गई: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-प्रतिबंधित — शर्तें देखें", "caution": "सावधानी — व्यक्तिगत-उपयोग / प्रॉक्सी खंड", "ok": "आम तौर पर अनुमेय" - } + }, + "allProviders": "सभी प्रदाता", + "noApiKeyRequired": "कोई API कुंजी आवश्यक नहीं है" }, "providerHealthAutopilot": { "title": "प्रदाता स्वास्थ्य ऑटोपायलट", @@ -12390,7 +13047,11 @@ "on": "चालू", "off": "बंद", "availableProviders": "उपलब्ध प्रदाता ({count})", - "noProviderOverrides": "कोई ओवरराइड नहीं — सभी सक्रिय प्रदाता अपने डिफ़ॉल्ट मॉडल के साथ भाग लेंगे" + "noProviderOverrides": "कोई ओवरराइड नहीं — सभी सक्रिय प्रदाता अपने डिफ़ॉल्ट मॉडल के साथ भाग लेंगे", + "resetFailed": "रीसेट विफल हुआ", + "resetSuccess": "कॉन्फ़िग डिफ़ॉल्ट्स पर रीसेट करें", + "running": "चल रहा है...", + "testFailed": "परीक्षण विफल हुआ" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute का संस्थापक ओपन सोर्स मित्र है", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "प्रदाता इस छवि अनुरोध के लिए दृष्टि का समर्थन नहीं करता", "capabilityFilter.toolsMismatch": "प्रदाता टूल कॉलिंग का समर्थन नहीं करता", "capabilityFilter.structuredOutputMismatch": "प्रदाता संरचित आउटपुट का समर्थन नहीं करता", - "capabilityFilter.contextWindowMismatch": "अनुरोध प्रदाता संदर्भ विंडो से अधिक है" + "capabilityFilter.contextWindowMismatch": "अनुरोध प्रदाता संदर्भ विंडो से अधिक है", + "publicSystem": { + "notFound": { + "title": "पृष्ठ नहीं मिला", + "description": "जिस पृष्ठ की आप तलाश कर रहे हैं, वह मौजूद नहीं है या इसे स्थानांतरित कर दिया गया है।", + "dashboardAriaLabel": "डैशबोर्ड पर वापस जाएं", + "statusAriaLabel": "सिस्टम स्थिति पृष्ठ खोलें", + "systemStatus": "सिस्टम स्थिति" + }, + "error": { + "title": "आंतरिक सर्वर त्रुटि", + "description": "आपके अनुरोध को संसाधित करते समय कुछ गलत हुआ। हमारी टीम को सूचित कर दिया गया है और वे एक समाधान पर काम कर रहे हैं।", + "errorId": "त्रुटि आईडी: {id}", + "detailsAriaLabel": "त्रुटि विवरण", + "retryAriaLabel": "पृष्ठ को फिर से लोड करने का प्रयास करें", + "tryAgain": "फिर से प्रयास करें", + "dashboardAriaLabel": "डैशबोर्ड पर लौटें", + "statusAriaLabel": "सिस्टम स्थिति खोलें", + "systemStatus": "सिस्टम स्थिति" + }, + "globalError": { + "title": "कुछ गलत हो गया", + "description": "एक अप्रत्याशित त्रुटि हुई। इसे लॉग किया गया है और हमारी टीम इसकी जांच करेगी।", + "detailsAriaLabel": "त्रुटि विवरण", + "retryAriaLabel": "पृष्ठ को फिर से लोड करने का प्रयास करें", + "tryAgain": "फिर से प्रयास करें", + "statusAriaLabel": "सिस्टम स्थिति खोलें", + "systemStatus": "सिस्टम स्थिति" + }, + "offline": { + "title": "कनेक्टिविटी समस्या", + "description": "OmniRoute अभी नेटवर्क तक पहुँच नहीं सकता। अपने इंटरनेट, VPN, या प्रॉक्सी सेटिंग्स की जाँच करें।", + "connectionRestored": "कनेक्शन पुनर्स्थापित हुआ", + "offlineModeDetected": "ऑफलाइन मोड का पता चला", + "retryConnection": "कनेक्शन फिर से प्रयास करें", + "openStatusPage": "स्थिति पृष्ठ खोलें" + }, + "maintenance": { + "title": "निर्धारित रखरखाव", + "description": "कुछ सेवाएँ अस्थायी रूप से अनुपलब्ध हैं जबकि रखरखाव चल रहा है। कोर राउटिंग आमतौर पर ऑनलाइन रहती है, लेकिन प्रबंधन सुविधाएँ कमज़ोर हो सकती हैं।", + "suggestion1": "कुछ मिनटों बाद पुनः प्रयास करें।", + "suggestion2": "पुनः प्रयास करने से पहले वर्तमान स्वास्थ्य संकेतकों और प्रदाता की स्थिति की जांच करें।", + "systemStatus": "सिस्टम स्थिति देखें", + "healthDashboard": "स्वास्थ्य डैशबोर्ड खोलें" + }, + "status": { + "title": "सिस्टम स्थिति", + "description": "OmniRoute कोर सेवाओं के लिए लाइव परिचालन स्नैपशॉट।", + "loadingHealth": "स्वास्थ्य मेट्रिक्स लोड हो रहे हैं...", + "failedToLoad": "सिस्टम स्वास्थ्य लोड करने में विफल।", + "unableToReachHealth": "स्वास्थ्य एंडपॉइंट तक पहुँचने में असमर्थ। कनेक्टिविटी की जाँच करें और पुनः प्रयास करें।", + "healthCheckFailed": "स्वास्थ्य जांच विफल हुई", + "openConnectivityHelp": "ओपन कनेक्टिविटी सहायता", + "maintenanceInfo": "रखरखाव जानकारी", + "service": "सेवा", + "unknown": "अज्ञात", + "notAvailable": "n/a", + "providersTracked": "प्रदाताओं को ट्रैक किया गया", + "circuitBreakerState": "प्रदाता सर्किट ब्रेकर स्थिति", + "lastUpdate": "अंतिम अपडेट: {timestamp}", + "uptimeMinutes": "{minutes}म", + "uptimeHoursMinutes": "{hours}घंटे {minutes}मिनट" + }, + "statusPages": { + "400": { + "title": "खराब अनुरोध", + "description": "अनुरोध पेलोड अमान्य या अधूरा है।", + "suggestion1": "पुनः प्रयास करने से पहले आवश्यक फ़ील्ड और पेलोड प्रारूप की समीक्षा करें।", + "suggestion2": "यदि आप API का उपयोग कर रहे हैं, तो JSON स्कीमा को स्थानीय रूप से मान्य करें।", + "suggestion3": "यदि यह लगातार हो रहा है, तो पेलोड की जांच करने के लिए Translator Playground में अनुरोध खोलें।", + "primaryAction": "डॉक्यूमेंटेशन खोलें", + "secondaryAction": "अनुवादक खोलें" + }, + "401": { + "title": "अनधिकृत", + "description": "इस संसाधन तक पहुँचने के लिए प्रमाणीकरण आवश्यक है।", + "suggestion1": "फिर से साइन इन करें और ऑपरेशन को पुनः प्रयास करें।", + "suggestion2": "API कॉल के लिए, सुनिश्चित करें कि Bearer टोकन मौजूद और मान्य है।", + "suggestion3": "यदि टोकन हाल ही में घुमाया गया था, तो अपने क्लाइंट क्रेडेंशियल्स को अपडेट करें।", + "primaryAction": "लॉगिन पर जाएं", + "secondaryAction": "API कुंजी प्रबंधित करें" + }, + "403": { + "title": "निषिद्ध", + "description": "आपका अनुरोध समझा गया, लेकिन नीति द्वारा पहुँच अस्वीकृत है।", + "suggestion1": "सेटिंग्स में IP अनुमति सूची/प्रतिबंध सूची नियम जांचें।", + "suggestion2": "अपने API कुंजी के लिए असाइन की गई मॉडल और बजट नीतियों की पुष्टि करें।", + "suggestion3": "एक व्यवस्थापक से आवश्यक अनुमति क्षेत्र प्रदान करने के लिए कहें।", + "primaryAction": "ओपन एक्सेस सहायता", + "secondaryAction": "सुरक्षा सेटिंग्स खोलें" + }, + "408": { + "title": "अनुरोध समय समाप्त हो गया", + "description": "सर्वर को समय पर एक पूर्ण अनुरोध प्राप्त नहीं हुआ।", + "suggestion1": "छोटे पेलोड के साथ अनुरोध को फिर से प्रयास करें।", + "suggestion2": "अपने नेटवर्क स्थिरता और VPN/प्रॉक्सी विलंबता की जांच करें।", + "suggestion3": "लंबी प्रक्रियाओं के लिए, स्ट्रीमिंग सक्षम करें या अनुरोध को विभाजित करें।", + "primaryAction": "एंडपॉइंट गाइड खोलें", + "secondaryAction": "नेटवर्क स्थिति जांचें" + }, + "429": { + "title": "बहुत अधिक अनुरोध", + "description": "इस क्लाइंट, कुंजी, या प्रदाता के लिए दर सीमाएँ पार हो गईं।", + "suggestion1": "कूलडाउन का इंतज़ार करें और सुझाए गए अंतराल के बाद पुनः प्रयास करें।", + "suggestion2": "फॉलबैक प्रदाताओं के साथ एक कॉम्बो पर स्विच करें।", + "suggestion3": "सेटिंग्स में प्रदाता स्थिरता/दर-सीमा प्रोफाइल को समायोजित करें।", + "primaryAction": "रेसिलियंस सेटिंग्स खोलें", + "secondaryAction": "ओपन कॉम्बोज" + }, + "500": { + "title": "आंतरिक सर्वर त्रुटि", + "description": "आपके अनुरोध को संसाधित करते समय एक अप्रत्याशित सर्वर-साइड त्रुटि हुई।", + "suggestion1": "कुछ सेकंड में एक बार फिर प्रयास करें।", + "suggestion2": "स्वास्थ्य टेलीमेट्री और सर्वर लॉग्स की जांच करें ताकि संबंधित अनुरोध आईडी मिल सकें।", + "suggestion3": "यदि यह लगातार हो रहा है, तो समय मुहैया कराते हुए और अनुरोध संदर्भ के साथ समस्या की रिपोर्ट करें।", + "primaryAction": "स्वास्थ्य डैशबोर्ड खोलें", + "secondaryAction": "लॉग्स खोलें" + }, + "502": { + "title": "खराब गेटवे", + "description": "उपधारा प्रदाता या गेटवे एक अमान्य प्रतिक्रिया लौटाया।", + "suggestion1": "किसी अन्य प्रदाता या सक्रिय संयोजन मार्ग के साथ पुनः प्रयास करें।", + "suggestion2": "प्रदाता प्रमाणपत्रों और मॉडल उपलब्धता की जांच करें।", + "suggestion3": "फॉर्मेट रूपांतरण शामिल होने पर अनुवादक के आउटपुट का निरीक्षण करें।", + "primaryAction": "प्रदाताओं को खोलें", + "secondaryAction": "अनुवादक खोलें" + }, + "503": { + "title": "सेवा अनुपलब्ध है", + "description": "यह सेवा अस्थायी रूप से रखरखाव या घटित निर्भरताओं के कारण अनुपलब्ध है।", + "suggestion1": "एक क्षण प्रतीक्षा करें और पुनः प्रयास करें।", + "suggestion2": "रखरखाव नोटिस और सिस्टम स्थिति की जांच करें।", + "suggestion3": "यदि आपका कार्यप्रवाह विलंब-संवेदनशील है तो बैकअप प्रदाताओं का उपयोग करें।", + "primaryAction": "रखरखाव विवरण", + "secondaryAction": "सिस्टम स्थिति" + } + } + }, + "kiroAuthModal": { + "title": "कनेक्ट {providerLabel}", + "chooseMethod": "अपनी प्रमाणीकरण विधि चुनें:", + "builderId": "AWS बिल्डर आईडी", + "builderDescription": "अधिकांश उपयोगकर्ताओं के लिए अनुशंसित। {providerLabel} से जुड़े AWS खाते के साथ साइन इन करें।", + "organization": "आपका संगठन (AWS IAM पहचान केंद्र)", + "organizationDescription": "अपने कंपनी के SSO प्रारंभ URL का उपयोग करें (उदाहरण: {url}).", + "googleAccount": "गूगल खाता", + "googleDescription": "अपने Google खाते से लॉगिन करें।", + "githubAccount": "गिटहब खाता", + "githubDescription": "अपने GitHub खाते से लॉगिन करें।", + "importToken": "टोकन आयात करें", + "importDescription": "{providerLabel} से निर्यातित एक रिफ्रेश टोकन पेस्ट करें।", + "apiKey": "एपीआई कुंजी", + "apiKeyDescription": "एक दीर्घकालिक {providerLabel} / CodeWhisperer API कुंजी पेस्ट करें। इसे बिना रिफ्रेश टोकन के एक बियरर क्रेडेंशियल के रूप में संग्रहीत किया गया है; प्रोफ़ाइल खोज सर्वोत्तम प्रयास है।", + "idcStartUrl": "IDC प्रारंभ URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "आपके संगठन का AWS IAM पहचान केंद्र URL", + "awsRegion": "AWS क्षेत्र", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "आपके पहचान केंद्र के लिए AWS क्षेत्र (डिफ़ॉल्ट: us-east-1)", + "continue": "जारी रखें", + "back": "वापस", + "autoDetecting": "टोकन का स्वचालित पता लगाना...", + "readingCredentials": "AWS SSO कैश से {providerLabel} क्रेडेंशियल्स पढ़ना", + "tokenNotDetected": "{providerLabel} टोकन स्वचालित रूप से पहचान नहीं किया गया। कृपया अपना रिफ्रेश टोकन मैन्युअल रूप से पेस्ट करें।", + "refreshToken": "रीफ्रेश टोकन", + "tokenPlaceholder": "टोकन स्वचालित रूप से भरा जाएगा...", + "importing": "आयात कर रहा है...", + "apiKeyPlaceholder": "अपने {providerLabel} एपीआई कुंजी चिपकाएँ...", + "apiKeyStoredDescription": "लंबे समय तक चलने वाले बियरर क्रेडेंशियल के रूप में संग्रहीत एन्क्रिप्टेड। कोई रिफ्रेश फ्लो नहीं है।", + "apiKeyRegionDescription": "कुंजी के लिए AWS क्षेत्र (डिफ़ॉल्ट: us-east-1)", + "validating": "मान्यकरण हो रहा है...", + "validateAndSaveApiKey": "API कुंजी मान्य करें और सहेजें", + "errorAutoDetect": "टोकन का स्वचालित पता नहीं लगाया जा सका", + "errorAutoDetectFailed": "टोकन का स्वचालित पता लगाने में विफल", + "errorRefreshTokenRequired": "कृपया एक रिफ्रेश टोकन दर्ज करें", + "errorImportFailed": "आयात विफल हुआ", + "errorApiKeyRequired": "कृपया एक Kiro API कुंजी दर्ज करें", + "errorApiKeyImportFailed": "API कुंजी आयात विफल हुआ", + "errorIdcStartUrlRequired": "कृपया अपना IDC प्रारंभ URL दर्ज करें" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} को {providerName} के माध्यम से जोड़ें", + "errorStartAuthorization": "प्राधिकरण शुरू करने में विफल रहा", + "errorAuthorizationExpired": "अधिकार समाप्त हो गया। फिर से लॉगिन प्रक्रिया शुरू करें।", + "errorAuthorizationFailed": "अधिकार प्राप्ति विफल हुई", + "initializing": "आरंभ हो रहा है...", + "settingUp": "{providerName} प्रमाणीकरण सेट कर रहे हैं", + "openIncognito": "इस लिंक को एक इंकॉग्निटो विंडो में खोलें", + "incognitoDescription": "एक इंकॉग्निटो/प्राइवेट विंडो का उपयोग करें ताकि मौजूदा खातों के साथ सत्र संघर्ष से बचा जा सके।", + "copyLink": "लिंक कॉपी करें", + "verificationCode": "सत्यापन कोड", + "waiting": "अधिकारिता की प्रतीक्षा कर रहे हैं...", + "cancel": "रद्द करें", + "successTitle": "सफलता से कनेक्टेड!", + "successMessage": "आपका {providerLabel} खाता {providerName} के माध्यम से जुड़ गया है।", + "done": "हो गया", + "errorTitle": "कनेक्शन विफल हुआ", + "close": "बंद करें" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "अधिकार प्राप्ति विफल हुई", + "errorPopupBlocked": "पॉपअप अवरुद्ध — इस साइट के लिए पॉपअप की अनुमति दें, या नीचे टोकन मैन्युअल रूप से पेस्ट करें।", + "errorPopupClosed": "अधिकारिता विंडो को पूरा करने से पहले बंद कर दिया गया।", + "errorAccessTokenRequired": "एक्सेस टोकन की आवश्यकता है।", + "errorImportFailed": "आयात विफल हुआ", + "title": "Connect Trae SOLO", + "authorizeDescription": "trae.ai के माध्यम से एक पॉपअप में अधिकृत करें। पॉपअप अपने आप बंद हो जाएगा जब टोकन आयात हो जाएगा।", + "authorizeImportant": "महत्वपूर्ण: आपको पहले trae.ai में इस ब्राउज़र में लॉग इन होना चाहिए। अधिकृत पृष्ठ केवल एक मौजूदा सत्र की पुष्टि करता है — यह आपको साइन इन नहीं कर सकता। यदि आप \"लॉगिन विफल\" देखते हैं, तो \"Open solo.trae.ai\" पर क्लिक करें, साइन इन करें, फिर यहां लौटें।", + "waitingForAuthorization": "trae.ai का इंतज़ार कर रहे हैं…", + "authorizeWithBrowser": "ब्राउज़र के साथ अधिकृत करें", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "या एक टोकन मैन्युअल रूप से पेस्ट करें", + "manualInstructions": "solo.trae.ai में साइन इन करें, DevTools → Network खोलें, कोई भी चैट संदेश भेजें, और Authorization: Cloud-IDE-JWT {tokenPlaceholder} अनुरोध हेडर से JWT कॉपी करें। JWT का जीवनकाल ~14 दिन है। वैकल्पिक पहचान फ़ील्ड उसी अनुरोध बॉडी में common_params से आते हैं।", + "accessTokenLabel": "एक्सेस टोकन (क्लाउड-आईडीई-जेपीटी)", + "webId": "वेब आईडी", + "optional": "वैकल्पिक", + "bizUserId": "बिज़ यूज़र आईडी", + "userUniqueId": "उपयोगकर्ता अद्वितीय आईडी", + "scope": "क्षेत्र", + "tenant": "किरायेदार", + "region": "क्षेत्र", + "importing": "आयात कर रहा है…", + "importToken": "टोकन आयात करें", + "cancel": "रद्द करें" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "वितरित कर रहा है...", + "complete": "पूर्ण करें", + "defaultLabel": "प्रॉक्सी वितरित करें" + } + }, + "providerTest": { + "dialogLabel": "परीक्षण {provider}", + "deprecated": "अवशिष्ट", + "risk": "जोखिम", + "close": "बंद करें", + "model": "मॉडल", + "key": "कुंजी", + "defaultKey": "डिफ़ॉल्ट", + "clearConversation": "वार्तालाप साफ़ करें", + "clear": "स्पष्ट करें", + "tabs": { + "test": "परीक्षण", + "logs": "लॉग्स" + }, + "loadingLogs": "लॉग लोड हो रहे हैं…", + "failedToLoadLogs": "लॉग लोड करने में विफल रहा", + "noLogsYet": "अभी तक कोई लॉग नहीं है", + "noLogsDescription": "Test टैब से एक परीक्षण संदेश भेजें — इस प्रदाता के लिए लॉग यहाँ दिखाई देंगे।", + "openFullLogs": "पूर्ण लॉग पृष्ठ खोलें", + "live": "सीधा", + "tailingLast": "आखिरी {count} का अनुसरण करना", + "refreshNow": "अब ताज़ा करें", + "refresh": "रीफ्रेश", + "unknownRequester": "अज्ञात अनुरोधकर्ता", + "fields": { + "timestamp": "टाइमस्टैम्प", + "status": "स्थिति", + "duration": "अवधि", + "model": "मॉडल", + "requestedModel": "अनुरोधित मॉडल", + "provider": "प्रदाता", + "requester": "अनुरोधकर्ता", + "tokens": "टोकन" + } + }, + "proxyLog": { + "detailAriaLabel": "प्रॉक्सी लॉग विवरण", + "event": "प्रॉक्सी इवेंट", + "close": "प्रॉक्सी विवरण मोडल बंद करें", + "time": "समय", + "latency": "लेटेंसी", + "clientIp": "क्लाइंट आईपी", + "proxy": "प्रॉक्सी", + "direct": "प्रत्यक्ष", + "type": "टाइप", + "level": "स्तर", + "provider": "प्रदाता", + "tlsFingerprint": "TLS फ़िंगरप्रिंट", + "directNative": "प्रत्यक्ष (स्थानीय)", + "targetUrl": "लक्ष्य URL", + "error": "त्रुटि", + "configuration": "प्रॉक्सी कॉन्फ़िगरेशन" + }, + "requestTimeline": { + "title": "अनुरोध समयरेखा", + "modes": { + "follow": "अनुसरण करें", + "followDescription": "धुरी बाईं ओर स्क्रॉल होती है, NOW रेखा 75% पर रहती है", + "now": "अब", + "nowDescription": "वर्तमान समय पर कूदें, NOW लाइन केंद्र में रीसेट होती है", + "pan": "पैन", + "panDescription": "खींचें ताकि खोज सकें, पृष्ठभूमि स्थिर है" + }, + "reset": "रीसेट", + "started": "शुरू किया गया", + "ended": "समाप्त हुआ", + "duration": "अवधि", + "status": "स्थिति", + "provider": "प्रदाता", + "tokens": "टोकन", + "active": "सक्रिय", + "other": "अन्य", + "tenMinutes": "10मिनट", + "hour": "घंटा", + "day": "दिन", + "unknownModel": "अज्ञात", + "pending": "लंबित" + }, + "metadata": { + "compressionTitle": "संपीड़न", + "compressionDescription": "संदर्भ संकुचन सेटिंग्स को कॉन्फ़िगर करें ताकि टोकन उपयोग और लागत को कम किया जा सके।", + "relayTitle": "OmniRoute — रिले प्रॉक्सी", + "relayDescription": "आपकी AI अवसंरचना के लिए सर्वरलेस रिले प्रॉक्सी एंडपॉइंट्स", + "trafficInspectorTitle": "ट्रैफिक इंस्पेक्टर — ओम्नीरूट", + "trafficInspectorDescription": "LLM कॉल्स की निगरानी करें + किसी भी एप्लिकेशन के HTTPS ट्रैफ़िक को डिबग करें" + }, + "conductor": { + "title": "कंडक्टर — CLI-एजेंट बेड़ा", + "subtitle": "OmniConductor हब: धावक, कार्य कतार और परिषद, लाइव", + "runners": "धावक", + "tasks": "कार्य", + "colName": "नाम", + "colClis": "सीएलआई", + "colStatus": "स्थिति", + "colTask": "कार्य", + "colMode": "मोड", + "colRunner": "रनर", + "colSummary": "सारांश", + "online": "ऑनलाइन", + "offline": "ऑफलाइन", + "draining": "निष्कासित करना", + "hubOffline": "कंडक्टर हब ऑफ़लाइन है या कॉन्फ़िगर नहीं किया गया है (CONDUCTOR_HUB_URL) — पुरानी डेटा के बजाय कुछ नहीं दिखा रहा है।", + "noRunners": "कोई धावक पंजीकृत नहीं है", + "noTasks": "अभी तक कोई कार्य नहीं है", + "detailTitle": "कार्य विवरण", + "prompt": "प्रॉम्प्ट", + "branch": "शाखा", + "fetchHint": "परिणाम प्राप्त करें: git fetch origin {branch}", + "council": "काउंसिल", + "candidates": "उम्मीदवार", + "cancel": "कार्य रद्द करें", + "cancelConfirmTitle": "क्या आप इस कार्य को रद्द करना चाहते हैं?", + "cancelConfirmMessage": "हब रनर पर निष्पादन को रोक देगा। इसे पूर्ववत नहीं किया जा सकता।", + "cancelFailed": "हब ने रद्द करने से इनकार कर दिया", + "close": "बंद करें", + "error": "त्रुटि", + "faroTitle": "Faro — बेड़े का प्रवक्ता", + "faroSubtitle": "चैट और वॉयस, वास्तविक बेड़े की घटनाओं में एंकर किया गया। विनाशकारी कमांड हमेशा पुष्टि के लिए पूछते हैं।", + "faroEmpty": "फ्लीट के बारे में पूछें — जैसे \"फ्लीट कैसी है?\"", + "faroPending": "Faro पुष्टि के लिए पूछ रहा है", + "faroPlaceholder": "Faro से बात करें…", + "faroSend": "भेजें", + "faroOffline": "Faro (spokesperson) ऑफ़लाइन है", + "yes": "हाँ", + "no": "नहीं", + "pushToTalk": "बात करने के लिए दबाए रखें", + "speakAnswers": "उत्तर बोलें", + "voiceModels": "वॉइस मॉडल (इस OmniRoute का प्रदाता/मॉडल)", + "voiceIdle": "बात करें", + "voiceListening": "सुन रहे हैं…", + "voiceThinking": "सोच रहे हैं…", + "voiceSpeaking": "बात कर रहा हूँ…", + "sttFailed": "ट्रांसक्रिप्शन विफल हुआ (STT मॉडल/प्रदाता की जांच करें)", + "ttsFailed": "भाषण संश्लेषण विफल हुआ (TTS मॉडल/प्रदाता की जांच करें)", + "micDenied": "माइक्रोफोन अनुपलब्ध है या अनुमति अस्वीकृत है" + }, + "cliproxyProviderExposure": { + "title": "प्रदाता एक्सपोजर", + "description": "cliproxyapi/ उपसर्ग के तहत CLIProxyAPI मॉडल को एक रूटिंग लक्ष्य के रूप में उजागर करें।", + "label": "cliproxyapi/... के रूप में उजागर करें", + "hint": "जब सक्षम किया जाता है, तो खोजे गए मॉडल OmniRoute में प्रदाता चयन में दिखाई देते हैं।", + "updateFailed": "अपडेट करने में विफल (HTTP {status})", + "networkError": "नेटवर्क त्रुटि — प्रदाता एक्सपोज़र सेटिंग अपडेट नहीं कर सका" + } } - diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 70e39307ec..3b2f9b0b91 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -172,6 +172,18 @@ "unselectAll": "Kijelölés megszüntetése", "visibleModels": "látható", "selectAllConfirm": "Hozzáad {count} modellt ehhez a kombinációhoz?", + "testSelectedProviders": "Teszt szolgáltatók", + "testingSelectedProviders": "Tesztelés {done}/{total}...", + "noProvidersSelectedToTest": "Először ellenőrizze az alábbiak közül legalább egy szolgáltatót", + "noModelsToTestForProviders": "Nincsenek modellek a kiválasztott szolgáltatók teszteléséhez", + "testSelectedProvidersResults": "{ok} a {total} modellből működik", + "selectWorkingModels": "Hozzáadás működik", + "unselectWorkingModels": "Kijelölés megszüntetése", + "noWorkingModelsToSelect": "Nincs több működő modell, amit hozzá lehetne adni", + "providerTestHint": "Tipp: ellenőrizze a szolgáltatót → Teszt → Működő hozzáadása. Kattintson újra a kijelölés megszüntetéséhez.", + "selectAllProviders": "Ellenőrizze az összes szolgáltatót", + "clearProviderSelection": "Törölje a szolgáltatók jelölését", + "providersSelectedCount": "{count} szolgáltató ellenőrizve", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Méret", + "toggleNoAuthProvider": "Kapcsolja ki a no-auth szolgáltatót", + "loadingModels": "Modellek betöltése…", + "selectAModel": "Válasszon egy modellt", + "degraded": "Lemért", + "zeroConfigBannerTitle": "Futtatás nulla konfigurációs módban", + "zeroConfigBannerBody": "Az OmniRoute automatikusan generálja a biztonságos titkosítási kulcsokat az első indításkor. Ezek a {dataDir} mappába kerülnek mentésre. Nincs szükség teendőre — az adatai titkosítva és biztonságban vannak. Egyedi kulcsok használatához adja hozzá a JWT_SECRET és STORAGE_ENCRYPTION_KEY értékeket ahhoz a fájlhoz.", + "batchRelativeTimeIn": "a {value}-ban", + "batchRelativeTimeAgo": "{value} ezelőtt", + "batchDetailsTitle": "Tétel Részletei", + "batchProgress": "Haladás", + "batchCompletedCount": "{count} befejezve", + "batchFailedCount": "{count} meghiúsult", + "batchPendingCount": "{count} függőben", + "batchTimeline": "Idővonal", + "batchTimelineInProgress": "Folyamatban", + "batchTimelineFinalizing": "Véglegesítés", + "batchTimelineCompleted": "Befejezett", + "batchTimelineFailed": "Sikertelen", + "batchTimelineExpires": "Lejár", + "batchTimelineExpired": "Lejárt", + "batchTimelineCancelling": "Mégse", + "batchTimelineCancelled": "Törölve", + "batchTokenUsage": "Token Használat", + "batchMetadata": "Metaadatok", + "batchFileContents": "Fájl Tartalma", + "batchFileUsedByCount": "Használva {count, plural, one {# tétel} other {# tétel}}", + "batchFilePreview": "Előnézet", + "batchFilePreviewTruncated": "Az első {shown} sor megjelenítése ({total} összes sor)", + "batchFileDownloadFull": "Teljes fájl letöltése" }, "disabled": "Letiltva", "featureFlagOmnirouteEmergencyFallbackDescription": "A keretet kimerítő kérések átirányítása a vészhelyzeti ingyenes tartalék szolgáltatóhoz/modellhez.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Elválasztó", "discovery": "Felfedezés", "discoverySubtitle": "Szolgáltatók vizsgálata ingyenes hozzáférésért", + "conductor": "Vezető", + "conductorSubtitle": "CLI-ügynök flotta", "resilienceConnections": "Kapcsolat Ellenálló Képesség", "resilienceConnectionsSubtitle": "Cooldown, megszakító, zárolási állapot", "settingsModalityBridge": "Modalitás Híd", - "settingsModalityBridgeSubtitle": "Kép/hang → szöveg visszaesés csak szöveges modellekhez" + "settingsModalityBridgeSubtitle": "Kép/hang → szöveg visszaesés csak szöveges modellekhez", + "commandPalette": { + "title": "Parancs paletta", + "searchPlaceholder": "Keresés oldalak, beállítások, eszközök...", + "clearSearch": "Keresés törlése", + "noResults": "Nincs találat", + "navigate": "navigálás", + "open": "megnyitás", + "close": "bezárás" + }, + "noResults": "Nincs találat" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Beállítások frissítése sikertelen", "sync.token.created": "Szinkronizálási token létrehozva", "sync.token.revoked": "Szinkronizálási token visszavonva" - } + }, + "mcpMetricCalls24h": "Hívások (24 óra)", + "mcpMetricSuccessRate": "Sikerességi arány", + "mcpMetricAvgDuration": "Átlagos időtartam", + "mcpMetricTopTool": "Legjobb eszköz" }, "themesPage": { "title": "Témák", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Új verzió érhető el. Kattintson a frissítéshez.", "updateStarted": "Frissítés elindult...", "reloadingPageAutomatically": "Oldal automatikus újratöltése...", - "providerTopology": "Szolgáltató topológia" + "providerTopology": "Szolgáltató topológia", + "downloadDmg": "DMG letöltése (macOS)", + "downloadDmgDescription": "Új verzió érhető el az OmniRoute asztali alkalmazásból. Kérjük, töltse le és telepítse a macOS DMG telepítőt a frissítéshez (jelenlegi: v{version}).", + "downloadExe": "Letöltés EXE (Windows)", + "downloadExeDescription": "Új verzió érhető el az OmniRoute asztali alkalmazásból. Kérjük, töltse le és telepítse a Windows EXE telepítőt a frissítéshez (jelenlegi: v{version}).", + "downloadAppImage": "AppImage letöltése (Linux)", + "downloadAppImageDescription": "Új verzió érhető el az OmniRoute asztali alkalmazásból. Kérjük, töltse le a Linux AppImage csomagot a frissítéshez (jelenlegi: v{version}).", + "downloadUpdate": "Frissítés Letöltése", + "downloadUpdateDescription": "Új verzió érhető el az OmniRoute asztali alkalmazásból. Kérjük, töltse le a rendszerének megfelelő alkalmazásformátumot a frissítéshez (jelenlegi: v{version}).", + "updateQueued": "Frissítés v{version} várakozóban.", + "updateDockerRebuilding": "A Docker kép a háttérben újraépül.", + "updateWaitingRestart": "Várakozás az OmniRoute új verzióval való újraindítására.", + "updateInstalling": "Telepítés v{version}.", + "updateRunning": "Az OmniRoute most a v{version} verziót futtatja.", + "updateCompleted": "Az OmniRoute frissítve lett a v{version} verzióra.", + "updateDockerStillRebuilding": "A Docker kép még mindig újraépül a {version} verzióhoz.", + "updateInstallingBackground": "A v{version} háttérben történő telepítése.", + "updateWaitingVersion": "Várakozás az OmniRoute visszatérésére a v{version} verzión.", + "updateDockerStillInProgress": "A Docker újraépítése még folyamatban van.", + "updateRestarting": "Szolgáltatás újraindítása folyamatban. Várakozás az OmniRoute online állapotának helyreállítására...", + "updateTimeout": "A frissítés megkezdődött, de a v{version} nem vált elérhetővé a timeout előtt. Frissítse az oldalt, vagy ellenőrizze a szerver naplóit.", + "updateTimedOut": "A frissítés a v{version} verzióra időtúllépés miatt nem sikerült.", + "updateStartFailed": "A frissítés indítása nem sikerült.", + "noResponseStream": "Nem érkezett válaszfolyam.", + "updateComplete": "Frissítés kész!", + "updateFailed": "A frissítés nem sikerült.", + "updateNetworkError": "Hálózati hiba — a kapcsolat megszakadt a frissítés során.", + "stepInstallPackage": "Csomag Telepítése", + "stepRebuildNativeModules": "Újraépítés Helyi Modulok", + "stepRestartService": "Szolgáltatás újraindítása", + "stepComplete": "Teljesítve", + "stepError": "Hiba", + "updateCompleteTitle": "Frissítés kész!", + "updateFailedTitle": "Frissítés Sikertelen", + "updatingTitle": "OmniRoute frissítése...", + "reloadNotice": "Az oldal néhány másodperc múlva automatikusan újratöltődik.", + "retryNotice": "Kérjük, próbálja meg újra, vagy frissítse manuálisan a CLI-n keresztül.", + "restartNotice": "Ne zárja be ezt az oldalt. A rendszer automatikusan újraindul.", + "reloadNow": "Frissítés most", + "closeUpdate": "Bezárás", + "retryUpdate": "Újrapróbálkozás", + "updateAvailableTitle": "Frissítés elérhető: v{version}{desktop}", + "desktopAppLabel": "(Asztali Alkalmazás)", + "checkingForUpdates": "Frissítések ellenőrzése...", + "versionAvailableForDownload": "A v{version} verzió letöltésre elérhető.", + "downloadingUpdate": "Frissítés letöltése... {percent}% kész.", + "updateDownloaded": "A frissítés sikeresen letöltődött! Kattintson a Restart & Install gombra az alkalmazáshoz.", + "autoUpdateFailed": "Automatikus frissítés nem sikerült: {reason}.", + "unknownUpdateError": "Ismeretlen hiba", + "versionAvailableDesktop": "A v{version} verzió elérhető az asztali alkalmazáshoz.", + "manualUpdateRequired": "Kézi frissítés szükséges ehhez a telepítési típushoz.", + "restartAndInstall": "Újraindítás és telepítés", + "checkForUpdate": "Frissítés ellenőrzése", + "manualUpdate": "Kézi Frissítés", + "directDownloadHint": "Vagy töltsd le közvetlenül a megfelelő telepítőformátumot:", + "releaseNotes": "Kiadási Megjegyzések", + "readMore": "Tovább olvasom", + "noAuthLabel": "Nincs hitelesítés" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "A kérés körüli mentett hívásnaplókból következtetve", "routeRecommendations": "Ajánlások", "routeLimitations": "Korlátozások", - "routeNoKnownLimitations": "Nincsenek ismert korlátozások ehhez a magyarázathoz." + "routeNoKnownLimitations": "Nincsenek ismert korlátozások ehhez a magyarázathoz.", + "searchAnalyticsLoading": "Keresési elemzések betöltése…", + "searchAnalyticsNoData": "Még nincs keresési adat elérhető.", + "searchAnalyticsNoDataDescription": "A keresési kérések itt fognak megjelenni az első keresés után a /v1/search segítségével.", + "searchAnalyticsToday": "{count} ma", + "searchAnalyticsCachedRequests": "{count} gyorsítótárazott kérés", + "searchAnalyticsApiCosts": "keresési API költségek", + "searchAnalyticsErrors": "{count} hiba", + "searchAnalyticsNoErrors": "Nincs hiba", + "searchAnalyticsProviderBreakdown": "Szolgáltató Elemzés", + "searchAnalyticsQueries": "lekérdezések", + "searchAnalyticsEmptyDescription": "Használja a POST /v1/search parancsot a webes keresések irányításának megkezdéséhez.", + "searchAnalyticsFreeTier": "Ingyenes szint elérhető: Serper (2,500/hó), Brave (2,000/hó), Exa (1,000/hó), Tavily (1,000/hó) — összesen 6,500+ ingyenes keresés/hó automatikus átváltással.", + "autoRoutingNoDataAvailable": "Nincs elérhető automatikus útvonal-analitika. Kérjük, használja az auto/ előtagot a metrikák megtekintéséhez.", + "defaultVariantLabel": "Alapértelmezett", + "freeTierAvailable": "Ingyenes szint elérhető" }, "apiManager": { "title": "API kulcsok", @@ -2348,7 +2478,9 @@ "providerCount": "{count} szolgáltató", "imageToTextBridgeAvailable": "A Modality Bridge most már képes leírni a képeket csak szöveges modellek számára. Az inline játszótér elérhető lesz, amikor a /api/v1/images/understanding megvalósításra kerül.", "imageToTextBridgeCta": "Állítsa be a Kép→Szöveg hidat a Modalitás Híd beállításaiban", - "sttBridgeCta": "Állítsa be a Beszéd→Szöveg hidat a Modalitás Híd beállításaiban" + "sttBridgeCta": "Állítsa be a Beszéd→Szöveg hidat a Modalitás Híd beállításaiban", + "existingConnection": "Meglévő kapcsolat", + "openrouterSttDescription": "Az OpenRouter beszédről szövegre modellek a beállított OpenRouter kapcsolatodat használják. Nincs szükség külön hitelesítő adatokra." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Beillesztés ide:", "copilotReloadInstruction": "Ezután töltse be újra a VS Code-ot, és adja meg az API-kulcsot a beviteli mezőben.", "wireApiChatCompletions": "Csevegés befejezése (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "A művelet meghiúsult", + "cliproxyapiActionSucceeded": "A művelet sikeres volt", + "cliproxyapiCheckUpdates": "Frissítések ellenőrzése", + "cliproxyapiDescription": "Felsőbb proxy visszaesés (Go-alapú OAuth)", + "cliproxyapiHealth": "Egészség", + "cliproxyapiHealthy": "Egészséges", + "cliproxyapiInstall": "Telepítés", + "cliproxyapiNotInstalledValue": "Nincs telepítve", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "A kérés meghiúsult", + "cliproxyapiRestart": "Újraindítás", + "cliproxyapiStart": "Kezdés", + "cliproxyapiStatusError": "Hiba", + "cliproxyapiStatusInstalled": "Telepítve", + "cliproxyapiStatusNotInstalled": "Nincs Telepítve", + "cliproxyapiStatusRunning": "Futás", + "cliproxyapiStatusStopped": "Megállítva", + "cliproxyapiStop": "Megállás", + "cliproxyapiUnhealthy": "Egészségtelen", + "cliproxyapiUnknown": "Ismeretlen", + "cliproxyapiUpdate": "Frissítés", + "cliproxyapiUpdateAvailable": "Frissítés elérhető: v{current} → v{latest}", + "cliproxyapiVersion": "Verzió" }, "combos": { "title": "Kombók", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Csak a kvóta kimerülésekor haladjon előre", + "fallbackOnlyOnQuotaExhaustionShort": "csak kvóta visszaállítás", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "A módcsomag és a súlyozás itt marad; a megszakító futásidejű állapota a Health oldalon marad.", "emailVisibilityHint": "Az itt látható fiók-e-mailek követik a globális adatvédelmi kapcsolót.", "emailVisibilityTooltip": "Használja a szem ikont a fiók-e-mailek globális megjelenítéséhez vagy elrejtéséhez a kombók, szolgáltatók és kvótaképernyők között.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Lépésről lépésre (Szolgáltató → Modell)", + "builderModeGlobal": "Globális modell keresés (Egyedi kombináció)", + "builderGlobalSearchPlaceholder": "Keresés modellek között az összes szolgáltatónál (pl. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Összes hozzáadása", + "builderGlobalShortcuts": "Gyorsbillentyűk:", + "builderGlobalNoResults": "Nincs modell a következőhöz: \"{query}\".", + "builderGlobalProviderLabel": "Szolgáltató:", + "builderGlobalAccountCount": "{count, plural, one {# fiók} other {# fiók}}", + "builderGlobalAdded": "Hozzáadva", + "builderGlobalAdd": "Hozzáadás", "manualModel": "Kézi modell", "manualModelInvalid": "Adja meg a modellt szolgáltató/modell formátumban.", "manualModelUnknownProvider": "Ismeretlen szolgáltató előtag.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Ülés Elérhetőség", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Rögzítés kikapcsolva", "kimiPresetTitle": "Kimi Coding előbeállítás", "kimiPresetDescription": "Kimi K3 mint elsődleges modell (Moonshot API), automatikus tartalék útvonallal a Kimi Code kapcsolatokhoz (kimi-coding, kimi-web), ha be van állítva.", - "kimiPresetCta": "Előbeállítás hozzáadása" + "kimiPresetCta": "Előbeállítás hozzáadása", + "intelligentComboCount": "{count, plural, one {# intelligens kombináció} other {# intelligens kombináció}}", + "providersInScope": "{count, plural, one {# szolgáltató a hatókörben} other {# szolgáltató a hatókörben}}", + "savingModePack": "Mentés {pack}…", + "errorTitle": "Nem sikerült betölteni a kombókat", + "errorDescription": "Jelenleg nem tudtuk betölteni a kombinált adatokat. Ellenőrizze a kapcsolatát, és próbálja újra.", + "errorId": "Hibaazonosító: {id}", + "errorRetry": "Próbáld újra", + "comboLabel": "Kombó" }, "costs": { "title": "Költségek", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Felhasználónév", "obsidianPassword": "Jelszó", - "obsidianTailscaleHint": "Használja a Tailscale IP-címét a localhost helyett, ha mobilról csatlakozik. Mindkét eszköznek ugyanazon a Tailscale hálózaton kell lennie." + "obsidianTailscaleHint": "Használja a Tailscale IP-címét a localhost helyett, ha mobilról csatlakozik. Mindkét eszköznek ugyanazon a Tailscale hálózaton kell lennie.", + "cloudSyncNotConfigured": "A felhőszinkronizálás nincs konfigurálva ezen az példányon.", + "notionConnect": "Csatlakozás", + "notionConnectFailed": "Sikertelen csatlakozás", + "notionConnected": "Csatlakoztatva", + "notionConnectionFailed": "Kapcsolódás sikertelen", + "notionDescription": "Keresés, olvasás, lekérdezés és írás a Notionbe irányított AI modelleken keresztül", + "notionDisconnect": "Kapcsolat megszüntetése", + "notionDisconnectFailed": "Sikertelen lecsatlakozás", + "notionEnterToken": "Kérjük, adjon meg egy Notion integrációs tokent", + "notionIntegrationHelp": "Hozzon létre egy belső integrációt itt", + "notionIntegrationToken": "Notion Belső Integrációs Token", + "notionNotConnected": "Nincs csatlakoztatva", + "notionTokenConfigured": "A token konfigurálva van. A Notion eszközök elérhetők az MCP-n keresztül." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Szolgáltató / Modell", "noRemoteProviders": "Nincs konfigurált API-kulccsal rendelkező szolgáltató", "selectProviderModel": "Válasszon modellt", + "customBaseUrlLabel": "Egyedi alap URL (opcionális)", + "customModelIdLabel": "Egyedi modell azonosító (opcionális)", + "customEndpointHelp": "Használj egy OpenAI-kompatibilis /embeddings végpontot. Helyi végpontok megengedettek; a felhőbeli metaadat-célok blokkolva vannak.", + "customEndpointSave": "Alkalmazza a testreszabott végpontot", + "customEndpointInvalid": "Adjon meg egy érvényes HTTP(S) alap URL-t és egy modell azonosítót, vagy hagyja üresen mindkét mezőt.", + "customEndpointSaveFailed": "A testreszabott beágyazási végpontot nem sikerült menteni.", "staticEnabledLabel": "Statikus Potion engedélyezése", "staticEnabledDesc": "A potion-base-8M modell letöltése és helyi használata", "transformersEnabledLabel": "Transformers.js engedélyezése", @@ -4258,7 +4443,9 @@ "cleaning": "Tisztítás...", "cleanNow": "Tisztítás most", "cleanupSuccess": "{count} pont eltávolítva", - "cleanupFailed": "A tisztítás sikertelen" + "cleanupFailed": "A tisztítás sikertelen", + "hostLabel": "Gazda", + "collectionLabel": "Gyűjtemény" }, "rerank": { "enableLabel": "Rerank engedélyezése", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-szintű tartalék diagram", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Ingyenes szolgáltatók beállítása", + "description": "Opcionálisan engedélyezze a kiválasztott regisztráció nélküli szolgáltatókat. Tekintse át minden szolgáltató értesítését és webhelyét a folytatás előtt; a rendelkezésre állást és a sebességkorlátokat harmadik felek szabályozzák.", + "loading": "Ingyenes szolgáltatók betöltése...", + "loadFailed": "Nem sikerült betölteni a szabad szolgáltatókat.", + "alreadyConfigured": "Minden jogosult ingyenes szolgáltató már konfigurálva van.", + "reviewProviderSite": "Ellenőrizze a szolgáltató webhelyét és a feltételeket", + "confirmation": "Átnéztem ezeket a harmadik féltől származó szolgáltatókat, és azt szeretném, ha az OmniRoute létrehozná a kiválasztott kapcsolatokat.", + "setupSelected": "Állítsa be a kiválasztott szolgáltatókat", + "settingUp": "Beállítás folyamatban...", + "setupFailed": "Nem sikerült beállítani a kiválasztott szolgáltatókat. Semmi meglévő nem változott.", + "retryFailed": "Ismételje meg a sikertelen szolgáltatókat", + "orUseApiKey": "vagy csatlakozz egy API kulccsal", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "létrehozva", + "skipped": "már konfigurálva van", + "failed": "sikertelen" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Kötelező. Szolgáltató API alap URL-je.", "iconUrlLabel": "Ikon URL-címe", "iconUrlHint": "Opcionális. A szolgáltató ikonjaként megjelenő kép URL-címe.", + "iconUrlInvalid": "Érvénytelen ikon URL. Használjon http(s):// vagy data:image/*;base64 URL-t.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibilis (termék)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "A munkamenet már aktuális", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Hitelesítés alkalmazása", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API-kulcs beillesztése…", "zedSaving": "Mentés…", "zedImportAction": "Importálás", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Automatikus kurzor munkamenet megújítás engedélyezése", + "cursorAgentNudgeBody": "Telepítse a cursor-agentet az automatikus munkamenet-megújításhoz — nélküle a Cursor kapcsolatoknak körülbelül 24 óránként időszakos kézi újrakapcsolásra van szükségük.", + "cursorAgentNudgeDismiss": "Elvetés", "zedManualImportFailed": "A kézi importálás sikertelen", "zedManualImportSuccess": "{provider} token importálva a Zedből", "grokImportTitle": "Grok Build hitelesítés importálása", @@ -5878,7 +6066,6 @@ "friendliai": "Ingyenes csomag szerver nélküli következtetéshez — bankkártya nem szükséges", "gemini": "Örökké ingyenes: 1500 kérés/nap a Gemini 2.5 Flash-hez — bankkártya nem szükséges, kulcs beszerzése: aistudio.google.com", "gigachat": "Csatlakoztassa a GigaChatet (Sber) egy API-kulccsal.", - "github-models": "Hozzon létre egy GitHub PAT-ot 'models: read' hatókörrel a github.com/settings/tokens oldalon", "gitlab": "GitLab személyes hozzáférési token a nyilvános Code Suggestions API-hoz. Állítson be saját üzemeltetésű alap URL-t, ha nem a gitlab.com-ot használja.", "gitlawb-gmi": "Szerezze be API-kulcsát a Gitlawb Opengateway irányítópultjáról.", "gitlawb": "Szerezze be API-kulcsát a Gitlawb Opengateway irányítópultjáról.", @@ -6017,7 +6204,8 @@ "kimi-coding": "A Kimi Coding összekapcsolása a meglévő OAuth-folyamattal.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Connect OpenAI Codex with the existing OAuth flow.", - "qwen": "Connect Qwen Code with the existing OAuth flow." + "qwen": "Connect Qwen Code with the existing OAuth flow.", + "github-models": "Hozzon létre egy GitHub PAT-ot 'models: read' hatókörrel a github.com/settings/tokens oldalon" }, "passthroughModelsDescription": "Az {provider} elfogadja a szolgáltató natív modellazonosítóit. Importáljon a /models-ból, vagy adjon hozzá egyéni azonosítókat az útválasztáshoz.", "bedrockModelsDescription": "Az Amazon Bedrock modellek hatóköre az AWS régió szerint történik. Importáljon a /models mappából, vagy adja hozzá a kiválasztott régióban engedélyezett Bedrock modellazonosítókat.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Amikor az összes konfigurált kapcsolat kimerült (kvóta, kreditek vagy lejárat), ideiglenesen használja ezt a szolgáltató kulcs nélküli szintjét. Kapcsolja ki, hogy kihagyja ezt a szolgáltatót a névtelen kérések küldése helyett — ajánlott, ha a kulcs nélküli szint elutasítja őket (401).", "anonymousFallbackEnabled": "Névtelen visszaesés engedélyezve a(z) {provider} számára", "anonymousFallbackDisabled": "Névtelen visszaesés letiltva a(z) {provider} esetében — a kimerült kapcsolatok átugorják ezt a szolgáltatót", - "anonymousFallbackUpdateFailed": "Nem sikerült frissíteni az anonim visszaállítási beállítást" + "anonymousFallbackUpdateFailed": "Nem sikerült frissíteni az anonim visszaállítási beállítást", + "batchDeleteFailed": "Tömeges törlés sikertelen", + "batchDeleteNetworkError": "Hálózati hiba a tömeges törlés során", + "batchUpdateFailed": "A kötegelt frissítés sikertelen", + "batchUpdateNetworkError": "Hálózati hiba a kötegelt frissítés során", + "categoryAudio": "Hang", + "categoryCloudAgent": "Felhő Ügynök", + "categoryIde": "IDE", + "categoryLocal": "Helyi", + "categorySearch": "Keresés", + "categoryWebCookie": "Web Süti", + "claudeExtraUsageBlockingDisabled": "Claude extra-használati blokkolás letiltva (extra használat engedélyezve)", + "claudeExtraUsageBlockingEnabled": "Claude extra-használati blokkolás engedélyezve (extra használat blokkolva lesz)", + "claudeRoutingPreferenceDisabled": "A nem előtagolt Claude modellek már nem részesítik előnyben a Claude Code-ot", + "claudeRoutingPreferenceEnabled": "A nem előtagolt Claude modellek most a Claude Code-ot részesítik előnyben", + "clearMediaFilter": "Törlés", + "cliproxyRoutingDisabled": "A kérések mostantól a natív OmniRoute-ot (közvetlen) használják", + "cliproxyRoutingEnabled": "A kérések most a CLIProxyAPI-n keresztül irányítódnak (mélyebb emuláció)", + "codexLimitPolicyUpdated": "A Codex korlátozási irányelv frissítve lett", + "codexServiceModeUpdated": "A Codex szolgáltatásmód frissítve lett", + "codexServiceTierActive": "A {tier} szintű Codex szolgáltatás aktív", + "codexTierFastLabel": "Gyors", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "A Parancskód-azonosító alkalmazása nem sikerült", + "commandCodeApplyingApproval": "Böngésző jóváhagyva, alkalmazás…", + "commandCodeApplyingKey": "Böngésző által jóváhagyott kulcs alkalmazása…", + "commandCodeApprovalInstructions": "Nyisd meg az auth URL-t, hagyd jóvá a hozzáférést, majd illeszd be az alább a visszaadott kulcsot/JSON-t/URL-t…", + "commandCodeAuthExpired": "A parancs kódja lejárt", + "commandCodeConnected": "A Parancs Kód csatlakoztatva", + "commandCodeConnectionAdded": "A parancs kód kapcsolódva lett.", + "commandCodeLinkExpired": "A parancs kód hivatkozás lejárt", + "commandCodeOpeningStudio": "A Parancs Kód Stúdió megnyitása…", + "commandCodePopupBlocked": "A felugró ablakok blokkolva vannak. Kérjük, engedélyezze a felugró ablakokat, és próbálja meg újra a Command Code Connectet.", + "commandCodeStartFailed": "Nem sikerült elindítani a Command Code auth-ot", + "connectionDeleted": "Kapcsolat törölve", + "connectionFallback": "kapcsolat", + "coolingConnectionsDescription": "Ezek a kapcsolatok 429 (rate-limit) választ adtak az utolsó kérésükre. Az OmniRoute kihagyja őket, amíg az időzítő le nem jár — manuális letiltás nem szükséges.", + "coolingConnectionsTitle": "Jelenleg hűtés ({count})", + "failedDeleteAlias": "Nem sikerült törölni az alias-t", + "failedDeleteConnection": "A kapcsolat törlése nem sikerült", + "failedDistributeProxies": "A proxik terjesztése nem sikerült.", + "failedSaveModelEndpointSettings": "A modell végpont beállításainak mentése nem sikerült", + "failedUpdateClaudeExtraUsagePolicy": "Nem sikerült frissíteni a Claude extra-használati irányelvet", + "failedUpdateClaudeRoutingPreference": "Nem sikerült frissíteni a Claude Code útválasztási preferenciát", + "failedUpdateCliproxyRouting": "A CLIProxyAPI útvonal frissítése nem sikerült", + "failedUpdateCodexLimitPolicy": "A Codex limit policy frissítése nem sikerült", + "failedUpdateCodexServiceMode": "A Codex szolgáltatásmód frissítése nem sikerült", + "filterByMedia": "Média", + "freeBadge": "Ingyenes", + "kimiCodeApiKeyLabel": "Kimi Code API Kulcs", + "modelTestFailed": "A modellteszt megbukott", + "modelTestNetworkError": "Hálózati hiba a modell tesztelésekor", + "networkError": "Hálózati hiba", + "networkErrorDeletingAlias": "Hálózati hiba az alias törlésekor", + "networkErrorSettingAlias": "Hálózati hiba az alias beállításakor", + "noProvidersMatch": "Nincsenek olyan szolgáltatók, akik megfelelnének a keresésednek.", + "noSavedProxies": "Nincsenek mentett proxyk. Először adjon hozzá proxykat a Beállítások → Proxy menüpontban.", + "pageLoadErrorDescription": "Jelenleg nem tudtuk betölteni a szolgáltató adatokat. Ellenőrizze a kapcsolatát, és próbálja újra.", + "pageLoadErrorId": "Hibaazonosító: {id}", + "pageLoadErrorRetry": "Próbáld újra", + "pageLoadErrorTitle": "Nem sikerült betölteni a szolgáltatókat", + "playgroundTitle": "Játékterület", + "providerDetailConnectionFlexActive": "A Codex flex szolgáltatási szint aktív ezen a kapcsolaton.", + "providerDetailConnectionPriorityActive": "A Codex prioritási szolgáltatási szint aktív ezen a kapcsolaton.", + "providerDetailGlobalFlexActive": "A Globális Codex flex szolgáltatási szint aktív", + "providerDetailGlobalPriorityActive": "A Globális Codex prioritási szolgáltatási szint aktív", + "proxiesDistributed": "Elosztott {assigned} proxy hozzárendelés(ek) {tagLabel}{total} kapcsolat(ot) között.", + "rerankEndpoint": "Újrangsorolás", + "savedModelEndpointSettings": "Mentett modell végpont beállításai", + "searchByModelAria": "Keresés modell szerint", + "selectSupportedEndpoint": "Válasszon ki legalább egy támogatott végpontot", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Beállítások elemre", @@ -6460,7 +6719,24 @@ "loadFailed": "Nem sikerült betölteni az előfizetési listát", "toggleFailed": "Nem sikerült átkapcsolni a kapcsolót", "refreshFailed": "Nem sikerült frissíteni", - "deleteFailed": "Nem sikerült törölni" + "deleteFailed": "Nem sikerült törölni", + "add": "Hozzáadás", + "cancel": "Mégse", + "configure": "Konfigurálás", + "copyEndpoint": "Másolás végpont", + "coreEndpointHint": "Alapértelmezett Végpont Útmutató", + "coreNodesHint": "Alapcsomópontok Tipp", + "create": "Létrehozás", + "deleteConfirm": "Törlés megerősítése", + "empty": "Üres", + "globalModeDescription": "Globális Mód Leírása", + "localCoreHint": "Helyi Core Tipp", + "nodeSummary": "Csomópont összegzés", + "providerRequired": "Szolgáltató szükséges", + "providerRouting": "Szolgáltató Útvonalzás", + "refresh": "Frissítés", + "refreshInterval": "Frissítési Intervallum", + "ruleModeDescription": "Szabály Mód Leírás" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Automatikus kép-szöveg (vision-to-text) tartalék megoldás futtatása, mielőtt a képkéréseket csak szöveges modellekhez irányítaná.", "visionBridgeEnabledLabel": "Engedélyezve", "visionBridgeEnabledDesc": "A hívás előtti híd (bridge) ki-/bekapcsolása, amely a képrészeket a kinyert szöveggel helyettesíti.", + "visionBridgeRerouteTextOnlyLabel": "Irányítsa át a szöveg-alapú modelleket", + "visionBridgeRerouteTextOnlyDesc": "Küldje el a teljes kérést, beleértve a képeket is, a hídmodellnek, amikor a kiválasztott modellnek nincs képbeviteli lehetősége.", "visionBridgeModel": "Hídmodell", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Bármely látástámogató (vision) OmniRoute modellazonosító használható itt.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Az API-kulcs nem rendelkezik a manage hatókörrel.", "BYPASS_PREFIX_NOT_ALLOWED": "Egy vagy több előtag spawn-képes útvonalakat céloz meg, és nem kerülhető meg.", "GENERIC": "Nem sikerült frissíteni az authz-beállításokat." - } + }, + "remove": "Eltávolítás" }, "resilienceBaseCooldownLabel": "Alaphűtés", "scopeLabel": "Hatály", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Audio tesztelése…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip(pek) átírása a {model} által", "modalityBridgeAudioTestNoop": "Az Audio Bridge nem aktiválódott (a célpont támogathatja a hangot, nincs csatlakoztatva STT szolgáltató, vagy a híd le van tiltva)", - "modalityBridgeAudioTestError": "A hangteszt nem sikerült: {message}" + "modalityBridgeAudioTestError": "A hangteszt nem sikerült: {message}", + "modelRoutingDescriptionPlaceholder": "Irányítsd az Opus modelleket a frontier kombinációhoz", + "cliproxyapiFallbackCodes": "Cliproxyapi Visszaállító Kódok", + "cliproxyapiFallbackDescription": "Cliproxyapi Visszaállítási Leírás", + "cliproxyapiHealthLabel": "Cliproxyapi Egészség Címke", + "cliproxyapiImportFailed": "Cliproxyapi Importálás Sikertelen", + "cliproxyapiImportResult": "Cliproxyapi Import Eredmény", + "cliproxyapiInvalidUrl": "Cliproxyapi Érvénytelen URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Életciklus Értesítés Után", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Életciklus Értesítés Előtt", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Életciklus Értesítő Link", + "cliproxyapiPortLabel": "Cliproxyapi Port Címke", + "cliproxyapiStatusLabel": "Cliproxyapi Állapot Címke", + "cliproxyapiVersionLabel": "Cliproxyapi Verzió Címke", + "collection": "Gyűjtemény", + "errorPage": { + "description": "Jelenleg nem tudtuk betölteni a beállításokat. Kérjük, próbálja újra néhány másodperc múlva.", + "errorId": "Hibaazonosító: {id}", + "retry": "Próbáld újra", + "title": "A beállítások betöltése nem sikerült" + }, + "host": "Gazda", + "notInstalled": "Nincs telepítve", + "oneproxyActions": "Oneproxy Műveletek", + "oneproxyActive": "Oneproxy Aktív", + "oneproxyAnonymity": "Oneproxy Anonimitás", + "oneproxyCountry": "Oneproxy Ország", + "oneproxyDelete": "Oneproxy Törlés", + "oneproxyEmpty": "Oneproxy Üres", + "oneproxyHost": "Oneproxy Gazda", + "oneproxyLatency": "Oneproxy Késleltetés", + "oneproxyProtocol": "Oneproxy protokoll", + "oneproxyQuality": "Oneproxy Minőség", + "oneproxySyncFailed": "Szinkronizálás nem sikerült: {error}", + "oneproxySyncSuccess": "Szinkronizált {total} proxy ({added} új, {updated} frissített)", + "proxyDocumentationSocks5DescAfter": "Proxy Dokumentáció Socks5 Leírás Után", + "proxyFreePoolAddProxy": "Proxy Ingyenes Medence Proxy Hozzáadása", + "proxyFreePoolAdding": "Proxy Free Pool Hozzáadása", + "proxyFreePoolSelectProxy": "Proxy Ingyenes Medence Proxy Kiválasztása", + "proxyStatusActive": "Proxy állapot Aktív", + "proxyStatusInactive": "Proxy állapot Inaktív", + "routingAddEntry": "Bejegyzés hozzáadása", + "settingSaveFailed": "A beállítás mentése nem sikerült", + "settingSaved": "Beállítás Mentve", + "skillsmpApiKeyHintAfter": ". Korlátozás: {limit} kérés/nap.", + "skillsmpApiKeyHintBefore": "Szerezd meg az API kulcsodat innen", + "syncFailed": "Szinkronizálás sikertelen", + "unhealthy": "Egészségtelen", + "oneproxyDescription": "Töltsd le és forgasd el a szabad, érvényesített proxykat az 1proxy közösségi platformról", + "oneproxySyncing": "Szinkronizálás...", + "oneproxySyncNow": "Szinkronizálás most", + "oneproxyClearAll": "Összes törlése", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Törölje az összes 1proxy proxyt?", + "memorySkillsSkillsmpDescription": "Csatlakozz a SkillsMP-hez, hogy felfedezd és telepítsd a piactérről származó készségeket.", + "memorySkillsActiveProviderDescription": "Válaszd ki, hogy melyik szolgáltatót használja a Készségek oldal a kereséshez és telepítéshez.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Piactér", + "memorySkillsSkillsmpProviderDescription": "Hitelesített piactér (a SkillsMP API kulcsodat használja).", + "memorySkillsSkillsshProviderTitle": "skills.sh Könyvtár", + "memorySkillsSkillsshProviderDescription": "Nyilvános könyvtár szolgáltató (nincs szükség API kulcsra).", + "routingCcBridgeCatalogName": "Anthropic-kompatibilis CC híd", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Natív Claude szolgáltató OAuth által kibocsátott tokenekkel.", + "routingCcBridgeName": "Claude-Code Híd", + "routingCcBridgeDescription": "Relay végpontok API kulcsok használatával (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Egyedi szolgáltató.", + "routingUnknownOpKind": "Ismeretlen op típus: {kind}", + "routingInvalidJson": "Érvénytelen JSON: {error}", + "routingConfigMustBeObject": "A konfigurációnak JSON objektumnak kell lennie", + "routingEnabledMustBeBoolean": "`enabled` értékének igaznak vagy hamisnak kell lennie", + "routingPipelineMustBeArray": "`pipeline` egy ops tömb kell, hogy legyen", + "routingPipelineTooLong": "A pipeline nem haladhatja meg az 50 műveletet", + "routingOpMissingKind": "Op #{index}: hiányzó vagy érvénytelen `kind`", + "routingOpUnknownKind": "Op #{index}: ismeretlen típus \"{kind}\"", + "routingJsonEditorHide": "JSON szerkesztő elrejtése", + "routingJsonEditorImportExport": "JSON importálása / exportálása", + "routingJsonEditorLabel": "JSON (szerkesztés és alkalmazás, vagy beillesztés az importáláshoz)", + "routingApplyJson": "Alkalmazza a JSON-t", + "routingTransformsFootnote": "Minden transzformációs művelet idempotens újrafuttatáskor. A változások azonnal érvénybe lépnek a következő kérésnél.", + "cliproxyapiUnknown": "Ismeretlen", + "cliproxyapiVersion": "Verzió", + "cliproxyapiHealth": "Egészség", + "cliproxyapiPort": "Port", + "qdrantHost": "Gazda", + "qdrantCollection": "Gyűjtemény" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Teljes", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Alapértelmezett", + "off": "Ki", + "lite": "Lite", + "standard": "Szabványos", + "aggressive": "Aggresszív", + "ultra": "Ultra", + "responsesToolOutput": "Válaszok eszköz kimenete" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Utolsóként fut a veremben (miután az RTK/Caveman megtisztítja a szöveget, az OmniGlyph képekké alakítja a maradékot), valamint önállóan is fut a omniglyph módon keresztül. Ez egy előnézet, és alapértelmezés szerint kikapcsolva marad a végpontok közötti ellenőrzés befejezéséig.", "saved": "Mentve.", "saveFailed": "Nem sikerült menteni.", - "enableAria": "Az OmniGlyph motor engedélyezése" + "enableAria": "Az OmniGlyph motor engedélyezése", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Beágyazott szolgáltatások", @@ -9127,7 +9500,49 @@ "unableToLoad": "Nem sikerült betölteni a rendszermutatókat", "product": "Termék", "resources": "Erőforrások", - "company": "Társaság" + "company": "Társaság", + "tokenHealthTooltips": { + "allHealthy": "Minden token egészséges", + "needsAttention": "Néhány token figyelmet igényel", + "refreshFailures": "Token frissítési hibák észlelve", + "unknown": "Az egészségi állapot ismeretlen" + }, + "systemMonitor": { + "metricsAriaLabel": "Rendszer metrikák", + "memory": "Memória", + "memoryShort": "mem", + "uptime": "Üzemidő", + "ariaLabel": "Rendszerfigyelés", + "title": "Rendszerfigyelő", + "version": "Verzió", + "connections": "Kapcsolatok", + "circuitBreakers": "Áramkör-megszakítók", + "open": "{count} nyitva", + "memoryUsage": "Memóriahasználat" + }, + "never": "Soha", + "justNow": "Most azonnal", + "minutesAgo": "{count}m-el ezelőtt", + "hoursAgo": "{count} órája", + "tokens": "Tokenok", + "costs": "Költségek", + "autoRefresh": "Automatikus Frissítés ({seconds}s)", + "toggleAutoRefresh": "Automatikus frissítés váltása", + "activeRequests": "Aktív Kérések", + "totalRequests": "Összes Kérés", + "totalInputTokens": "Összes Bemeneti Token", + "model": "Modell", + "provider": "Szolgáltató", + "requests": "Kérések", + "lastUsed": "Utolsó Használat", + "inputTokens": "Bemeneti Tokenek", + "totalTokens": "Összes Token", + "inputCost": "Bemeneti Költség", + "outputCost": "Kimeneti Költség", + "noUsageData": "Még nincs rögzített használat. Küldjön el néhány kérést, hogy láthassa az adatokat itt.", + "account": "Fiók", + "accountLabel": "Fiók {id}", + "noAccountUsage": "Még nincs fiók-specifikus használat rögzítve. Kérjük, használjon OAuth fiókokat az adatok megtekintéséhez itt." }, "auth": { "welcome": "Üdvözöljük", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Visszaállítás az Alkalmazás Adatokkal", + "resetViaAppDataDescription": "Törölje a beállítási fájlt az alkalmazás adatkönyvtárából a jelszó visszaállításához:", + "quitDesktopApp": "Teljesen zárja be az OmniRoute asztali alkalmazást", + "navigateToAppDataDirectory": "Navigálj az alkalmazás adatkönyvtárába:", + "checkSystemAppDataFolder": "(Ellenőrizd a rendszer alkalmazás adatainak mappáját)", + "relaunchDesktopFreshSetup": "Indítsa újra az OmniRoute asztali alkalmazást — friss telepítést fog indítani", + "alternativeSetPasswordTitle": "Alternatíva: Új Jelszó Beállítása", + "alternativeSetPasswordDescription": "Állítson be egy új kezdeti jelszót a szerver környezeti fájlon keresztül:", + "openServerEnvFilePrefix": "Megnyitás", + "relaunchDesktopApp": "Indítsa újra az OmniRoute asztali alkalmazást", + "codexLinkInvalidOrExpired": "Ez a hivatkozás érvénytelen vagy lejárt.", + "codexValidationServerError": "Nem sikerült elérni a szervert ennek a hivatkozásnak az érvényesítéséhez.", + "codexSaveConnectionError": "Nem sikerült elmenteni a kapcsolatot. Lehet, hogy a hivatkozás lejárt.", + "codexDeviceLoginDisabled": "A készülék kódos bejelentkezés le van tiltva ehhez az OpenAI fiókhoz. Engedélyezze a ChatGPT biztonsági beállításaiban (vagy kérje meg a munkaterület adminisztrátorát).", + "codexAuthorizationTimedOut": "Az engedélyezés időtúllépett. Kattintson a Kezdés újra gombra a próbálkozáshoz.", + "authenticationCancelled": "A hitelesítés megszakítva.", + "unexpectedAuthenticationError": "Váratlan hiba történt a hitelesítés során. Kérjük, próbálja újra.", + "connectOpenAiCodexTitle": "Csatlakozás az OpenAI Codex-hez", + "codexConnectDescription": "Engedélyezze a ChatGPT fiókot a kapcsolat beállításának befejezéséhez.", + "validatingCodexLink": "Hivatkozás érvényesítése…", + "codexGenerateCodeDescription": "Kattints az alábbi gombra egy egyszeri kód generálásához, majd jelentkezz be az OpenAI-ba.", + "startCodexFlow": "Kezdés", + "requestingOpenAiCode": "Kód kérés az OpenAI-tól…", + "codexVerificationInstructions": "1. Nyisd meg az OpenAI hitelesítési oldalt, és 2. írd be ezt a kódot. Ez az oldal automatikusan frissül, miután engedélyezted.", + "yourCode": "A kódod", + "openVerificationPage": "Nyissa meg a hitelesítési oldalt", + "copyUrlShort": "URL másolása", + "savingConnection": "Kapcsolat mentése…", + "codexConnected": "Csatlakoztatva!", + "codexConnectionRegistered": "A Codex fiók regisztrálva lett. Ezt a lapot bezárhatja.", + "tryAgain": "Próbáld újra", + "traeAuthorizationSuccess": "Trae engedélyezés ✓", + "traeAuthorizationFailed": "Trae engedélyezés sikertelen", + "closeAuthorizationWindow": "Ezt az ablakot bezárhatja.", + "returnToDashboard": "Térjen vissza a műszerfalra.", + "resetViaAppData": "Visszaállítás az Alkalmazás Adatokkal", + "deleteSettingsToReset": "Törölje a beállítási fájlt az alkalmazás adatkönyvtárából a jelszó visszaállításához:", + "quitAppCompletely": "Teljesen zárja be az OmniRoute asztali alkalmazást", + "navigateToAppData": "Navigálj az alkalmazás adatkönyvtárába", + "checkAppDataFolder": "Ellenőrizze a rendszeralkalmazás adatainak mappáját", + "deleteSettingsJson": "Törlés", + "relaunchAppFresh": "Indítsa újra az OmniRoute asztali alkalmazást — új telepítést fog kezdeni", + "alternativeSetPassword": "Alternatíva: Új Jelszó Beállítása", + "setNewPasswordViaEnv": "Állítson be egy új kezdeti jelszót a szerver környezeti fájlján keresztül:", + "openServerEnv": "Megnyitás", + "inDataDirectory": "az adatok könyvtárában", + "addOrUpdate": "Hozzáadás vagy frissítés", + "deleteAndRelaunch": "Törlés", + "settingsJson": "settings.json", + "fromDataDir": "az adatkönyvtárból", + "relaunchApp": "Indítsa újra az OmniRoute asztali alkalmazást" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Készen áll az AI-infrastruktúra egyszerűsítésére?", "ctaDescription": "Csatlakozzon azokhoz a fejlesztőkhöz, akik az AI-integrációikat az OmniRoute segítségével egyszerűsítik. Nyílt forráskódú és ingyenesen indítható.", "startFree": "Kezdje ingyenesen", - "readDocumentation": "Olvassa el a dokumentációt" + "readDocumentation": "Olvassa el a dokumentációt", + "company": "Cég", + "pricing": "Árazás", + "apiReference": "API Hivatkozás", + "helpCenter": "Súgóközpont", + "about": "A programról", + "blog": "Blog", + "contact": "Kapcsolat", + "terms": "Feltételek", + "privacy": "Adatvédelem", + "license": "Licenc", + "footerDescription": "A modern AI infrastruktúra egységes felülete. Biztonságos, megfigyelhető és skálázható.", + "communityDiscussions": "Közösségi Beszélgetések" }, "docs": { "title": "Dokumentáció", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Ügynökök regisztrálása és kezelése az ACP-nyilvántartáson keresztül az ügynökségek közötti kommunikációhoz és az eszközök megosztásához.", "protocolAcpStep1": "A regisztrált ACP-ügynökök megtekintéséhez lépjen az Irányítópult → Ügynökök menüpontra.", "protocolAcpStep2": "Regisztráljon új ügynököket képességekkel és végpont-konfigurációval.", - "protocolAcpStep3": "Használja a CLI eszközöket az ügynök kommunikációs csatornáinak konfigurálásához." + "protocolAcpStep3": "Használja a CLI eszközöket az ügynök kommunikációs csatornáinak konfigurálásához.", + "metadataTitleTemplate": "%s — OmniRoute Dokumentáció", + "metadataDefaultTitle": "OmniRoute Dokumentáció", + "metadataDescription": "Átfogó dokumentáció az OmniRoute AI átjáróhoz — beállítás, API, tömörítés, telepítés és még sok más.", + "layoutNavTitle": "OmniRoute Dokumentáció", + "layoutHomeLink": "Dokumentáció Kezdőlap", + "layoutDashboardLink": "← Vissza a Műszerfalra", + "homeTitle": "OmniRoute Dokumentáció", + "homeMetadataDescription": "Minden, amire szüksége van az AI irányításához, tömörítéséhez és méretezéséhez — telepítési útmutatók, API referencia, tömörítés, telepítés és még sok más.", + "homeTwitterDescription": "Átfogó dokumentáció az OmniRoute AI átjáróhoz", + "homeDescription": "Minden, amire szükséged van az AI irányításához, tömörítéséhez és skálázásához", + "homeSearchHint": "Nyomja meg a Ctrl K billentyűt a dokumentáció kereséséhez", + "featuredQuickStartTitle": "Gyors Kezdés", + "featuredQuickStartDescription": "Indítsa el az OmniRoute-ot 3 perc alatt", + "featuredAutoComboTitle": "Auto-Combo Útmutató", + "featuredAutoComboDescription": "Hagyja, hogy az OmniRoute válassza ki az Ön számára legjobb mesterséges intelligenciát", + "featuredProvidersTitle": "Szolgáltatók Útmutatója", + "featuredProvidersDescription": "Csatlakoztassa az AI szolgáltatókat percek alatt", + "nonTechUsersTitle": "Nem Technikai Felhasználók Számára", + "nonTechUsersSubtitle": "Kezdj el gyorsan — nincs szükség technikai háttérre", + "techUsersTitle": "Technikai Felhasználók számára", + "techUsersSubtitle": "Mélyreható betekintés az architektúrába, API-kba és belső működésbe", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Dokumentáció", + "apiExplorerMetadataDescription": "Interaktív API felfedező — próbáld ki az OmniRoute végpontokat élőben, valós idejű válaszokkal", + "apiExplorerTitle": "API Felfedező", + "apiExplorerDescription": "Próbáld ki az OmniRoute végpontokat élőben. Válassz egy végpontot, állítsd be a kérésedet, és nézd meg a választ valós időben.", + "apiExplorerSseStarted": "SSE stream elindult — ellenőrizd a terminált/devtools-t a valós idejű kimenetért.", + "apiExplorerError": "Hiba: {message}", + "apiExplorerAuth": "hitelesítés", + "apiExplorerResponseLabel": "Válasz", + "apiExplorerSelectEndpoint": "Válasszon ki egy végpontot a felfedezéshez", + "apiExplorerChooseApi": "Válassz egy API-t az oldalsávból a részletek megtekintéséhez és a kipróbálásához élőben", + "feedbackThanks": "Köszönjük a visszajelzését!", + "feedbackQuestion": "Hasznos volt ez az oldal?", + "pageMetadataTitle": "{title} — OmniRoute Dokumentáció", + "pageMetadataDescription": "OmniRoute dokumentáció: {title}", + "breadcrumb": "Breadcrumb", + "apiReferenceTable": { + "parameters": "Paraméterek", + "name": "Név", + "type": "Típus", + "description": "Leírás", + "returns": "Visszatérések", + "typePrefix": "Típus:" + } }, "legal": { "privacyPolicy": "Adatvédelmi szabályzat", @@ -9957,7 +10479,42 @@ "successMessage": "{providerName} fiókja összekapcsolva.", "done": "Kész", "error": "A csatlakozás sikertelen", - "tryAgain": "Próbáld újra" + "tryAgain": "Próbáld újra", + "errorSessionIncomplete": "Az OAuth munkamenet hiányos (hiányzik a visszairányító URI vagy a kódellenőr). Indítsa újra a kapcsolatot, és próbálja újra.", + "errorExchangeFailed": "Csere sikertelen", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Az alapértelmezett Google OAuth hitelesítő adatok csak localhost-on működnek. Távoli használathoz konfiguráld a saját OAuth hitelesítő adataidat környezeti változókon keresztül: ANTIGRAVITY_OAUTH_CLIENT_ID és ANTIGRAVITY_OAUTH_CLIENT_SECRET. Lásd a README 'OAuth on a Remote Server' szakaszát.", + "errorSaveFailed": "Mentés nem sikerült", + "errorAuthorizationFailed": "Az engedélyezés meghiúsult", + "errorAuthorizationTimeout": "Engedélyezési időtúllépés", + "errorRequestFailed": "A kérés meghiúsult", + "errorCallbackServerFailed": "A visszahívó szerver indítása nem sikerült", + "errorBrowserUnavailable": "A böngésző OAuth nem elérhető ehhez a szolgáltatóhoz a jelenlegi környezetben. Használja a támogatott hitelesítési módszert helyette.", + "errorStateMismatch": "OAuth állapot eltérés. Indítsa újra a kapcsolatot, és próbálja meg újra.", + "errorImportAccessToken": "A hozzáférési token importálása nem sikerült", + "errorSessionNotInitialized": "Az OAuth munkamenet nincs inicializálva. Indítsa újra a kapcsolat folyamatát, és próbálja újra.", + "errorNoAuthorizationCode": "Nem található engedélyezési kód. Illessze be a visszahívási URL-t vagy az Azonosító Kódot.", + "tabDeviceCode": "Eszközkód", + "tabBrowserLogin": "Böngésző Bejelentkezés", + "tabImportAuthJson": "Importáld az auth.json-t", + "tabPasteApiKey": "Illessze be az API kulcsot", + "windsurfPasteDescription": "A Windsurf / VS Code IDE-ben futtassa a \"Windsurf: Provide Auth Token\" parancsot a parancspalettából (vagy kattintson a Jupyter \"Get Windsurf Authentication Token\" gombra), majd másolja ki a megjelenített tokent, és illessze be alább. A windsurf.com/show-auth-token közvetlen megnyitása csak egy \"Átirányítás\" oldalt mutat — az IDE-nek kell kezdeményeznie a folyamatot.", + "grokAuthJsonDescription": "Illeszd be a ~/.grok/auth.json TELJES tartalmát (nem csak a JWT \"key\" mezőt). Egy üres JWT-nek nincs refresh_token-je, így a kapcsolat a lejárat után megszűnik (#7610). Amikor elérhető, részesítsd előnyben a dedikált Import auth.json modált.", + "devinDesktopPasteDescription": "Illessze be egy meglévő Devin API kulcsot egy hitelesített Devin munkamenetből. A kulcsexportálás elérhetősége és lépései a Devin verziójától és a fióktól függően változnak.", + "devinPasteDescription": "Kérjük, adja meg a WINDSURF_API_KEY-jét (amelyet a `devin auth login` parancs segítségével, vagy a Windsurf IDE \"Windsurf: Provide Auth Token\" parancsával szerzett be).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Kulcs / Token", + "saving": "Mentés…", + "saveConnection": "Kapcsolat Mentése", + "gheDescription": "Írd be a GitHub Enterprise példányod alap URL-jét (pl. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "A GitHub Enterprise URL megadása kötelező", + "gitlabDuoSetupTitle": "GitLab Duo OAuth beállítása", + "gitlabDuoSetupMessage": "A GitLab Duo OAuth nincs konfigurálva. Regisztráljon egy OAuth alkalmazást a {applicationsUrl} címen a {redirectUri} átirányítási URI-val és a \"{scopes}\" jogosultságokkal, majd állítsa be a {clientIdEnv} (és opcionálisan a {clientSecretEnv}) értékét, és indítsa újra.", + "gitlabDuoSetupDescription": "Miután az alkalmazás regisztrálva lett és az env változók beállítva lettek ezen az OmniRoute példányon, kattintson a Tovább gombra az OAuth bejelentkezés megkezdéséhez.", + "continue": "Folytatás" }, "cursorAuthModal": { "title": "Csatlakoztassa a kurzor IDE-t", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Továbbiak betöltése", - "loadingMore": "Továbbiak betöltése..." + "loadingMore": "Továbbiak betöltése...", + "correlationId": "Korelációs azonosító", + "group": { + "showAllRows": "Mutasd az összes sort", + "showLatestPerCorrelation": "Mutasd a legfrissebbet a korrelációs azonosító szerint", + "grouped": "Csoportosítva" + }, + "running": "futás", + "interval": { + "decrease": "Csökkentse az intervallumot", + "title": "Automatikus frissítési intervallum másodpercekben", + "increase": "Növelje meg az intervallumot" + }, + "status": { + "inProgress": "Folyamatban", + "recoveredByRetry": "Újra megpróbálva helyreállítva", + "goToParent": "Menj a szülői kéréshez", + "healedTitle": "Sikertelen, helyreállt {count} próbálkozás után", + "healed": "meggyógyult", + "failedTitle": "Az összes {count} kísérlet meghiúsult", + "failed": "sikertelen", + "pinnedTitle": "Modell kiválasztva a kontextus-cache munkamenet rögzítésével", + "pinned": "rögzített" + }, + "attempts": "kísérletek", + "detail": { + "collapse": "Összecsukás {title}", + "expand": "Bővítés {title}", + "copyTitle": "Másolás {title}", + "copied": "Másolt!", + "copy": "Másolás", + "autoscrollOn": "Automatikus görgetés: be", + "autoscrollOff": "Automatikus Görgetés: ki", + "payload": { + "clientRawRequest": "Kliens Nyers Kérés", + "clientRequest": "Ügyfél Kérés", + "openaiRequest": "OpenAI Kérés", + "providerRequest": "Szolgáltató Kérelem", + "providerResponse": "Szolgáltató Válasz", + "clientResponse": "Ügyfél Válasz", + "pipelineError": "Pipeline Hiba" + }, + "payloadMissing": "A részletes payload artefaktum már nem elérhető ehhez a naplóbejegyzéshez.", + "payloadCorrupt": "A részletes payload artefaktumot nem sikerült elemezni.", + "notAvailable": "N/A", + "semanticCache": "Szemantikus (OmniRoute)", + "upstreamCache": "Felfelé (Szolgáltató)", + "ariaLabel": "Kérelem napló részletei", + "completed": "Befejezett", + "upstreamStatus": "Felfelé: {status}", + "statusDiscrepancy": "Az OmniRoute {status} értéket adott vissza, pedig a szolgáltató {provider} értéket küldött.", + "previousRequest": "Előző kérés", + "nextRequest": "Következő kérés", + "close": "Részletező modal bezárása", + "startedAt": "Kezdődött Itt", + "endedAt": "Befejezve Itt", + "duration": "Időtartam", + "model": "Modell", + "provider": "Szolgáltató", + "account": "Fiók", + "input": "Bemenet", + "totalIn": "Összesen Be: {value}", + "cacheRead": "Cache Olvasás: {value}", + "cacheWrite": "Cache Írás: {value}", + "compressed": "Tömörítve: {from} → {to} ({percent}% megtakarítva)", + "output": "Kimenet", + "totalOut": "Összes Kiadás: {value}", + "reasoning": "Indoklás: {value}", + "requestedModel": "Kért Modell", + "requestProtocol": "Követelmény Protokoll", + "cacheSource": "Gyorsítótár Forrás", + "modelPinning": "Modell Rögzítése", + "activeModelPinning": "Aktív — a modell kiválasztva a munkamenet rögzítésével", + "rotated": "Elforgatva: {initial} -> {final}", + "apiKey": "API Kulcs", + "noApiKey": "Nincs API kulcs", + "combo": "Kombó", + "error": "Hiba", + "unblockAll": "Minden blokkolás feloldása", + "cleared": "Törölve", + "unblock": "Feloldás", + "relatedRequests": "Kapcsolódó Kérések ({count})", + "current": "aktuális", + "detailStatus": "Részletek állapota", + "loadingDetails": "Kérem, várjon a kérés részleteinek betöltésére...", + "providerEventStream": "Szolgáltató Esemény Áram", + "clientEventStream": "Ügyfél Esemény Áramlás", + "eventStream": "Eseményfolyam", + "responsePayloadLegacy": "Válasz Terhelés (Örökölt)", + "requestPayloadLegacy": "Kérelem Terhelés (Örökölt)", + "noPayload": "Nincs elérhető payload adat ehhez a naplóbejegyzéshez.", + "correlationId": "Korelációs azonosító", + "correlationIdValue": "Korelációs azonosító: {id}", + "detailedPayloadInfo": "Először engedélyezze a részletes naplózást, ha a négyfázisú kliens/szolgáltató payload nézetet szeretné az új kérésekhez." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} letiltva", "providerAdded": "{provider} hozzáadva", "add": "Hozzáadás", - "manualApiKey": "Használj kézi API kulcsot" + "manualApiKey": "Használj kézi API kulcsot", + "createDahlTokenFailed": "Sikertelen a Dahl token létrehozása", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Proxy beállítása", + "providerProxyTitleConfigured": "Proxy beállítva: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ÁSzF-korlátozott — tekintse meg a feltételeket", "caution": "Figyelem — személyes használatra vonatkozó / proxy záradékok", "ok": "Általában megengedő" - } + }, + "allProviders": "Minden szolgáltató", + "noApiKeyRequired": "API kulcs nem szükséges" }, "providerHealthAutopilot": { "title": "Szolgáltatói állapot autopilot", @@ -12390,7 +13047,11 @@ "on": "BE", "off": "KI", "availableProviders": "Elérhető szolgáltatók ({count})", - "noProviderOverrides": "Nincsenek felülbírálások — minden aktív szolgáltató az alapértelmezett modelljével vesz részt" + "noProviderOverrides": "Nincsenek felülbírálások — minden aktív szolgáltató az alapértelmezett modelljével vesz részt", + "resetFailed": "A visszaállítás sikertelen", + "resetSuccess": "A konfiguráció alapértelmezett értékekre állítva", + "running": "Futás...", + "testFailed": "A teszt megbukott" }, "kimiSponsorBanner": { "foundingFriendTitle": "A Kimi (Moonshot AI) az OmniRoute alapító nyílt forráskódú barátja", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "A szolgáltató nem támogatja a látást ehhez a képkéréshez", "capabilityFilter.toolsMismatch": "A szolgáltató nem támogatja az eszközhívást", "capabilityFilter.structuredOutputMismatch": "A szolgáltató nem támogatja a strukturált kimenetet", - "capabilityFilter.contextWindowMismatch": "A kérés meghaladja a szolgáltató kontextusablakát" + "capabilityFilter.contextWindowMismatch": "A kérés meghaladja a szolgáltató kontextusablakát", + "publicSystem": { + "notFound": { + "title": "Az oldal nem található", + "description": "A keresett oldal nem létezik, vagy áthelyezték.", + "dashboardAriaLabel": "Térj vissza a műszerfalra", + "statusAriaLabel": "Nyissa meg a rendszer állapotoldalát", + "systemStatus": "Rendszerállapot" + }, + "error": { + "title": "Belső Szerver Hiba", + "description": "Valami hiba történt a kérésed feldolgozása során. Csapatunk értesítve lett, és dolgozik a megoldáson.", + "errorId": "Hibaazonosító: {id}", + "detailsAriaLabel": "Hiba részletei", + "retryAriaLabel": "Próbálja meg újra betölteni az oldalt", + "tryAgain": "Próbáld újra", + "dashboardAriaLabel": "Térj vissza a műszerfalra", + "statusAriaLabel": "Rendszerállapot megnyitása", + "systemStatus": "Rendszerállapot" + }, + "globalError": { + "title": "Valami hiba történt", + "description": "Váratlan hiba történt. Ezt rögzítettük, és csapatunk kivizsgálja.", + "detailsAriaLabel": "Hiba részletei", + "retryAriaLabel": "Próbálja meg újra betölteni az oldalt", + "tryAgain": "Próbáld újra", + "statusAriaLabel": "Rendszerállapot megnyitása", + "systemStatus": "Rendszerállapot" + }, + "offline": { + "title": "Kapcsolódási probléma", + "description": "Az OmniRoute jelenleg nem tudja elérni a hálózatot. Ellenőrizze az internetkapcsolatát, a VPN-t vagy a proxy beállításait.", + "connectionRestored": "A kapcsolat helyreállt", + "offlineModeDetected": "Offline mód észlelve", + "retryConnection": "Kapcsolat Újrapróbálása", + "openStatusPage": "Nyisd meg a Státuszoldalt" + }, + "maintenance": { + "title": "Ütemezett Karbantartás", + "description": "Néhány szolgáltatás ideiglenesen nem elérhető, amíg a karbantartás folyamatban van. A fő irányítás általában online marad, de a kezelési funkciók romolhatnak.", + "suggestion1": "Próbáld újra néhány perc múlva.", + "suggestion2": "Ellenőrizze a jelenlegi egészségügyi mutatókat és a szolgáltató állapotát, mielőtt újrapróbálkozna.", + "systemStatus": "Rendszerállapot Megtekintése", + "healthDashboard": "Nyisd meg az Egészségügyi Műszerfalat" + }, + "status": { + "title": "Rendszerállapot", + "description": "Élő működési pillanatkép az OmniRoute alapvető szolgáltatásaihoz.", + "loadingHealth": "Egészségügyi mutatók betöltése...", + "failedToLoad": "A rendszer egészségének betöltése nem sikerült.", + "unableToReachHealth": "Nem sikerült elérni az egészségügyi végpontot. Ellenőrizze a kapcsolatot, és próbálja újra.", + "healthCheckFailed": "Egészségügyi ellenőrzés sikertelen", + "openConnectivityHelp": "Nyitott Konektivitás Súgó", + "maintenanceInfo": "Karbantartási Információ", + "service": "Szolgáltatás", + "unknown": "ismeretlen", + "notAvailable": "n/a", + "providersTracked": "Követett Szolgáltatók", + "circuitBreakerState": "Szolgáltató Áramkör Megszakító Állapot", + "lastUpdate": "Utolsó frissítés: {timestamp}", + "uptimeMinutes": "{minutes}p", + "uptimeHoursMinutes": "{hours}ó {minutes}p" + }, + "statusPages": { + "400": { + "title": "Hibás kérés", + "description": "A kérés terhelése érvénytelen vagy hiányos.", + "suggestion1": "Ellenőrizze a kötelező mezőket és a payload formátumát, mielőtt újra próbálkozna.", + "suggestion2": "Ha az API-t használja, érvényesítse a JSON sémát helyben.", + "suggestion3": "Ha ez továbbra is előfordul, nyisd meg a kérést a Translator Playgroundban a payload ellenőrzéséhez.", + "primaryAction": "Dokumentáció Megnyitása", + "secondaryAction": "Nyisd meg a Fordítót" + }, + "401": { + "title": "Jogosulatlan", + "description": "Az erőforrás eléréséhez hitelesítés szükséges.", + "suggestion1": "Jelentkezz be újra, és próbáld meg a műveletet.", + "suggestion2": "API hívásokhoz erősítse meg, hogy a Bearer token jelen van és érvényes.", + "suggestion3": "Ha a token nemrégiben megújult, frissítse a kliens hitelesítő adatait.", + "primaryAction": "Menj a Bejelentkezéshez", + "secondaryAction": "API Kulcsok Kezelése" + }, + "403": { + "title": "Tiltott", + "description": "A kérésedet megértettük, de a hozzáférést a szabályzat elutasítja.", + "suggestion1": "Ellenőrizze az IP engedélyezési/tiltási szabályokat a beállításokban.", + "suggestion2": "Ellenőrizze a modell- és költségvetési irányelveket, amelyek a API kulcsához vannak rendelve.", + "suggestion3": "Kérj meg egy rendszergazdát, hogy adja meg a szükséges engedélyterjedelmet.", + "primaryAction": "Nyílt Hozzáférés Súgó", + "secondaryAction": "Nyissa meg a Biztonsági Beállításokat" + }, + "408": { + "title": "Kérés Időtúllépés", + "description": "A szerver nem kapott meg időben egy teljes kérést.", + "suggestion1": "Ismételje meg a kérést kisebb terheléssel.", + "suggestion2": "Ellenőrizze a hálózati stabilitását és a VPN/proxy késleltetését.", + "suggestion3": "Hosszú műveletekhez engedélyezze a streaminget, vagy bontsa le a kérést.", + "primaryAction": "Nyisd meg az Endpoint Útmutatót", + "secondaryAction": "Hálózati állapot ellenőrzése" + }, + "429": { + "title": "Túl Sok Kérés", + "description": "A sebességkorlátokat túllépték ennek az ügyfélnek, kulcsnak vagy szolgáltatónak.", + "suggestion1": "Várj a visszahűlési időre, és próbáld újra a javasolt időintervallum után.", + "suggestion2": "Váltás egy kombinációra visszaesési szolgáltatókkal.", + "suggestion3": "Hangolja a szolgáltató ellenállósági/aránykorlátozási profilokat a beállításokban.", + "primaryAction": "Nyissa meg a Resilience Beállításokat", + "secondaryAction": "Nyisd meg a Combokat" + }, + "500": { + "title": "Belső Szerver Hiba", + "description": "Váratlan szerveroldali hiba lépett fel a kérésének feldolgozása során.", + "suggestion1": "Próbálja újra néhány másodperc múlva.", + "suggestion2": "Ellenőrizze az egészségügyi telemetriát és a szervernaplókat a korrelált kérésazonosítókért.", + "suggestion3": "Ha tartós, jelentsd a problémát időbélyeggel és kéréskörnyezettel.", + "primaryAction": "Nyisd meg az Egészségügyi Műszerfalat", + "secondaryAction": "Nyisd meg a naplókat" + }, + "502": { + "title": "Hibás átjáró", + "description": "A felfelé irányuló szolgáltató vagy átjáró integráció érvénytelen választ adott vissza.", + "suggestion1": "Próbálja meg egy másik szolgáltatóval vagy aktív kombinált útvonallal.", + "suggestion2": "Ellenőrizze a szolgáltató hitelesítő adatait és a modell elérhetőségét.", + "suggestion3": "Ellenőrizze a fordító kimenetét, ha formátumkonverzió érintett.", + "primaryAction": "Nyitott szolgáltatók", + "secondaryAction": "Nyisd meg a Fordítót" + }, + "503": { + "title": "Szolgáltatás nem elérhető", + "description": "A szolgáltatás ideiglenesen nem elérhető karbantartás vagy csökkentett függőségek miatt.", + "suggestion1": "Várj egy pillanatot, és próbáld újra.", + "suggestion2": "Ellenőrizze a karbantartási értesítéseket és a rendszer állapotát.", + "suggestion3": "Használj tartalék szolgáltatókat, ha a munkafolyamatod érzékeny a késleltetésre.", + "primaryAction": "Karbantartási Részletek", + "secondaryAction": "Rendszerállapot" + } + } + }, + "kiroAuthModal": { + "title": "Csatlakozás {providerLabel}", + "chooseMethod": "Válaszd ki az azonosítási módszered:", + "builderId": "AWS Builder ID", + "builderDescription": "Ajánlott a legtöbb felhasználónak. Jelentkezzen be a {providerLabel} -hoz kapcsolódó AWS fiókjával.", + "organization": "A Szervezeted (AWS IAM Identity Center)", + "organizationDescription": "Használja a cég SSO kezdő URL-jét (példa: {url}).", + "googleAccount": "Google Fiók", + "googleDescription": "Jelentkezz be a Google-fiókoddal.", + "githubAccount": "GitHub Fiók", + "githubDescription": "Jelentkezz be a GitHub fiókoddal.", + "importToken": "Token Importálása", + "importDescription": "Illessze be a {providerLabel} által exportált frissítési tokent.", + "apiKey": "API Kulcs", + "apiKeyDescription": "Illessze be a hosszú élettartamú {providerLabel} / CodeWhisperer API kulcsot. Ez egy bearer hitelesítőként van tárolva, frissítő token nélkül; a profil felfedezése legjobb igyekezet alapján történik.", + "idcStartUrl": "IDC Indító URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "A szervezet AWS IAM Identity Center URL-je", + "awsRegion": "AWS Régió", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS régió az Ön Identitásközpontjához (alapértelmezett: us-east-1)", + "continue": "Folytatás", + "back": "Vissza", + "autoDetecting": "Token automatikus észlelése...", + "readingCredentials": "{providerLabel} hitelesítő adatok olvasása az AWS SSO gyorsítótárból", + "tokenNotDetected": "A {providerLabel} token nem volt automatikusan észlelve. Kérjük, illessze be a frissítő tokent manuálisan.", + "refreshToken": "Frissítő Token", + "tokenPlaceholder": "A token automatikusan kitöltésre kerül...", + "importing": "Importálás...", + "apiKeyPlaceholder": "Illessze be a {providerLabel} API kulcsát...", + "apiKeyStoredDescription": "Tartósan titkosítva tárolva, mint egy hosszú élettartamú jogosultsági hitelesítő. Nincs frissítési folyamat.", + "apiKeyRegionDescription": "AWS régió a kulcshoz (alapértelmezett: us-east-1)", + "validating": "Érvényesítés...", + "validateAndSaveApiKey": "API Kulcs Érvényesítése és Mentése", + "errorAutoDetect": "Nem sikerült automatikusan észlelni a tokent", + "errorAutoDetectFailed": "Nem sikerült automatikusan észlelni a tokent", + "errorRefreshTokenRequired": "Kérjük, adjon meg egy frissítő tokent", + "errorImportFailed": "Importálás nem sikerült", + "errorApiKeyRequired": "Kérjük, adja meg a Kiro API kulcsot", + "errorApiKeyImportFailed": "API kulcs importálása nem sikerült", + "errorIdcStartUrlRequired": "Kérjük, adja meg az IDC kezdő URL-jét" + }, + "kiroSocialOAuthModal": { + "title": "Csatlakozás a {providerLabel} szolgáltatáshoz a {providerName} segítségével", + "errorStartAuthorization": "Sikertelen hitelesítés indítása", + "errorAuthorizationExpired": "A jogosultság lejárt. Indítsa újra a bejelentkezési folyamatot.", + "errorAuthorizationFailed": "Az engedélyezés meghiúsult", + "initializing": "Inicializálás...", + "settingUp": "{providerName} hitelesítés beállítása", + "openIncognito": "Nyisd meg ezt a linket egy Inkognitó ablakban", + "incognitoDescription": "Használj inkognitó/privát ablakot, hogy elkerüld a meglévő fiókokkal való munkamenet-ütközéseket.", + "copyLink": "Link másolása", + "verificationCode": "Ellenőrző kód", + "waiting": "Várakozás az engedélyezésre...", + "cancel": "Mégse", + "successTitle": "Sikeresen csatlakozva!", + "successMessage": "A {providerName} által biztosított {providerLabel} fiók csatlakoztatva lett.", + "done": "Kész", + "errorTitle": "Kapcsolódás Sikertelen", + "close": "Bezárás" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Az engedélyezés meghiúsult", + "errorPopupBlocked": "Popup blokkolva — engedélyezze a felugró ablakokat ehhez az oldalhoz, vagy illessze be a tokent manuálisan alább.", + "errorPopupClosed": "Az engedélyezési ablak a befejezés előtt zárva lett.", + "errorAccessTokenRequired": "Hozzáférési token szükséges.", + "errorImportFailed": "Importálás nem sikerült", + "title": "Csatlakoztassa a Trae SOLO-t", + "authorizeDescription": "Engedélyezze a trae.ai használatával egy felugró ablakban. A felugró ablak automatikusan bezáródik, miután a token importálva lett.", + "authorizeImportant": "Fontos: először be kell jelentkezned a trae.ai oldalra ebben a böngészőben. Az engedélyezési oldal csak egy meglévő munkamenetet erősít meg — nem tud bejelentkezni. Ha a \"Bejelentkezés Sikertelen\" üzenetet látod, kattints az \"Open solo.trae.ai\" lehetőségre, jelentkezz be, majd térj vissza ide.", + "waitingForAuthorization": "Várakozás a trae.ai-ra…", + "authorizeWithBrowser": "Engedélyezés Böngészővel", + "openSoloTrae": "Nyisd meg a solo.trae.ai-t.", + "orPasteManually": "vagy illessze be a tokent manuálisan", + "manualInstructions": "Jelentkezz be a solo.trae.ai oldalra, nyisd meg a DevTools → Hálózatot, küldj el bármilyen csevegési üzenetet, és másold ki a JWT-t a Authorization: Cloud-IDE-JWT {tokenPlaceholder} kérés fejlécéből. A JWT élettartama körülbelül 14 nap. Az opcionális azonosító mezők a common_params mezőből származnak ugyanabban a kérés törzsben.", + "accessTokenLabel": "Hozzáférési Token (Cloud-IDE-JWT)", + "webId": "Web ID", + "optional": "opcionális", + "bizUserId": "Biz Felhasználói Azonosító", + "userUniqueId": "Felhasználói Egyedi Azonosító", + "scope": "Hatókör", + "tenant": "Bérlő", + "region": "Régió", + "importing": "Importálás…", + "importToken": "Token Importálása", + "cancel": "Mégse" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Terjesztés...", + "complete": "Teljesítve", + "defaultLabel": "Proxyk Elosztása" + } + }, + "providerTest": { + "dialogLabel": "Teszt {provider}", + "deprecated": "elavult", + "risk": "kockázat", + "close": "Bezárás", + "model": "Modell", + "key": "Kulcs", + "defaultKey": "alapértelmezett", + "clearConversation": "Beszélgetés törlése", + "clear": "Törlés", + "tabs": { + "test": "Teszt", + "logs": "Naplók" + }, + "loadingLogs": "Naplók betöltése…", + "failedToLoadLogs": "A naplók betöltése nem sikerült", + "noLogsYet": "Még nincsenek naplók", + "noLogsDescription": "Küldjön egy tesztüzenetet a Teszt fülről — a szolgáltatóhoz tartozó naplók itt fognak megjelenni.", + "openFullLogs": "Nyissa meg a teljes naplóoldalt", + "live": "Élő", + "tailingLast": "az utolsó {count} követése", + "refreshNow": "Frissítés most", + "refresh": "Frissítés", + "unknownRequester": "ismeretlen kérvényező", + "fields": { + "timestamp": "Időbélyeg", + "status": "Állapot", + "duration": "Időtartam", + "model": "Modell", + "requestedModel": "Kért modell", + "provider": "Szolgáltató", + "requester": "Kérő", + "tokens": "Tokenok" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy napló részletei", + "event": "Proxy Esemény", + "close": "Proxy részletező ablak bezárása", + "time": "Idő", + "latency": "Késleltetés", + "clientIp": "Kliens IP", + "proxy": "Proxy", + "direct": "Közvetlen", + "type": "Típus", + "level": "Szint", + "provider": "Szolgáltató", + "tlsFingerprint": "TLS Ujjlenyomat", + "directNative": "Közvetlen", + "targetUrl": "Cél URL", + "error": "Hiba", + "configuration": "Proxy Beállítások" + }, + "requestTimeline": { + "title": "Kérelem Idővonal", + "modes": { + "follow": "Kövesd", + "followDescription": "A tengely balra görget, a NOW vonal 75%-on marad", + "now": "Most", + "nowDescription": "Ugrás a jelenlegi időpontra, a MOST vonal középre állítva", + "pan": "Páncél", + "panDescription": "Húzd az felfedezéshez, a háttér megfagyott" + }, + "reset": "Visszaállítás", + "started": "Elindítva", + "ended": "Befejeződött", + "duration": "Időtartam", + "status": "Állapot", + "provider": "Szolgáltató", + "tokens": "Tokenok", + "active": "Aktív", + "other": "Egyéb", + "tenMinutes": "10perc", + "hour": "óra", + "day": "nap", + "unknownModel": "ismeretlen", + "pending": "függőben" + }, + "metadata": { + "compressionTitle": "Tömörítés", + "compressionDescription": "Állítsa be a kontextus tömörítési beállításait a tokenhasználat és a költségek csökkentéséhez.", + "relayTitle": "OmniRoute — Relay Proxik", + "relayDescription": "Szerver nélküli relay proxy végpontok az AI infrastruktúrádhoz", + "trafficInspectorTitle": "Forgalomellenőr — OmniRoute", + "trafficInspectorDescription": "Figyeld a LLM hívásokat + hibakeresd bármely alkalmazás HTTPS forgalmát" + }, + "conductor": { + "title": "Conductor — CLI-ügynök flotta", + "subtitle": "OmniConductor hub: futók, feladat sor és tanácsok, élő", + "runners": "Futók", + "tasks": "Feladatok", + "colName": "Név", + "colClis": "CLI-k", + "colStatus": "Állapot", + "colTask": "Feladat", + "colMode": "Mód", + "colRunner": "Futó", + "colSummary": "Összegzés", + "online": "online", + "offline": "offline", + "draining": "leeresztés", + "hubOffline": "A Conductor hub offline vagy nincs konfigurálva (CONDUCTOR_HUB_URL) — nem mutat semmit, csak elavult adatokat.", + "noRunners": "Nincs regisztrált futó", + "noTasks": "Még nincsenek feladatok", + "detailTitle": "Feladat részletei", + "prompt": "Kérdés", + "branch": "Ág", + "fetchHint": "Hozd el az eredményt a következővel: git fetch origin {branch}", + "council": "Tanács", + "candidates": "Jelöltek", + "cancel": "Feladat megszakítása", + "cancelConfirmTitle": "Meg akarja szakítani ezt a feladatot?", + "cancelConfirmMessage": "A hub megszakítja a végrehajtást a futtatón. Ezt nem lehet visszavonni.", + "cancelFailed": "A központ elutasította a lemondást", + "close": "Bezárás", + "error": "Hiba", + "faroTitle": "Faro — flottaszóvivő", + "faroSubtitle": "Csevegés és hang, valós flottás eseményekhez rögzítve. A destruktív parancsok mindig megerősítést kérnek.", + "faroEmpty": "Kérdezd meg a flottáról — pl. \"hogy van a flotta?\"", + "faroPending": "Faro megerősítést kér", + "faroPlaceholder": "beszélj Faróval…", + "faroSend": "küldés", + "faroOffline": "Faro (szóvivő) offline", + "yes": "Igen", + "no": "Nem", + "pushToTalk": "Tartsd lenyomva a beszéléshez", + "speakAnswers": "beszélj válaszokat", + "voiceModels": "Hangmodellek (szolgáltató/model az OmniRoute-hoz)", + "voiceIdle": "beszélgetés", + "voiceListening": "figyelés…", + "voiceThinking": "gondolkodás…", + "voiceSpeaking": "beszélgetés…", + "sttFailed": "A transzkripció sikertelen (ellenőrizze az STT modellt/szolgáltatót)", + "ttsFailed": "A beszédszintézis meghiúsult (ellenőrizze a TTS modellt/szolgáltatót)", + "micDenied": "A mikrofon nem elérhető, vagy a hozzáférés megtagadva" + }, + "cliproxyProviderExposure": { + "title": "Szolgáltató Expozíció", + "description": "Expose CLIProxyAPI modelleként egy útvonal célpontjaként a cliproxyapi/ előtag alatt.", + "label": "Tedd közzé mint cliproxyapi/...", + "hint": "Ha engedélyezve van, a felfedezett modellek megjelennek a szolgáltató kiválasztásokban az OmniRoute-ban.", + "updateFailed": "Sikertelen frissítés (HTTP {status})", + "networkError": "Hálózati hiba — nem sikerült frissíteni a szolgáltató láthatósági beállítását" + } } - diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 0c20809c32..69edec1961 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -172,6 +172,18 @@ "unselectAll": "Batalkan semua pilihan", "visibleModels": "terlihat", "selectAllConfirm": "Tambahkan {count} model ke kombinasi ini?", + "testSelectedProviders": "Penyedia Uji", + "testingSelectedProviders": "Menguji {done}/{total}...", + "noProvidersSelectedToTest": "Periksa setidaknya satu penyedia di bawah ini terlebih dahulu", + "noModelsToTestForProviders": "Tidak ada model untuk diuji untuk penyedia yang dipilih", + "testSelectedProvidersResults": "{ok} dari {total} model berfungsi", + "selectWorkingModels": "Tambahkan bekerja", + "unselectWorkingModels": "Batalkan pilihan bekerja", + "noWorkingModelsToSelect": "Tidak ada model yang dapat ditambahkan lagi", + "providerTestHint": "Tip: periksa penyedia → Uji → Tambahkan yang berfungsi. Klik lagi untuk membatalkan pilihan.", + "selectAllProviders": "Periksa semua penyedia", + "clearProviderSelection": "Hapus centang penyedia", + "providersSelectedCount": "{count} penyedia diperiksa", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Ukuran", + "toggleNoAuthProvider": "Alihkan penyedia tanpa otentikasi", + "loadingModels": "Memuat model…", + "selectAModel": "Pilih model", + "degraded": "Menurun", + "zeroConfigBannerTitle": "Berjalan dalam mode tanpa konfigurasi", + "zeroConfigBannerBody": "OmniRoute secara otomatis menghasilkan kunci enkripsi aman saat peluncuran pertama. Kunci tersebut disimpan di {dataDir}. Tidak ada tindakan yang diperlukan — data Anda terenkripsi dan aman. Untuk menggunakan kunci kustom, tambahkan JWT_SECRET dan STORAGE_ENCRYPTION_KEY ke file tersebut.", + "batchRelativeTimeIn": "dalam {value}", + "batchRelativeTimeAgo": "{value} yang lalu", + "batchDetailsTitle": "Detail Batch", + "batchProgress": "Kemajuan", + "batchCompletedCount": "{count} selesai", + "batchFailedCount": "{count} gagal", + "batchPendingCount": "{count} tertunda", + "batchTimeline": "Garis Waktu", + "batchTimelineInProgress": "Dalam Proses", + "batchTimelineFinalizing": "Menyelesaikan", + "batchTimelineCompleted": "Selesai", + "batchTimelineFailed": "Gagal", + "batchTimelineExpires": "Kedaluwarsa", + "batchTimelineExpired": "Kedaluwarsa", + "batchTimelineCancelling": "Membatalkan", + "batchTimelineCancelled": "Dibatalkan", + "batchTokenUsage": "Penggunaan Token", + "batchMetadata": "Metadata", + "batchFileContents": "Isi File", + "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Prabaca", + "batchFilePreviewTruncated": "Menampilkan {shown} baris pertama ({total} total baris)", + "batchFileDownloadFull": "Unduh File Lengkap" }, "disabled": "Dinonaktifkan", "featureFlagOmnirouteEmergencyFallbackDescription": "Arahkan permintaan yang kehabisan anggaran ke penyedia/model fallback gratis darurat.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Pemisah", "discovery": "Penemuan", "discoverySubtitle": "Pindai penyedia untuk akses gratis", + "conductor": "Konduktor", + "conductorSubtitle": "Armada CLI-agent", "resilienceConnections": "Resiliensi Koneksi", "resilienceConnectionsSubtitle": "Cooldown, breaker, status penguncian", "settingsModalityBridge": "Jembatan Modalitas", - "settingsModalityBridgeSubtitle": "Fallback teks untuk model hanya teks dari gambar/audio" + "settingsModalityBridgeSubtitle": "Fallback teks untuk model hanya teks dari gambar/audio", + "commandPalette": { + "title": "Palet Perintah", + "searchPlaceholder": "Cari halaman, pengaturan, alat...", + "clearSearch": "Hapus pencarian", + "noResults": "Tidak ada hasil", + "navigate": "navigasi", + "open": "buka", + "close": "tutup" + }, + "noResults": "Tidak ada hasil" }, "webhooks": { "title": "Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Pembaruan Pengaturan Gagal", "sync.token.created": "Token Sinkronisasi Dibuat", "sync.token.revoked": "Token Sinkronisasi Dicabut" - } + }, + "mcpMetricCalls24h": "Panggilan (24j)", + "mcpMetricSuccessRate": "Tingkat keberhasilan", + "mcpMetricAvgDuration": "Durasi rata-rata", + "mcpMetricTopTool": "Alat Terbaik" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Versi baru tersedia. Klik untuk memperbarui.", "updateStarted": "Pembaruan dimulai...", "reloadingPageAutomatically": "Memuat ulang halaman secara otomatis...", - "providerTopology": "Topologi Penyedia" + "providerTopology": "Topologi Penyedia", + "downloadDmg": "Unduh DMG (macOS)", + "downloadDmgDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh dan instal penginstal DMG macOS untuk memperbarui (sekarang: v{version}).", + "downloadExe": "Unduh EXE (Windows)", + "downloadExeDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh dan instal penginstal EXE Windows untuk memperbarui (sekarang: v{version}).", + "downloadAppImage": "Unduh AppImage (Linux)", + "downloadAppImageDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh paket AppImage Linux untuk memperbarui (sekarang: v{version}).", + "downloadUpdate": "Unduh Pembaruan", + "downloadUpdateDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh format aplikasi yang sesuai untuk sistem Anda untuk memperbarui (sekarang: v{version}).", + "updateQueued": "Pembaruan v{version} dalam antrean.", + "updateDockerRebuilding": "Gambar Docker sedang dibangun kembali di latar belakang.", + "updateWaitingRestart": "Menunggu OmniRoute untuk memulai ulang dengan versi baru.", + "updateInstalling": "Menginstal v{version}.", + "updateRunning": "OmniRoute sekarang menjalankan v{version}.", + "updateCompleted": "OmniRoute diperbarui ke v{version}.", + "updateDockerStillRebuilding": "Gambar Docker masih membangun ulang untuk v{version}.", + "updateInstallingBackground": "Menginstal v{version} di latar belakang.", + "updateWaitingVersion": "Menunggu OmniRoute untuk kembali di v{version}.", + "updateDockerStillInProgress": "Docker rebuild masih dalam proses.", + "updateRestarting": "Proses restart layanan sedang berlangsung. Menunggu OmniRoute untuk kembali online...", + "updateTimeout": "Pembaruan dimulai, tetapi v{version} tidak tersedia sebelum waktu habis. Segarkan halaman atau periksa log server.", + "updateTimedOut": "Pembaruan ke v{version} telah habis waktu.", + "updateStartFailed": "Gagal memulai pembaruan.", + "noResponseStream": "Tidak ada aliran respons yang diterima.", + "updateComplete": "Pembaruan selesai!", + "updateFailed": "Pembaruan gagal.", + "updateNetworkError": "Kesalahan jaringan — koneksi terputus selama pembaruan.", + "stepInstallPackage": "Instal Paket", + "stepRebuildNativeModules": "Bangun Kembali Modul Native", + "stepRestartService": "Mulai Ulang Layanan", + "stepComplete": "Lengkap", + "stepError": "Kesalahan", + "updateCompleteTitle": "Pembaruan Selesai!", + "updateFailedTitle": "Pembaruan Gagal", + "updatingTitle": "Memperbarui OmniRoute...", + "reloadNotice": "Halaman akan dimuat ulang secara otomatis dalam beberapa detik.", + "retryNotice": "Silakan coba lagi atau perbarui secara manual melalui CLI.", + "restartNotice": "Jangan tutup halaman ini. Sistem akan restart secara otomatis.", + "reloadNow": "Muat Ulang Sekarang", + "closeUpdate": "Tutup", + "retryUpdate": "Coba Lagi", + "updateAvailableTitle": "Pembaruan Tersedia: v{version}{desktop}", + "desktopAppLabel": "(Aplikasi Desktop)", + "checkingForUpdates": "Memeriksa pembaruan...", + "versionAvailableForDownload": "Versi v{version} tersedia untuk diunduh.", + "downloadingUpdate": "Mengunduh pembaruan... {percent}% selesai.", + "updateDownloaded": "Pembaruan berhasil diunduh! Klik Restart & Install untuk menerapkannya.", + "autoUpdateFailed": "Pembaruan otomatis gagal: {reason}.", + "unknownUpdateError": "Kesalahan tidak diketahui", + "versionAvailableDesktop": "Versi v{version} tersedia untuk aplikasi desktop.", + "manualUpdateRequired": "Pembaruan manual diperlukan untuk jenis instalasi ini.", + "restartAndInstall": "Mulai Ulang & Instal", + "checkForUpdate": "Periksa Pembaruan", + "manualUpdate": "Pembaruan Manual", + "directDownloadHint": "Atau unduh format installer yang sesuai secara langsung:", + "releaseNotes": "Catatan Rilis", + "readMore": "Baca Selengkapnya", + "noAuthLabel": "Tidak Ada Autentikasi" }, "analytics": { "title": "Analisis", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Disimpulkan dari log panggilan tersimpan di sekitar permintaan ini", "routeRecommendations": "Rekomendasi", "routeLimitations": "Batasan", - "routeNoKnownLimitations": "Tidak ada batasan yang diketahui untuk penjelasan ini." + "routeNoKnownLimitations": "Tidak ada batasan yang diketahui untuk penjelasan ini.", + "searchAnalyticsLoading": "Memuat analitik pencarian…", + "searchAnalyticsNoData": "Tidak ada data pencarian yang tersedia saat ini.", + "searchAnalyticsNoDataDescription": "Permintaan pencarian akan muncul di sini setelah pencarian pertama melalui /v1/search.", + "searchAnalyticsToday": "{count} hari ini", + "searchAnalyticsCachedRequests": "{count} permintaan yang di-cache", + "searchAnalyticsApiCosts": "biaya API pencarian", + "searchAnalyticsErrors": "{count} kesalahan", + "searchAnalyticsNoErrors": "Tidak ada kesalahan", + "searchAnalyticsProviderBreakdown": "Rincian Penyedia", + "searchAnalyticsQueries": "kueri", + "searchAnalyticsEmptyDescription": "Gunakan POST /v1/search untuk memulai pengalihan pencarian web.", + "searchAnalyticsFreeTier": "Tier gratis tersedia: Serper (2.500/bulan), Brave (2.000/bulan), Exa (1.000/bulan), Tavily (1.000/bulan) — total 6.500+ pencarian gratis/bulan dengan failover otomatis.", + "autoRoutingNoDataAvailable": "Tidak ada analitik auto-routing yang tersedia. Buat permintaan menggunakan awalan auto/ untuk melihat metrik.", + "defaultVariantLabel": "Default", + "freeTierAvailable": "Tingkat gratis tersedia" }, "apiManager": { "title": "Kunci API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} penyedia", "imageToTextBridgeAvailable": "Modality Bridge sekarang dapat mendeskripsikan gambar untuk model teks saja. Playground inline akan tersedia ketika /api/v1/images/understanding diimplementasikan.", "imageToTextBridgeCta": "Konfigurasikan jembatan Gambar→Teks di pengaturan Jembatan Modality", - "sttBridgeCta": "Konfigurasikan jembatan Ucapan→Teks di pengaturan Jembatan Modality" + "sttBridgeCta": "Konfigurasikan jembatan Ucapan→Teks di pengaturan Jembatan Modality", + "existingConnection": "Koneksi yang ada", + "openrouterSttDescription": "Model speech-to-text OpenRouter menggunakan koneksi OpenRouter yang telah Anda konfigurasikan. Tidak diperlukan kredensial terpisah." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Tempel ke:", "copilotReloadInstruction": "Kemudian muat ulang VS Code dan atur kunci API di prompt input.", "wireApiChatCompletions": "Penyelesaian Obrolan (/chat/penyelesaian)", - "wireApiResponses": "API Respons (/respons)" + "wireApiResponses": "API Respons (/respons)", + "cliproxyapiActionFailed": "Tindakan gagal", + "cliproxyapiActionSucceeded": "Tindakan berhasil", + "cliproxyapiCheckUpdates": "Periksa Pembaruan", + "cliproxyapiDescription": "Fallback proxy hulu (OAuth berbasis Go)", + "cliproxyapiHealth": "Kesehatan", + "cliproxyapiHealthy": "Sehat", + "cliproxyapiInstall": "Instal", + "cliproxyapiNotInstalledValue": "Tidak terpasang", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Permintaan gagal", + "cliproxyapiRestart": "Mulai Ulang", + "cliproxyapiStart": "Mulai", + "cliproxyapiStatusError": "Kesalahan", + "cliproxyapiStatusInstalled": "Terpasang", + "cliproxyapiStatusNotInstalled": "Tidak Terpasang", + "cliproxyapiStatusRunning": "Sedang Berjalan", + "cliproxyapiStatusStopped": "Dihentikan", + "cliproxyapiStop": "Berhenti", + "cliproxyapiUnhealthy": "Tidak Sehat", + "cliproxyapiUnknown": "Tidak Dikenal", + "cliproxyapiUpdate": "Perbarui", + "cliproxyapiUpdateAvailable": "Pembaruan tersedia: v{current} → v{latest}", + "cliproxyapiVersion": "Versi" }, "combos": { "title": "kombo", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Hanya maju saat kuota habis", + "fallbackOnlyOnQuotaExhaustionShort": "fallback hanya kuota", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Paket mode dan pembobotan tetap di sini; status runtime breaker tetap di halaman Kesehatan.", "emailVisibilityHint": "Email akun di sini mengikuti pengalih privasi global.", "emailVisibilityTooltip": "Gunakan ikon mata untuk menampilkan atau menyembunyikan email akun secara global di seluruh kombo, penyedia, dan layar kuota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Langkah demi langkah (Penyedia → Model)", + "builderModeGlobal": "Pencarian model global (Kombinasi kustom)", + "builderGlobalSearchPlaceholder": "Cari model di semua penyedia (mis. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Tambahkan semua", + "builderGlobalShortcuts": "Pintasan:", + "builderGlobalNoResults": "Tidak ada model yang ditemukan untuk \"{query}\".", + "builderGlobalProviderLabel": "Penyedia:", + "builderGlobalAccountCount": "{count, plural, one {# akun} other {# akun}}", + "builderGlobalAdded": "Ditambahkan", + "builderGlobalAdd": "Tambahkan", "manualModel": "Model manual", "manualModelInvalid": "Masukkan model sebagai penyedia/model.", "manualModelUnknownProvider": "Prefiks penyedia tidak dikenal.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Ketersediaan Sesi", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness nonaktif", "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 sebagai model utama (Moonshot API), dengan pengalihan otomatis (fallback) ke koneksi Kimi Code Anda (kimi-coding, kimi-web) saat dikonfigurasi.", - "kimiPresetCta": "Tambah preset" + "kimiPresetCta": "Tambah preset", + "intelligentComboCount": "{count, plural, one {# kombinasi cerdas} other {# kombinasi cerdas}}", + "providersInScope": "{count, plural, one {# penyedia dalam lingkup} other {# penyedia dalam lingkup}}", + "savingModePack": "Menyimpan {pack}…", + "errorTitle": "Gagal memuat kombinasi", + "errorDescription": "Kami tidak dapat memuat data kombinasi saat ini. Periksa koneksi Anda dan coba lagi.", + "errorId": "Error ID: {id}", + "errorRetry": "Coba Lagi", + "comboLabel": "Combo" }, "costs": { "title": "Biaya", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nama Pengguna", "obsidianPassword": "Kata Sandi", - "obsidianTailscaleHint": "Gunakan IP Tailscale Anda alih-alih localhost jika menghubungkan dari ponsel. Kedua perangkat harus berada di jaringan Tailscale yang sama." + "obsidianTailscaleHint": "Gunakan IP Tailscale Anda alih-alih localhost jika menghubungkan dari ponsel. Kedua perangkat harus berada di jaringan Tailscale yang sama.", + "cloudSyncNotConfigured": "Sinkronisasi cloud belum dikonfigurasi pada instance ini.", + "notionConnect": "Sambungkan", + "notionConnectFailed": "Gagal terhubung", + "notionConnected": "Terhubung", + "notionConnectionFailed": "Koneksi gagal", + "notionDescription": "Cari, baca, kueri, dan tulis ke Notion melalui model AI yang diarahkan", + "notionDisconnect": "Putuskan Koneksi", + "notionDisconnectFailed": "Gagal untuk memutuskan koneksi", + "notionEnterToken": "Silakan masukkan token integrasi Notion", + "notionIntegrationHelp": "Buat Integrasi Internal di", + "notionIntegrationToken": "Token Integrasi Internal Notion", + "notionNotConnected": "Tidak terhubung", + "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Penyedia / Model", "noRemoteProviders": "Tidak ada penyedia dengan kunci API yang dikonfigurasi", "selectProviderModel": "Pilih model", + "customBaseUrlLabel": "URL dasar kustom (opsional)", + "customModelIdLabel": "ID model kustom (opsional)", + "customEndpointHelp": "Gunakan endpoint /embeddings yang kompatibel dengan OpenAI. Endpoint lokal diperbolehkan; target metadata cloud diblokir.", + "customEndpointSave": "Terapkan endpoint kustom", + "customEndpointInvalid": "Masukkan baik URL dasar HTTP(S) yang valid dan ID model, atau biarkan kedua kolom kosong.", + "customEndpointSaveFailed": "Endpoint penyisipan kustom tidak dapat disimpan.", "staticEnabledLabel": "Aktifkan Static Potion", "staticEnabledDesc": "Unduh dan gunakan model potion-base-8M secara lokal", "transformersEnabledLabel": "Aktifkan Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Membersihkan...", "cleanNow": "Bersihkan sekarang", "cleanupSuccess": "{count} poin dihapus", - "cleanupFailed": "Pembersihan gagal" + "cleanupFailed": "Pembersihan gagal", + "hostLabel": "Host", + "collectionLabel": "Koleksi" }, "rerank": { "enableLabel": "Aktifkan Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagram cadangan 3 tingkat OmniRoute", "apiKeyMgmt": "Manajemen Kunci API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Atur penyedia gratis", + "description": "Opsional untuk mengaktifkan penyedia tanpa pendaftaran yang dipilih. Tinjau pemberitahuan dan situs masing-masing penyedia sebelum melanjutkan; ketersediaan dan batasan tarif dikendalikan oleh pihak ketiga.", + "loading": "Memuat penyedia gratis...", + "loadFailed": "Tidak dapat memuat penyedia gratis.", + "alreadyConfigured": "Semua penyedia gratis yang memenuhi syarat sudah dikonfigurasi.", + "reviewProviderSite": "Tinjau situs penyedia dan syaratnya", + "confirmation": "Saya telah meninjau penyedia pihak ketiga ini dan ingin OmniRoute untuk membuat koneksi yang dipilih.", + "setupSelected": "Atur penyedia yang dipilih", + "settingUp": "Menyiapkan...", + "setupFailed": "Tidak dapat mengatur penyedia yang dipilih. Tidak ada yang diubah.", + "retryFailed": "Coba ulang penyedia yang gagal", + "orUseApiKey": "atau sambungkan dengan kunci API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "dibuat", + "skipped": "sudah dikonfigurasi", + "failed": "gagal" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Diperlukan. URL dasar API penyedia.", "iconUrlLabel": "URL Ikon", "iconUrlHint": "Opsional. URL gambar yang ditampilkan sebagai ikon penyedia ini.", + "iconUrlInvalid": "URL ikon tidak valid. Gunakan URL http(s):// atau data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibel (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sesi sudah saat ini", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Terapkan autentikasi", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Tempel kunci API…", "zedSaving": "Menyimpan…", "zedImportAction": "Impor", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktifkan pembaruan sesi Kursor otomatis", + "cursorAgentNudgeBody": "Instal cursor-agent untuk pembaruan sesi otomatis — tanpa itu, koneksi Cursor memerlukan penyambungan manual secara berkala sekitar setiap 24 jam.", + "cursorAgentNudgeDismiss": "Tutup", "zedManualImportFailed": "Impor manual gagal", "zedManualImportSuccess": "Berhasil mengimpor token {provider} dari Zed", "grokImportTitle": "Impor Autentikasi Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Tingkat gratis untuk inferensi serverless — tidak memerlukan kartu kredit", "gemini": "Gratis selamanya: 1.500 req/hari untuk Gemini 2.5 Flash — tanpa kartu kredit, dapatkan kunci di aistudio.google.com", "gigachat": "Hubungkan GigaChat (Sber) dengan kunci API.", - "github-models": "Buat GitHub PAT dengan cakupan 'models: read' di github.com/settings/tokens", "gitlab": "Token akses pribadi GitLab untuk API Code Suggestions publik. Konfigurasikan URL dasar yang di-host sendiri saat tidak menggunakan gitlab.com.", "gitlawb-gmi": "Dapatkan kunci API Anda dari dasbor Gitlawb Opengateway.", "gitlawb": "Dapatkan kunci API Anda dari dasbor Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Hubungkan Kimi Coding dengan alur OAuth yang ada.", "kiro": "Tingkat gratis: 50 kredit/bulan (~25K–100K token). ⚠️ ToS Kiro melarang penggunaan proksi/harness pihak ketiga.", "codex": "Hubungkan OpenAI Codex dengan alur OAuth yang ada.", - "qwen": "Hubungkan Qwen Code dengan alur OAuth yang ada." + "qwen": "Hubungkan Qwen Code dengan alur OAuth yang ada.", + "github-models": "Buat GitHub PAT dengan cakupan 'models: read' di github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} menerima ID model asli penyedia. Impor dari /models atau tambahkan ID khusus untuk perutean.", "bedrockModelsDescription": "Model Amazon Bedrock dicakup berdasarkan wilayah AWS. Impor dari /models atau tambahkan ID model Batuan Dasar yang diaktifkan di wilayah yang dipilih.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Ketika semua koneksi yang dikonfigurasi habis (kuota, kredit, atau masa berlaku), gunakan sementara tingkat tanpa kunci penyedia ini. Matikan untuk melewati penyedia ini alih-alih mengirim permintaan anonim — disarankan ketika tingkat tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback anonim diaktifkan untuk {provider}", "anonymousFallbackDisabled": "Fallback anonim tidak diaktifkan untuk {provider} — koneksi yang habis akan melewati penyedia ini", - "anonymousFallbackUpdateFailed": "Gagal memperbarui pengaturan fallback anonim" + "anonymousFallbackUpdateFailed": "Gagal memperbarui pengaturan fallback anonim", + "batchDeleteFailed": "Penghapusan batch gagal", + "batchDeleteNetworkError": "Kesalahan jaringan saat menghapus batch", + "batchUpdateFailed": "Pembaruan batch gagal", + "batchUpdateNetworkError": "Kesalahan jaringan selama pembaruan batch", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agen Cloud", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Cari", + "categoryWebCookie": "Kue Web", + "claudeExtraUsageBlockingDisabled": "Pemblokiran penggunaan ekstra Claude dinonaktifkan (penggunaan ekstra diizinkan)", + "claudeExtraUsageBlockingEnabled": "Pemblokiran penggunaan ekstra Claude diaktifkan (penggunaan ekstra akan diblokir)", + "claudeRoutingPreferenceDisabled": "Model Claude tanpa prefiks tidak lagi lebih memilih Claude Code", + "claudeRoutingPreferenceEnabled": "Model Claude tanpa prefiks sekarang lebih memilih Claude Code", + "clearMediaFilter": "Bersihkan", + "cliproxyRoutingDisabled": "Permintaan sekarang menggunakan OmniRoute (langsung) asli", + "cliproxyRoutingEnabled": "Permintaan sekarang diarahkan melalui CLIProxyAPI (emulasi yang lebih dalam)", + "codexLimitPolicyUpdated": "Kebijakan batas Codex diperbarui", + "codexServiceModeUpdated": "Mode layanan Codex diperbarui", + "codexServiceTierActive": "Tingkat layanan Codex {tier} aktif", + "codexTierFastLabel": "Cepat", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Gagal menerapkan Kode Perintah auth", + "commandCodeApplyingApproval": "Browser disetujui, menerapkan…", + "commandCodeApplyingKey": "Menerapkan kunci yang disetujui oleh browser…", + "commandCodeApprovalInstructions": "Buka URL otorisasi, setujui akses, lalu tempel kunci/JSON/URL yang dikembalikan di bawah ini…", + "commandCodeAuthExpired": "Kode Perintah auth telah kedaluwarsa", + "commandCodeConnected": "Kode Perintah terhubung", + "commandCodeConnectionAdded": "Koneksi Kode Perintah ditambahkan", + "commandCodeLinkExpired": "Tautan Kode Perintah telah kedaluwarsa", + "commandCodeOpeningStudio": "Membuka Command Code Studio…", + "commandCodePopupBlocked": "Popup diblokir. Silakan izinkan popup dan coba lagi Command Code Connect.", + "commandCodeStartFailed": "Gagal memulai Command Code auth", + "connectionDeleted": "Koneksi dihapus", + "connectionFallback": "koneksi", + "coolingConnectionsDescription": "Koneksi ini mengembalikan 429 (batas-kecepatan) pada permintaan terakhir mereka. OmniRoute akan melewatkan mereka sampai timer berakhir — tidak perlu menonaktifkan secara manual.", + "coolingConnectionsTitle": "Saat ini mendinginkan ({count})", + "failedDeleteAlias": "Gagal menghapus alias", + "failedDeleteConnection": "Gagal menghapus koneksi", + "failedDistributeProxies": "Gagal mendistribusikan proxy.", + "failedSaveModelEndpointSettings": "Gagal menyimpan pengaturan endpoint model", + "failedUpdateClaudeExtraUsagePolicy": "Gagal memperbarui kebijakan penggunaan ekstra Claude", + "failedUpdateClaudeRoutingPreference": "Gagal memperbarui preferensi pengaturan rute Claude Code", + "failedUpdateCliproxyRouting": "Gagal memperbarui routing CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Gagal memperbarui kebijakan batas Codex", + "failedUpdateCodexServiceMode": "Gagal memperbarui mode layanan Codex", + "filterByMedia": "Media", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kunci API Kimi Code", + "modelTestFailed": "Uji model gagal", + "modelTestNetworkError": "Kesalahan jaringan menguji model", + "networkError": "Kesalahan jaringan", + "networkErrorDeletingAlias": "Kesalahan jaringan saat menghapus alias", + "networkErrorSettingAlias": "Kesalahan jaringan saat mengatur alias", + "noProvidersMatch": "Tidak ada penyedia yang cocok dengan pencarian Anda.", + "noSavedProxies": "Tidak ada proxy yang disimpan. Tambahkan proxy di Pengaturan → Proxy terlebih dahulu.", + "pageLoadErrorDescription": "Kami tidak dapat memuat data penyedia saat ini. Periksa koneksi Anda dan coba lagi.", + "pageLoadErrorId": "Error ID: {id}", + "pageLoadErrorRetry": "Coba Lagi", + "pageLoadErrorTitle": "Gagal memuat penyedia", + "playgroundTitle": "Taman Bermain", + "providerDetailConnectionFlexActive": "Tingkat layanan Codex flex aktif untuk koneksi ini", + "providerDetailConnectionPriorityActive": "Tingkat layanan prioritas Codex aktif untuk koneksi ini", + "providerDetailGlobalFlexActive": "Tingkat layanan Global Codex flex aktif", + "providerDetailGlobalPriorityActive": "Tingkat layanan prioritas Global Codex aktif", + "proxiesDistributed": "Distribusi penugasan proxy {assigned} di seluruh {tagLabel}{total} koneksi.", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", + "searchByModelAria": "Cari berdasarkan model", + "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Pengaturan", @@ -6460,7 +6719,24 @@ "loadFailed": "Gagal memuat daftar langganan", "toggleFailed": "Gagal mengalihkan tombol", "refreshFailed": "Gagal menyegarkan", - "deleteFailed": "Gagal menghapus" + "deleteFailed": "Gagal menghapus", + "add": "Tambah", + "cancel": "Batalkan", + "configure": "Konfigurasi", + "copyEndpoint": "Salin Endpoint", + "coreEndpointHint": "Petunjuk Endpoint Inti", + "coreNodesHint": "Petunjuk Node Inti", + "create": "Buat", + "deleteConfirm": "Hapus Konfirmasi", + "empty": "Kosong", + "globalModeDescription": "Deskripsi Mode Global", + "localCoreHint": "Petunjuk Inti Lokal", + "nodeSummary": "Ringkasan Node", + "providerRequired": "Penyedia Diperlukan", + "providerRouting": "Routing Penyedia", + "refresh": "Segarkan", + "refreshInterval": "Interval Penyegaran", + "ruleModeDescription": "Deskripsi Mode Aturan" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Jalankan fallback visi-ke-teks otomatis sebelum merutekan permintaan gambar ke model khusus teks.", "visionBridgeEnabledLabel": "Diaktifkan", "visionBridgeEnabledDesc": "Alihkan bridge pra-panggilan yang menggantikan bagian gambar dengan teks yang diekstrak.", + "visionBridgeRerouteTextOnlyLabel": "Reroute model teks saja", + "visionBridgeRerouteTextOnlyDesc": "Kirim permintaan lengkap, termasuk gambar, ke model jembatan ketika model yang dipilih tidak memiliki input gambar.", "visionBridgeModel": "Model Jembatan", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "ID model OmniRoute apa pun yang mendukung visi dapat digunakan di sini.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Kunci API tidak memiliki cakupan manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Satu atau beberapa prefiks menargetkan rute yang mendukung spawn dan tidak dapat dilewati.", "GENERIC": "Gagal memperbarui pengaturan authz." - } + }, + "remove": "Hapus" }, "resilienceBaseCooldownLabel": "Cooldown dasar", "scopeLabel": "Ruang lingkup", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Menguji audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip telah ditranskripsi oleh {model}", "modalityBridgeAudioTestNoop": "Audio Bridge tidak diaktifkan (target mungkin mendukung audio, tidak ada penyedia STT yang terhubung, atau jembatan dinonaktifkan)", - "modalityBridgeAudioTestError": "Pengujian audio gagal: {message}" + "modalityBridgeAudioTestError": "Pengujian audio gagal: {message}", + "modelRoutingDescriptionPlaceholder": "Rute model Opus ke kombinasi frontier", + "cliproxyapiFallbackCodes": "Kode Cadangan Cliproxyapi", + "cliproxyapiFallbackDescription": "Deskripsi Cadangan Cliproxyapi", + "cliproxyapiHealthLabel": "Label Kesehatan Cliproxyapi", + "cliproxyapiImportFailed": "Impor Cliproxyapi Gagal", + "cliproxyapiImportResult": "Hasil Impor Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Tidak Valid", + "cliproxyapiLifecycleNoticeAfter": "Pemberitahuan Siklus Hidup Cliproxyapi Setelah", + "cliproxyapiLifecycleNoticeBefore": "Pemberitahuan Siklus Hidup Cliproxyapi Sebelum", + "cliproxyapiLifecycleNoticeLink": "Tautan Pemberitahuan Siklus Hidup Cliproxyapi", + "cliproxyapiPortLabel": "Label Port Cliproxyapi", + "cliproxyapiStatusLabel": "Label Status Cliproxyapi", + "cliproxyapiVersionLabel": "Label Versi Cliproxyapi", + "collection": "Koleksi", + "errorPage": { + "description": "Kami tidak dapat memuat pengaturan saat ini. Silakan coba lagi dalam beberapa detik.", + "errorId": "Error ID: {id}", + "retry": "Coba Lagi", + "title": "Gagal memuat pengaturan" + }, + "host": "Host", + "notInstalled": "Tidak terpasang", + "oneproxyActions": "Tindakan Oneproxy", + "oneproxyActive": "Oneproxy Aktif", + "oneproxyAnonymity": "Anonymitas Oneproxy", + "oneproxyCountry": "Negara Oneproxy", + "oneproxyDelete": "Oneproxy Hapus", + "oneproxyEmpty": "Oneproxy Kosong", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latensi", + "oneproxyProtocol": "Protokol Oneproxy", + "oneproxyQuality": "Kualitas Oneproxy", + "oneproxySyncFailed": "Sinkronisasi gagal: {error}", + "oneproxySyncSuccess": "Disinkronkan {total} proxy ({added} baru, {updated} diperbarui)", + "proxyDocumentationSocks5DescAfter": "Dokumentasi Proxy Socks5 Desc Setelah", + "proxyFreePoolAddProxy": "Tambahkan Proxy Kolam Gratis", + "proxyFreePoolAdding": "Menambahkan Kolam Proxy Gratis", + "proxyFreePoolSelectProxy": "Pilih Proxy Kolam Gratis", + "proxyStatusActive": "Status Proxy Aktif", + "proxyStatusInactive": "Status Proxy Tidak Aktif", + "routingAddEntry": "Tambahkan entri", + "settingSaveFailed": "Penyimpanan Pengaturan Gagal", + "settingSaved": "Pengaturan Disimpan", + "skillsmpApiKeyHintAfter": ". Batas laju: {limit} permintaan/hari.", + "skillsmpApiKeyHintBefore": "Dapatkan kunci API Anda dari", + "syncFailed": "Sinkronisasi gagal", + "unhealthy": "Tidak Sehat", + "oneproxyDescription": "Ambil dan putar proxy yang divalidasi gratis dari platform komunitas 1proxy", + "oneproxySyncing": "Menyinkronkan...", + "oneproxySyncNow": "Sinkronkan Sekarang", + "oneproxyClearAll": "Hapus Semua", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Hapus semua proxy 1proxy?", + "memorySkillsSkillsmpDescription": "Sambungkan ke SkillsMP untuk menemukan dan menginstal keterampilan dari pasar.", + "memorySkillsActiveProviderDescription": "Pilih penyedia mana yang digunakan halaman Keterampilan untuk pencarian dan instalasi.", + "memorySkillsSkillsmpProviderTitle": "Pasar SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Marketplace yang terautentikasi (menggunakan kunci API SkillsMP Anda).", + "memorySkillsSkillsshProviderTitle": "Direktori skills.sh", + "memorySkillsSkillsshProviderDescription": "Penyedia direktori publik (tidak memerlukan kunci API).", + "routingCcBridgeCatalogName": "Jembatan CC yang kompatibel dengan Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Penyedia Claude asli dengan token yang diterbitkan oleh OAuth.", + "routingCcBridgeName": "Jembatan Claude-Code", + "routingCcBridgeDescription": "Titik akhir relay menggunakan kunci API (kompatibel-anthropic-cc-*).", + "routingCustomProviderDescription": "Penyedia kustom.", + "routingUnknownOpKind": "Jenis op tidak dikenal: {kind}", + "routingInvalidJson": "JSON tidak valid: {error}", + "routingConfigMustBeObject": "Konfigurasi harus berupa objek JSON", + "routingEnabledMustBeBoolean": "`enabled` harus true atau false", + "routingPipelineMustBeArray": "`pipeline` harus berupa array dari ops", + "routingPipelineTooLong": "Pipeline tidak boleh melebihi 50 ops", + "routingOpMissingKind": "Op #{index}: `kind` hilang atau tidak valid", + "routingOpUnknownKind": "Op #{index}: jenis tidak dikenal \"{kind}\"", + "routingJsonEditorHide": "Sembunyikan editor JSON", + "routingJsonEditorImportExport": "Impor / ekspor JSON", + "routingJsonEditorLabel": "JSON (edit dan terapkan, atau tempel untuk mengimpor)", + "routingApplyJson": "Terapkan JSON", + "routingTransformsFootnote": "Semua operasi transformasi bersifat idempoten pada pengulangan. Perubahan berlaku segera pada permintaan berikutnya.", + "cliproxyapiUnknown": "Tidak Dikenal", + "cliproxyapiVersion": "Versi", + "cliproxyapiHealth": "Kesehatan", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Koleksi" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Penuh", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Default", + "off": "Matikan", + "lite": "Lite", + "standard": "Standar", + "aggressive": "Agresif", + "ultra": "Ultra", + "responsesToolOutput": "Keluaran alat respons" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Berjalan terakhir dalam tumpukan (setelah RTK/Caveman membersihkan teks, OmniGlyph mengonversi sisanya menjadi gambar) dan juga berjalan mandiri melalui mode omniglyph. Ini adalah pratinjau dan tetap dinonaktifkan secara default hingga validasi menyeluruh selesai.", "saved": "Disimpan.", "saveFailed": "Tidak dapat menyimpan.", - "enableAria": "Aktifkan mesin OmniGlyph" + "enableAria": "Aktifkan mesin OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Layanan Tersemat", @@ -9127,7 +9500,49 @@ "unableToLoad": "Tidak dapat memuat metrik sistem", "product": "Produk", "resources": "Sumber daya", - "company": "Perusahaan" + "company": "Perusahaan", + "tokenHealthTooltips": { + "allHealthy": "Semua token sehat", + "needsAttention": "Beberapa token perlu perhatian", + "refreshFailures": "Kegagalan penyegaran token terdeteksi", + "unknown": "Status kesehatan tidak diketahui" + }, + "systemMonitor": { + "metricsAriaLabel": "Metrik sistem", + "memory": "Memori", + "memoryShort": "mem", + "uptime": "Waktu Aktif", + "ariaLabel": "Pemantauan sistem", + "title": "Monitor Sistem", + "version": "Versi", + "connections": "Koneksi", + "circuitBreakers": "Pemutus Sirkuit", + "open": "{count} terbuka", + "memoryUsage": "Penggunaan memori" + }, + "never": "Tidak Pernah", + "justNow": "Baru saja", + "minutesAgo": "{count}m yang lalu", + "hoursAgo": "{count}j yang lalu", + "tokens": "Token", + "costs": "Biaya", + "autoRefresh": "Penyegaran Otomatis ({seconds}s)", + "toggleAutoRefresh": "Alihkan penyegaran otomatis", + "activeRequests": "Permintaan Aktif", + "totalRequests": "Total Permintaan", + "totalInputTokens": "Total Token Masukan", + "model": "Model", + "provider": "Penyedia", + "requests": "Permintaan", + "lastUsed": "Terakhir Digunakan", + "inputTokens": "Token Masukan", + "totalTokens": "Total Token", + "inputCost": "Biaya Input", + "outputCost": "Biaya Output", + "noUsageData": "Belum ada penggunaan yang tercatat. Lakukan beberapa permintaan untuk melihat data di sini.", + "account": "Akun", + "accountLabel": "Akun {id}", + "noAccountUsage": "Belum ada penggunaan spesifik akun yang tercatat. Lakukan permintaan menggunakan akun OAuth untuk melihat data di sini." }, "auth": { "welcome": "Selamat datang", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Reset melalui Data Aplikasi", + "resetViaAppDataDescription": "Hapus file pengaturan dari direktori data aplikasi untuk mengatur ulang kata sandi Anda:", + "quitDesktopApp": "Tutup aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppDataDirectory": "Navigasikan ke direktori data aplikasi:", + "checkSystemAppDataFolder": "(Cek folder data aplikasi sistem Anda)", + "relaunchDesktopFreshSetup": "Luncurkan kembali aplikasi desktop OmniRoute — ini akan memulai pengaturan baru", + "alternativeSetPasswordTitle": "Alternatif: Atur Kata Sandi Baru", + "alternativeSetPasswordDescription": "Atur kata sandi awal baru melalui file lingkungan server:", + "openServerEnvFilePrefix": "Buka", + "relaunchDesktopApp": "Luncurkan kembali aplikasi desktop OmniRoute", + "codexLinkInvalidOrExpired": "Tautan ini tidak valid atau telah kedaluwarsa.", + "codexValidationServerError": "Tidak dapat menghubungi server untuk memvalidasi tautan ini.", + "codexSaveConnectionError": "Tidak dapat menyimpan koneksi. Tautan mungkin telah kedaluwarsa.", + "codexDeviceLoginDisabled": "Login kode perangkat dinonaktifkan untuk akun OpenAI ini. Aktifkan di pengaturan keamanan ChatGPT (atau minta admin ruang kerja Anda).", + "codexAuthorizationTimedOut": "Waktu otorisasi habis. Klik Mulai lagi untuk mencoba kembali.", + "authenticationCancelled": "Autentikasi dibatalkan.", + "unexpectedAuthenticationError": "Kesalahan tak terduga selama otentikasi. Silakan coba lagi.", + "connectOpenAiCodexTitle": "Sambungkan OpenAI Codex", + "codexConnectDescription": "Otorisasi akun ChatGPT untuk menyelesaikan pengaturan koneksi ini.", + "validatingCodexLink": "Memvalidasi tautan…", + "codexGenerateCodeDescription": "Klik di bawah untuk menghasilkan kode sekali pakai, lalu masuk ke OpenAI.", + "startCodexFlow": "Mulai", + "requestingOpenAiCode": "Meminta kode dari OpenAI…", + "codexVerificationInstructions": "1. Buka halaman verifikasi OpenAI dan 2. masukkan kode ini. Halaman ini akan diperbarui secara otomatis setelah Anda memberikan otorisasi.", + "yourCode": "Kode Anda", + "openVerificationPage": "Buka halaman verifikasi", + "copyUrlShort": "Salin URL", + "savingConnection": "Menyimpan koneksi…", + "codexConnected": "Terhubung!", + "codexConnectionRegistered": "Akun Codex telah terdaftar. Anda dapat menutup tab ini.", + "tryAgain": "Coba lagi", + "traeAuthorizationSuccess": "Trae otorisasi ✓", + "traeAuthorizationFailed": "Trae otorisasi gagal", + "closeAuthorizationWindow": "Anda dapat menutup jendela ini.", + "returnToDashboard": "Kembali ke dasbor.", + "resetViaAppData": "Reset melalui Data Aplikasi", + "deleteSettingsToReset": "Hapus file pengaturan dari direktori data aplikasi untuk mengatur ulang kata sandi Anda:", + "quitAppCompletely": "Keluar dari aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppData": "Navigasikan ke direktori data aplikasi", + "checkAppDataFolder": "Periksa folder data aplikasi sistem Anda", + "deleteSettingsJson": "Hapus", + "relaunchAppFresh": "Luncurkan kembali aplikasi desktop OmniRoute — itu akan memulai pengaturan baru", + "alternativeSetPassword": "Alternatif: Atur Kata Sandi Baru", + "setNewPasswordViaEnv": "Atur kata sandi awal baru melalui file lingkungan server:", + "openServerEnv": "Buka", + "inDataDirectory": "di direktori data", + "addOrUpdate": "Tambahkan atau perbarui", + "deleteAndRelaunch": "Hapus", + "settingsJson": "settings.json", + "fromDataDir": "dari direktori data", + "relaunchApp": "Luncurkan kembali aplikasi desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Siap Menyederhanakan Infrastruktur AI Anda?", "ctaDescription": "Bergabunglah dengan pengembang yang menyederhanakan integrasi AI mereka dengan OmniRoute. Sumber terbuka dan gratis untuk memulai.", "startFree": "Mulai Gratis", - "readDocumentation": "Baca Dokumentasi" + "readDocumentation": "Baca Dokumentasi", + "company": "Perusahaan", + "pricing": "Harga", + "apiReference": "Referensi API", + "helpCenter": "Pusat Bantuan", + "about": "Tentang", + "blog": "Blog", + "contact": "Kontak", + "terms": "Syarat", + "privacy": "Privasi", + "license": "Lisensi", + "footerDescription": "Antarmuka terpadu untuk infrastruktur AI modern. Aman, dapat diamati, dan dapat diskalakan.", + "communityDiscussions": "Diskusi Komunitas" }, "docs": { "title": "Dokumentasi", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Daftarkan dan kelola agen melalui registri ACP untuk komunikasi antar agen dan berbagi alat.", "protocolAcpStep1": "Navigasikan ke Dasbor → Agen untuk melihat agen ACP yang terdaftar.", "protocolAcpStep2": "Daftarkan agen baru dengan kemampuan dan konfigurasi titik akhir.", - "protocolAcpStep3": "Gunakan Alat CLI untuk mengonfigurasi saluran komunikasi agen." + "protocolAcpStep3": "Gunakan Alat CLI untuk mengonfigurasi saluran komunikasi agen.", + "metadataTitleTemplate": "%s — Dokumen OmniRoute", + "metadataDefaultTitle": "Dokumentasi OmniRoute", + "metadataDescription": "Dokumentasi komprehensif untuk gerbang OmniRoute AI — pengaturan, API, kompresi, penyebaran, dan lainnya.", + "layoutNavTitle": "Dokumen OmniRoute", + "layoutHomeLink": "Beranda Dokumen", + "layoutDashboardLink": "← Kembali ke Dasbor", + "homeTitle": "Dokumentasi OmniRoute", + "homeMetadataDescription": "Semua yang Anda butuhkan untuk merutekan, mengompresi, dan menskalakan AI Anda — panduan pengaturan, referensi API, kompresi, penyebaran, dan lainnya.", + "homeTwitterDescription": "Dokumen komprehensif untuk gerbang OmniRoute AI", + "homeDescription": "Semua yang Anda butuhkan untuk merutekan, mengompres, dan menskalakan AI Anda", + "homeSearchHint": "Tekan Ctrl K untuk mencari dokumen", + "featuredQuickStartTitle": "Panduan Cepat", + "featuredQuickStartDescription": "Jalankan OmniRoute dalam 3 menit", + "featuredAutoComboTitle": "Panduan Auto-Combo", + "featuredAutoComboDescription": "Biarkan OmniRoute memilih AI terbaik untuk Anda", + "featuredProvidersTitle": "Panduan Penyedia", + "featuredProvidersDescription": "Sambungkan penyedia AI dalam hitungan menit", + "nonTechUsersTitle": "Untuk Pengguna Non-Teknis", + "nonTechUsersSubtitle": "Mulai dengan cepat — tidak perlu latar belakang teknis", + "techUsersTitle": "Untuk Pengguna Teknologi", + "techUsersSubtitle": "Mendalami arsitektur, API, dan internal", + "apiExplorerMetadataTitle": "API Explorer — Dokumen OmniRoute", + "apiExplorerMetadataDescription": "Penjelajah API interaktif — coba endpoint OmniRoute secara langsung dengan respons waktu nyata", + "apiExplorerTitle": "Penjelajah API", + "apiExplorerDescription": "Coba endpoint OmniRoute secara langsung. Pilih sebuah endpoint, konfigurasikan permintaan Anda, dan lihat responsnya secara real time.", + "apiExplorerSseStarted": "Aliran SSE dimulai — periksa terminal/devtools untuk output waktu nyata.", + "apiExplorerError": "Kesalahan: {message}", + "apiExplorerAuth": "otentikasi", + "apiExplorerResponseLabel": "Tanggapan", + "apiExplorerSelectEndpoint": "Pilih endpoint untuk dijelajahi", + "apiExplorerChooseApi": "Pilih API dari sidebar untuk melihat detail dan mencobanya secara langsung", + "feedbackThanks": "Terima kasih atas umpan balik Anda!", + "feedbackQuestion": "Apakah halaman ini bermanfaat?", + "pageMetadataTitle": "{title} — Dokumen OmniRoute", + "pageMetadataDescription": "Dokumentasi OmniRoute: {title}", + "breadcrumb": "Jalur Navigasi", + "apiReferenceTable": { + "parameters": "Parameter", + "name": "Nama", + "type": "Tipe", + "description": "Deskripsi", + "returns": "Mengembalikan", + "typePrefix": "Tipe:" + } }, "legal": { "privacyPolicy": "Kebijakan Privasi", @@ -9957,7 +10479,42 @@ "successMessage": "Akun {providerName} Anda telah terhubung.", "done": "Selesai", "error": "Koneksi gagal", - "tryAgain": "Coba lagi" + "tryAgain": "Coba lagi", + "errorSessionIncomplete": "Sesi OAuth tidak lengkap (URI pengalihan atau kode verifikasi hilang). Mulai ulang koneksi dan coba lagi.", + "errorExchangeFailed": "Pertukaran gagal", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Kredensial Google OAuth default hanya berfungsi di localhost. Untuk penggunaan jarak jauh, konfigurasikan kredensial OAuth Anda sendiri melalui variabel lingkungan: ANTIGRAVITY_OAUTH_CLIENT_ID dan ANTIGRAVITY_OAUTH_CLIENT_SECRET. Lihat bagian README 'OAuth di Server Jarak Jauh'.", + "errorSaveFailed": "Simpan gagal", + "errorAuthorizationFailed": "Otorisasi gagal", + "errorAuthorizationTimeout": "Waktu Habis Otorisasi", + "errorRequestFailed": "Permintaan gagal", + "errorCallbackServerFailed": "Gagal memulai server callback", + "errorBrowserUnavailable": "Browser OAuth tidak tersedia untuk penyedia ini di lingkungan saat ini. Gunakan metode otentikasi yang didukung sebagai gantinya.", + "errorStateMismatch": "Ketidakcocokan status OAuth. Mulai ulang koneksi dan coba lagi.", + "errorImportAccessToken": "Gagal mengimpor token akses", + "errorSessionNotInitialized": "Sesi OAuth tidak diinisialisasi. Mulai ulang alur koneksi dan coba lagi.", + "errorNoAuthorizationCode": "Tidak ada kode otorisasi yang ditemukan. Tempelkan URL callback atau Kode Autentikasi.", + "tabDeviceCode": "Kode Perangkat", + "tabBrowserLogin": "Masuk Browser", + "tabImportAuthJson": "Impor auth.json", + "tabPasteApiKey": "Tempelkan Kunci API", + "windsurfPasteDescription": "Di Windsurf / IDE VS Code, jalankan perintah \"Windsurf: Provide Auth Token\" dari palet perintah (atau klik tombol Jupyter \"Get Windsurf Authentication Token\"), lalu salin token yang ditampilkan dan tempelkan di bawah. Membuka windsurf.com/show-auth-token secara langsung hanya menampilkan halaman \"Redirecting\" — IDE harus memulai alur tersebut.", + "grokAuthJsonDescription": "Tempelkan seluruh isi dari ~/.grok/auth.json (bukan hanya bidang \"key\" JWT). JWT yang kosong tidak memiliki refresh_token, jadi koneksi akan terputus setelah kedaluwarsa (#7610). Lebih baik menggunakan modal Impor auth.json yang khusus saat tersedia.", + "devinDesktopPasteDescription": "Tempelkan kunci API Devin yang ada dari sesi Devin yang terautentikasi. Ketersediaan ekspor kunci dan langkah-langkahnya bervariasi tergantung versi Devin dan akun.", + "devinPasteDescription": "Berikan WINDSURF_API_KEY Anda (diperoleh melalui `devin auth login`, atau melalui perintah IDE Windsurf \"Windsurf: Provide Auth Token\").", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Kunci API / Token", + "saving": "Menyimpan…", + "saveConnection": "Simpan Koneksi", + "gheDescription": "Masukkan URL dasar dari instance GitHub Enterprise Anda (misalnya https://ghe.perusahaananda.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "URL GitHub Enterprise diperlukan", + "gitlabDuoSetupTitle": "Pengaturan OAuth Duo GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth belum dikonfigurasi. Daftarkan aplikasi OAuth di {applicationsUrl} dengan URI pengalihan {redirectUri} dan cakupan \"{scopes}\", lalu atur {clientIdEnv} (dan opsional {clientSecretEnv}) dan mulai ulang.", + "gitlabDuoSetupDescription": "Setelah aplikasi terdaftar dan variabel lingkungan diatur pada instance OmniRoute ini, klik Lanjutkan untuk memulai login OAuth.", + "continue": "Lanjutkan" }, "cursorAuthModal": { "title": "Hubungkan IDE Kursor", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Muat Lebih Banyak", - "loadingMore": "Memuat lebih banyak..." + "loadingMore": "Memuat lebih banyak...", + "correlationId": "ID Korelasi", + "group": { + "showAllRows": "Tampilkan semua baris", + "showLatestPerCorrelation": "Tampilkan yang terbaru per ID korelasi", + "grouped": "Dikelompokkan" + }, + "running": "berjalan", + "interval": { + "decrease": "Kurangi interval", + "title": "Interval penyegaran otomatis dalam detik", + "increase": "Tingkatkan interval" + }, + "status": { + "inProgress": "Sedang diproses", + "recoveredByRetry": "Dipulihkan dengan mencoba kembali", + "goToParent": "Pergi ke permintaan induk", + "healedTitle": "Gagal, pulih setelah {count} percobaan", + "healed": "sembuh", + "failedTitle": "Semua {count} percobaan gagal", + "failed": "gagal", + "pinnedTitle": "Model yang dipilih melalui pinning sesi cache konteks", + "pinned": "tersemat" + }, + "attempts": "upaya", + "detail": { + "collapse": "Sembunyikan {title}", + "expand": "Perluas {title}", + "copyTitle": "Salin {title}", + "copied": "Disalin!", + "copy": "Salin", + "autoscrollOn": "Autoscroll: aktif", + "autoscrollOff": "Autoscroll: mati", + "payload": { + "clientRawRequest": "Permintaan Mentah Klien", + "clientRequest": "Permintaan Klien", + "openaiRequest": "Permintaan OpenAI", + "providerRequest": "Permintaan Penyedia", + "providerResponse": "Respon Penyedia", + "clientResponse": "Tanggapan Klien", + "pipelineError": "Kesalahan Pipeline" + }, + "payloadMissing": "Artifact payload yang terperinci tidak lagi tersedia untuk entri log ini.", + "payloadCorrupt": "Artifact payload yang rinci tidak dapat diparsing.", + "notAvailable": "N/A", + "semanticCache": "Semantik (OmniRoute)", + "upstreamCache": "Hulu (Penyedia)", + "ariaLabel": "Detail log permintaan", + "completed": "Selesai", + "upstreamStatus": "Hulu: {status}", + "statusDiscrepancy": "OmniRoute mengembalikan {status} meskipun penyedia mengembalikan {provider}", + "previousRequest": "Permintaan sebelumnya", + "nextRequest": "Permintaan berikutnya", + "close": "Tutup modal detail", + "startedAt": "Dimulai Pada", + "endedAt": "Berakhir Pada", + "duration": "Durasi", + "model": "Model", + "provider": "Penyedia", + "account": "Akun", + "input": "Masukkan", + "totalIn": "Total Masuk: {value}", + "cacheRead": "Baca Cache: {value}", + "cacheWrite": "Cache Tulis: {value}", + "compressed": "Dikompress: {from} → {to} ({percent}% dihemat)", + "output": "Keluaran", + "totalOut": "Total Keluar: {value}", + "reasoning": "Alasan: {value}", + "requestedModel": "Model yang Diminta", + "requestProtocol": "Protokol Req", + "cacheSource": "Sumber Cache", + "modelPinning": "Penetapan Model", + "activeModelPinning": "Aktif — model dipilih melalui penetapan sesi", + "rotated": "Diputar: {initial} -> {final}", + "apiKey": "Kunci API", + "noApiKey": "Tidak ada kunci API", + "combo": "Combo", + "error": "Kesalahan", + "unblockAll": "Buka blokir semua", + "cleared": "Dihapus", + "unblock": "Buka Blokir", + "relatedRequests": "Permintaan Terkait ({count})", + "current": "saat ini", + "detailStatus": "Detail Status", + "loadingDetails": "Memuat rincian permintaan...", + "providerEventStream": "Provider Event Stream", + "clientEventStream": "Aliran Acara Klien", + "eventStream": "Aliran Acara", + "responsePayloadLegacy": "Payload Respon (Legacy)", + "requestPayloadLegacy": "Request Payload (Legacy)", + "noPayload": "Tidak ada data payload yang tersedia untuk entri log ini.", + "correlationId": "ID Korelasi", + "correlationIdValue": "ID Korelasi: {id}", + "detailedPayloadInfo": "Aktifkan logging terperinci terlebih dahulu jika Anda ingin tampilan payload klien/penyedia empat tahap untuk permintaan baru." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} dinonaktifkan", "providerAdded": "{provider} ditambahkan", "add": "Tambah", - "manualApiKey": "Gunakan kunci API manual" + "manualApiKey": "Gunakan kunci API manual", + "createDahlTokenFailed": "Gagal membuat token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Konfigurasi proxy", + "providerProxyTitleConfigured": "Proxy dikonfigurasi: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Dibatasi ToS — tinjau ketentuan", "caution": "Perhatian — klausul penggunaan pribadi / proksi", "ok": "Umumnya permisif" - } + }, + "allProviders": "Semua penyedia", + "noApiKeyRequired": "Tidak diperlukan kunci API" }, "providerHealthAutopilot": { "title": "Autopilot Kesehatan Penyedia", @@ -12390,7 +13047,11 @@ "on": "AKTIF", "off": "NONAKTIF", "availableProviders": "Penyedia yang tersedia ({count})", - "noProviderOverrides": "Tidak ada override — semua penyedia aktif akan berpartisipasi dengan model default mereka" + "noProviderOverrides": "Tidak ada override — semua penyedia aktif akan berpartisipasi dengan model default mereka", + "resetFailed": "Reset gagal", + "resetSuccess": "Pengaturan direset ke default", + "running": "Sedang berjalan...", + "testFailed": "Uji coba gagal" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) adalah Sahabat Open Source pendiri OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", "capabilityFilter.toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", "capabilityFilter.structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" + "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia", + "publicSystem": { + "notFound": { + "title": "Halaman tidak ditemukan", + "description": "Halaman yang Anda cari tidak ada atau telah dipindahkan.", + "dashboardAriaLabel": "Kembali ke dasbor", + "statusAriaLabel": "Buka halaman status sistem", + "systemStatus": "Status Sistem" + }, + "error": { + "title": "Kesalahan Server Internal", + "description": "Terjadi kesalahan saat memproses permintaan Anda. Tim kami telah diberitahu dan sedang bekerja untuk memperbaikinya.", + "errorId": "Error ID: {id}", + "detailsAriaLabel": "Rincian kesalahan", + "retryAriaLabel": "Coba muat ulang halaman tersebut", + "tryAgain": "Coba Lagi", + "dashboardAriaLabel": "Kembali ke dasbor", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "globalError": { + "title": "Sesuatu telah salah", + "description": "Terjadi kesalahan yang tidak terduga. Ini telah dicatat dan tim kami akan menyelidiki.", + "detailsAriaLabel": "Rincian kesalahan", + "retryAriaLabel": "Coba muat ulang halaman tersebut", + "tryAgain": "Coba Lagi", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "offline": { + "title": "Masalah Konektivitas", + "description": "OmniRoute tidak dapat mengakses jaringan saat ini. Periksa pengaturan internet, VPN, atau proksi Anda.", + "connectionRestored": "Koneksi dipulihkan", + "offlineModeDetected": "Mode offline terdeteksi", + "retryConnection": "Coba Kembali Koneksi", + "openStatusPage": "Buka Halaman Status" + }, + "maintenance": { + "title": "Pemeliharaan Terjadwal", + "description": "Beberapa layanan tidak tersedia sementara saat pemeliharaan sedang berlangsung. Routing inti biasanya tetap online, tetapi fitur manajemen mungkin mengalami penurunan.", + "suggestion1": "Coba lagi setelah beberapa menit.", + "suggestion2": "Periksa indikator kesehatan saat ini dan status penyedia sebelum mencoba lagi.", + "systemStatus": "Lihat Status Sistem", + "healthDashboard": "Buka Dasbor Kesehatan" + }, + "status": { + "title": "Status Sistem", + "description": "Snapshot operasional langsung untuk layanan inti OmniRoute.", + "loadingHealth": "Memuat metrik kesehatan...", + "failedToLoad": "Gagal memuat kesehatan sistem.", + "unableToReachHealth": "Tidak dapat mengakses endpoint kesehatan. Periksa konektivitas dan coba lagi.", + "healthCheckFailed": "Pemeriksaan Kesehatan Gagal", + "openConnectivityHelp": "Bantuan Konektivitas Terbuka", + "maintenanceInfo": "Info Pemeliharaan", + "service": "Layanan", + "unknown": "tidak diketahui", + "notAvailable": "n/a", + "providersTracked": "Penyedia Dilacak", + "circuitBreakerState": "Status Pemutus Sirkuit Penyedia", + "lastUpdate": "Pembaruan terakhir: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}j {minutes}m" + }, + "statusPages": { + "400": { + "title": "Permintaan Buruk", + "description": "Payload permintaan tidak valid atau tidak lengkap.", + "suggestion1": "Periksa kolom yang diperlukan dan format payload sebelum mencoba lagi.", + "suggestion2": "Jika Anda menggunakan API, validasi skema JSON secara lokal.", + "suggestion3": "Jika ini terus terjadi, buka permintaan di Translator Playground untuk memeriksa payload.", + "primaryAction": "Buka Dokumentasi", + "secondaryAction": "Buka Penerjemah" + }, + "401": { + "title": "Tidak Diberikan Akses", + "description": "Autentikasi diperlukan untuk mengakses sumber daya ini.", + "suggestion1": "Masuk kembali dan coba lagi operasi tersebut.", + "suggestion2": "Untuk panggilan API, pastikan token Bearer ada dan valid.", + "suggestion3": "Jika token baru saja diputar, perbarui kredensial klien Anda.", + "primaryAction": "Masuk", + "secondaryAction": "Kelola Kunci API" + }, + "403": { + "title": "Dilarang", + "description": "Permintaan Anda dipahami, tetapi akses ditolak oleh kebijakan.", + "suggestion1": "Periksa aturan allowlist/blocklist IP di pengaturan.", + "suggestion2": "Verifikasi model dan kebijakan anggaran yang ditetapkan untuk kunci API Anda.", + "suggestion3": "Minta administrator untuk memberikan cakupan izin yang diperlukan.", + "primaryAction": "Bantuan Akses Terbuka", + "secondaryAction": "Buka Pengaturan Keamanan" + }, + "408": { + "title": "Waktu Permintaan Habis", + "description": "Server tidak menerima permintaan lengkap tepat waktu.", + "suggestion1": "Coba ulang permintaan dengan payload yang lebih kecil.", + "suggestion2": "Periksa stabilitas jaringan Anda dan latensi VPN/proxy.", + "suggestion3": "Untuk operasi yang lama, aktifkan streaming atau bagi permintaan.", + "primaryAction": "Buka Panduan Endpoint", + "secondaryAction": "Periksa Status Jaringan" + }, + "429": { + "title": "Terlalu Banyak Permintaan", + "description": "Batas penilaian telah terlampaui untuk klien, kunci, atau penyedia ini.", + "suggestion1": "Tunggu untuk cooldown dan coba lagi setelah interval yang disarankan.", + "suggestion2": "Beralih ke kombinasi dengan penyedia cadangan.", + "suggestion3": "Sesuaikan profil ketahanan/penetapan batas penyedia di pengaturan.", + "primaryAction": "Buka Pengaturan Ketahanan", + "secondaryAction": "Buka Kombinasi" + }, + "500": { + "title": "Kesalahan Server Internal", + "description": "Terjadi kesalahan tak terduga di sisi server saat memproses permintaan Anda.", + "suggestion1": "Coba lagi dalam beberapa detik.", + "suggestion2": "Periksa telemetri kesehatan dan log server untuk ID permintaan yang berkorelasi.", + "suggestion3": "Jika terus berlanjut, laporkan masalah dengan cap waktu dan konteks permintaan.", + "primaryAction": "Buka Dasbor Kesehatan", + "secondaryAction": "Buka Log" + }, + "502": { + "title": "Gerbang Buruk", + "description": "Penyedia hulu atau integrasi gateway mengembalikan respons yang tidak valid.", + "suggestion1": "Coba lagi dengan penyedia lain atau rute combo aktif.", + "suggestion2": "Periksa kredensial penyedia dan ketersediaan model.", + "suggestion3": "Periksa keluaran penerjemah jika konversi format terlibat.", + "primaryAction": "Buka Penyedia", + "secondaryAction": "Buka Penerjemah" + }, + "503": { + "title": "Layanan Tidak Tersedia", + "description": "Layanan tidak tersedia sementara karena pemeliharaan atau ketergantungan yang menurun.", + "suggestion1": "Tunggu sebentar dan coba lagi.", + "suggestion2": "Periksa pemberitahuan pemeliharaan dan status sistem.", + "suggestion3": "Gunakan penyedia cadangan jika alur kerja Anda sensitif terhadap latensi.", + "primaryAction": "Detail Pemeliharaan", + "secondaryAction": "Status Sistem" + } + } + }, + "kiroAuthModal": { + "title": "Sambungkan {providerLabel}", + "chooseMethod": "Pilih metode otentikasi Anda:", + "builderId": "ID Pembuat AWS", + "builderDescription": "Direkomendasikan untuk sebagian besar pengguna. Masuk dengan akun AWS yang terhubung ke {providerLabel}.", + "organization": "Organisasi Anda (AWS IAM Identity Center)", + "organizationDescription": "Gunakan URL awal SSO perusahaan Anda (contoh: {url}).", + "googleAccount": "Akun Google", + "googleDescription": "Masuk dengan akun Google Anda.", + "githubAccount": "Akun GitHub", + "githubDescription": "Masuk dengan akun GitHub Anda.", + "importToken": "Impor Token", + "importDescription": "Tempelkan token penyegaran yang diekspor dari {providerLabel}.", + "apiKey": "Kunci API", + "apiKeyDescription": "Tempelkan kunci API {providerLabel} / CodeWhisperer yang memiliki masa hidup panjang. Kunci ini disimpan sebagai kredensial bearer tanpa token penyegaran; penemuan profil dilakukan dengan upaya terbaik.", + "idcStartUrl": "URL Mulai IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL Pusat Identitas AWS IAM Organisasi Anda", + "awsRegion": "Wilayah AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Wilayah AWS untuk Pusat Identitas Anda (default: us-east-1)", + "continue": "Lanjutkan", + "back": "Kembali", + "autoDetecting": "Mendeteksi token secara otomatis...", + "readingCredentials": "Membaca kredensial {providerLabel} dari cache AWS SSO", + "tokenNotDetected": "Token {providerLabel} tidak terdeteksi secara otomatis. Silakan tempelkan token penyegaran Anda secara manual.", + "refreshToken": "Token Penyegaran", + "tokenPlaceholder": "Token akan diisi secara otomatis...", + "importing": "Mengimpor...", + "apiKeyPlaceholder": "Tempelkan kunci API {providerLabel} Anda...", + "apiKeyStoredDescription": "Disimpan terenkripsi sebagai kredensial pembawa yang tahan lama. Tidak ada alur penyegaran.", + "apiKeyRegionDescription": "Wilayah AWS untuk kunci (default: us-east-1)", + "validating": "Memvalidasi...", + "validateAndSaveApiKey": "Validasi dan Simpan Kunci API", + "errorAutoDetect": "Tidak dapat mendeteksi token secara otomatis", + "errorAutoDetectFailed": "Gagal mendeteksi token secara otomatis", + "errorRefreshTokenRequired": "Silakan masukkan token penyegaran", + "errorImportFailed": "Impor gagal", + "errorApiKeyRequired": "Silakan masukkan kunci API Kiro", + "errorApiKeyImportFailed": "Impor kunci API gagal", + "errorIdcStartUrlRequired": "Silakan masukkan URL awal IDC Anda" + }, + "kiroSocialOAuthModal": { + "title": "Sambungkan {providerLabel} melalui {providerName}", + "errorStartAuthorization": "Gagal memulai otorisasi", + "errorAuthorizationExpired": "Otorisasi telah kedaluwarsa. Mulai alur login lagi.", + "errorAuthorizationFailed": "Otorisasi gagal", + "initializing": "Menginisialisasi...", + "settingUp": "Mengatur otentikasi {providerName}", + "openIncognito": "Buka tautan ini di jendela Incognito", + "incognitoDescription": "Gunakan jendela Incognito/Pribadi untuk menghindari konflik sesi dengan akun yang ada.", + "copyLink": "Salin tautan", + "verificationCode": "Kode verifikasi", + "waiting": "Menunggu otorisasi...", + "cancel": "Batal", + "successTitle": "Terhubung dengan Sukses!", + "successMessage": "Akun {providerLabel} Anda melalui {providerName} telah terhubung.", + "done": "Selesai", + "errorTitle": "Koneksi Gagal", + "close": "Tutup" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Otorisasi gagal", + "errorPopupBlocked": "Popup diblokir — izinkan popup untuk situs ini, atau tempel token secara manual di bawah.", + "errorPopupClosed": "Jendela otorisasi ditutup sebelum selesai.", + "errorAccessTokenRequired": "Token akses diperlukan.", + "errorImportFailed": "Impor gagal", + "title": "Sambungkan Trae SOLO", + "authorizeDescription": "Otorisasi melalui trae.ai dalam jendela pop-up. Jendela pop-up akan menutup dirinya sendiri setelah token diimpor.", + "authorizeImportant": "Penting: Anda harus masuk ke trae.ai di browser ini terlebih dahulu. Halaman otorisasi hanya mengonfirmasi sesi yang ada — tidak dapat masuk untuk Anda. Jika Anda melihat \"Login Gagal\", klik \"Buka solo.trae.ai\", masuk, lalu kembali ke sini.", + "waitingForAuthorization": "Menunggu trae.ai…", + "authorizeWithBrowser": "Otorisasi dengan Browser", + "openSoloTrae": "Buka solo.trae.ai", + "orPasteManually": "atau tempel token secara manual", + "manualInstructions": "Masuk ke solo.trae.ai, buka DevTools → Jaringan, kirim pesan obrolan apa pun, dan salin JWT dari header permintaan Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Masa berlaku JWT adalah ~14 hari. Bidang identitas opsional berasal dari common_params dalam body permintaan yang sama.", + "accessTokenLabel": "Token Akses (Cloud-IDE-JWT)", + "webId": "ID Web", + "optional": "opsional", + "bizUserId": "ID Pengguna Biz", + "userUniqueId": "ID Pengguna Unik", + "scope": "Lingkup", + "tenant": "Penyewa", + "region": "Wilayah", + "importing": "Mengimpor…", + "importToken": "Impor Token", + "cancel": "Batalkan" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Mendistribusikan...", + "complete": "Lengkap", + "defaultLabel": "Distribusikan Proksi" + } + }, + "providerTest": { + "dialogLabel": "Uji {provider}", + "deprecated": "tidak lagi digunakan", + "risk": "risiko", + "close": "Tutup", + "model": "Model", + "key": "Kunci", + "defaultKey": "default", + "clearConversation": "Hapus percakapan", + "clear": "Bersihkan", + "tabs": { + "test": "Tes", + "logs": "Log" + }, + "loadingLogs": "Memuat log…", + "failedToLoadLogs": "Gagal memuat log", + "noLogsYet": "Belum ada log", + "noLogsDescription": "Kirim pesan uji dari tab Uji — log untuk penyedia ini akan muncul di sini.", + "openFullLogs": "Buka halaman log lengkap", + "live": "Langsung", + "tailingLast": "menampilkan {count} terakhir", + "refreshNow": "Segarkan sekarang", + "refresh": "Segarkan", + "unknownRequester": "pemberi permintaan tidak dikenal", + "fields": { + "timestamp": "Stempel Waktu", + "status": "Status", + "duration": "Durasi", + "model": "Model", + "requestedModel": "Model yang diminta", + "provider": "Penyedia", + "requester": "Pengirim", + "tokens": "Token" + } + }, + "proxyLog": { + "detailAriaLabel": "Detail log proxy", + "event": "Acara Proxy", + "close": "Tutup modal detail proxy", + "time": "Waktu", + "latency": "Latensi", + "clientIp": "IP Klien", + "proxy": "Proxy", + "direct": "Langsung", + "type": "Ketik", + "level": "Tingkat", + "provider": "Penyedia", + "tlsFingerprint": "Jejak TLS", + "directNative": "Langsung", + "targetUrl": "URL Target", + "error": "Kesalahan", + "configuration": "Konfigurasi Proxy" + }, + "requestTimeline": { + "title": "Garis Waktu Permintaan", + "modes": { + "follow": "Ikuti", + "followDescription": "Sumbu menggulir ke kiri, garis SEKARANG tetap di 75%", + "now": "Sekarang", + "nowDescription": "Lompat ke waktu saat ini, garis NOW direset ke tengah", + "pan": "Panci", + "panDescription": "Seret untuk menjelajahi, latar belakang dibekukan" + }, + "reset": "Atur Ulang", + "started": "Dimulai", + "ended": "Selesai", + "duration": "Durasi", + "status": "Status", + "provider": "Penyedia", + "tokens": "Token", + "active": "Aktif", + "other": "Lainnya", + "tenMinutes": "10menit", + "hour": "jam", + "day": "hari", + "unknownModel": "tidak diketahui", + "pending": "tertunda" + }, + "metadata": { + "compressionTitle": "Kompresi", + "compressionDescription": "Konfigurasikan pengaturan kompresi konteks untuk mengurangi penggunaan token dan biaya.", + "relayTitle": "OmniRoute — Proksi Relay", + "relayDescription": "Endpoint proksi relay tanpa server untuk infrastruktur AI Anda", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitor Panggilan LLM + debug lalu lintas HTTPS aplikasi mana pun" + }, + "conductor": { + "title": "Conductor — armada agen CLI", + "subtitle": "OmniConductor hub: pelari, antrean tugas dan dewan, langsung", + "runners": "Pelari", + "tasks": "Tugas", + "colName": "Nama", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Tugas", + "colMode": "Mode", + "colRunner": "Pelari", + "colSummary": "Ringkasan", + "online": "daring", + "offline": "tidak terhubung", + "draining": "menguras", + "hubOffline": "Conductor hub offline atau tidak terkonfigurasi (CONDUCTOR_HUB_URL) — tidak menampilkan apa-apa selain data yang usang.", + "noRunners": "Tidak ada pelari yang terdaftar", + "noTasks": "Belum ada tugas", + "detailTitle": "Detail Tugas", + "prompt": "Tanya", + "branch": "Cabang", + "fetchHint": "Ambil hasilnya dengan: git fetch origin {branch}", + "council": "Dewan", + "candidates": "Kandidat", + "cancel": "Batalkan tugas", + "cancelConfirmTitle": "Batalkan tugas ini?", + "cancelConfirmMessage": "Hub akan membatalkan eksekusi pada runner. Ini tidak dapat dibatalkan.", + "cancelFailed": "Hub menolak pembatalan", + "close": "Tutup", + "error": "Kesalahan", + "faroTitle": "Faro — juru bicara armada", + "faroSubtitle": "Obrolan dan suara, berakar pada peristiwa armada nyata. Perintah yang merusak selalu meminta konfirmasi.", + "faroEmpty": "Tanya tentang armada — misalnya \"bagaimana keadaan armada?\"", + "faroPending": "Faro meminta konfirmasi", + "faroPlaceholder": "bicara dengan Faro…", + "faroSend": "kirim", + "faroOffline": "Faro (juru bicara) sedang offline", + "yes": "Ya", + "no": "Tidak", + "pushToTalk": "Tahan untuk berbicara", + "speakAnswers": "berbicara jawaban", + "voiceModels": "Model Suara (penyedia/model dari OmniRoute ini)", + "voiceIdle": "bicara", + "voiceListening": "mendengarkan…", + "voiceThinking": "sedang berpikir…", + "voiceSpeaking": "berbicara…", + "sttFailed": "Transkripsi gagal (periksa model/penyedia STT)", + "ttsFailed": "Sintesis suara gagal (periksa model/penyedia TTS)", + "micDenied": "Mikrofon tidak tersedia atau izin ditolak" + }, + "cliproxyProviderExposure": { + "title": "Paparan Penyedia", + "description": "Ekspos model CLIProxyAPI sebagai target routing di bawah prefix cliproxyapi/.", + "label": "Expose sebagai cliproxyapi/...", + "hint": "Saat diaktifkan, model yang ditemukan muncul di pemilih penyedia di seluruh OmniRoute.", + "updateFailed": "Gagal memperbarui (HTTP {status})", + "networkError": "Kesalahan jaringan — tidak dapat memperbarui pengaturan eksposur penyedia" + } } - diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 3cf84c9d22..32340ec503 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -172,6 +172,18 @@ "unselectAll": "Batalkan semua pilihan", "visibleModels": "terlihat", "selectAllConfirm": "Tambahkan {count} model ke kombinasi ini?", + "testSelectedProviders": "Penyedia Uji", + "testingSelectedProviders": "Mengujicoba {done}/{total}...", + "noProvidersSelectedToTest": "Periksa setidaknya satu penyedia di bawah ini terlebih dahulu", + "noModelsToTestForProviders": "Tidak ada model untuk diuji untuk penyedia yang dipilih", + "testSelectedProvidersResults": "{ok} dari {total} model berfungsi", + "selectWorkingModels": "Tambahkan bekerja", + "unselectWorkingModels": "Batalkan pilihan bekerja", + "noWorkingModelsToSelect": "Tidak ada model yang dapat ditambahkan lagi", + "providerTestHint": "Tip: periksa penyedia → Uji → Tambahkan yang berfungsi. Klik lagi untuk membatalkan pilihan.", + "selectAllProviders": "Periksa semua penyedia", + "clearProviderSelection": "Hapus centang penyedia", + "providersSelectedCount": "{count} penyedia diperiksa", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Ukuran", + "toggleNoAuthProvider": "Alihkan penyedia tanpa otentikasi", + "loadingModels": "Memuat model…", + "selectAModel": "Pilih model", + "degraded": "Menurun", + "zeroConfigBannerTitle": "Berjalan dalam mode tanpa konfigurasi", + "zeroConfigBannerBody": "OmniRoute secara otomatis menghasilkan kunci enkripsi aman pada peluncuran pertama. Kunci tersebut disimpan di {dataDir}. Tidak ada tindakan yang diperlukan — data Anda terenkripsi dan aman. Untuk menggunakan kunci kustom, tambahkan JWT_SECRET dan STORAGE_ENCRYPTION_KEY ke file tersebut.", + "batchRelativeTimeIn": "dalam {value}", + "batchRelativeTimeAgo": "{value} yang lalu", + "batchDetailsTitle": "Detail Batch", + "batchProgress": "Kemajuan", + "batchCompletedCount": "{count} selesai", + "batchFailedCount": "{count} gagal", + "batchPendingCount": "{count} tertunda", + "batchTimeline": "Garis Waktu", + "batchTimelineInProgress": "Dalam Proses", + "batchTimelineFinalizing": "Menyelesaikan", + "batchTimelineCompleted": "Selesai", + "batchTimelineFailed": "Gagal", + "batchTimelineExpires": "Kedaluwarsa", + "batchTimelineExpired": "Kedaluwarsa", + "batchTimelineCancelling": "Membatalkan", + "batchTimelineCancelled": "Dibatalkan", + "batchTokenUsage": "Penggunaan Token", + "batchMetadata": "Metadata", + "batchFileContents": "Isi Berkas", + "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Prabaca", + "batchFilePreviewTruncated": "Menampilkan {shown} baris pertama ({total} total baris)", + "batchFileDownloadFull": "Unduh File Lengkap" }, "disabled": "Dinonaktifkan", "featureFlagOmnirouteEmergencyFallbackDescription": "Rute permintaan yang kehabisan anggaran ke penyedia/model cadangan gratis darurat.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Pemisah", "discovery": "Penemuan", "discoverySubtitle": "Pindai penyedia untuk akses gratis", + "conductor": "Konduktor", + "conductorSubtitle": "Armada CLI-agent", "resilienceConnections": "Resiliensi Koneksi", "resilienceConnectionsSubtitle": "Cooldown, breaker, status penguncian", "settingsModalityBridge": "Jembatan Modalitas", - "settingsModalityBridgeSubtitle": "Fallback teks untuk model hanya teks dari gambar/audio" + "settingsModalityBridgeSubtitle": "Fallback teks untuk model hanya teks dari gambar/audio", + "commandPalette": { + "title": "Palet Perintah", + "searchPlaceholder": "Cari halaman, pengaturan, alat...", + "clearSearch": "Bersihkan pencarian", + "noResults": "Tidak ada hasil", + "navigate": "navigasi", + "open": "buka", + "close": "tutup" + }, + "noResults": "Tidak ada hasil" }, "webhooks": { "title": "Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Pembaruan Pengaturan Gagal", "sync.token.created": "Token Sinkronisasi Dibuat", "sync.token.revoked": "Token Sinkronisasi Dicabut" - } + }, + "mcpMetricCalls24h": "Panggilan (24j)", + "mcpMetricSuccessRate": "Tingkat keberhasilan", + "mcpMetricAvgDuration": "Durasi rata-rata", + "mcpMetricTopTool": "Alat Terbaik" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "Memuat ulang halaman secara otomatis...", - "providerTopology": "Topologi Penyedia" + "providerTopology": "Topologi Penyedia", + "downloadDmg": "Unduh DMG (macOS)", + "downloadDmgDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh dan instal penginstal DMG macOS untuk memperbarui (sekarang: v{version}).", + "downloadExe": "Unduh EXE (Windows)", + "downloadExeDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh dan instal penginstal EXE Windows untuk memperbarui (sekarang: v{version}).", + "downloadAppImage": "Unduh AppImage (Linux)", + "downloadAppImageDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh paket AppImage Linux untuk memperbarui (sekarang: v{version}).", + "downloadUpdate": "Unduh Pembaruan", + "downloadUpdateDescription": "Versi baru dari aplikasi desktop OmniRoute tersedia. Silakan unduh format aplikasi yang sesuai untuk sistem Anda untuk memperbarui (sekarang: v{version}).", + "updateQueued": "Pembaruan ter排an ke v{version}.", + "updateDockerRebuilding": "Gambar Docker sedang dibangun kembali di latar belakang.", + "updateWaitingRestart": "Menunggu OmniRoute untuk memulai ulang dengan versi baru.", + "updateInstalling": "Menginstal v{version}.", + "updateRunning": "OmniRoute sekarang berjalan di v{version}.", + "updateCompleted": "OmniRoute diperbarui ke v{version}.", + "updateDockerStillRebuilding": "Gambar Docker masih dibangun ulang untuk v{version}.", + "updateInstallingBackground": "Menginstal v{version} di latar belakang.", + "updateWaitingVersion": "Menunggu OmniRoute untuk kembali di v{version}.", + "updateDockerStillInProgress": "Docker rebuild masih dalam proses.", + "updateRestarting": "Proses restart layanan sedang berlangsung. Menunggu OmniRoute untuk kembali online...", + "updateTimeout": "Pembaruan dimulai, tetapi v{version} tidak tersedia sebelum waktu habis. Segarkan halaman atau periksa log server.", + "updateTimedOut": "Pembaruan ke v{version} telah habis waktu.", + "updateStartFailed": "Gagal memulai pembaruan.", + "noResponseStream": "Tidak ada aliran respons yang diterima.", + "updateComplete": "Pembaruan selesai!", + "updateFailed": "Pembaruan gagal.", + "updateNetworkError": "Kesalahan jaringan — koneksi terputus selama pembaruan.", + "stepInstallPackage": "Instal Paket", + "stepRebuildNativeModules": "Bangun Ulang Modul Native", + "stepRestartService": "Mulai Ulang Layanan", + "stepComplete": "Lengkap", + "stepError": "Kesalahan", + "updateCompleteTitle": "Pembaruan Selesai!", + "updateFailedTitle": "Pembaruan Gagal", + "updatingTitle": "Memperbarui OmniRoute...", + "reloadNotice": "Halaman akan dimuat ulang secara otomatis dalam beberapa detik.", + "retryNotice": "Silakan coba lagi atau perbarui secara manual melalui CLI.", + "restartNotice": "Jangan tutup halaman ini. Sistem akan restart secara otomatis.", + "reloadNow": "Muat Ulang Sekarang", + "closeUpdate": "Tutup", + "retryUpdate": "Coba Lagi", + "updateAvailableTitle": "Pembaruan Tersedia: v{version}{desktop}", + "desktopAppLabel": "(Aplikasi Desktop)", + "checkingForUpdates": "Memeriksa pembaruan...", + "versionAvailableForDownload": "Versi v{version} tersedia untuk diunduh.", + "downloadingUpdate": "Mengunduh pembaruan... {percent}% selesai.", + "updateDownloaded": "Pembaruan berhasil diunduh! Klik Restart & Install untuk menerapkan.", + "autoUpdateFailed": "Pembaruan otomatis gagal: {reason}.", + "unknownUpdateError": "Kesalahan tidak dikenal", + "versionAvailableDesktop": "Versi v{version} tersedia untuk aplikasi desktop.", + "manualUpdateRequired": "Pembaruan manual diperlukan untuk jenis instalasi ini.", + "restartAndInstall": "Mulai Ulang & Instal", + "checkForUpdate": "Periksa Pembaruan", + "manualUpdate": "Pembaruan Manual", + "directDownloadHint": "Atau unduh format penginstal yang sesuai secara langsung:", + "releaseNotes": "Catatan Rilis", + "readMore": "Baca Selengkapnya", + "noAuthLabel": "Tidak Ada Autentikasi" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Disimpulkan dari log panggilan persisten di sekitar permintaan ini", "routeRecommendations": "Rekomendasi", "routeLimitations": "Batasan", - "routeNoKnownLimitations": "Tidak ada batasan yang diketahui untuk penjelasan ini." + "routeNoKnownLimitations": "Tidak ada batasan yang diketahui untuk penjelasan ini.", + "searchAnalyticsLoading": "Memuat analitik pencarian…", + "searchAnalyticsNoData": "Belum ada data pencarian yang tersedia.", + "searchAnalyticsNoDataDescription": "Permintaan pencarian akan muncul di sini setelah pencarian pertama melalui /v1/search.", + "searchAnalyticsToday": "{count} hari ini", + "searchAnalyticsCachedRequests": "{count} permintaan yang di-cache", + "searchAnalyticsApiCosts": "biaya API pencarian", + "searchAnalyticsErrors": "{count} kesalahan", + "searchAnalyticsNoErrors": "Tidak ada kesalahan", + "searchAnalyticsProviderBreakdown": "Rincian Penyedia", + "searchAnalyticsQueries": "kueri", + "searchAnalyticsEmptyDescription": "Gunakan POST /v1/search untuk memulai pengalihan pencarian web.", + "searchAnalyticsFreeTier": "Tingkat gratis tersedia: Serper (2.500/bulan), Brave (2.000/bulan), Exa (1.000/bulan), Tavily (1.000/bulan) — total 6.500+ pencarian gratis/bulan dengan failover otomatis.", + "autoRoutingNoDataAvailable": "Tidak ada analitik auto-routing yang tersedia. Buat permintaan menggunakan awalan auto/ untuk melihat metrik.", + "defaultVariantLabel": "Bawaan", + "freeTierAvailable": "Tingkat gratis tersedia" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} penyedia", "imageToTextBridgeAvailable": "Modality Bridge sekarang dapat mendeskripsikan gambar untuk model teks saja. Playground inline akan tersedia ketika /api/v1/images/understanding diimplementasikan.", "imageToTextBridgeCta": "Konfigurasikan jembatan Gambar→Teks di pengaturan Jembatan Modalitas", - "sttBridgeCta": "Konfigurasikan jembatan Speech→Text di pengaturan Modality Bridge" + "sttBridgeCta": "Konfigurasikan jembatan Speech→Text di pengaturan Modality Bridge", + "existingConnection": "Koneksi yang ada", + "openrouterSttDescription": "Model speech-to-text OpenRouter menggunakan koneksi OpenRouter yang telah Anda konfigurasikan. Tidak diperlukan kredensial terpisah." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Tempel ke:", "copilotReloadInstruction": "Kemudian muat ulang VS Code dan atur kunci API di prompt input.", "wireApiChatCompletions": "Penyelesaian Obrolan (/chat/penyelesaian)", - "wireApiResponses": "API Respons (/respons)" + "wireApiResponses": "API Respons (/respons)", + "cliproxyapiActionFailed": "Tindakan gagal", + "cliproxyapiActionSucceeded": "Tindakan berhasil", + "cliproxyapiCheckUpdates": "Periksa Pembaruan", + "cliproxyapiDescription": "Fallback proxy hulu (OAuth berbasis Go)", + "cliproxyapiHealth": "Kesehatan", + "cliproxyapiHealthy": "Sehat", + "cliproxyapiInstall": "Instal", + "cliproxyapiNotInstalledValue": "Tidak terpasang", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Permintaan gagal", + "cliproxyapiRestart": "Mulai Ulang", + "cliproxyapiStart": "Mulai", + "cliproxyapiStatusError": "Kesalahan", + "cliproxyapiStatusInstalled": "Terpasang", + "cliproxyapiStatusNotInstalled": "Tidak Terpasang", + "cliproxyapiStatusRunning": "Sedang Berjalan", + "cliproxyapiStatusStopped": "Dihentikan", + "cliproxyapiStop": "Berhenti", + "cliproxyapiUnhealthy": "Tidak Sehat", + "cliproxyapiUnknown": "Tidak Dikenal", + "cliproxyapiUpdate": "Perbarui", + "cliproxyapiUpdateAvailable": "Pembaruan tersedia: v{current} → v{latest}", + "cliproxyapiVersion": "Versi" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Hanya maju saat kuota habis", + "fallbackOnlyOnQuotaExhaustionShort": "fallback hanya kuota", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Paket mode dan pembobotan tetap di sini; status runtime pemutus tetap di halaman Kesehatan.", "emailVisibilityHint": "Email akun di sini mengikuti pengalihan privasi global.", "emailVisibilityTooltip": "Gunakan ikon mata untuk menampilkan atau menyembunyikan email akun secara global di seluruh layar kombo, penyedia, dan kuota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Langkah demi langkah (Penyedia → Model)", + "builderModeGlobal": "Pencarian model global (Kombinasi kustom)", + "builderGlobalSearchPlaceholder": "Cari model di semua penyedia (mis. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Tambahkan semua", + "builderGlobalShortcuts": "Pintasan:", + "builderGlobalNoResults": "Tidak ada model yang ditemukan untuk \"{query}\".", + "builderGlobalProviderLabel": "Penyedia:", + "builderGlobalAccountCount": "{count, plural, one {# akun} other {# akun}}", + "builderGlobalAdded": "Ditambahkan", + "builderGlobalAdd": "Tambahkan", "manualModel": "Model manual", "manualModelInvalid": "Masukkan model sebagai provider/model.", "manualModelUnknownProvider": "Awalan penyedia tidak dikenal.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Ketersediaan Sesi", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Kelengketan nonaktif", "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 sebagai model utama (Moonshot API), dengan pengalihan otomatis (fallback) ke koneksi Kimi Code Anda (kimi-coding, kimi-web) saat dikonfigurasi.", - "kimiPresetCta": "Tambah preset" + "kimiPresetCta": "Tambah preset", + "intelligentComboCount": "{count, plural, one {# kombinasi cerdas} other {# kombinasi cerdas}}", + "providersInScope": "{count, plural, one {# penyedia dalam lingkup} other {# penyedia dalam lingkup}}", + "savingModePack": "Menyimpan {pack}…", + "errorTitle": "Gagal memuat kombinasi", + "errorDescription": "Kami tidak dapat memuat data kombinasi saat ini. Periksa koneksi Anda dan coba lagi.", + "errorId": "ID Kesalahan: {id}", + "errorRetry": "Coba Lagi", + "comboLabel": "Kombinasi" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nama Pengguna", "obsidianPassword": "Kata Sandi", - "obsidianTailscaleHint": "Gunakan IP Tailscale Anda alih-alih localhost jika menghubungkan dari perangkat seluler. Kedua perangkat harus berada di jaringan Tailscale yang sama." + "obsidianTailscaleHint": "Gunakan IP Tailscale Anda alih-alih localhost jika menghubungkan dari perangkat seluler. Kedua perangkat harus berada di jaringan Tailscale yang sama.", + "cloudSyncNotConfigured": "Sinkronisasi awan tidak dikonfigurasi pada instance ini.", + "notionConnect": "Sambungkan", + "notionConnectFailed": "Gagal terhubung", + "notionConnected": "Terkoneksi", + "notionConnectionFailed": "Koneksi gagal", + "notionDescription": "Cari, baca, kueri, dan tulis ke Notion melalui model AI yang diarahkan", + "notionDisconnect": "Putuskan Koneksi", + "notionDisconnectFailed": "Gagal untuk memutuskan koneksi", + "notionEnterToken": "Silakan masukkan token integrasi Notion", + "notionIntegrationHelp": "Buat Integrasi Internal di", + "notionIntegrationToken": "Token Integrasi Internal Notion", + "notionNotConnected": "Tidak terhubung", + "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Penyedia / Model", "noRemoteProviders": "Tidak ada penyedia dengan kunci API yang dikonfigurasi", "selectProviderModel": "Pilih model", + "customBaseUrlLabel": "URL dasar kustom (opsional)", + "customModelIdLabel": "ID model kustom (opsional)", + "customEndpointHelp": "Gunakan endpoint /embeddings yang kompatibel dengan OpenAI. Endpoint lokal diperbolehkan; target metadata cloud diblokir.", + "customEndpointSave": "Terapkan endpoint kustom", + "customEndpointInvalid": "Masukkan baik URL dasar HTTP(S) yang valid dan ID model, atau biarkan kedua kolom kosong.", + "customEndpointSaveFailed": "Endpoint penyisipan kustom tidak dapat disimpan.", "staticEnabledLabel": "Aktifkan Static Potion", "staticEnabledDesc": "Unduh dan gunakan model potion-base-8M secara lokal", "transformersEnabledLabel": "Aktifkan Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Membersihkan...", "cleanNow": "Bersihkan sekarang", "cleanupSuccess": "{count} titik dihapus", - "cleanupFailed": "Pembersihan gagal" + "cleanupFailed": "Pembersihan gagal", + "hostLabel": "Tuan Rumah", + "collectionLabel": "Koleksi" }, "rerank": { "enableLabel": "Aktifkan Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagram cadangan 3 tingkat OmniRoute", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Siapkan penyedia gratis", + "description": "Opsional untuk mengaktifkan penyedia tanpa pendaftaran yang dipilih. Tinjau pemberitahuan dan situs masing-masing penyedia sebelum melanjutkan; ketersediaan dan batasan tarif dikendalikan oleh pihak ketiga.", + "loading": "Memuat penyedia gratis...", + "loadFailed": "Tidak dapat memuat penyedia gratis.", + "alreadyConfigured": "Semua penyedia gratis yang memenuhi syarat sudah dikonfigurasi.", + "reviewProviderSite": "Tinjau situs penyedia dan syaratnya", + "confirmation": "Saya telah meninjau penyedia pihak ketiga ini dan ingin OmniRoute untuk membuat koneksi yang dipilih.", + "setupSelected": "Atur penyedia yang dipilih", + "settingUp": "Menyiapkan...", + "setupFailed": "Tidak dapat mengatur penyedia yang dipilih. Tidak ada yang diubah.", + "retryFailed": "Coba ulang penyedia yang gagal", + "orUseApiKey": "atau sambungkan dengan kunci API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "dibuat", + "skipped": "sudah dikonfigurasi", + "failed": "gagal" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "URL Ikon", "iconUrlHint": "Opsional. URL gambar yang ditampilkan sebagai ikon penyedia ini.", + "iconUrlInvalid": "URL ikon tidak valid. Gunakan URL http(s):// atau data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sesi sudah saat ini", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Terapkan autentikasi", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Tempel kunci API…", "zedSaving": "Menyimpan…", "zedImportAction": "Impor", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktifkan pembaruan sesi Kursor otomatis", + "cursorAgentNudgeBody": "Instal cursor-agent untuk pembaruan sesi otomatis — tanpa itu, koneksi Cursor memerlukan penyambungan manual secara berkala kira-kira setiap 24 jam.", + "cursorAgentNudgeDismiss": "Abaikan", "zedManualImportFailed": "Impor manual gagal", "zedManualImportSuccess": "Token {provider} diimpor dari Zed", "grokImportTitle": "Impor Autentikasi Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Tingkat gratis untuk inferensi serverless — tidak memerlukan kartu kredit", "gemini": "Gratis selamanya: 1.500 req/hari untuk Gemini 2.5 Flash — tanpa kartu kredit, dapatkan kunci di aistudio.google.com", "gigachat": "Hubungkan GigaChat (Sber) dengan kunci API.", - "github-models": "Buat PAT GitHub dengan cakupan 'models: read' di github.com/settings/tokens", "gitlab": "Token akses pribadi GitLab untuk Code Suggestions API publik. Konfigurasikan URL dasar yang di-host sendiri saat tidak menggunakan gitlab.com.", "gitlawb-gmi": "Dapatkan kunci API Anda dari dasbor Gitlawb Opengateway.", "gitlawb": "Dapatkan kunci API Anda dari dasbor Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Hubungkan Kimi Coding dengan alur OAuth yang ada.", "kiro": "Tingkat gratis: 50 kredit/bulan (~25K–100K token). ⚠️ Kiro ToS melarang penggunaan proksi/harness pihak ketiga.", "codex": "Hubungkan OpenAI Codex dengan alur OAuth yang ada.", - "qwen": "Hubungkan Qwen Code dengan alur OAuth yang ada." + "qwen": "Hubungkan Qwen Code dengan alur OAuth yang ada.", + "github-models": "Buat PAT GitHub dengan cakupan 'models: read' di github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} menerima ID model asli penyedia. Impor dari /models atau tambahkan ID khusus untuk perutean.", "bedrockModelsDescription": "Model Amazon Bedrock dicakup berdasarkan wilayah AWS. Impor dari /models atau tambahkan ID model Batuan Dasar yang diaktifkan di wilayah yang dipilih.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Ketika semua koneksi yang dikonfigurasi habis (kuota, kredit, atau masa berlaku), gunakan sementara tingkat tanpa kunci penyedia ini. Matikan untuk melewati penyedia ini alih-alih mengirim permintaan anonim — disarankan ketika tingkat tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback anonim diaktifkan untuk {provider}", "anonymousFallbackDisabled": "Fallback anonim dinonaktifkan untuk {provider} — koneksi yang habis akan melewati penyedia ini", - "anonymousFallbackUpdateFailed": "Gagal memperbarui pengaturan fallback anonim" + "anonymousFallbackUpdateFailed": "Gagal memperbarui pengaturan fallback anonim", + "batchDeleteFailed": "Penghapusan batch gagal", + "batchDeleteNetworkError": "Kesalahan jaringan saat menghapus batch", + "batchUpdateFailed": "Pembaruan batch gagal", + "batchUpdateNetworkError": "Kesalahan jaringan selama pembaruan batch", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agen Cloud", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Cari", + "categoryWebCookie": "Kue Web", + "claudeExtraUsageBlockingDisabled": "Pemblokiran penggunaan ekstra Claude dinonaktifkan (penggunaan ekstra diizinkan)", + "claudeExtraUsageBlockingEnabled": "Pemblokiran penggunaan ekstra Claude diaktifkan (penggunaan ekstra akan diblokir)", + "claudeRoutingPreferenceDisabled": "Model Claude tanpa prefiks tidak lagi lebih memilih Claude Code", + "claudeRoutingPreferenceEnabled": "Model Claude tanpa prefiks sekarang lebih memilih Claude Code", + "clearMediaFilter": "Bersihkan", + "cliproxyRoutingDisabled": "Permintaan sekarang menggunakan OmniRoute asli (langsung)", + "cliproxyRoutingEnabled": "Permintaan sekarang diarahkan melalui CLIProxyAPI (emulasi yang lebih dalam)", + "codexLimitPolicyUpdated": "Kebijakan batas Codex diperbarui", + "codexServiceModeUpdated": "Mode layanan Codex diperbarui", + "codexServiceTierActive": "Tingkat layanan Codex {tier} aktif", + "codexTierFastLabel": "Cepat", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Gagal menerapkan Kode Perintah auth", + "commandCodeApplyingApproval": "Browser disetujui, menerapkan…", + "commandCodeApplyingKey": "Menerapkan kunci yang disetujui oleh browser…", + "commandCodeApprovalInstructions": "Buka URL otorisasi, setujui akses, lalu tempelkan kunci/JSON/URL yang dikembalikan di bawah ini…", + "commandCodeAuthExpired": "Kode Perintah auth telah kedaluwarsa", + "commandCodeConnected": "Kode Perintah terhubung", + "commandCodeConnectionAdded": "Koneksi Kode Perintah ditambahkan", + "commandCodeLinkExpired": "Tautan Kode Perintah telah kedaluwarsa", + "commandCodeOpeningStudio": "Membuka Command Code Studio…", + "commandCodePopupBlocked": "Popup diblokir. Silakan izinkan popup dan coba lagi Command Code Connect.", + "commandCodeStartFailed": "Gagal memulai Command Code auth", + "connectionDeleted": "Koneksi dihapus", + "connectionFallback": "koneksi", + "coolingConnectionsDescription": "Koneksi ini mengembalikan 429 (batas-laju) pada permintaan terakhir mereka. OmniRoute akan melewatkan mereka sampai timer berakhir — tidak perlu menonaktifkan secara manual.", + "coolingConnectionsTitle": "Saat ini pendinginan ({count})", + "failedDeleteAlias": "Gagal menghapus alias", + "failedDeleteConnection": "Gagal menghapus koneksi", + "failedDistributeProxies": "Gagal untuk mendistribusikan proxy.", + "failedSaveModelEndpointSettings": "Gagal menyimpan pengaturan endpoint model", + "failedUpdateClaudeExtraUsagePolicy": "Gagal memperbarui kebijakan penggunaan ekstra Claude", + "failedUpdateClaudeRoutingPreference": "Gagal memperbarui preferensi routing kode Claude", + "failedUpdateCliproxyRouting": "Gagal memperbarui routing CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Gagal memperbarui kebijakan batas Codex", + "failedUpdateCodexServiceMode": "Gagal memperbarui mode layanan Codex", + "filterByMedia": "Media", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kunci API Kimi Code", + "modelTestFailed": "Pengujian model gagal", + "modelTestNetworkError": "Kesalahan jaringan menguji model", + "networkError": "Kesalahan jaringan", + "networkErrorDeletingAlias": "Kesalahan jaringan saat menghapus alias", + "networkErrorSettingAlias": "Kesalahan jaringan saat mengatur alias", + "noProvidersMatch": "Tidak ada penyedia yang cocok dengan pencarian Anda.", + "noSavedProxies": "Tidak ada proxy yang disimpan. Tambahkan proxy di Pengaturan → Proxy terlebih dahulu.", + "pageLoadErrorDescription": "Kami tidak dapat memuat data penyedia saat ini. Periksa koneksi Anda dan coba lagi.", + "pageLoadErrorId": "ID Kesalahan: {id}", + "pageLoadErrorRetry": "Coba Lagi", + "pageLoadErrorTitle": "Gagal memuat penyedia", + "playgroundTitle": "Tempat Bermain", + "providerDetailConnectionFlexActive": "Tingkat layanan Codex flex aktif untuk koneksi ini", + "providerDetailConnectionPriorityActive": "Tingkat layanan prioritas Codex aktif untuk koneksi ini", + "providerDetailGlobalFlexActive": "Tingkat layanan Global Codex flex aktif", + "providerDetailGlobalPriorityActive": "Tingkat layanan prioritas Global Codex aktif", + "proxiesDistributed": "Distribusi penugasan proxy {assigned} di seluruh {tagLabel}{total} koneksi.", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", + "searchByModelAria": "Cari berdasarkan model", + "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "Gagal memuat daftar langganan", "toggleFailed": "Gagal mengalihkan tombol", "refreshFailed": "Gagal menyegarkan", - "deleteFailed": "Gagal menghapus" + "deleteFailed": "Gagal menghapus", + "add": "Tambahkan", + "cancel": "Batalkan", + "configure": "Konfigurasi", + "copyEndpoint": "Salin Endpoint", + "coreEndpointHint": "Petunjuk Endpoint Inti", + "coreNodesHint": "Petunjuk Node Inti", + "create": "Buat", + "deleteConfirm": "Hapus Konfirmasi", + "empty": "Kosong", + "globalModeDescription": "Deskripsi Mode Global", + "localCoreHint": "Petunjuk Inti Lokal", + "nodeSummary": "Ringkasan Node", + "providerRequired": "Penyedia Diperlukan", + "providerRouting": "Routing Penyedia", + "refresh": "Segarkan", + "refreshInterval": "Interval Penyegaran", + "ruleModeDescription": "Deskripsi Mode Aturan" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Jalankan fallback vision-ke-teks otomatis sebelum merutekan permintaan gambar ke model khusus teks.", "visionBridgeEnabledLabel": "Diaktifkan", "visionBridgeEnabledDesc": "Alihkan bridge pra-panggilan yang menggantikan bagian gambar dengan teks yang diekstrak.", + "visionBridgeRerouteTextOnlyLabel": "Arahkan ulang model teks saja", + "visionBridgeRerouteTextOnlyDesc": "Kirim permintaan lengkap, termasuk gambar, ke model jembatan ketika model yang dipilih tidak memiliki input gambar.", "visionBridgeModel": "Model Jembatan", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "ID model OmniRoute apa pun yang mendukung vision dapat digunakan di sini.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Kunci API tidak memiliki cakupan manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Satu atau beberapa prefiks menargetkan rute yang mampu-spawn dan tidak dapat dilewati.", "GENERIC": "Gagal memperbarui setelan authz." - } + }, + "remove": "Hapus" }, "resilienceBaseCooldownLabel": "Cooldown dasar", "scopeLabel": "Ruang lingkup", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Menguji audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip telah ditranskripsi oleh {model}", "modalityBridgeAudioTestNoop": "Audio Bridge tidak diaktifkan (target mungkin mendukung audio, tidak ada penyedia STT yang terhubung, atau jembatan dinonaktifkan)", - "modalityBridgeAudioTestError": "Uji audio gagal: {message}" + "modalityBridgeAudioTestError": "Uji audio gagal: {message}", + "modelRoutingDescriptionPlaceholder": "Rute Model Opus ke Kombinasi Frontier", + "cliproxyapiFallbackCodes": "Kode Cadangan Cliproxyapi", + "cliproxyapiFallbackDescription": "Deskripsi Cadangan Cliproxyapi", + "cliproxyapiHealthLabel": "Label Kesehatan Cliproxyapi", + "cliproxyapiImportFailed": "Cliproxyapi Gagal Diimpor", + "cliproxyapiImportResult": "Hasil Impor Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Tidak Valid", + "cliproxyapiLifecycleNoticeAfter": "Pemberitahuan Siklus Hidup Cliproxyapi Setelah", + "cliproxyapiLifecycleNoticeBefore": "Pemberitahuan Siklus Hidup Cliproxyapi Sebelum", + "cliproxyapiLifecycleNoticeLink": "Tautan Pemberitahuan Siklus Hidup Cliproxyapi", + "cliproxyapiPortLabel": "Label Port Cliproxyapi", + "cliproxyapiStatusLabel": "Label Status Cliproxyapi", + "cliproxyapiVersionLabel": "Label Versi Cliproxyapi", + "collection": "Koleksi", + "errorPage": { + "description": "Kami tidak dapat memuat pengaturan saat ini. Silakan coba lagi dalam beberapa detik.", + "errorId": "ID Kesalahan: {id}", + "retry": "Coba Lagi", + "title": "Gagal memuat pengaturan" + }, + "host": "Tuan Rumah", + "notInstalled": "Tidak terpasang", + "oneproxyActions": "Tindakan Oneproxy", + "oneproxyActive": "Oneproxy Aktif", + "oneproxyAnonymity": "Anonymitas Oneproxy", + "oneproxyCountry": "Negara Oneproxy", + "oneproxyDelete": "Oneproxy Hapus", + "oneproxyEmpty": "Oneproxy Kosong", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latensi", + "oneproxyProtocol": "Protokol Oneproxy", + "oneproxyQuality": "Kualitas Oneproxy", + "oneproxySyncFailed": "Sinkronisasi gagal: {error}", + "oneproxySyncSuccess": "Disinkronkan {total} proxy ({added} baru, {updated} diperbarui)", + "proxyDocumentationSocks5DescAfter": "Dokumentasi Proxy Socks5 Desc Setelah", + "proxyFreePoolAddProxy": "Tambahkan Proxy Kolam Gratis", + "proxyFreePoolAdding": "Menambahkan Kolam Proxy Gratis", + "proxyFreePoolSelectProxy": "Pilih Proxy Kolam Gratis", + "proxyStatusActive": "Status Proxy Aktif", + "proxyStatusInactive": "Status Proxy Tidak Aktif", + "routingAddEntry": "Tambahkan entri", + "settingSaveFailed": "Penyimpanan Pengaturan Gagal", + "settingSaved": "Pengaturan Disimpan", + "skillsmpApiKeyHintAfter": ". Batas permintaan: {limit} permintaan/hari.", + "skillsmpApiKeyHintBefore": "Dapatkan kunci API Anda dari", + "syncFailed": "Sinkronisasi gagal", + "unhealthy": "Tidak Sehat", + "oneproxyDescription": "Ambil dan putar proxy yang divalidasi gratis dari platform komunitas 1proxy", + "oneproxySyncing": "Menyinkronkan...", + "oneproxySyncNow": "Sinkronkan Sekarang", + "oneproxyClearAll": "Bersihkan Semua", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Hapus semua proksi 1proxy?", + "memorySkillsSkillsmpDescription": "Sambungkan ke SkillsMP untuk menemukan dan menginstal keterampilan dari pasar.", + "memorySkillsActiveProviderDescription": "Pilih penyedia mana yang digunakan halaman Keterampilan untuk pencarian dan instalasi.", + "memorySkillsSkillsmpProviderTitle": "Pasar SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Marketplace yang Terautentikasi (menggunakan kunci API SkillsMP Anda).", + "memorySkillsSkillsshProviderTitle": "Direktori skills.sh", + "memorySkillsSkillsshProviderDescription": "Penyedia direktori publik (tidak memerlukan kunci API).", + "routingCcBridgeCatalogName": "Jembatan CC yang kompatibel dengan Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Penyedia Claude asli dengan token yang diterbitkan oleh OAuth.", + "routingCcBridgeName": "Jembatan Claude-Code", + "routingCcBridgeDescription": "Titik akhir relay menggunakan kunci API (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Penyedia kustom.", + "routingUnknownOpKind": "Jenis op tidak dikenal: {kind}", + "routingInvalidJson": "JSON Tidak Valid: {error}", + "routingConfigMustBeObject": "Konfigurasi harus berupa objek JSON", + "routingEnabledMustBeBoolean": "`enabled` harus true atau false", + "routingPipelineMustBeArray": "`pipeline` harus berupa array ops", + "routingPipelineTooLong": "Pipeline tidak boleh melebihi 50 ops", + "routingOpMissingKind": "Op #{index}: `kind` hilang atau tidak valid", + "routingOpUnknownKind": "Op #{index}: jenis tidak dikenal \"{kind}\"", + "routingJsonEditorHide": "Sembunyikan editor JSON", + "routingJsonEditorImportExport": "Impor / ekspor JSON", + "routingJsonEditorLabel": "JSON (edit dan terapkan, atau tempel untuk mengimpor)", + "routingApplyJson": "Terapkan JSON", + "routingTransformsFootnote": "Semua operasi transformasi bersifat idempoten pada pengulangan. Perubahan berlaku segera pada permintaan berikutnya.", + "cliproxyapiUnknown": "Tidak Dikenal", + "cliproxyapiVersion": "Versi", + "cliproxyapiHealth": "Kesehatan", + "cliproxyapiPort": "Port", + "qdrantHost": "Tuan Rumah", + "qdrantCollection": "Koleksi" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Penuh", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Bawaan", + "off": "Matikan", + "lite": "Lite", + "standard": "Standar", + "aggressive": "Agresif", + "ultra": "Ultra", + "responsesToolOutput": "Keluaran alat respons" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Berjalan terakhir dalam tumpukan (setelah RTK/Caveman membersihkan teks, OmniGlyph mengonversi sisanya menjadi gambar) dan juga berjalan mandiri melalui mode omniglyph. Ini adalah pratinjau dan tetap nonaktif secara default hingga validasi menyeluruh selesai.", "saved": "Tersimpan.", "saveFailed": "Tidak dapat menyimpan.", - "enableAria": "Aktifkan mesin OmniGlyph" + "enableAria": "Aktifkan mesin OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Layanan Tertanam", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "Semua token sehat", + "needsAttention": "Beberapa token perlu perhatian", + "refreshFailures": "Kegagalan penyegaran token terdeteksi", + "unknown": "Status kesehatan tidak diketahui" + }, + "systemMonitor": { + "metricsAriaLabel": "Metrik sistem", + "memory": "Memori", + "memoryShort": "mem", + "uptime": "Waktu Aktif", + "ariaLabel": "Pemantauan Sistem", + "title": "Pemantau Sistem", + "version": "Versi", + "connections": "Koneksi", + "circuitBreakers": "Pemutus Sirkuit", + "open": "{count} terbuka", + "memoryUsage": "Penggunaan Memori" + }, + "never": "Tidak Pernah", + "justNow": "Baru saja", + "minutesAgo": "{count}m yang lalu", + "hoursAgo": "{count}j yang lalu", + "tokens": "Token", + "costs": "Biaya", + "autoRefresh": "Penyegaran Otomatis ({seconds}s)", + "toggleAutoRefresh": "Alihkan penyegaran otomatis", + "activeRequests": "Permintaan Aktif", + "totalRequests": "Total Permintaan", + "totalInputTokens": "Total Input Tokens", + "model": "Model", + "provider": "Penyedia", + "requests": "Permintaan", + "lastUsed": "Terakhir Digunakan", + "inputTokens": "Token Masukan", + "totalTokens": "Total Token", + "inputCost": "Biaya Input", + "outputCost": "Biaya Output", + "noUsageData": "Belum ada penggunaan yang tercatat. Lakukan beberapa permintaan untuk melihat data di sini.", + "account": "Akun", + "accountLabel": "Akun {id}", + "noAccountUsage": "Belum ada penggunaan spesifik akun yang tercatat. Lakukan permintaan menggunakan akun OAuth untuk melihat data di sini." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Reset melalui Data Aplikasi", + "resetViaAppDataDescription": "Hapus file pengaturan dari direktori data aplikasi untuk mengatur ulang kata sandi Anda:", + "quitDesktopApp": "Tutup aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppDataDirectory": "Navigasikan ke direktori data aplikasi:", + "checkSystemAppDataFolder": "(Cek folder data aplikasi sistem Anda)", + "relaunchDesktopFreshSetup": "Luncurkan kembali aplikasi desktop OmniRoute — itu akan memulai pengaturan baru", + "alternativeSetPasswordTitle": "Alternatif: Atur Kata Sandi Baru", + "alternativeSetPasswordDescription": "Atur kata sandi awal yang baru melalui file lingkungan server:", + "openServerEnvFilePrefix": "Buka", + "relaunchDesktopApp": "Luncurkan kembali aplikasi desktop OmniRoute", + "codexLinkInvalidOrExpired": "Tautan ini tidak valid atau telah kedaluwarsa.", + "codexValidationServerError": "Tidak dapat menghubungi server untuk memvalidasi tautan ini.", + "codexSaveConnectionError": "Tidak dapat menyimpan koneksi. Tautan mungkin telah kedaluwarsa.", + "codexDeviceLoginDisabled": "Login kode perangkat dinonaktifkan untuk akun OpenAI ini. Aktifkan di pengaturan keamanan ChatGPT (atau tanyakan kepada admin ruang kerja Anda).", + "codexAuthorizationTimedOut": "Waktu otorisasi habis. Klik Mulai lagi untuk mencoba kembali.", + "authenticationCancelled": "Autentikasi dibatalkan.", + "unexpectedAuthenticationError": "Kesalahan tak terduga selama otentikasi. Silakan coba lagi.", + "connectOpenAiCodexTitle": "Sambungkan OpenAI Codex", + "codexConnectDescription": "Otorisasi akun ChatGPT untuk menyelesaikan pengaturan koneksi ini.", + "validatingCodexLink": "Memvalidasi tautan…", + "codexGenerateCodeDescription": "Klik di bawah untuk menghasilkan kode sekali pakai, lalu masuk ke OpenAI.", + "startCodexFlow": "Mulai", + "requestingOpenAiCode": "Meminta kode dari OpenAI…", + "codexVerificationInstructions": "1. Buka halaman verifikasi OpenAI dan 2. masukkan kode ini. Halaman ini diperbarui secara otomatis setelah Anda memberikan otorisasi.", + "yourCode": "Kode Anda", + "openVerificationPage": "Buka halaman verifikasi", + "copyUrlShort": "Salin URL", + "savingConnection": "Menyimpan koneksi…", + "codexConnected": "Terhubung!", + "codexConnectionRegistered": "Akun Codex telah terdaftar. Anda dapat menutup tab ini.", + "tryAgain": "Coba lagi", + "traeAuthorizationSuccess": "Trae otorisasi ✓", + "traeAuthorizationFailed": "Trae otorisasi gagal", + "closeAuthorizationWindow": "Anda dapat menutup jendela ini.", + "returnToDashboard": "Kembali ke dasbor.", + "resetViaAppData": "Reset melalui Data Aplikasi", + "deleteSettingsToReset": "Hapus file pengaturan dari direktori data aplikasi untuk mengatur ulang kata sandi Anda:", + "quitAppCompletely": "Keluar dari aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppData": "Navigasikan ke direktori data aplikasi", + "checkAppDataFolder": "Periksa folder data aplikasi sistem Anda", + "deleteSettingsJson": "Hapus", + "relaunchAppFresh": "Luncurkan kembali aplikasi desktop OmniRoute — itu akan memulai pengaturan baru", + "alternativeSetPassword": "Alternatif: Atur Kata Sandi Baru", + "setNewPasswordViaEnv": "Atur kata sandi awal baru melalui file lingkungan server:", + "openServerEnv": "Buka", + "inDataDirectory": "di direktori data", + "addOrUpdate": "Tambahkan atau perbarui", + "deleteAndRelaunch": "Hapus", + "settingsJson": "settings.json", + "fromDataDir": "dari direktori data", + "relaunchApp": "Luncurkan kembali aplikasi desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "Perusahaan", + "pricing": "Harga", + "apiReference": "Referensi API", + "helpCenter": "Pusat Bantuan", + "about": "Tentang", + "blog": "Blog", + "contact": "Kontak", + "terms": "Syarat", + "privacy": "Privasi", + "license": "Lisensi", + "footerDescription": "Antarmuka terpadu untuk infrastruktur AI modern. Aman, dapat diamati, dan dapat diskalakan.", + "communityDiscussions": "Diskusi Komunitas" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — Dokumen OmniRoute", + "metadataDefaultTitle": "Dokumentasi OmniRoute", + "metadataDescription": "Dokumentasi komprehensif untuk gerbang OmniRoute AI — pengaturan, API, kompresi, penyebaran, dan lainnya.", + "layoutNavTitle": "Dokumen OmniRoute", + "layoutHomeLink": "Beranda Dokumen", + "layoutDashboardLink": "← Kembali ke Dasbor", + "homeTitle": "Dokumentasi OmniRoute", + "homeMetadataDescription": "Semua yang Anda butuhkan untuk merutekan, mengompres, dan menskalakan AI Anda — panduan pengaturan, referensi API, kompresi, penyebaran, dan lainnya.", + "homeTwitterDescription": "Dokumen komprehensif untuk gerbang OmniRoute AI", + "homeDescription": "Segala yang Anda butuhkan untuk merutekan, mengompres, dan menskalakan AI Anda", + "homeSearchHint": "Tekan Ctrl K untuk mencari dokumen", + "featuredQuickStartTitle": "Panduan Cepat", + "featuredQuickStartDescription": "Jalankan OmniRoute dalam 3 menit", + "featuredAutoComboTitle": "Panduan Auto-Combo", + "featuredAutoComboDescription": "Biarkan OmniRoute memilih AI terbaik untuk Anda", + "featuredProvidersTitle": "Panduan Penyedia", + "featuredProvidersDescription": "Sambungkan penyedia AI dalam hitungan menit", + "nonTechUsersTitle": "Untuk Pengguna Non-Teknis", + "nonTechUsersSubtitle": "Mulai dengan cepat — tidak perlu latar belakang teknis", + "techUsersTitle": "Untuk Pengguna Teknologi", + "techUsersSubtitle": "Mendalami arsitektur, API, dan internal", + "apiExplorerMetadataTitle": "API Explorer — Dokumen OmniRoute", + "apiExplorerMetadataDescription": "Penjelajah API Interaktif — coba endpoint OmniRoute secara langsung dengan respons waktu nyata", + "apiExplorerTitle": "Penjelajah API", + "apiExplorerDescription": "Coba endpoint OmniRoute secara langsung. Pilih sebuah endpoint, atur permintaan Anda, dan lihat responsnya secara real time.", + "apiExplorerSseStarted": "Aliran SSE dimulai — periksa terminal/devtools untuk output waktu nyata.", + "apiExplorerError": "Kesalahan: {message}", + "apiExplorerAuth": "otentikasi", + "apiExplorerResponseLabel": "Tanggapan", + "apiExplorerSelectEndpoint": "Pilih endpoint untuk dijelajahi", + "apiExplorerChooseApi": "Pilih API dari sidebar untuk melihat detail dan mencobanya secara langsung", + "feedbackThanks": "Terima kasih atas masukan Anda!", + "feedbackQuestion": "Apakah halaman ini bermanfaat?", + "pageMetadataTitle": "{title} — Dokumen OmniRoute", + "pageMetadataDescription": "Dokumentasi OmniRoute: {title}", + "breadcrumb": "Jalur Navigasi", + "apiReferenceTable": { + "parameters": "Parameter", + "name": "Nama", + "type": "Tipe", + "description": "Deskripsi", + "returns": "Mengembalikan", + "typePrefix": "Tipe:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "Sesi OAuth tidak lengkap (URI pengalihan atau pengverifikasi kode hilang). Mulai ulang koneksi dan coba lagi.", + "errorExchangeFailed": "Pertukaran gagal", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Kredensial Google OAuth default hanya berfungsi di localhost. Untuk penggunaan jarak jauh, konfigurasikan kredensial OAuth Anda sendiri melalui variabel lingkungan: ANTIGRAVITY_OAUTH_CLIENT_ID dan ANTIGRAVITY_OAUTH_CLIENT_SECRET. Lihat bagian README 'OAuth di Server Jarak Jauh'.", + "errorSaveFailed": "Simpan gagal", + "errorAuthorizationFailed": "Otorisasi gagal", + "errorAuthorizationTimeout": "Waktu Habis Otorisasi", + "errorRequestFailed": "Permintaan gagal", + "errorCallbackServerFailed": "Gagal memulai server callback", + "errorBrowserUnavailable": "Browser OAuth tidak tersedia untuk penyedia ini di lingkungan saat ini. Gunakan metode otentikasi yang didukung sebagai gantinya.", + "errorStateMismatch": "Ketidakcocokan status OAuth. Mulai ulang koneksi dan coba lagi.", + "errorImportAccessToken": "Gagal mengimpor token akses", + "errorSessionNotInitialized": "Sesi OAuth tidak diinisialisasi. Mulai ulang alur koneksi dan coba lagi.", + "errorNoAuthorizationCode": "Tidak ada kode otorisasi yang ditemukan. Tempelkan URL callback atau Kode Autentikasi.", + "tabDeviceCode": "Kode Perangkat", + "tabBrowserLogin": "Masuk Browser", + "tabImportAuthJson": "Impor auth.json", + "tabPasteApiKey": "Tempel Kunci API", + "windsurfPasteDescription": "Di Windsurf / VS Code IDE, jalankan perintah \"Windsurf: Provide Auth Token\" dari palet perintah (atau klik tombol Jupyter \"Get Windsurf Authentication Token\"), lalu salin token yang ditampilkan dan tempelkan di bawah. Membuka windsurf.com/show-auth-token secara langsung hanya menampilkan halaman \"Redirecting\" — IDE harus memulai alur tersebut.", + "grokAuthJsonDescription": "Tempelkan seluruh isi dari ~/.grok/auth.json (bukan hanya bidang \"key\" JWT). JWT yang kosong tidak memiliki refresh_token, jadi koneksi akan terputus setelah kedaluwarsa (#7610). Lebih baik menggunakan modal Impor auth.json yang khusus ketika tersedia.", + "devinDesktopPasteDescription": "Tempelkan kunci API Devin yang ada dari sesi Devin yang terautentikasi. Ketersediaan ekspor kunci dan langkah-langkahnya bervariasi tergantung versi Devin dan akun.", + "devinPasteDescription": "Berikan WINDSURF_API_KEY Anda (diperoleh melalui `devin auth login`, atau melalui perintah \"Windsurf: Provide Auth Token\" di Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Kunci API / Token", + "saving": "Menyimpan…", + "saveConnection": "Simpan Koneksi", + "gheDescription": "Masukkan URL dasar dari instance GitHub Enterprise Anda (misalnya https://ghe.perusahaananda.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "URL GitHub Enterprise diperlukan", + "gitlabDuoSetupTitle": "Pengaturan OAuth Duo GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth belum dikonfigurasi. Daftarkan aplikasi OAuth di {applicationsUrl} dengan URI pengalihan {redirectUri} dan cakupan \"{scopes}\", lalu atur {clientIdEnv} (dan opsional {clientSecretEnv}) dan mulai ulang.", + "gitlabDuoSetupDescription": "Setelah aplikasi terdaftar dan variabel env diatur pada instance OmniRoute ini, klik Lanjutkan untuk memulai login OAuth.", + "continue": "Lanjutkan" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Muat Lebih Banyak", - "loadingMore": "Memuat lebih banyak..." + "loadingMore": "Memuat lebih banyak...", + "correlationId": "ID Korelasi", + "group": { + "showAllRows": "Tampilkan semua baris", + "showLatestPerCorrelation": "Tampilkan terbaru per ID korelasi", + "grouped": "Dikelompokkan" + }, + "running": "berjalan", + "interval": { + "decrease": "Kurangi interval", + "title": "Interval penyegaran otomatis dalam detik", + "increase": "Tingkatkan interval" + }, + "status": { + "inProgress": "Sedang diproses", + "recoveredByRetry": "Dipulihkan dengan mencoba lagi", + "goToParent": "Pergi ke permintaan induk", + "healedTitle": "Gagal, pulih setelah {count} percobaan", + "healed": "sembuh", + "failedTitle": "Semua {count} percobaan gagal", + "failed": "gagal", + "pinnedTitle": "Model yang dipilih melalui penetapan sesi cache konteks", + "pinned": "tersemat" + }, + "attempts": "upaya", + "detail": { + "collapse": "Runtuhkan {title}", + "expand": "Perluas {title}", + "copyTitle": "Salin {title}", + "copied": "Disalin!", + "copy": "Salin", + "autoscrollOn": "Autoscroll: aktif", + "autoscrollOff": "Autoscroll: mati", + "payload": { + "clientRawRequest": "Permintaan Mentah Klien", + "clientRequest": "Permintaan Klien", + "openaiRequest": "Permintaan OpenAI", + "providerRequest": "Permintaan Penyedia", + "providerResponse": "Respon Penyedia", + "clientResponse": "Tanggapan Klien", + "pipelineError": "Kesalahan Pipeline" + }, + "payloadMissing": "Artifact payload yang terperinci tidak lagi tersedia untuk entri log ini.", + "payloadCorrupt": "Artifact payload yang rinci tidak dapat diparsing.", + "notAvailable": "N/A", + "semanticCache": "Semantik (OmniRoute)", + "upstreamCache": "Hulu (Penyedia)", + "ariaLabel": "Detail log permintaan", + "completed": "Selesai", + "upstreamStatus": "Hulu: {status}", + "statusDiscrepancy": "OmniRoute mengembalikan {status} meskipun penyedia mengembalikan {provider}", + "previousRequest": "Permintaan sebelumnya", + "nextRequest": "Permintaan berikutnya", + "close": "Tutup modal detail", + "startedAt": "Dimulai Pada", + "endedAt": "Berakhir Di", + "duration": "Durasi", + "model": "Model", + "provider": "Penyedia", + "account": "Akun", + "input": "Masukkan", + "totalIn": "Total Masuk: {value}", + "cacheRead": "Cache Baca: {value}", + "cacheWrite": "Cache Tulis: {value}", + "compressed": "Terkompresi: {from} → {to} ({percent}% dihemat)", + "output": "Keluaran", + "totalOut": "Total Keluar: {value}", + "reasoning": "Alasan: {value}", + "requestedModel": "Model yang Diminta", + "requestProtocol": "Protokol Req", + "cacheSource": "Sumber Cache", + "modelPinning": "Penetapan Model", + "activeModelPinning": "Aktif — model dipilih melalui penempelan sesi", + "rotated": "Diputar: {initial} -> {final}", + "apiKey": "Kunci API", + "noApiKey": "Tidak ada kunci API", + "combo": "Kombinasi", + "error": "Kesalahan", + "unblockAll": "Buka blokir semua", + "cleared": "Dihapus", + "unblock": "Buka Blokir", + "relatedRequests": "Permintaan Terkait ({count})", + "current": "saat ini", + "detailStatus": "Detail Status", + "loadingDetails": "Memuat rincian permintaan...", + "providerEventStream": "Aliran Acara Penyedia", + "clientEventStream": "Aliran Acara Klien", + "eventStream": "Aliran Acara", + "responsePayloadLegacy": "Payload Respon (Legacy)", + "requestPayloadLegacy": "Request Payload (Legacy)", + "noPayload": "Tidak ada data payload yang tersedia untuk entri log ini.", + "correlationId": "ID Korelasi", + "correlationIdValue": "ID Korelasi: {id}", + "detailedPayloadInfo": "Aktifkan logging terperinci terlebih dahulu jika Anda ingin tampilan payload klien/penyedia empat tahap untuk permintaan baru." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} dinonaktifkan", "providerAdded": "{provider} ditambahkan", "add": "Tambah", - "manualApiKey": "Gunakan kunci API manual" + "manualApiKey": "Gunakan kunci API manual", + "createDahlTokenFailed": "Gagal membuat token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Konfigurasi proxy", + "providerProxyTitleConfigured": "Proxy dikonfigurasi: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Dibatasi ToS — tinjau ketentuan", "caution": "Peringatan — klausul penggunaan pribadi / proksi", "ok": "Umumnya permisif" - } + }, + "allProviders": "Semua penyedia", + "noApiKeyRequired": "Tidak perlu kunci API" }, "providerHealthAutopilot": { "title": "Autopilot Kesehatan Penyedia", @@ -12390,7 +13047,11 @@ "on": "AKTIF", "off": "NONAKTIF", "availableProviders": "Penyedia yang tersedia ({count})", - "noProviderOverrides": "Tidak ada penimpaan — semua penyedia aktif akan berpartisipasi dengan model default mereka" + "noProviderOverrides": "Tidak ada penimpaan — semua penyedia aktif akan berpartisipasi dengan model default mereka", + "resetFailed": "Reset gagal", + "resetSuccess": "Pengaturan direset ke default", + "running": "Sedang berjalan...", + "testFailed": "Uji coba gagal" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) adalah Sahabat Open Source pendiri OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", "capabilityFilter.toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", "capabilityFilter.structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" + "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia", + "publicSystem": { + "notFound": { + "title": "Halaman tidak ditemukan", + "description": "Halaman yang Anda cari tidak ada atau telah dipindahkan.", + "dashboardAriaLabel": "Kembali ke dasbor", + "statusAriaLabel": "Buka halaman status sistem", + "systemStatus": "Status Sistem" + }, + "error": { + "title": "Kesalahan Server Internal", + "description": "Terjadi kesalahan saat memproses permintaan Anda. Tim kami telah diberitahu dan sedang bekerja untuk memperbaikinya.", + "errorId": "ID Kesalahan: {id}", + "detailsAriaLabel": "Rincian kesalahan", + "retryAriaLabel": "Coba muat ulang halaman tersebut", + "tryAgain": "Coba Lagi", + "dashboardAriaLabel": "Kembali ke dasbor", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "globalError": { + "title": "Sesuatu telah salah", + "description": "Terjadi kesalahan yang tidak terduga. Ini telah dicatat dan tim kami akan menyelidiki.", + "detailsAriaLabel": "Rincian kesalahan", + "retryAriaLabel": "Coba muat ulang halaman tersebut", + "tryAgain": "Coba Lagi", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "offline": { + "title": "Masalah Konektivitas", + "description": "OmniRoute tidak dapat mengakses jaringan saat ini. Periksa pengaturan internet, VPN, atau proksi Anda.", + "connectionRestored": "Koneksi dipulihkan", + "offlineModeDetected": "Mode offline terdeteksi", + "retryConnection": "Coba Kembali Koneksi", + "openStatusPage": "Buka Halaman Status" + }, + "maintenance": { + "title": "Pemeliharaan Terjadwal", + "description": "Beberapa layanan sementara tidak tersedia saat pemeliharaan sedang berlangsung. Routing inti biasanya tetap online, tetapi fitur manajemen mungkin mengalami penurunan.", + "suggestion1": "Coba lagi setelah beberapa menit.", + "suggestion2": "Periksa indikator kesehatan saat ini dan status penyedia sebelum mencoba lagi.", + "systemStatus": "Lihat Status Sistem", + "healthDashboard": "Buka Dasbor Kesehatan" + }, + "status": { + "title": "Status Sistem", + "description": "Snapshot operasional langsung untuk layanan inti OmniRoute.", + "loadingHealth": "Memuat metrik kesehatan...", + "failedToLoad": "Gagal memuat kesehatan sistem.", + "unableToReachHealth": "Tidak dapat mengakses endpoint kesehatan. Periksa konektivitas dan coba lagi.", + "healthCheckFailed": "Pemeriksaan Kesehatan Gagal", + "openConnectivityHelp": "Buka Bantuan Konektivitas", + "maintenanceInfo": "Info Pemeliharaan", + "service": "Layanan", + "unknown": "tidak dikenal", + "notAvailable": "n/a", + "providersTracked": "Penyedia Yang Dilacak", + "circuitBreakerState": "Status Pemutus Sirkuit Penyedia", + "lastUpdate": "Pembaruan terakhir: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}j {minutes}m" + }, + "statusPages": { + "400": { + "title": "Permintaan Buruk", + "description": "Payload permintaan tidak valid atau tidak lengkap.", + "suggestion1": "Periksa kolom yang diperlukan dan format payload sebelum mencoba lagi.", + "suggestion2": "Jika Anda menggunakan API, validasi skema JSON secara lokal.", + "suggestion3": "Jika ini terus terjadi, buka permintaan di Translator Playground untuk memeriksa payload.", + "primaryAction": "Buka Dokumentasi", + "secondaryAction": "Buka Penerjemah" + }, + "401": { + "title": "Tidak Berwenang", + "description": "Autentikasi diperlukan untuk mengakses sumber daya ini.", + "suggestion1": "Masuk kembali dan coba lagi operasi tersebut.", + "suggestion2": "Untuk panggilan API, pastikan token Bearer ada dan valid.", + "suggestion3": "Jika token baru saja diputar, perbarui kredensial klien Anda.", + "primaryAction": "Pergi ke Login", + "secondaryAction": "Kelola Kunci API" + }, + "403": { + "title": "Dilarang", + "description": "Permintaan Anda dipahami, tetapi akses ditolak oleh kebijakan.", + "suggestion1": "Periksa aturan allowlist/blocklist IP di pengaturan.", + "suggestion2": "Verifikasi model dan kebijakan anggaran yang ditetapkan untuk kunci API Anda.", + "suggestion3": "Minta kepada administrator untuk memberikan ruang izin yang diperlukan.", + "primaryAction": "Bantuan Akses Terbuka", + "secondaryAction": "Buka Pengaturan Keamanan" + }, + "408": { + "title": "Waktu Permintaan Habis", + "description": "Server tidak menerima permintaan lengkap tepat waktu.", + "suggestion1": "Coba ulang permintaan dengan payload yang lebih kecil.", + "suggestion2": "Periksa stabilitas jaringan Anda dan latensi VPN/proxy.", + "suggestion3": "Untuk operasi yang lama, aktifkan streaming atau bagi permintaan.", + "primaryAction": "Buka Panduan Endpoint", + "secondaryAction": "Periksa Status Jaringan" + }, + "429": { + "title": "Terlalu Banyak Permintaan", + "description": "Batas penilaian telah terlampaui untuk klien, kunci, atau penyedia ini.", + "suggestion1": "Tunggu untuk cooldown dan coba lagi setelah interval yang disarankan.", + "suggestion2": "Beralih ke kombinasi dengan penyedia cadangan.", + "suggestion3": "Atur profil ketahanan penyedia/batas laju di pengaturan.", + "primaryAction": "Buka Pengaturan Ketahanan", + "secondaryAction": "Buka Kombinasi" + }, + "500": { + "title": "Kesalahan Server Internal", + "description": "Terjadi kesalahan tidak terduga di sisi server saat memproses permintaan Anda.", + "suggestion1": "Coba lagi dalam beberapa detik.", + "suggestion2": "Periksa telemetri kesehatan dan log server untuk ID permintaan yang berkorelasi.", + "suggestion3": "Jika terus-menerus, laporkan masalah dengan cap waktu dan konteks permintaan.", + "primaryAction": "Buka Dasbor Kesehatan", + "secondaryAction": "Buka Log" + }, + "502": { + "title": "Gerbang Buruk", + "description": "Penyedia hulu atau integrasi gateway mengembalikan respons yang tidak valid.", + "suggestion1": "Coba lagi dengan penyedia lain atau rute kombinasi aktif.", + "suggestion2": "Periksa kredensial penyedia dan ketersediaan model.", + "suggestion3": "Periksa keluaran penerjemah jika konversi format terlibat.", + "primaryAction": "Buka Penyedia", + "secondaryAction": "Buka Penerjemah" + }, + "503": { + "title": "Layanan Tidak Tersedia", + "description": "Layanan tidak tersedia sementara karena pemeliharaan atau ketergantungan yang menurun.", + "suggestion1": "Tunggu sebentar dan coba lagi.", + "suggestion2": "Periksa pemberitahuan pemeliharaan dan status sistem.", + "suggestion3": "Gunakan penyedia cadangan jika alur kerja Anda sensitif terhadap latensi.", + "primaryAction": "Detail Pemeliharaan", + "secondaryAction": "Status Sistem" + } + } + }, + "kiroAuthModal": { + "title": "Sambungkan {providerLabel}", + "chooseMethod": "Pilih metode otentikasi Anda:", + "builderId": "AWS Builder ID", + "builderDescription": "Direkomendasikan untuk sebagian besar pengguna. Masuk dengan akun AWS yang terhubung ke {providerLabel}.", + "organization": "Organisasi Anda (AWS IAM Identity Center)", + "organizationDescription": "Gunakan URL awal SSO perusahaan Anda (contoh: {url}).", + "googleAccount": "Akun Google", + "googleDescription": "Masuk dengan akun Google Anda.", + "githubAccount": "Akun GitHub", + "githubDescription": "Masuk dengan akun GitHub Anda.", + "importToken": "Impor Token", + "importDescription": "Tempelkan token penyegaran yang diekspor dari {providerLabel}.", + "apiKey": "Kunci API", + "apiKeyDescription": "Tempelkan kunci API {providerLabel} / CodeWhisperer yang memiliki masa hidup panjang. Ini disimpan sebagai kredensial bearer tanpa token penyegaran; penemuan profil dilakukan dengan upaya terbaik.", + "idcStartUrl": "URL Mulai IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL Pusat Identitas AWS IAM Organisasi Anda", + "awsRegion": "Wilayah AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Wilayah AWS untuk Pusat Identitas Anda (default: us-east-1)", + "continue": "Lanjutkan", + "back": "Kembali", + "autoDetecting": "Mendeteksi token secara otomatis...", + "readingCredentials": "Membaca kredensial {providerLabel} dari cache AWS SSO", + "tokenNotDetected": "Token {providerLabel} tidak terdeteksi secara otomatis. Silakan tempelkan token penyegaran Anda secara manual.", + "refreshToken": "Token Segar", + "tokenPlaceholder": "Token akan diisi secara otomatis...", + "importing": "Mengimpor...", + "apiKeyPlaceholder": "Tempelkan kunci API {providerLabel} Anda...", + "apiKeyStoredDescription": "Disimpan terenkripsi sebagai kredensial pembawa yang bertahan lama. Tidak ada alur penyegaran.", + "apiKeyRegionDescription": "Wilayah AWS untuk kunci (default: us-east-1)", + "validating": "Memvalidasi...", + "validateAndSaveApiKey": "Validasi dan Simpan Kunci API", + "errorAutoDetect": "Tidak dapat mendeteksi token secara otomatis", + "errorAutoDetectFailed": "Gagal mendeteksi token secara otomatis", + "errorRefreshTokenRequired": "Silakan masukkan token penyegaran", + "errorImportFailed": "Impor gagal", + "errorApiKeyRequired": "Silakan masukkan kunci API Kiro", + "errorApiKeyImportFailed": "Impor kunci API gagal", + "errorIdcStartUrlRequired": "Silakan masukkan URL awal IDC Anda" + }, + "kiroSocialOAuthModal": { + "title": "Sambungkan {providerLabel} melalui {providerName}", + "errorStartAuthorization": "Gagal memulai otorisasi", + "errorAuthorizationExpired": "Otorisasi telah kedaluwarsa. Mulai alur login lagi.", + "errorAuthorizationFailed": "Otorisasi gagal", + "initializing": "Menginisialisasi...", + "settingUp": "Mengatur otentikasi {providerName}", + "openIncognito": "Buka tautan ini di jendela Incognito", + "incognitoDescription": "Gunakan jendela Incognito/Pribadi untuk menghindari konflik sesi dengan akun yang ada.", + "copyLink": "Salin tautan", + "verificationCode": "Kode verifikasi", + "waiting": "Menunggu otorisasi...", + "cancel": "Batalkan", + "successTitle": "Terhubung Dengan Sukses!", + "successMessage": "Akun {providerLabel} Anda melalui {providerName} telah terhubung.", + "done": "Selesai", + "errorTitle": "Koneksi Gagal", + "close": "Tutup" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Otorisasi gagal", + "errorPopupBlocked": "Popup diblokir — izinkan popup untuk situs ini, atau tempel token secara manual di bawah.", + "errorPopupClosed": "Jendela otorisasi ditutup sebelum selesai.", + "errorAccessTokenRequired": "Token akses diperlukan.", + "errorImportFailed": "Impor gagal", + "title": "Connect Trae SOLO", + "authorizeDescription": "Otorisasi melalui trae.ai dalam jendela pop-up. Jendela pop-up akan menutup dirinya sendiri setelah token diimpor.", + "authorizeImportant": "Penting: Anda harus masuk ke trae.ai di browser ini terlebih dahulu. Halaman otorisasi hanya mengonfirmasi sesi yang ada — tidak dapat masuk untuk Anda. Jika Anda melihat \"Login Gagal\", klik \"Buka solo.trae.ai\", masuk, lalu kembali ke sini.", + "waitingForAuthorization": "Menunggu trae.ai…", + "authorizeWithBrowser": "Otorisasi dengan Browser", + "openSoloTrae": "Buka solo.trae.ai", + "orPasteManually": "atau tempel token secara manual", + "manualInstructions": "Masuk ke solo.trae.ai, buka DevTools → Jaringan, kirim pesan obrolan apa pun, dan salin JWT dari header permintaan Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Masa berlaku JWT adalah ~14 hari. Bidang identitas opsional berasal dari common_params dalam body permintaan yang sama.", + "accessTokenLabel": "Token Akses (Cloud-IDE-JWT)", + "webId": "ID Web", + "optional": "opsional", + "bizUserId": "ID Pengguna Biz", + "userUniqueId": "ID Unik Pengguna", + "scope": "Lingkup", + "tenant": "Penyewa", + "region": "Wilayah", + "importing": "Mengimpor…", + "importToken": "Impor Token", + "cancel": "Batalkan" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Mendistribusikan...", + "complete": "Lengkap", + "defaultLabel": "Sebarkan Proksi" + } + }, + "providerTest": { + "dialogLabel": "Uji {provider}", + "deprecated": "tidak lagi digunakan", + "risk": "risiko", + "close": "Tutup", + "model": "Model", + "key": "Kunci", + "defaultKey": "default", + "clearConversation": "Hapus percakapan", + "clear": "Bersihkan", + "tabs": { + "test": "Tes", + "logs": "Log" + }, + "loadingLogs": "Memuat log…", + "failedToLoadLogs": "Gagal memuat log", + "noLogsYet": "Belum ada log", + "noLogsDescription": "Kirim pesan uji dari tab Uji — log untuk penyedia ini akan muncul di sini.", + "openFullLogs": "Buka halaman log lengkap", + "live": "Langsung", + "tailingLast": "menampilkan {count} terakhir", + "refreshNow": "Segarkan sekarang", + "refresh": "Segarkan", + "unknownRequester": "pemberi permintaan tidak dikenal", + "fields": { + "timestamp": "Stempel Waktu", + "status": "Status", + "duration": "Durasi", + "model": "Model", + "requestedModel": "Model yang diminta", + "provider": "Penyedia", + "requester": "Pemohon", + "tokens": "Token" + } + }, + "proxyLog": { + "detailAriaLabel": "Detail log proxy", + "event": "Acara Proxy", + "close": "Tutup modal detail proxy", + "time": "Waktu", + "latency": "Latensi", + "clientIp": "IP Klien", + "proxy": "Proxy", + "direct": "Langsung", + "type": "Tipe", + "level": "Tingkat", + "provider": "Penyedia", + "tlsFingerprint": "Jejak TLS", + "directNative": "Langsung", + "targetUrl": "URL Target", + "error": "Kesalahan", + "configuration": "Konfigurasi Proxy" + }, + "requestTimeline": { + "title": "Garis Waktu Permintaan", + "modes": { + "follow": "Ikuti", + "followDescription": "Sumbu menggulir ke kiri, garis SEKARANG tetap di 75%", + "now": "Sekarang", + "nowDescription": "Lompat ke waktu saat ini, garis NOW direset ke tengah", + "pan": "Panci", + "panDescription": "Seret untuk menjelajahi, latar belakang beku" + }, + "reset": "Atur Ulang", + "started": "Dimulai", + "ended": "Selesai", + "duration": "Durasi", + "status": "Status", + "provider": "Penyedia", + "tokens": "Token", + "active": "Aktif", + "other": "Lainnya", + "tenMinutes": "10menit", + "hour": "jam", + "day": "hari", + "unknownModel": "tidak diketahui", + "pending": "tertunda" + }, + "metadata": { + "compressionTitle": "Kompresi", + "compressionDescription": "Konfigurasikan pengaturan kompresi konteks untuk mengurangi penggunaan token dan biaya.", + "relayTitle": "OmniRoute — Proksi Relay", + "relayDescription": "Endpoint proksi relay tanpa server untuk infrastruktur AI Anda", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Pantau panggilan LLM + debug lalu lintas HTTPS aplikasi mana pun" + }, + "conductor": { + "title": "Conductor — Armada CLI-agent", + "subtitle": "OmniConductor hub: pelari, antrean tugas dan dewan, langsung", + "runners": "Pelari", + "tasks": "Tugas", + "colName": "Nama", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Tugas", + "colMode": "Mode", + "colRunner": "Pelari", + "colSummary": "Ringkasan", + "online": "daring", + "offline": "tidak terhubung", + "draining": "menguras", + "hubOffline": "Conductor hub offline atau tidak terkonfigurasi (CONDUCTOR_HUB_URL) — tidak menunjukkan apa-apa selain data yang usang.", + "noRunners": "Tidak ada pelari yang terdaftar", + "noTasks": "Belum ada tugas", + "detailTitle": "Detail Tugas", + "prompt": "Permintaan", + "branch": "Cabang", + "fetchHint": "Ambil hasil dengan: git fetch origin {branch}", + "council": "Dewan", + "candidates": "Kandidat", + "cancel": "Batalkan tugas", + "cancelConfirmTitle": "Batalkan tugas ini?", + "cancelConfirmMessage": "Hub akan membatalkan eksekusi pada runner. Ini tidak dapat dibatalkan.", + "cancelFailed": "Hub menolak pembatalan", + "close": "Tutup", + "error": "Kesalahan", + "faroTitle": "Faro — juru bicara armada", + "faroSubtitle": "Obrolan dan suara, berakar pada peristiwa armada nyata. Perintah yang merusak selalu meminta konfirmasi.", + "faroEmpty": "Tanya tentang armada — misalnya \"bagaimana keadaan armada?\"", + "faroPending": "Faro meminta konfirmasi", + "faroPlaceholder": "bicara dengan Faro…", + "faroSend": "kirim", + "faroOffline": "Faro (juru bicara) sedang offline", + "yes": "Ya", + "no": "Tidak", + "pushToTalk": "Tahan untuk berbicara", + "speakAnswers": "berbicara jawaban", + "voiceModels": "Model Suara (penyedia/model dari OmniRoute ini)", + "voiceIdle": "bicara", + "voiceListening": "mendengarkan…", + "voiceThinking": "berpikir…", + "voiceSpeaking": "berbicara…", + "sttFailed": "Transkripsi gagal (periksa model/penyedia STT)", + "ttsFailed": "Sintesis suara gagal (periksa model/penyedia TTS)", + "micDenied": "Mikrofon tidak tersedia atau izin ditolak" + }, + "cliproxyProviderExposure": { + "title": "Paparan Penyedia", + "description": "Ekspos model CLIProxyAPI sebagai target routing di bawah prefix cliproxyapi/ prefix.", + "label": "Expose sebagai cliproxyapi/...", + "hint": "Saat diaktifkan, model yang ditemukan muncul di pemilih penyedia di seluruh OmniRoute.", + "updateFailed": "Gagal memperbarui (HTTP {status})", + "networkError": "Kesalahan jaringan — tidak dapat memperbarui pengaturan eksposur penyedia" + } } - diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index fdefeb0c9a..d4030166c9 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -172,6 +172,18 @@ "unselectAll": "Deseleziona tutto", "visibleModels": "visibili", "selectAllConfirm": "Aggiungere {count} modelli a questa combinazione?", + "testSelectedProviders": "Fornitori di test", + "testingSelectedProviders": "Test in corso {done}/{total}...", + "noProvidersSelectedToTest": "Controlla almeno un fornitore qui sotto per primo", + "noModelsToTestForProviders": "Nessun modello da testare per i fornitori selezionati", + "testSelectedProvidersResults": "{ok} di {total} modelli funzionanti", + "selectWorkingModels": "Aggiungi funzionante", + "unselectWorkingModels": "Deseleziona in corso", + "noWorkingModelsToSelect": "Nessun modello funzionante rimasto da aggiungere", + "providerTestHint": "Suggerimento: controlla un fornitore → Test → Aggiungi funzionante. Clicca di nuovo per deselezionare.", + "selectAllProviders": "Controlla tutti i fornitori", + "clearProviderSelection": "Deseleziona fornitori", + "providersSelectedCount": "{count} fornitori controllati", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Dimensione", + "toggleNoAuthProvider": "Attiva/disattiva il provider senza autenticazione", + "loadingModels": "Caricamento modelli…", + "selectAModel": "Seleziona un modello", + "degraded": "Degradato", + "zeroConfigBannerTitle": "Esecuzione in modalità zero-config", + "zeroConfigBannerBody": "OmniRoute ha generato automaticamente chiavi di crittografia sicure al primo avvio. Sono memorizzate in {dataDir}. Non è necessaria alcuna azione: i tuoi dati sono crittografati e al sicuro. Per utilizzare chiavi personalizzate, aggiungi JWT_SECRET e STORAGE_ENCRYPTION_KEY a quel file.", + "batchRelativeTimeIn": "in {value}", + "batchRelativeTimeAgo": "{value} fa", + "batchDetailsTitle": "Dettagli del Batch", + "batchProgress": "Progresso", + "batchCompletedCount": "{count} completati", + "batchFailedCount": "{count} non riuscito", + "batchPendingCount": "{count} in attesa", + "batchTimeline": "Cronologia", + "batchTimelineInProgress": "In Corso", + "batchTimelineFinalizing": "Finalizzazione", + "batchTimelineCompleted": "Completato", + "batchTimelineFailed": "Fallito", + "batchTimelineExpires": "Scade", + "batchTimelineExpired": "Scaduto", + "batchTimelineCancelling": "Annullamento", + "batchTimelineCancelled": "Annullato", + "batchTokenUsage": "Utilizzo del Token", + "batchMetadata": "Metadati", + "batchFileContents": "Contenuti del File", + "batchFileUsedByCount": "Utilizzato da {count, plural, one {# batch} other {# batch}}", + "batchFilePreview": "Anteprima", + "batchFilePreviewTruncated": "Mostrando le prime {shown} righe ({total} righe totali)", + "batchFileDownloadFull": "Scarica File Completo" }, "disabled": "Disabilitato", "featureFlagOmnirouteEmergencyFallbackDescription": "Indirizza le richieste con budget esaurito al provider/modello di fallback gratuito di emergenza.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separatore", "discovery": "Discovery", "discoverySubtitle": "Scansiona provider per accesso gratuito", + "conductor": "Conduttore", + "conductorSubtitle": "Flotta CLI-agent", "resilienceConnections": "Resilienza della Connessione", "resilienceConnectionsSubtitle": "Cooldown, interruttore, stato di blocco", "settingsModalityBridge": "Ponte di Modalità", - "settingsModalityBridgeSubtitle": "Fallback immagine/audio → testo per modelli solo testo" + "settingsModalityBridgeSubtitle": "Fallback immagine/audio → testo per modelli solo testo", + "commandPalette": { + "title": "Palette dei comandi", + "searchPlaceholder": "Cerca pagine, impostazioni, strumenti...", + "clearSearch": "Cancella ricerca", + "noResults": "Nessun risultato", + "navigate": "navigare", + "open": "apri", + "close": "chiudi" + }, + "noResults": "Nessun risultato" }, "webhooks": { "title": "Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Aggiornamento impostazioni non riuscito", "sync.token.created": "Token di sincronizzazione creato", "sync.token.revoked": "Token di sincronizzazione revocato" - } + }, + "mcpMetricCalls24h": "Chiamate (24h)", + "mcpMetricSuccessRate": "Tasso di successo", + "mcpMetricAvgDuration": "Durata media", + "mcpMetricTopTool": "Strumento principale" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Una nuova versione è disponibile. Fai clic per aggiornare.", "updateStarted": "Aggiornamento avviato...", "reloadingPageAutomatically": "Ricaricamento pagina automaticamente...", - "providerTopology": "Topologia del fornitore" + "providerTopology": "Topologia del fornitore", + "downloadDmg": "Scarica DMG (macOS)", + "downloadDmgDescription": "È disponibile una nuova versione dell'app desktop OmniRoute. Si prega di scaricare e installare il programma di installazione DMG per macOS per aggiornare (attuale: v{version}).", + "downloadExe": "Scarica EXE (Windows)", + "downloadExeDescription": "È disponibile una nuova versione dell'app desktop OmniRoute. Si prega di scaricare e installare il programma di installazione EXE per Windows per aggiornare (attuale: v{version}).", + "downloadAppImage": "Scarica AppImage (Linux)", + "downloadAppImageDescription": "È disponibile una nuova versione dell'app desktop OmniRoute. Si prega di scaricare il pacchetto AppImage per Linux per aggiornare (attuale: v{version}).", + "downloadUpdate": "Scarica Aggiornamento", + "downloadUpdateDescription": "È disponibile una nuova versione dell'app desktop OmniRoute. Si prega di scaricare il formato dell'app corrispondente al proprio sistema per aggiornare (attuale: v{version}).", + "updateQueued": "Aggiornamento in coda a v{version}.", + "updateDockerRebuilding": "L'immagine Docker si sta ricostruendo in background.", + "updateWaitingRestart": "In attesa che OmniRoute si riavvii con la nuova versione.", + "updateInstalling": "Installazione di v{version}.", + "updateRunning": "OmniRoute è ora in esecuzione sulla v{version}.", + "updateCompleted": "OmniRoute aggiornato alla v{version}.", + "updateDockerStillRebuilding": "L'immagine Docker è ancora in fase di ricostruzione per v{version}.", + "updateInstallingBackground": "Installazione di v{version} in background.", + "updateWaitingVersion": "In attesa che OmniRoute torni su v{version}.", + "updateDockerStillInProgress": "Il ripristino di Docker è ancora in corso.", + "updateRestarting": "Riavvio del servizio in corso. Attesa che OmniRoute torni online...", + "updateTimeout": "Aggiornamento avviato, ma v{version} non è diventato disponibile prima del timeout. Ricarica la pagina o controlla i log del server.", + "updateTimedOut": "L'aggiornamento alla v{version} è scaduto.", + "updateStartFailed": "Impossibile avviare l'aggiornamento.", + "noResponseStream": "Nessun flusso di risposta ricevuto.", + "updateComplete": "Aggiornamento completato!", + "updateFailed": "Aggiornamento non riuscito.", + "updateNetworkError": "Errore di rete — connessione persa durante l'aggiornamento.", + "stepInstallPackage": "Installa Pacchetto", + "stepRebuildNativeModules": "Ricostruisci i Moduli Nativi", + "stepRestartService": "Riavvia Servizio", + "stepComplete": "Completo", + "stepError": "Errore", + "updateCompleteTitle": "Aggiornamento completato!", + "updateFailedTitle": "Aggiornamento non riuscito", + "updatingTitle": "Aggiornamento di OmniRoute...", + "reloadNotice": "La pagina si ricaricherà automaticamente tra pochi secondi.", + "retryNotice": "Per favore riprova o aggiorna manualmente tramite la CLI.", + "restartNotice": "Non chiudere questa pagina. Il sistema si riavvierà automaticamente.", + "reloadNow": "Ricarica Ora", + "closeUpdate": "Chiudi", + "retryUpdate": "Riprova", + "updateAvailableTitle": "Aggiornamento disponibile: v{version}{desktop}", + "desktopAppLabel": "(App Desktop)", + "checkingForUpdates": "Controllo degli aggiornamenti...", + "versionAvailableForDownload": "La versione v{version} è disponibile per il download.", + "downloadingUpdate": "Download aggiornamento... {percent}% completato.", + "updateDownloaded": "Aggiornamento scaricato con successo! Clicca su Riavvia e Installa per applicare.", + "autoUpdateFailed": "Aggiornamento automatico non riuscito: {reason}.", + "unknownUpdateError": "Errore sconosciuto", + "versionAvailableDesktop": "La versione v{version} è disponibile per l'app desktop.", + "manualUpdateRequired": "Aggiornamento manuale richiesto per questo tipo di installazione.", + "restartAndInstall": "Riavvia e Installa", + "checkForUpdate": "Controlla Aggiornamenti", + "manualUpdate": "Aggiornamento Manuale", + "directDownloadHint": "Oppure scarica direttamente il formato dell'installer rispettivo:", + "releaseNotes": "Note di Rilascio", + "readMore": "Leggi di più", + "noAuthLabel": "Nessuna Autenticazione" }, "analytics": { "title": "Analitica", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Dedotto dai log delle chiamate memorizzati in prossimità di questa richiesta", "routeRecommendations": "Raccomandazioni", "routeLimitations": "Limitazioni", - "routeNoKnownLimitations": "Nessuna limitazione nota per questa spiegazione." + "routeNoKnownLimitations": "Nessuna limitazione nota per questa spiegazione.", + "searchAnalyticsLoading": "Caricamento delle analisi di ricerca…", + "searchAnalyticsNoData": "Nessun dato di ricerca disponibile ancora.", + "searchAnalyticsNoDataDescription": "Le richieste di ricerca appariranno qui dopo la prima ricerca tramite /v1/search.", + "searchAnalyticsToday": "{count} oggi", + "searchAnalyticsCachedRequests": "{count} richieste memorizzate nella cache", + "searchAnalyticsApiCosts": "costi dell'API di ricerca", + "searchAnalyticsErrors": "{count} errori", + "searchAnalyticsNoErrors": "Nessun errore", + "searchAnalyticsProviderBreakdown": "Ripartizione dei Fornitori", + "searchAnalyticsQueries": "query", + "searchAnalyticsEmptyDescription": "Usa POST /v1/search per iniziare a instradare le ricerche web.", + "searchAnalyticsFreeTier": "Livello gratuito disponibile: Serper (2.500/mese), Brave (2.000/mese), Exa (1.000/mese), Tavily (1.000/mese) — totale 6.500+ ricerche gratuite/mese con failover automatico.", + "autoRoutingNoDataAvailable": "Nessuna analisi di auto-routing disponibile. Effettua richieste utilizzando il prefisso auto/ per vedere le metriche.", + "defaultVariantLabel": "Predefinito", + "freeTierAvailable": "Piano gratuito disponibile" }, "apiManager": { "title": "Chiavi API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} provider", "imageToTextBridgeAvailable": "Il Modality Bridge può ora descrivere immagini per modelli solo testo. Il playground inline sarà disponibile quando /api/v1/images/understanding sarà implementato.", "imageToTextBridgeCta": "Configura il ponte Immagine→Testo nelle impostazioni del Modality Bridge", - "sttBridgeCta": "Configura il ponte Speech→Text nelle impostazioni del Modality Bridge" + "sttBridgeCta": "Configura il ponte Speech→Text nelle impostazioni del Modality Bridge", + "existingConnection": "Connessione esistente", + "openrouterSttDescription": "I modelli di riconoscimento vocale di OpenRouter utilizzano la tua connessione OpenRouter configurata. Non è necessaria alcuna credenziale separata." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Incolla in:", "copilotReloadInstruction": "Quindi ricarica VS Code e imposta la chiave API nel prompt di input.", "wireApiChatCompletions": "Completamenti chat (/chat/completamenti)", - "wireApiResponses": "API delle risposte (/responses)" + "wireApiResponses": "API delle risposte (/responses)", + "cliproxyapiActionFailed": "Azione non riuscita", + "cliproxyapiActionSucceeded": "Azione riuscita", + "cliproxyapiCheckUpdates": "Controlla Aggiornamenti", + "cliproxyapiDescription": "Fallback del proxy upstream (OAuth basato su Go)", + "cliproxyapiHealth": "Salute", + "cliproxyapiHealthy": "Sano", + "cliproxyapiInstall": "Installa", + "cliproxyapiNotInstalledValue": "Non installato", + "cliproxyapiPort": "Porta", + "cliproxyapiRequestFailed": "Richiesta non riuscita", + "cliproxyapiRestart": "Riavvia", + "cliproxyapiStart": "Inizia", + "cliproxyapiStatusError": "Errore", + "cliproxyapiStatusInstalled": "Installato", + "cliproxyapiStatusNotInstalled": "Non Installato", + "cliproxyapiStatusRunning": "In esecuzione", + "cliproxyapiStatusStopped": "Fermato", + "cliproxyapiStop": "Fermati", + "cliproxyapiUnhealthy": "Non salutare", + "cliproxyapiUnknown": "Sconosciuto", + "cliproxyapiUpdate": "Aggiorna", + "cliproxyapiUpdateAvailable": "Aggiornamento disponibile: v{current} → v{latest}", + "cliproxyapiVersion": "Versione" }, "combos": { "title": "Combinazioni", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Avanza solo in caso di esaurimento della quota", + "fallbackOnlyOnQuotaExhaustionShort": "fallback solo quota", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Il pacchetto modalità e la ponderazione rimangono qui; lo stato di runtime del breaker rimane nella pagina Stato di salute.", "emailVisibilityHint": "Le email dell'account qui seguono l'opzione di privacy globale.", "emailVisibilityTooltip": "Usa l'icona dell'occhio per mostrare o nascondere le email dell'account a livello globale tra combo, provider e schermate delle quote.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Passo dopo passo (Fornitore → Modello)", + "builderModeGlobal": "Ricerca modello globale (Combinazione personalizzata)", + "builderGlobalSearchPlaceholder": "Cerca modelli tra tutti i fornitori (ad es. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Aggiungi tutto", + "builderGlobalShortcuts": "Scorciatoie:", + "builderGlobalNoResults": "Nessun modello trovato per \"{query}\".", + "builderGlobalProviderLabel": "Fornitore:", + "builderGlobalAccountCount": "{count, plural, one {# account} other {# accounts}}", + "builderGlobalAdded": "Aggiunto", + "builderGlobalAdd": "Aggiungi", "manualModel": "Modello manuale", "manualModelInvalid": "Inserisci un modello come provider/modello.", "manualModelUnknownProvider": "Prefisso del provider sconosciuto.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilità della sessione", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness disattivata", "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 come modello principale (Moonshot API), con fallback automatico alle tue connessioni Kimi Code (kimi-coding, kimi-web) se configurate.", - "kimiPresetCta": "Aggiungi preset" + "kimiPresetCta": "Aggiungi preset", + "intelligentComboCount": "{count, plural, one {# combinazione intelligente} other {# combinazioni intelligenti}}", + "providersInScope": "{count, plural, one {# fornitore in ambito} other {# fornitori in ambito}}", + "savingModePack": "Salvataggio di {pack}…", + "errorTitle": "Impossibile caricare i combo", + "errorDescription": "Non siamo riusciti a caricare i dati del combo in questo momento. Controlla la tua connessione e riprova.", + "errorId": "ID Errore: {id}", + "errorRetry": "Riprova", + "comboLabel": "Combo" }, "costs": { "title": "Costi", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nome utente", "obsidianPassword": "Password", - "obsidianTailscaleHint": "Usa il tuo IP Tailscale invece di localhost se ti connetti da mobile. Entrambi i dispositivi devono essere sulla stessa rete Tailscale." + "obsidianTailscaleHint": "Usa il tuo IP Tailscale invece di localhost se ti connetti da mobile. Entrambi i dispositivi devono essere sulla stessa rete Tailscale.", + "cloudSyncNotConfigured": "La sincronizzazione cloud non è configurata su questa istanza.", + "notionConnect": "Connetti", + "notionConnectFailed": "Impossibile connettersi", + "notionConnected": "Connesso", + "notionConnectionFailed": "Connessione fallita", + "notionDescription": "Cerca, leggi, interroga e scrivi su Notion tramite modelli AI instradati", + "notionDisconnect": "Disconnetti", + "notionDisconnectFailed": "Disconnessione non riuscita", + "notionEnterToken": "Inserisci un token di integrazione Notion", + "notionIntegrationHelp": "Crea un'integrazione interna a", + "notionIntegrationToken": "Token di integrazione interna di Notion", + "notionNotConnected": "Non connesso", + "notionTokenConfigured": "Token configurato. Gli strumenti di Notion sono disponibili tramite MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Modello", "noRemoteProviders": "Nessun provider con chiave API configurata", "selectProviderModel": "Seleziona un modello", + "customBaseUrlLabel": "URL base personalizzato (opzionale)", + "customModelIdLabel": "ID modello personalizzato (opzionale)", + "customEndpointHelp": "Utilizza un endpoint /embeddings compatibile con OpenAI. Gli endpoint locali sono consentiti; i target di metadati cloud sono bloccati.", + "customEndpointSave": "Applica endpoint personalizzato", + "customEndpointInvalid": "Inserisci sia un URL base HTTP(S) valido che un ID modello, oppure lascia entrambi i campi vuoti.", + "customEndpointSaveFailed": "L'endpoint di embedding personalizzato non è stato salvato.", "staticEnabledLabel": "Abilita Static Potion", "staticEnabledDesc": "Scarica e usa il modello potion-base-8M localmente", "transformersEnabledLabel": "Abilita Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Pulizia in corso...", "cleanNow": "Pulisci ora", "cleanupSuccess": "{count} punto/i rimosso/i", - "cleanupFailed": "Pulizia non riuscita" + "cleanupFailed": "Pulizia non riuscita", + "hostLabel": "Host", + "collectionLabel": "Collezione" }, "rerank": { "enableLabel": "Abilita Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagramma di fallback a 3 livelli di OmniRoute", "apiKeyMgmt": "Gestione chiave API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Imposta fornitori gratuiti", + "description": "Abilita facoltativamente i provider selezionati senza registrazione. Controlla l'avviso e il sito di ciascun provider prima di continuare; disponibilità e limiti di utilizzo sono controllati da terze parti.", + "loading": "Caricamento dei fornitori gratuiti...", + "loadFailed": "Impossibile caricare i fornitori gratuiti.", + "alreadyConfigured": "Tutti i fornitori gratuiti idonei sono già configurati.", + "reviewProviderSite": "Esamina il sito del fornitore e i termini", + "confirmation": "Ho esaminato questi fornitori di terze parti e voglio che OmniRoute crei le connessioni selezionate.", + "setupSelected": "Configura i fornitori selezionati", + "settingUp": "Impostazione in corso...", + "setupFailed": "Impossibile configurare i fornitori selezionati. Nulla di esistente è stato modificato.", + "retryFailed": "Riprova i fornitori non riusciti", + "orUseApiKey": "o connettiti con una chiave API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "creato", + "skipped": "già configurato", + "failed": "fallito" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Necessario. URL di base dell'API del provider.", "iconUrlLabel": "URL Icona", "iconUrlHint": "Opzionale. URL dell'immagine mostrata come icona di questo provider.", + "iconUrlInvalid": "URL dell'icona non valida. Usa un URL http(s):// o data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatibile (prodotto)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessione già attuale", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Applica autenticazione", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Incolla la chiave API…", "zedSaving": "Salvataggio in corso…", "zedImportAction": "Importa", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Abilita il rinnovo automatico della sessione del cursore", + "cursorAgentNudgeBody": "Installa cursor-agent per il rinnovo automatico della sessione — senza di esso, le connessioni Cursor necessitano di riconnessione manuale periodica circa ogni 24 ore.", + "cursorAgentNudgeDismiss": "Ignora", "zedManualImportFailed": "Importazione manuale non riuscita", "zedManualImportSuccess": "Token {provider} importato da Zed", "grokImportTitle": "Importa autenticazione Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Piano gratuito per inferenza serverless — nessuna carta di credito richiesta", "gemini": "Gratis per sempre: 1.500 richieste/giorno per Gemini 2.5 Flash — nessuna carta di credito, ottieni la chiave su aistudio.google.com", "gigachat": "Connetti GigaChat (Sber) con una chiave API.", - "github-models": "Crea un PAT di GitHub con ambito 'models: read' su github.com/settings/tokens", "gitlab": "Token di accesso personale GitLab per l'API pubblica Code Suggestions. Configura un URL di base self-hosted quando non utilizzi gitlab.com.", "gitlawb-gmi": "Ottieni la tua chiave API dalla dashboard di Gitlawb Opengateway.", "gitlawb": "Ottieni la tua chiave API dalla dashboard di Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Connetti Kimi Coding con il flusso OAuth esistente.", "kiro": "Piano gratuito: 50 crediti/mese (~25K–100K token). ⚠️ I ToS di Kiro vietano l'uso di proxy/harness di terze parti.", "codex": "Connetti OpenAI Codex al flusso OAuth esistente.", - "qwen": "Connetti Qwen Code al flusso OAuth esistente." + "qwen": "Connetti Qwen Code al flusso OAuth esistente.", + "github-models": "Crea un PAT di GitHub con ambito 'models: read' su github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accetta ID modello nativi del provider. Importa da /modelli o aggiungi ID personalizzati per il routing.", "bedrockModelsDescription": "I modelli Amazon Bedrock hanno come ambito la regione AWS. Importa da /models o aggiungi gli ID modello Bedrock abilitati nella regione selezionata.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Quando tutte le connessioni configurate sono esaurite (quota, crediti o scadenza), utilizza temporaneamente il livello senza chiave di questo fornitore. Disattiva per saltare questo fornitore invece di inviare richieste anonime — consigliato quando il livello senza chiave le rifiuta (401).", "anonymousFallbackEnabled": "Fallback anonimo abilitato per {provider}", "anonymousFallbackDisabled": "Fallback anonimo disabilitato per {provider} — le connessioni esaurite salteranno questo provider", - "anonymousFallbackUpdateFailed": "Impossibile aggiornare l'impostazione di fallback anonimo" + "anonymousFallbackUpdateFailed": "Impossibile aggiornare l'impostazione di fallback anonimo", + "batchDeleteFailed": "Eliminazione batch non riuscita", + "batchDeleteNetworkError": "Errore di rete durante l'eliminazione in batch", + "batchUpdateFailed": "Aggiornamento batch non riuscito", + "batchUpdateNetworkError": "Errore di rete durante l'aggiornamento in batch", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agente Cloud", + "categoryIde": "IDE", + "categoryLocal": "Locale", + "categorySearch": "Cerca", + "categoryWebCookie": "Cookie Web", + "claudeExtraUsageBlockingDisabled": "Blocco dell'uso extra di Claude disabilitato (l'uso extra è consentito)", + "claudeExtraUsageBlockingEnabled": "Blocco dell'uso extra di Claude abilitato (l'uso extra sarà bloccato)", + "claudeRoutingPreferenceDisabled": "I modelli Claude senza prefisso non preferiscono più Claude Code", + "claudeRoutingPreferenceEnabled": "I modelli Claude senza prefisso ora preferiscono Claude Code", + "clearMediaFilter": "Cancella", + "cliproxyRoutingDisabled": "Le richieste ora utilizzano OmniRoute nativo (diretto)", + "cliproxyRoutingEnabled": "Le richieste ora vengono instradate tramite CLIProxyAPI (emulazione più profonda)", + "codexLimitPolicyUpdated": "Politica di limite Codex aggiornata", + "codexServiceModeUpdated": "Modalità servizio Codex aggiornata", + "codexServiceTierActive": "Il livello di servizio Codex {tier} è attivo", + "codexTierFastLabel": "Veloce", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Impossibile applicare il codice di autorizzazione del comando", + "commandCodeApplyingApproval": "Browser approvato, applicazione in corso…", + "commandCodeApplyingKey": "Applicazione della chiave approvata dal browser…", + "commandCodeApprovalInstructions": "Apri l'URL di autenticazione, approva l'accesso, quindi incolla la chiave/JSON/URL restituita qui sotto…", + "commandCodeAuthExpired": "Il codice di autorizzazione è scaduto", + "commandCodeConnected": "Codice comando connesso", + "commandCodeConnectionAdded": "Connessione del codice comando aggiunta", + "commandCodeLinkExpired": "Il link del codice comando è scaduto", + "commandCodeOpeningStudio": "Apertura di Command Code Studio…", + "commandCodePopupBlocked": "Popup bloccato. Si prega di consentire i popup e riprovare Command Code Connect.", + "commandCodeStartFailed": "Impossibile avviare il comando Code auth", + "connectionDeleted": "Connessione eliminata", + "connectionFallback": "connessione", + "coolingConnectionsDescription": "Queste connessioni hanno restituito un 429 (limite di frequenza) nell'ultima richiesta. OmniRoute le salterà fino alla scadenza del timer — non è necessaria alcuna disattivazione manuale.", + "coolingConnectionsTitle": "Attualmente raffreddando ({count})", + "failedDeleteAlias": "Impossibile eliminare l'alias", + "failedDeleteConnection": "Impossibile eliminare la connessione", + "failedDistributeProxies": "Impossibile distribuire i proxy.", + "failedSaveModelEndpointSettings": "Impossibile salvare le impostazioni dell'endpoint del modello", + "failedUpdateClaudeExtraUsagePolicy": "Impossibile aggiornare la politica di utilizzo extra di Claude", + "failedUpdateClaudeRoutingPreference": "Impossibile aggiornare la preferenza di routing del codice Claude", + "failedUpdateCliproxyRouting": "Impossibile aggiornare il routing di CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Impossibile aggiornare la politica del limite di Codex", + "failedUpdateCodexServiceMode": "Impossibile aggiornare la modalità del servizio Codex", + "filterByMedia": "Media", + "freeBadge": "Gratuito", + "kimiCodeApiKeyLabel": "Kimi Code API Key", + "modelTestFailed": "Il test del modello è fallito", + "modelTestNetworkError": "Errore di rete durante il test del modello", + "networkError": "Errore di rete", + "networkErrorDeletingAlias": "Errore di rete durante l'eliminazione dell'alias", + "networkErrorSettingAlias": "Errore di rete durante la configurazione dell'alias", + "noProvidersMatch": "Nessun fornitore corrisponde alla tua ricerca.", + "noSavedProxies": "Nessun proxy salvato trovato. Aggiungi i proxy in Impostazioni → Proxy prima.", + "pageLoadErrorDescription": "Non siamo riusciti a caricare i dati del provider in questo momento. Controlla la tua connessione e riprova.", + "pageLoadErrorId": "ID Errore: {id}", + "pageLoadErrorRetry": "Riprova", + "pageLoadErrorTitle": "Impossibile caricare i fornitori", + "playgroundTitle": "Parco Giochi", + "providerDetailConnectionFlexActive": "Il livello di servizio Codex flex è attivo per questa connessione", + "providerDetailConnectionPriorityActive": "Il livello di servizio prioritario di Codex è attivo per questa connessione", + "providerDetailGlobalFlexActive": "Il livello di servizio Global Codex flex è attivo", + "providerDetailGlobalPriorityActive": "Il livello di servizio prioritario del Codex Globale è attivo", + "proxiesDistributed": "Assegnazione proxy {assigned} distribuita su {tagLabel}{total} connessione(i).", + "rerankEndpoint": "Rirangia", + "savedModelEndpointSettings": "Impostazioni dell'endpoint del modello salvato", + "searchByModelAria": "Cerca per modello", + "selectSupportedEndpoint": "Seleziona almeno un endpoint supportato", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Impostazioni", @@ -6460,7 +6719,24 @@ "loadFailed": "Impossibile caricare l'elenco degli abbonamenti", "toggleFailed": "Impossibile attivare/disattivare l'interruttore", "refreshFailed": "Impossibile aggiornare", - "deleteFailed": "Impossibile eliminare" + "deleteFailed": "Impossibile eliminare", + "add": "Aggiungi", + "cancel": "Annulla", + "configure": "Configura", + "copyEndpoint": "Copia Endpoint", + "coreEndpointHint": "Suggerimento per l'Endpoint Principale", + "coreNodesHint": "Suggerimento sui Nodi Principali", + "create": "Crea", + "deleteConfirm": "Conferma Cancellazione", + "empty": "Vuoto", + "globalModeDescription": "Descrizione della Modalità Globale", + "localCoreHint": "Suggerimento Locale Core", + "nodeSummary": "Riepilogo Nodo", + "providerRequired": "Fornitore Richiesto", + "providerRouting": "Routing del Fornitore", + "refresh": "Aggiorna", + "refreshInterval": "Intervallo di Aggiornamento", + "ruleModeDescription": "Descrizione della Modalità Regola" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Esegui un fallback automatico da visione a testo prima di instradare le richieste di immagini a modelli di solo testo.", "visionBridgeEnabledLabel": "Abilitato", "visionBridgeEnabledDesc": "Attiva/disattiva il bridge di pre-chiamata che sostituisce le parti dell'immagine con il testo estratto.", + "visionBridgeRerouteTextOnlyLabel": "Reindirizza i modelli solo testo", + "visionBridgeRerouteTextOnlyDesc": "Invia la richiesta completa, comprese le immagini, al modello bridge quando il modello selezionato non ha input di immagine.", "visionBridgeModel": "Modello a ponte", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Qualsiasi ID modello OmniRoute che supporti la visione può essere utilizzato qui.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "La chiave API non ha l'ambito manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Uno o più prefissi hanno come destinazione rotte in grado di generare spawn e non possono essere bypassati.", "GENERIC": "Impossibile aggiornare le impostazioni di authz." - } + }, + "remove": "Rimuovi" }, "resilienceBaseCooldownLabel": "Tempo di recupero della base", "scopeLabel": "Ambito", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testando l'audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) trascritti da {model}", "modalityBridgeAudioTestNoop": "Audio Bridge non è stato attivato (il target potrebbe supportare l'audio, nessun fornitore STT è connesso, oppure il bridge è disabilitato)", - "modalityBridgeAudioTestError": "Test audio non riuscito: {message}" + "modalityBridgeAudioTestError": "Test audio non riuscito: {message}", + "modelRoutingDescriptionPlaceholder": "Modelli Route Opus per combinazione frontier", + "cliproxyapiFallbackCodes": "Codici di Fallback di Cliproxyapi", + "cliproxyapiFallbackDescription": "Descrizione di fallback di Cliproxyapi", + "cliproxyapiHealthLabel": "Etichetta Salute Cliproxyapi", + "cliproxyapiImportFailed": "Cliproxyapi Importazione Non Riuscita", + "cliproxyapiImportResult": "Risultato Importazione Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL non valido", + "cliproxyapiLifecycleNoticeAfter": "Avviso sul Ciclo di Vita di Cliproxyapi Dopo", + "cliproxyapiLifecycleNoticeBefore": "Avviso sul Ciclo di Vita di Cliproxyapi Prima", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Avviso Sul Ciclo Di Vita Link", + "cliproxyapiPortLabel": "Etichetta Porta Cliproxyapi", + "cliproxyapiStatusLabel": "Cliproxyapi Etichetta Stato", + "cliproxyapiVersionLabel": "Etichetta Versione Cliproxyapi", + "collection": "Collezione", + "errorPage": { + "description": "Non siamo riusciti a caricare le impostazioni in questo momento. Per favore riprova tra qualche secondo.", + "errorId": "ID Errore: {id}", + "retry": "Riprova", + "title": "Impossibile caricare le impostazioni" + }, + "host": "Host", + "notInstalled": "Non installato", + "oneproxyActions": "Azioni Oneproxy", + "oneproxyActive": "Oneproxy Attivo", + "oneproxyAnonymity": "Anonimato Oneproxy", + "oneproxyCountry": "Oneproxy Paese", + "oneproxyDelete": "Elimina Oneproxy", + "oneproxyEmpty": "Oneproxy Vuoto", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Latenza Oneproxy", + "oneproxyProtocol": "Protocollo Oneproxy", + "oneproxyQuality": "Qualità Oneproxy", + "oneproxySyncFailed": "Sincronizzazione fallita: {error}", + "oneproxySyncSuccess": "Sincronizzati {total} proxy ({added} nuovi, {updated} aggiornati)", + "proxyDocumentationSocks5DescAfter": "Documentazione Proxy Socks5 Descrizione Dopo", + "proxyFreePoolAddProxy": "Aggiungi Proxy Pool Gratuito", + "proxyFreePoolAdding": "Aggiunta Pool Proxy Free", + "proxyFreePoolSelectProxy": "Seleziona Proxy Pool Gratuito", + "proxyStatusActive": "Stato Proxy Attivo", + "proxyStatusInactive": "Stato Proxy Inattivo", + "routingAddEntry": "Aggiungi voce", + "settingSaveFailed": "Salvataggio delle impostazioni non riuscito", + "settingSaved": "Impostazione Salvata", + "skillsmpApiKeyHintAfter": ". Limite di richiesta: {limit} richieste/giorno.", + "skillsmpApiKeyHintBefore": "Ottieni la tua chiave API da", + "syncFailed": "Sincronizzazione non riuscita", + "unhealthy": "Non salutare", + "oneproxyDescription": "Recupera e ruota proxy validati gratuiti dalla piattaforma comunitaria 1proxy", + "oneproxySyncing": "Sincronizzazione...", + "oneproxySyncNow": "Sincronizza Ora", + "oneproxyClearAll": "Cancella Tutto", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Cancellare tutti i proxy 1proxy?", + "memorySkillsSkillsmpDescription": "Collegati a SkillsMP per scoprire e installare competenze dal marketplace.", + "memorySkillsActiveProviderDescription": "Scegli quale fornitore la pagina Competenze utilizza per la ricerca e l'installazione.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", + "memorySkillsSkillsmpProviderDescription": "Marketplace autenticato (usa la tua chiave API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Directory skills.sh", + "memorySkillsSkillsshProviderDescription": "Fornitore della directory pubblica (nessuna chiave API richiesta).", + "routingCcBridgeCatalogName": "Bridge CC compatibile con Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Provider Claude nativo con token emessi da OAuth.", + "routingCcBridgeName": "Claude-Code Bridge", + "routingCcBridgeDescription": "Endpoint di relay utilizzando le chiavi API (compatibile con anthropic-cc-*).", + "routingCustomProviderDescription": "Fornitore personalizzato.", + "routingUnknownOpKind": "Tipo di operazione sconosciuto: {kind}", + "routingInvalidJson": "JSON non valido: {error}", + "routingConfigMustBeObject": "La configurazione deve essere un oggetto JSON", + "routingEnabledMustBeBoolean": "`enabled` deve essere true o false", + "routingPipelineMustBeArray": "`pipeline` deve essere un array di ops", + "routingPipelineTooLong": "La pipeline non può superare 50 operazioni", + "routingOpMissingKind": "Op #{index}: `kind` mancante o non valido", + "routingOpUnknownKind": "Op #{index}: tipo sconosciuto \"{kind}\"", + "routingJsonEditorHide": "Nascondi l'editor JSON", + "routingJsonEditorImportExport": "Importa / esporta JSON", + "routingJsonEditorLabel": "JSON (modifica e applica, o incolla per importare)", + "routingApplyJson": "Applica JSON", + "routingTransformsFootnote": "Tutte le operazioni di trasformazione sono idempotenti al riesecuzione. Le modifiche hanno effetto immediato alla richiesta successiva.", + "cliproxyapiUnknown": "Sconosciuto", + "cliproxyapiVersion": "Versione", + "cliproxyapiHealth": "Salute", + "cliproxyapiPort": "Porta", + "qdrantHost": "Host", + "qdrantCollection": "Collezione" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Completo", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Predefinito", + "off": "Spento", + "lite": "Leggero", + "standard": "Standard", + "aggressive": "Aggressivo", + "ultra": "Ultra", + "responsesToolOutput": "Output dello strumento Risposte" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Viene eseguito per ultimo nello stack (dopo che RTK/Caveman ha pulito il testo, OmniGlyph converte il resto in immagini) e funziona anche in modalità autonoma tramite la modalità omniglyph. Questa è un'anteprima e rimane disattivata per impostazione predefinita fino al completamento della convalida end-to-end.", "saved": "Salvato.", "saveFailed": "Impossibile salvare.", - "enableAria": "Abilita il motore OmniGlyph" + "enableAria": "Abilita il motore OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Servizi integrati", @@ -9127,7 +9500,49 @@ "unableToLoad": "Impossibile caricare le metriche di sistema", "product": "Prodotto", "resources": "Risorse", - "company": "Azienda" + "company": "Azienda", + "tokenHealthTooltips": { + "allHealthy": "Tutti i token sono sani", + "needsAttention": "Alcuni token necessitano di attenzione", + "refreshFailures": "Rilevati errori di aggiornamento del token", + "unknown": "Stato di salute sconosciuto" + }, + "systemMonitor": { + "metricsAriaLabel": "Metriche di sistema", + "memory": "Memoria", + "memoryShort": "mem", + "uptime": "Tempo di attività", + "ariaLabel": "Monitoraggio del sistema", + "title": "Monitor Di Sistema", + "version": "Versione", + "connections": "Connessioni", + "circuitBreakers": "Interruttori Automatici", + "open": "{count} aperti", + "memoryUsage": "Utilizzo della memoria" + }, + "never": "Mai", + "justNow": "Appena adesso", + "minutesAgo": "{count}m fa", + "hoursAgo": "{count}h fa", + "tokens": "Token", + "costs": "Costi", + "autoRefresh": "Aggiornamento Automatico ({seconds}s)", + "toggleAutoRefresh": "Attiva/disattiva il refresh automatico", + "activeRequests": "Richieste Attive", + "totalRequests": "Richieste Totali", + "totalInputTokens": "Token di Input Totali", + "model": "Modello", + "provider": "Fornitore", + "requests": "Richieste", + "lastUsed": "Ultimo Utilizzo", + "inputTokens": "Token di Input", + "totalTokens": "Token Totali", + "inputCost": "Costo di Input", + "outputCost": "Costo di Uscita", + "noUsageData": "Nessun utilizzo registrato finora. Effettua alcune richieste per vedere i dati qui.", + "account": "Account", + "accountLabel": "Account {id}", + "noAccountUsage": "Nessun utilizzo specifico dell'account registrato finora. Effettua richieste utilizzando account OAuth per vedere i dati qui." }, "auth": { "welcome": "Benvenuto", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Ripristina tramite Dati App", + "resetViaAppDataDescription": "Elimina il file delle impostazioni dalla directory dei dati dell'app per ripristinare la tua password:", + "quitDesktopApp": "Esci completamente dall'app desktop OmniRoute", + "navigateToAppDataDirectory": "Naviga alla directory dei dati dell'app:", + "checkSystemAppDataFolder": "(Controlla la cartella dei dati dell'app di sistema)", + "relaunchDesktopFreshSetup": "Rilancia l'app desktop OmniRoute — inizierà una nuova configurazione", + "alternativeSetPasswordTitle": "Alternativa: Imposta Nuova Password", + "alternativeSetPasswordDescription": "Imposta una nuova password iniziale tramite il file di ambiente del server:", + "openServerEnvFilePrefix": "Apri", + "relaunchDesktopApp": "Rilancia l'app desktop OmniRoute", + "codexLinkInvalidOrExpired": "Questo link non è valido o è scaduto.", + "codexValidationServerError": "Impossibile raggiungere il server per convalidare questo link.", + "codexSaveConnectionError": "Impossibile salvare la connessione. Il link potrebbe essere scaduto.", + "codexDeviceLoginDisabled": "Il login con codice dispositivo è disabilitato per questo account OpenAI. Abilitalo nelle impostazioni di sicurezza di ChatGPT (o chiedi al tuo amministratore di workspace).", + "codexAuthorizationTimedOut": "L'autorizzazione è scaduta. Fai clic su Inizia di nuovo per riprovare.", + "authenticationCancelled": "L'autenticazione è stata annullata.", + "unexpectedAuthenticationError": "Errore imprevisto durante l'autenticazione. Per favore riprova.", + "connectOpenAiCodexTitle": "Collegare OpenAI Codex", + "codexConnectDescription": "Autorizza un account ChatGPT per completare la configurazione di questa connessione.", + "validatingCodexLink": "Validazione del link…", + "codexGenerateCodeDescription": "Clicca qui sotto per generare un codice monouso, quindi accedi a OpenAI.", + "startCodexFlow": "Inizia", + "requestingOpenAiCode": "Richiesta di codice da OpenAI…", + "codexVerificationInstructions": "1. Apri la pagina di verifica di OpenAI e 2. inserisci questo codice. Questa pagina si aggiorna automaticamente una volta che autorizzi.", + "yourCode": "Il tuo codice", + "openVerificationPage": "Apri la pagina di verifica", + "copyUrlShort": "Copia URL", + "savingConnection": "Salvataggio della connessione…", + "codexConnected": "Connesso!", + "codexConnectionRegistered": "L'account Codex è stato registrato. Puoi chiudere questa scheda.", + "tryAgain": "Riprova", + "traeAuthorizationSuccess": "Autorizzazione Trae ✓", + "traeAuthorizationFailed": "Autorizzazione Trae non riuscita", + "closeAuthorizationWindow": "Puoi chiudere questa finestra.", + "returnToDashboard": "Torna al cruscotto.", + "resetViaAppData": "Ripristina tramite Dati App", + "deleteSettingsToReset": "Elimina il file delle impostazioni dalla directory dei dati dell'app per ripristinare la tua password:", + "quitAppCompletely": "Esci completamente dall'app desktop OmniRoute", + "navigateToAppData": "Naviga nella directory dei dati dell'app", + "checkAppDataFolder": "Controlla la cartella dei dati dell'app di sistema", + "deleteSettingsJson": "Elimina", + "relaunchAppFresh": "Rilancia l'app desktop OmniRoute — inizierà una nuova configurazione", + "alternativeSetPassword": "Alternativa: Imposta Nuova Password", + "setNewPasswordViaEnv": "Imposta una nuova password iniziale tramite il file di ambiente del server:", + "openServerEnv": "Apri", + "inDataDirectory": "nella directory dei dati", + "addOrUpdate": "Aggiungi o aggiorna", + "deleteAndRelaunch": "Elimina", + "settingsJson": "settings.json", + "fromDataDir": "dalla directory dei dati", + "relaunchApp": "Rilancia l'app desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Pronto a semplificare la tua infrastruttura AI?", "ctaDescription": "Unisciti agli sviluppatori che stanno ottimizzando le loro integrazioni IA con OmniRoute. Open source e avvio gratuito.", "startFree": "Inizia gratis", - "readDocumentation": "Leggi la documentazione" + "readDocumentation": "Leggi la documentazione", + "company": "Azienda", + "pricing": "Prezzi", + "apiReference": "Riferimento API", + "helpCenter": "Centro Assistenza", + "about": "Informazioni", + "blog": "Blog", + "contact": "Contatto", + "terms": "Termini", + "privacy": "Privacy", + "license": "Licenza", + "footerDescription": "L'interfaccia unificata per l'infrastruttura AI moderna. Sicura, osservabile e scalabile.", + "communityDiscussions": "Discussioni della Comunità" }, "docs": { "title": "Documentazione", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registra e gestisci gli agenti tramite il registro ACP per la comunicazione tra agenti e la condivisione degli strumenti.", "protocolAcpStep1": "Passare a Dashboard → Agenti per visualizzare gli agenti ACP registrati.", "protocolAcpStep2": "Registra nuovi agenti con funzionalità e configurazione dell'endpoint.", - "protocolAcpStep3": "Utilizzare gli strumenti CLI per configurare i canali di comunicazione dell'agente." + "protocolAcpStep3": "Utilizzare gli strumenti CLI per configurare i canali di comunicazione dell'agente.", + "metadataTitleTemplate": "%s — Documentazione OmniRoute", + "metadataDefaultTitle": "Documentazione di OmniRoute", + "metadataDescription": "Documentazione completa per il gateway OmniRoute AI — configurazione, API, compressione, distribuzione e altro ancora.", + "layoutNavTitle": "Documentazione di OmniRoute", + "layoutHomeLink": "Home Documenti", + "layoutDashboardLink": "← Torna al Dashboard", + "homeTitle": "Documentazione di OmniRoute", + "homeMetadataDescription": "Tutto ciò di cui hai bisogno per instradare, comprimere e scalare la tua IA — guide di configurazione, riferimento API, compressione, distribuzione e altro ancora.", + "homeTwitterDescription": "Documentazione completa per il gateway OmniRoute AI", + "homeDescription": "Tutto ciò di cui hai bisogno per instradare, comprimere e scalare la tua IA", + "homeSearchHint": "Premi Ctrl K per cercare nella documentazione", + "featuredQuickStartTitle": "Avvio Veloce", + "featuredQuickStartDescription": "Fai funzionare OmniRoute in 3 minuti", + "featuredAutoComboTitle": "Guida Auto-Combo", + "featuredAutoComboDescription": "Lascia che OmniRoute scelga il miglior AI per te", + "featuredProvidersTitle": "Guida ai Fornitori", + "featuredProvidersDescription": "Collega i fornitori di AI in pochi minuti", + "nonTechUsersTitle": "Per Utenti Non Tecnici", + "nonTechUsersSubtitle": "Inizia rapidamente — non è necessaria alcuna esperienza tecnica", + "techUsersTitle": "Per utenti tecnici", + "techUsersSubtitle": "Approfondimento su architettura, API e internals", + "apiExplorerMetadataTitle": "API Explorer — Documentazione OmniRoute", + "apiExplorerMetadataDescription": "Esplora API interattivo — prova gli endpoint di OmniRoute dal vivo con risposte in tempo reale", + "apiExplorerTitle": "Esplora API", + "apiExplorerDescription": "Prova gli endpoint di OmniRoute dal vivo. Seleziona un endpoint, configura la tua richiesta e visualizza la risposta in tempo reale.", + "apiExplorerSseStarted": "Flusso SSE avviato — controlla il terminale/devtools per l'output in tempo reale.", + "apiExplorerError": "Errore: {message}", + "apiExplorerAuth": "autenticazione", + "apiExplorerResponseLabel": "Risposta", + "apiExplorerSelectEndpoint": "Seleziona un endpoint da esplorare", + "apiExplorerChooseApi": "Scegli un'API dalla barra laterale per vedere i dettagli e provarla dal vivo", + "feedbackThanks": "Grazie per il tuo feedback!", + "feedbackQuestion": "Questa pagina è stata utile?", + "pageMetadataTitle": "{title} — Documentazione OmniRoute", + "pageMetadataDescription": "Documentazione di OmniRoute: {title}", + "breadcrumb": "Breadcrumb", + "apiReferenceTable": { + "parameters": "Parametri", + "name": "Nome", + "type": "Tipo", + "description": "Descrizione", + "returns": "Restituisce", + "typePrefix": "Tipo:" + } }, "legal": { "privacyPolicy": "politica sulla riservatezza", @@ -9957,7 +10479,42 @@ "successMessage": "Il tuo account {providerName} è stato collegato.", "done": "Fatto", "error": "Connessione non riuscita", - "tryAgain": "Riprova" + "tryAgain": "Riprova", + "errorSessionIncomplete": "La sessione OAuth è incompleta (manca l'URI di reindirizzamento o il codice di verifica). Riavvia la connessione e riprova.", + "errorExchangeFailed": "Scambio non riuscito", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Le credenziali OAuth di Google predefinite funzionano solo su localhost. Per l'uso remoto, configura le tue credenziali OAuth tramite le variabili di ambiente: ANTIGRAVITY_OAUTH_CLIENT_ID e ANTIGRAVITY_OAUTH_CLIENT_SECRET. Vedi la sezione README 'OAuth su un Server Remoto'.", + "errorSaveFailed": "Salvataggio non riuscito", + "errorAuthorizationFailed": "Autorizzazione fallita", + "errorAuthorizationTimeout": "Timeout di autorizzazione", + "errorRequestFailed": "Richiesta non riuscita", + "errorCallbackServerFailed": "Impossibile avviare il server di callback", + "errorBrowserUnavailable": "Il Browser OAuth non è disponibile per questo fornitore nell'ambiente attuale. Utilizza invece il metodo di autenticazione supportato.", + "errorStateMismatch": "Mismatch dello stato OAuth. Riavvia la connessione e riprova.", + "errorImportAccessToken": "Impossibile importare il token di accesso", + "errorSessionNotInitialized": "Sessione OAuth non inizializzata. Riavvia il flusso di connessione e riprova.", + "errorNoAuthorizationCode": "Nessun codice di autorizzazione trovato. Incolla l'URL di callback o il codice di autenticazione.", + "tabDeviceCode": "Codice Dispositivo", + "tabBrowserLogin": "Accesso al Browser", + "tabImportAuthJson": "Importa auth.json", + "tabPasteApiKey": "Incolla la chiave API", + "windsurfPasteDescription": "Nell'IDE Windsurf / VS Code, esegui il comando \"Windsurf: Provide Auth Token\" dalla palette dei comandi (o fai clic sul pulsante Jupyter \"Get Windsurf Authentication Token\"), quindi copia il token mostrato e incollalo qui sotto. Aprire direttamente windsurf.com/show-auth-token mostra solo una pagina \"Redirecting\" — l'IDE deve avviare il flusso.", + "grokAuthJsonDescription": "Incolla il contenuto COMPLETO di ~/.grok/auth.json (non solo il campo \"key\" del JWT). Un JWT nudo non ha refresh_token, quindi la connessione si interrompe dopo la scadenza (#7610). Preferisci il modulo di importazione dedicato auth.json quando disponibile.", + "devinDesktopPasteDescription": "Incolla una chiave API Devin esistente da una sessione Devin autenticata. La disponibilità dell'esportazione della chiave e i passaggi variano a seconda della versione e dell'account Devin.", + "devinPasteDescription": "Fornisci la tua WINDSURF_API_KEY (ottenuta tramite `devin auth login`, o tramite il comando \"Windsurf: Provide Auth Token\" dell'IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Chiave API / Token", + "saving": "Salvataggio…", + "saveConnection": "Salva Connessione", + "gheDescription": "Inserisci l'URL di base della tua istanza di GitHub Enterprise (ad esempio https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL di GitHub Enterprise", + "gheUrlRequired": "È richiesto l'URL di GitHub Enterprise", + "gitlabDuoSetupTitle": "Impostazione OAuth Duo per GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth non è configurato. Registrare un'applicazione OAuth su {applicationsUrl} con URI di reindirizzamento {redirectUri} e ambiti \"{scopes}\", quindi impostare {clientIdEnv} (e facoltativamente {clientSecretEnv}) e riavviare.", + "gitlabDuoSetupDescription": "Dopo che l'applicazione è stata registrata e le variabili d'ambiente sono state impostate su questa istanza di OmniRoute, fai clic su Continua per avviare il login OAuth.", + "continue": "Continua" }, "cursorAuthModal": { "title": "Connetti l'IDE del cursore", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Carica altro", - "loadingMore": "Caricamento altro..." + "loadingMore": "Caricamento altro...", + "correlationId": "ID di correlazione", + "group": { + "showAllRows": "Mostra tutte le righe", + "showLatestPerCorrelation": "Mostra l'ultimo per ID di correlazione", + "grouped": "Raggruppato" + }, + "running": "in esecuzione", + "interval": { + "decrease": "Diminuisci intervallo", + "title": "Intervallo di aggiornamento automatico in secondi", + "increase": "Aumenta l'intervallo" + }, + "status": { + "inProgress": "In corso", + "recoveredByRetry": "Recuperato tramite ripetizione", + "goToParent": "Vai alla richiesta padre", + "healedTitle": "Fallito, recuperato dopo {count} tentativi", + "healed": "guarito", + "failedTitle": "Tutti i {count} tentativi sono falliti", + "failed": "fallito", + "pinnedTitle": "Modello selezionato tramite il pinning della sessione context-cache", + "pinned": "pinnato" + }, + "attempts": "tentativi", + "detail": { + "collapse": "Riduci {title}", + "expand": "Espandi {title}", + "copyTitle": "Copia {title}", + "copied": "Copiato!", + "copy": "Copia", + "autoscrollOn": "Scorrimento automatico: attivo", + "autoscrollOff": "Scorrimento automatico: disattivato", + "payload": { + "clientRawRequest": "Richiesta Grezza del Client", + "clientRequest": "Richiesta del Cliente", + "openaiRequest": "Richiesta OpenAI", + "providerRequest": "Richiesta del Fornitore", + "providerResponse": "Risposta del Fornitore", + "clientResponse": "Risposta del Cliente", + "pipelineError": "Errore della Pipeline" + }, + "payloadMissing": "L'articolo del payload dettagliato non è più disponibile per questa voce di log.", + "payloadCorrupt": "L'artifact del payload dettagliato non può essere analizzato.", + "notAvailable": "N/A", + "semanticCache": "Semantico (OmniRoute)", + "upstreamCache": "Upstream (Fornitore)", + "ariaLabel": "Dettagli del registro delle richieste", + "completed": "Completato", + "upstreamStatus": "A monte: {status}", + "statusDiscrepancy": "OmniRoute ha restituito {status} anche se il fornitore ha restituito {provider}", + "previousRequest": "Richiesta precedente", + "nextRequest": "Prossima richiesta", + "close": "Chiudi il modulo di dettaglio", + "startedAt": "Iniziato A", + "endedAt": "Terminato A", + "duration": "Durata", + "model": "Modello", + "provider": "Fornitore", + "account": "Account", + "input": "Input", + "totalIn": "Totale In: {value}", + "cacheRead": "Cache Lettura: {value}", + "cacheWrite": "Scrittura Cache: {value}", + "compressed": "Compresso: {from} → {to} ({percent}% risparmiati)", + "output": "Uscita", + "totalOut": "Totale Uscita: {value}", + "reasoning": "Ragionamento: {value}", + "requestedModel": "Modello Richiesto", + "requestProtocol": "Protocollo Req", + "cacheSource": "Cache Sorgente", + "modelPinning": "Pinning del Modello", + "activeModelPinning": "Attivo — modello selezionato tramite il pinning della sessione", + "rotated": "Ruotato: {initial} -> {final}", + "apiKey": "Chiave API", + "noApiKey": "Nessuna chiave API", + "combo": "Combo", + "error": "Errore", + "unblockAll": "Sblocca tutto", + "cleared": "Cancellato", + "unblock": "Sblocca", + "relatedRequests": "Richieste Correlate ({count})", + "current": "attuale", + "detailStatus": "Dettaglio Stato", + "loadingDetails": "Caricamento dettagli della richiesta...", + "providerEventStream": "Provider Event Stream", + "clientEventStream": "Stream di Eventi Clienti", + "eventStream": "Flusso Di Eventi", + "responsePayloadLegacy": "Payload Di Risposta (Legacy)", + "requestPayloadLegacy": "Payload della Richiesta (Legacy)", + "noPayload": "Nessun dato payload disponibile per questa voce di log.", + "correlationId": "ID di correlazione", + "correlationIdValue": "ID di correlazione: {id}", + "detailedPayloadInfo": "Abilita prima il logging dettagliato se desideri la visualizzazione del payload client/provider in quattro fasi per le nuove richieste." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} disabilitato", "providerAdded": "{provider} aggiunto", "add": "Aggiungi", - "manualApiKey": "Usa una chiave API manuale" + "manualApiKey": "Usa una chiave API manuale", + "createDahlTokenFailed": "Impossibile creare il token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configura proxy", + "providerProxyTitleConfigured": "Proxy configurato: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Limitato dai ToS — consulta i termini", "caution": "Attenzione — clausole per uso personale / proxy", "ok": "Generalmente permissivo" - } + }, + "allProviders": "Tutti i fornitori", + "noApiKeyRequired": "Nessuna chiave API richiesta" }, "providerHealthAutopilot": { "title": "Autopilot integrità provider", @@ -12390,7 +13047,11 @@ "on": "ON", "off": "OFF", "availableProviders": "Provider disponibili ({count})", - "noProviderOverrides": "Nessun override — tutti i provider attivi parteciperanno con i loro modelli predefiniti" + "noProviderOverrides": "Nessun override — tutti i provider attivi parteciperanno con i loro modelli predefiniti", + "resetFailed": "Ripristino non riuscito", + "resetSuccess": "Ripristina la configurazione ai valori predefiniti", + "running": "In esecuzione...", + "testFailed": "Test fallito" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) è l'amico open source fondatore di OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Il fornitore non supporta la visione per questa richiesta di immagine", "capabilityFilter.toolsMismatch": "Il provider non supporta la chiamata degli strumenti", "capabilityFilter.structuredOutputMismatch": "Il provider non supporta l'output strutturato", - "capabilityFilter.contextWindowMismatch": "La richiesta supera la finestra di contesto del fornitore" + "capabilityFilter.contextWindowMismatch": "La richiesta supera la finestra di contesto del fornitore", + "publicSystem": { + "notFound": { + "title": "Pagina non trovata", + "description": "La pagina che stai cercando non esiste o è stata spostata.", + "dashboardAriaLabel": "Torna al cruscotto", + "statusAriaLabel": "Apri la pagina di stato del sistema", + "systemStatus": "Stato Del Sistema" + }, + "error": { + "title": "Errore Interno del Server", + "description": "Si è verificato un errore durante l'elaborazione della tua richiesta. Il nostro team è stato informato e sta lavorando a una soluzione.", + "errorId": "ID Errore: {id}", + "detailsAriaLabel": "Dettagli dell'errore", + "retryAriaLabel": "Riprova a caricare la pagina", + "tryAgain": "Riprova", + "dashboardAriaLabel": "Torna al cruscotto", + "statusAriaLabel": "Apri lo stato del sistema", + "systemStatus": "Stato Del Sistema" + }, + "globalError": { + "title": "Qualcosa è andato storto", + "description": "Si è verificato un errore imprevisto. Questo è stato registrato e il nostro team indagherà.", + "detailsAriaLabel": "Dettagli dell'errore", + "retryAriaLabel": "Riprova a caricare la pagina", + "tryAgain": "Riprova", + "statusAriaLabel": "Apri stato del sistema", + "systemStatus": "Stato Del Sistema" + }, + "offline": { + "title": "Problema di Connettività", + "description": "OmniRoute non può raggiungere la rete in questo momento. Controlla le tue impostazioni di internet, VPN o proxy.", + "connectionRestored": "Connessione ripristinata", + "offlineModeDetected": "Modalità offline rilevata", + "retryConnection": "Riprova Connessione", + "openStatusPage": "Apri la Pagina di Stato" + }, + "maintenance": { + "title": "Manutenzione Programmata", + "description": "Alcuni servizi sono temporaneamente non disponibili mentre è in corso la manutenzione. Il routing principale di solito rimane online, ma le funzionalità di gestione potrebbero essere degradate.", + "suggestion1": "Riprova dopo alcuni minuti.", + "suggestion2": "Controlla gli indicatori di salute attuali e lo stato del fornitore prima di riprovare.", + "systemStatus": "Visualizza Stato Del Sistema", + "healthDashboard": "Apri Cruscotto Salute" + }, + "status": { + "title": "Stato Del Sistema", + "description": "Snapshot operativo live per i servizi core di OmniRoute.", + "loadingHealth": "Caricamento delle metriche di salute...", + "failedToLoad": "Impossibile caricare la salute del sistema.", + "unableToReachHealth": "Impossibile raggiungere l'endpoint di salute. Controlla la connettività e riprova.", + "healthCheckFailed": "Controllo della salute non riuscito", + "openConnectivityHelp": "Guida alla Connettività Aperta", + "maintenanceInfo": "Informazioni di Manutenzione", + "service": "Servizio", + "unknown": "sconosciuto", + "notAvailable": "n/a", + "providersTracked": "Fornitori Tracciati", + "circuitBreakerState": "Stato del Circuit Breaker del Provider", + "lastUpdate": "Ultimo aggiornamento: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Richiesta Non Valida", + "description": "Il payload della richiesta è invalido o incompleto.", + "suggestion1": "Controlla i campi obbligatori e il formato del payload prima di riprovare.", + "suggestion2": "Se stai utilizzando l'API, valida lo schema JSON localmente.", + "suggestion3": "Se questo continua a succedere, apri la richiesta in Translator Playground per ispezionare il payload.", + "primaryAction": "Apri Documentazione", + "secondaryAction": "Apri Traduttore" + }, + "401": { + "title": "Non autorizzato", + "description": "È necessaria l'autenticazione per accedere a questa risorsa.", + "suggestion1": "Accedi di nuovo e riprova l'operazione.", + "suggestion2": "Per le chiamate API, conferma che il token Bearer sia presente e valido.", + "suggestion3": "Se il token è stato recentemente ruotato, aggiorna le tue credenziali client.", + "primaryAction": "Vai al Login", + "secondaryAction": "Gestisci le chiavi API" + }, + "403": { + "title": "Vietato", + "description": "La tua richiesta è stata compresa, ma l'accesso è negato dalla politica.", + "suggestion1": "Controlla le regole di allowlist/blocklist IP nelle impostazioni.", + "suggestion2": "Verifica le politiche di modello e budget assegnate alla tua chiave API.", + "suggestion3": "Chiedi a un amministratore di concedere l'ambito di autorizzazione richiesto.", + "primaryAction": "Aiuto per l'Accesso Aperto", + "secondaryAction": "Apri Impostazioni Sicurezza" + }, + "408": { + "title": "Timeout della Richiesta", + "description": "Il server non ha ricevuto una richiesta completa in tempo.", + "suggestion1": "Riprova la richiesta con un payload più piccolo.", + "suggestion2": "Controlla la stabilità della tua rete e la latenza di VPN/proxy.", + "suggestion3": "Per operazioni lunghe, abilita lo streaming o suddividi la richiesta.", + "primaryAction": "Guida all'Endpoint Aperto", + "secondaryAction": "Controlla lo stato della rete" + }, + "429": { + "title": "Troppe Richieste", + "description": "I limiti di frequenza sono stati superati per questo cliente, chiave o fornitore.", + "suggestion1": "Attendere il tempo di recupero e riprovare dopo l'intervallo suggerito.", + "suggestion2": "Passa a un combo con fornitori di riserva.", + "suggestion3": "Regola i profili di resilienza/limitazione della velocità del provider nelle impostazioni.", + "primaryAction": "Apri Impostazioni di Resilienza", + "secondaryAction": "Apri Combos" + }, + "500": { + "title": "Errore Interno del Server", + "description": "Si è verificato un errore imprevisto lato server durante l'elaborazione della tua richiesta.", + "suggestion1": "Riprova tra qualche secondo.", + "suggestion2": "Controlla la telemetria di salute e i log del server per ID di richiesta correlati.", + "suggestion3": "Se il problema persiste, segnalalo con il timestamp e il contesto della richiesta.", + "primaryAction": "Apri Cruscotto Salute", + "secondaryAction": "Apri i Log" + }, + "502": { + "title": "Bad Gateway", + "description": "Il fornitore upstream o l'integrazione del gateway ha restituito una risposta non valida.", + "suggestion1": "Riprova con un altro fornitore o una rotta combo attiva.", + "suggestion2": "Controlla le credenziali del fornitore e la disponibilità del modello.", + "suggestion3": "Ispeziona l'output del traduttore se è coinvolta una conversione di formato.", + "primaryAction": "Apri Fornitori", + "secondaryAction": "Apri Traduttore" + }, + "503": { + "title": "Servizio Non Disponibile", + "description": "Il servizio è temporaneamente non disponibile a causa di manutenzione o dipendenze degradate.", + "suggestion1": "Attendi un momento e riprova.", + "suggestion2": "Controlla le notifiche di manutenzione e lo stato del sistema.", + "suggestion3": "Utilizza fornitori di riserva se il tuo flusso di lavoro è sensibile alla latenza.", + "primaryAction": "Dettagli di Manutenzione", + "secondaryAction": "Stato Del Sistema" + } + } + }, + "kiroAuthModal": { + "title": "Collega {providerLabel}", + "chooseMethod": "Scegli il tuo metodo di autenticazione:", + "builderId": "ID Costruttore AWS", + "builderDescription": "Consigliato per la maggior parte degli utenti. Accedi con l'account AWS collegato a {providerLabel}.", + "organization": "La Tua Organizzazione (AWS IAM Identity Center)", + "organizationDescription": "Utilizza l'URL di avvio SSO della tua azienda (esempio: {url}).", + "googleAccount": "Account Google", + "googleDescription": "Accedi con il tuo account Google.", + "githubAccount": "Account GitHub", + "githubDescription": "Accedi con il tuo account GitHub.", + "importToken": "Importa Token", + "importDescription": "Incolla un token di aggiornamento esportato da {providerLabel}.", + "apiKey": "Chiave API", + "apiKeyDescription": "Incolla una chiave API {providerLabel} / CodeWhisperer a lungo termine. È memorizzata come una credenziale bearer senza token di aggiornamento; la scoperta del profilo è a migliore sforzo.", + "idcStartUrl": "URL di avvio IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "L'URL del Centro Identità AWS IAM della tua organizzazione", + "awsRegion": "Regione AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Regione AWS per il tuo Identity Center (predefinito: us-east-1)", + "continue": "Continua", + "back": "Indietro", + "autoDetecting": "Rilevamento automatico del token...", + "readingCredentials": "Lettura delle credenziali {providerLabel} dalla cache AWS SSO", + "tokenNotDetected": "Il token {providerLabel} non è stato rilevato automaticamente. Si prega di incollare manualmente il proprio token di aggiornamento.", + "refreshToken": "Token di Aggiornamento", + "tokenPlaceholder": "Il token verrà compilato automaticamente...", + "importing": "Importazione...", + "apiKeyPlaceholder": "Incolla la tua chiave API {providerLabel}...", + "apiKeyStoredDescription": "Memorizzato in modo crittografato come una credenziale bearer a lungo termine. Non c'è un flusso di aggiornamento.", + "apiKeyRegionDescription": "Regione AWS per la chiave (predefinito: us-east-1)", + "validating": "Convalida in corso...", + "validateAndSaveApiKey": "Convalida e Salva la Chiave API", + "errorAutoDetect": "Impossibile rilevare automaticamente il token", + "errorAutoDetectFailed": "Impossibile rilevare automaticamente il token", + "errorRefreshTokenRequired": "Si prega di inserire un token di aggiornamento", + "errorImportFailed": "Importazione non riuscita", + "errorApiKeyRequired": "Si prega di inserire una chiave API Kiro", + "errorApiKeyImportFailed": "Importazione della chiave API non riuscita", + "errorIdcStartUrlRequired": "Inserisci il tuo URL di avvio IDC" + }, + "kiroSocialOAuthModal": { + "title": "Collega {providerLabel} tramite {providerName}", + "errorStartAuthorization": "Impossibile avviare l'autorizzazione", + "errorAuthorizationExpired": "Autorizzazione scaduta. Inizia di nuovo il flusso di accesso.", + "errorAuthorizationFailed": "Autorizzazione fallita", + "initializing": "Inizializzazione...", + "settingUp": "Impostazione dell'autenticazione {providerName}", + "openIncognito": "Apri questo link in una finestra di navigazione in incognito", + "incognitoDescription": "Usa una finestra In Incognito/Privata per evitare conflitti di sessione con account esistenti.", + "copyLink": "Copia link", + "verificationCode": "Codice di verifica", + "waiting": "In attesa di autorizzazione...", + "cancel": "Annulla", + "successTitle": "Connesso con successo!", + "successMessage": "Il tuo account {providerLabel} tramite {providerName} è stato collegato.", + "done": "Fatto", + "errorTitle": "Connessione Fallita", + "close": "Chiudi" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorizzazione fallita", + "errorPopupBlocked": "Popup bloccato — consenti i popup per questo sito, oppure incolla il token manualmente qui sotto.", + "errorPopupClosed": "La finestra di autorizzazione è stata chiusa prima del completamento.", + "errorAccessTokenRequired": "È richiesto un token di accesso.", + "errorImportFailed": "Importazione non riuscita", + "title": "Collega Trae SOLO", + "authorizeDescription": "Autorizza tramite trae.ai in un popup. Il popup si chiuderà automaticamente una volta che il token è stato importato.", + "authorizeImportant": "Importante: devi essere connesso a trae.ai in questo browser prima. La pagina di autorizzazione conferma solo una sessione esistente — non può effettuare il login. Se vedi \"Accesso non riuscito\", clicca su \"Apri solo.trae.ai\", accedi, poi torna qui.", + "waitingForAuthorization": "In attesa di trae.ai…", + "authorizeWithBrowser": "Autorizza con il Browser", + "openSoloTrae": "Apri solo.trae.ai", + "orPasteManually": "o incolla un token manualmente", + "manualInstructions": "Accedi a solo.trae.ai, apri DevTools → Network, invia un messaggio in chat e copia il JWT dall'intestazione della richiesta Authorization: Cloud-IDE-JWT {tokenPlaceholder}. La durata del JWT è di circa 14 giorni. I campi di identità facoltativi provengono da common_params nello stesso corpo della richiesta.", + "accessTokenLabel": "Token di Accesso (Cloud-IDE-JWT)", + "webId": "ID Web", + "optional": "opzionale", + "bizUserId": "ID Utente Biz", + "userUniqueId": "ID Utente Unico", + "scope": "Ambito", + "tenant": "Inquilino", + "region": "Regione", + "importing": "Importazione…", + "importToken": "Importa Token", + "cancel": "Annulla" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuzione...", + "complete": "Completo", + "defaultLabel": "Distribuire Proxy" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "deprecato", + "risk": "rischio", + "close": "Chiudi", + "model": "Modello", + "key": "Chiave", + "defaultKey": "predefinito", + "clearConversation": "Cancella conversazione", + "clear": "Cancella", + "tabs": { + "test": "Test", + "logs": "Registri" + }, + "loadingLogs": "Caricamento dei log…", + "failedToLoadLogs": "Impossibile caricare i log", + "noLogsYet": "Nessun log ancora", + "noLogsDescription": "Invia un messaggio di prova dalla scheda Test — i log per questo fornitore appariranno qui.", + "openFullLogs": "Apri la pagina dei log completi", + "live": "Dal Vivo", + "tailingLast": "in coda agli ultimi {count}", + "refreshNow": "Aggiorna ora", + "refresh": "Aggiorna", + "unknownRequester": "richiedente sconosciuto", + "fields": { + "timestamp": "Timestamp", + "status": "Stato", + "duration": "Durata", + "model": "Modello", + "requestedModel": "Modello richiesto", + "provider": "Fornitore", + "requester": "Richiedente", + "tokens": "Token" + } + }, + "proxyLog": { + "detailAriaLabel": "Dettagli del registro proxy", + "event": "Evento Proxy", + "close": "Chiudi il modulo di dettaglio del proxy", + "time": "Tempo", + "latency": "Latenza", + "clientIp": "IP del client", + "proxy": "Proxy", + "direct": "Diretto", + "type": "Tipo", + "level": "Livello", + "provider": "Fornitore", + "tlsFingerprint": "Impronta TLS", + "directNative": "Diretto", + "targetUrl": "URL di destinazione", + "error": "Errore", + "configuration": "Configurazione del Proxy" + }, + "requestTimeline": { + "title": "Cronologia Richiesta", + "modes": { + "follow": "Segui", + "followDescription": "L'asse scorre a sinistra, la linea NOW rimane al 75%", + "now": "Adesso", + "nowDescription": "Salta al tempo attuale, la linea NOW si ripristina al centro", + "pan": "Padella", + "panDescription": "Trascina per esplorare, lo sfondo è bloccato" + }, + "reset": "Ripristina", + "started": "Avviato", + "ended": "Terminato", + "duration": "Durata", + "status": "Stato", + "provider": "Fornitore", + "tokens": "Token", + "active": "Attivo", + "other": "Altro", + "tenMinutes": "10min", + "hour": "ora", + "day": "giorno", + "unknownModel": "sconosciuto", + "pending": "in attesa" + }, + "metadata": { + "compressionTitle": "Compression", + "compressionDescription": "Configura le impostazioni di compressione del contesto per ridurre l'uso dei token e i costi.", + "relayTitle": "OmniRoute — Proxy di Relay", + "relayDescription": "Endpoint del proxy relay serverless per la tua infrastruttura AI", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitora le chiamate LLM + esegui il debug del traffico HTTPS di qualsiasi applicazione" + }, + "conductor": { + "title": "Conductor — Flotta di agenti CLI", + "subtitle": "OmniConductor hub: esecutori, coda dei task e consigli, in tempo reale", + "runners": "Corridori", + "tasks": "Attività", + "colName": "Nome", + "colClis": "CLIs", + "colStatus": "Stato", + "colTask": "Compito", + "colMode": "Modalità", + "colRunner": "Esecutore", + "colSummary": "Riepilogo", + "online": "online", + "offline": "offline", + "draining": "svuotamento", + "hubOffline": "Hub del conduttore offline o non configurato (CONDUCTOR_HUB_URL) — non mostra nulla anziché dati obsoleti.", + "noRunners": "Nessun runner registrato", + "noTasks": "Nessun compito ancora", + "detailTitle": "Dettagli del compito", + "prompt": "Invito", + "branch": "Ramo", + "fetchHint": "Recupera il risultato con: git fetch origin {branch}", + "council": "Consiglio", + "candidates": "Candidati", + "cancel": "Annulla attività", + "cancelConfirmTitle": "Annullare questo compito?", + "cancelConfirmMessage": "Il hub interromperà l'esecuzione sul runner. Questa azione non può essere annullata.", + "cancelFailed": "Il hub ha rifiutato la cancellazione", + "close": "Chiudi", + "error": "Errore", + "faroTitle": "Faro — portavoce della flotta", + "faroSubtitle": "Chat e voce, ancorati agli eventi reali della flotta. I comandi distruttivi richiedono sempre conferma.", + "faroEmpty": "Chiedi della flotta — ad esempio \"come va la flotta?\"", + "faroPending": "Faro sta chiedendo conferma", + "faroPlaceholder": "parla con Faro…", + "faroSend": "invia", + "faroOffline": "Faro (portavoce) è offline", + "yes": "Sì", + "no": "No", + "pushToTalk": "Tieni premuto per parlare", + "speakAnswers": "parlare risposte", + "voiceModels": "Modelli vocali (fornitore/modello di questo OmniRoute)", + "voiceIdle": "parlare", + "voiceListening": "in ascolto…", + "voiceThinking": "pensando…", + "voiceSpeaking": "parlando…", + "sttFailed": "La trascrizione è fallita (controlla il modello/fornitore STT)", + "ttsFailed": "La sintesi vocale è fallita (controlla il modello/fornitore TTS)", + "micDenied": "Microfono non disponibile o permesso negato" + }, + "cliproxyProviderExposure": { + "title": "Esposizione del Fornitore", + "description": "Esporre i modelli CLIProxyAPI come obiettivo di routing sotto il prefisso cliproxyapi/.", + "label": "Esporre come cliproxyapi/...", + "hint": "Quando abilitato, i modelli scoperti appaiono nei selettori del provider in OmniRoute.", + "updateFailed": "Impossibile aggiornare (HTTP {status})", + "networkError": "Errore di rete — impossibile aggiornare l'impostazione di esposizione del provider" + } } - diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index f4fcc7af9a..16a1a4498d 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -172,6 +172,18 @@ "unselectAll": "選択をすべて解除", "visibleModels": "表示中", "selectAllConfirm": "{count} 件のモデルをこのコンボに追加しますか?", + "testSelectedProviders": "テストプロバイダー", + "testingSelectedProviders": "テスト中 {done}/{total}...", + "noProvidersSelectedToTest": "まず、下記のプロバイダーのうち少なくとも1つを選択してください。", + "noModelsToTestForProviders": "選択したプロバイダーに対してテストするモデルがありません", + "testSelectedProvidersResults": "{ok} の {total} モデルが動作しています", + "selectWorkingModels": "作業中", + "unselectWorkingModels": "選択解除中", + "noWorkingModelsToSelect": "追加する作業モデルが残っていません", + "providerTestHint": "ヒント: プロバイダーを確認 → テスト → 動作中を追加。再度クリックすると選択解除されます。", + "selectAllProviders": "すべてのプロバイダーを確認する", + "clearProviderSelection": "プロバイダーのチェックを外す", + "providersSelectedCount": "{count} のプロバイダーが確認されました", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "サイズ", + "toggleNoAuthProvider": "認証なしプロバイダーを切り替える", + "loadingModels": "モデルを読み込んでいます…", + "selectAModel": "モデルを選択してください", + "degraded": "劣化", + "zeroConfigBannerTitle": "ゼロコンフィグモードで実行中", + "zeroConfigBannerBody": "OmniRouteは初回起動時に自動生成された安全な暗号化キーを作成しました。これらは{dataDir}に保存されます。特別な操作は必要ありません — あなたのデータは暗号化され、安全です。カスタムキーを使用するには、そのファイルにJWT_SECRETSTORAGE_ENCRYPTION_KEYを追加してください。", + "batchRelativeTimeIn": "{value}内", + "batchRelativeTimeAgo": "{value} 前", + "batchDetailsTitle": "バッチの詳細", + "batchProgress": "進捗", + "batchCompletedCount": "{count} 完了", + "batchFailedCount": "{count} 失敗しました", + "batchPendingCount": "{count} 保留中", + "batchTimeline": "タイムライン", + "batchTimelineInProgress": "進行中", + "batchTimelineFinalizing": "最終化中", + "batchTimelineCompleted": "完了しました", + "batchTimelineFailed": "失敗しました", + "batchTimelineExpires": "期限切れ", + "batchTimelineExpired": "期限切れ", + "batchTimelineCancelling": "キャンセル中", + "batchTimelineCancelled": "キャンセルされました", + "batchTokenUsage": "トークンの使用状況", + "batchMetadata": "メタデータ", + "batchFileContents": "ファイルの内容", + "batchFileUsedByCount": "{count, plural, one {# バッチ} other {# バッチ}}", + "batchFilePreview": "プレビュー", + "batchFilePreviewTruncated": "最初の {shown} 行を表示中 ({total} 行中)", + "batchFileDownloadFull": "フルファイルをダウンロード" }, "disabled": "無効", "featureFlagOmnirouteEmergencyFallbackDescription": "予算を使い果たしたリクエストを、緊急用の無料フォールバックプロバイダー/モデルにルーティングします。", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "セパレーター", "discovery": "ディスカバリー", "discoverySubtitle": "無料アクセス対象のプロバイダーをスキャン", + "conductor": "指揮者", + "conductorSubtitle": "CLIエージェントフリート", "resilienceConnections": "接続レジリエンス", "resilienceConnectionsSubtitle": "クールダウン、ブレーカー、ロックアウト状態", "settingsModalityBridge": "モダリティブリッジ", - "settingsModalityBridgeSubtitle": "テキストのみのモデル用の画像/音声 → テキストフォールバック" + "settingsModalityBridgeSubtitle": "テキストのみのモデル用の画像/音声 → テキストフォールバック", + "commandPalette": { + "title": "コマンドパレット", + "searchPlaceholder": "ページ、設定、ツールを検索...", + "clearSearch": "検索をクリア", + "noResults": "結果がありません", + "navigate": "ナビゲート", + "open": "開く", + "close": "閉じる" + }, + "noResults": "結果がありません" }, "webhooks": { "title": "Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "設定の更新に失敗しました", "sync.token.created": "同期トークンが作成されました", "sync.token.revoked": "同期トークンが取り消されました" - } + }, + "mcpMetricCalls24h": "コール (24時間)", + "mcpMetricSuccessRate": "成功率", + "mcpMetricAvgDuration": "平均時間", + "mcpMetricTopTool": "トップツール" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "新しいバージョンが利用可能です。クリックして更新。", "updateStarted": "更新を開始しました...", "reloadingPageAutomatically": "ページを自動的に再読み込みしています...", - "providerTopology": "プロバイダー トポロジ" + "providerTopology": "プロバイダー トポロジ", + "downloadDmg": "DMGをダウンロード (macOS)", + "downloadDmgDescription": "OmniRouteデスクトップアプリの新しいバージョンが利用可能です。macOS DMGインストーラーをダウンロードしてインストールし、更新してください(現在のバージョン: v{version})。", + "downloadExe": "EXEをダウンロード (Windows)", + "downloadExeDescription": "OmniRouteデスクトップアプリの新しいバージョンが利用可能です。更新するには、Windows EXEインストーラーをダウンロードしてインストールしてください(現在のバージョン: v{version})。", + "downloadAppImage": "AppImageをダウンロード (Linux)", + "downloadAppImageDescription": "OmniRouteデスクトップアプリの新しいバージョンが利用可能です。更新するにはLinux AppImageパッケージをダウンロードしてください(現在のバージョン: v{version})。", + "downloadUpdate": "アップデートをダウンロード", + "downloadUpdateDescription": "OmniRouteデスクトップアプリの新しいバージョンが利用可能です。システムに応じたアプリ形式をダウンロードして更新してください(現在のバージョン: v{version})。", + "updateQueued": "v{version} の更新がキューに追加されました。", + "updateDockerRebuilding": "Docker イメージがバックグラウンドで再ビルドされています。", + "updateWaitingRestart": "新しいバージョンでOmniRouteが再起動するのを待っています。", + "updateInstalling": "v{version}をインストール中。", + "updateRunning": "OmniRouteは現在v{version}を実行中です。", + "updateCompleted": "OmniRouteがv{version}に更新されました。", + "updateDockerStillRebuilding": "Docker イメージはまだ v{version} のために再構築中です。", + "updateInstallingBackground": "バックグラウンドで v{version} をインストールしています。", + "updateWaitingVersion": "v{version}でOmniRouteが戻るのを待っています。", + "updateDockerStillInProgress": "Dockerの再構築はまだ進行中です。", + "updateRestarting": "サービスの再起動中です。OmniRouteがオンラインに戻るのを待っています...", + "updateTimeout": "更新が開始されましたが、v{version}はタイムアウト前に利用可能になりませんでした。ページを更新するか、サーバーログを確認してください。", + "updateTimedOut": "v{version} への更新がタイムアウトしました。", + "updateStartFailed": "更新の開始に失敗しました。", + "noResponseStream": "レスポンスストリームが受信されませんでした。", + "updateComplete": "更新が完了しました!", + "updateFailed": "更新に失敗しました。", + "updateNetworkError": "ネットワークエラー — 更新中に接続が失われました。", + "stepInstallPackage": "パッケージをインストール", + "stepRebuildNativeModules": "ネイティブモジュールを再構築する", + "stepRestartService": "サービスを再起動", + "stepComplete": "完了", + "stepError": "エラー", + "updateCompleteTitle": "更新が完了しました!", + "updateFailedTitle": "更新に失敗しました", + "updatingTitle": "OmniRouteを更新中...", + "reloadNotice": "ページは数秒後に自動的に再読み込みされます。", + "retryNotice": "もう一度お試しいただくか、CLIを介して手動で更新してください。", + "restartNotice": "このページを閉じないでください。システムは自動的に再起動します。", + "reloadNow": "今すぐ再読み込み", + "closeUpdate": "閉じる", + "retryUpdate": "再試行", + "updateAvailableTitle": "更新可能: v{version}{desktop}", + "desktopAppLabel": "(デスクトップアプリ)", + "checkingForUpdates": "更新を確認しています...", + "versionAvailableForDownload": "バージョン v{version} がダウンロード可能です。", + "downloadingUpdate": "アップデートをダウンロード中... {percent}% 完了。", + "updateDownloaded": "ダウンロードが成功しました!再起動してインストールをクリックして適用してください。", + "autoUpdateFailed": "自動更新に失敗しました: {reason}.", + "unknownUpdateError": "不明なエラー", + "versionAvailableDesktop": "デスクトップアプリ用のバージョン v{version} が利用可能です。", + "manualUpdateRequired": "このインストールタイプには手動更新が必要です。", + "restartAndInstall": "再起動してインストール", + "checkForUpdate": "更新を確認", + "manualUpdate": "手動更新", + "directDownloadHint": "または、それぞれのインストーラ形式を直接ダウンロードしてください:", + "releaseNotes": "リリースノート", + "readMore": "続きを読む", + "noAuthLabel": "認証なし" }, "analytics": { "title": "分析", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "このリクエスト前後の永続化されたコールログから推測", "routeRecommendations": "推奨事項", "routeLimitations": "制限事項", - "routeNoKnownLimitations": "この説明に関する既知の制限事項はありません。" + "routeNoKnownLimitations": "この説明に関する既知の制限事項はありません。", + "searchAnalyticsLoading": "検索分析を読み込んでいます…", + "searchAnalyticsNoData": "まだ検索データは利用できません。", + "searchAnalyticsNoDataDescription": "最初の検索が行われた後、検索リクエストはここに表示されます /v1/search。", + "searchAnalyticsToday": "{count} 今日", + "searchAnalyticsCachedRequests": "{count} のキャッシュされたリクエスト", + "searchAnalyticsApiCosts": "検索APIのコスト", + "searchAnalyticsErrors": "{count} エラー", + "searchAnalyticsNoErrors": "エラーはありません", + "searchAnalyticsProviderBreakdown": "プロバイダーの内訳", + "searchAnalyticsQueries": "クエリ", + "searchAnalyticsEmptyDescription": "POST /v1/searchを使用してウェブ検索のルーティングを開始します。", + "searchAnalyticsFreeTier": "無料プランが利用可能: Serper (2,500/月)、Brave (2,000/月)、Exa (1,000/月)、Tavily (1,000/月) — 合計6,500件以上の無料検索/月、自動フェイルオーバー付き。", + "autoRoutingNoDataAvailable": "自動ルーティング分析は利用できません。メトリクスを確認するには、auto/ プレフィックスを使用してリクエストを行ってください。", + "defaultVariantLabel": "デフォルト", + "freeTierAvailable": "無料プランが利用可能です" }, "apiManager": { "title": "APIキー", @@ -2348,7 +2478,9 @@ "providerCount": "{count}個のプロバイダー", "imageToTextBridgeAvailable": "Modality Bridgeは、テキスト専用モデルのために画像を説明できるようになりました。/api/v1/images/understandingが実装されると、インラインプレイグラウンドが利用可能になります。", "imageToTextBridgeCta": "Modality Bridge 設定で Image→Text ブリッジを構成する", - "sttBridgeCta": "Modality Bridge 設定で Speech→Text ブリッジを構成する" + "sttBridgeCta": "Modality Bridge 設定で Speech→Text ブリッジを構成する", + "existingConnection": "既存の接続", + "openrouterSttDescription": "OpenRouterの音声認識モデルは、設定されたOpenRouter接続を使用します。別途認証情報は必要ありません。" }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "以下に貼り付けます:", "copilotReloadInstruction": "その後、VS Code を再読み込みし、入力プロンプトで API キーを設定します。", "wireApiChatCompletions": "チャットの完了 (/chat/completions)", - "wireApiResponses": "レスポンス API (/responses)" + "wireApiResponses": "レスポンス API (/responses)", + "cliproxyapiActionFailed": "アクションが失敗しました", + "cliproxyapiActionSucceeded": "アクションが成功しました", + "cliproxyapiCheckUpdates": "更新を確認", + "cliproxyapiDescription": "上流プロキシフォールバック(GoベースのOAuth)", + "cliproxyapiHealth": "健康", + "cliproxyapiHealthy": "健康的", + "cliproxyapiInstall": "インストール", + "cliproxyapiNotInstalledValue": "未インストール", + "cliproxyapiPort": "ポート", + "cliproxyapiRequestFailed": "リクエストに失敗しました", + "cliproxyapiRestart": "再起動", + "cliproxyapiStart": "開始", + "cliproxyapiStatusError": "エラー", + "cliproxyapiStatusInstalled": "インストール済み", + "cliproxyapiStatusNotInstalled": "未インストール", + "cliproxyapiStatusRunning": "実行中", + "cliproxyapiStatusStopped": "停止しました", + "cliproxyapiStop": "停止", + "cliproxyapiUnhealthy": "不健康", + "cliproxyapiUnknown": "不明", + "cliproxyapiUpdate": "更新", + "cliproxyapiUpdateAvailable": "更新が利用可能です: v{current} → v{latest}", + "cliproxyapiVersion": "バージョン" }, "combos": { "title": "コンボ", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "クォータが尽きたときのみ進む", + "fallbackOnlyOnQuotaExhaustionShort": "クォータ専用フォールバック", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "モードパックと重み付けはここに保持され、ブレーカーのランタイム状態はHealthページに保持されます。", "emailVisibilityHint": "ここでのアカウントメールアドレスは、グローバルプライバシートグルの設定に従います。", "emailVisibilityTooltip": "目のアイコンを使用して、コンボ、プロバイダー、クォータ画面全体でアカウントメールアドレスをグローバルに表示または非表示にします。", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "ステップバイステップ (プロバイダー → モデル)", + "builderModeGlobal": "グローバルモデル検索(カスタムコンボ)", + "builderGlobalSearchPlaceholder": "すべてのプロバイダー(例:opus、sonnet、deepseek、kimi、qwen)でモデルを検索...", + "builderGlobalAddAll": "すべて追加", + "builderGlobalShortcuts": "ショートカット:", + "builderGlobalNoResults": "\"{query}\" に対するモデルが見つかりませんでした。", + "builderGlobalProviderLabel": "プロバイダー:", + "builderGlobalAccountCount": "{count, plural, one {# アカウント} other {# アカウント}}", + "builderGlobalAdded": "追加されました", + "builderGlobalAdd": "追加", "manualModel": "手動モデル", "manualModelInvalid": "モデルを provider/model として入力してください。", "manualModelUnknownProvider": "不明なプロバイダープレフィックスです。", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "セッションの空き状況", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "スティッキネス オフ", "kimiPresetTitle": "Kimi Coding プリセット", "kimiPresetDescription": "Kimi K3 をプライマリモデル(Moonshot API)とし、設定時は Kimi Code 接続(kimi-coding、kimi-web)へ自動的にフォールバックします。", - "kimiPresetCta": "プリセットを追加" + "kimiPresetCta": "プリセットを追加", + "intelligentComboCount": "{count, plural, one {# のインテリジェントコンボ} other {# のインテリジェントコンボ}}", + "providersInScope": "{count, plural, one {スコープ内のプロバイダーは#件} other {スコープ内のプロバイダーは#件}}", + "savingModePack": "{pack}を保存中…", + "errorTitle": "コンボの読み込みに失敗しました", + "errorDescription": "現在、コンボデータを読み込むことができません。接続を確認して、再試行してください。", + "errorId": "エラー ID: {id}", + "errorRetry": "もう一度試してください", + "comboLabel": "コンボ" }, "costs": { "title": "コスト", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "ユーザー名", "obsidianPassword": "パスワード", - "obsidianTailscaleHint": "モバイルから接続する場合は、localhostの代わりにTailscale IPを使用してください。両方のデバイスが同じTailscaleネットワーク上にある必要があります。" + "obsidianTailscaleHint": "モバイルから接続する場合は、localhostの代わりにTailscale IPを使用してください。両方のデバイスが同じTailscaleネットワーク上にある必要があります。", + "cloudSyncNotConfigured": "このインスタンスではクラウド同期が設定されていません。", + "notionConnect": "接続する", + "notionConnectFailed": "接続に失敗しました", + "notionConnected": "接続されました", + "notionConnectionFailed": "接続に失敗しました", + "notionDescription": "ルーティングされたAIモデルを通じてNotionを検索、読み取り、クエリ、および書き込みを行います", + "notionDisconnect": "切断", + "notionDisconnectFailed": "切断に失敗しました", + "notionEnterToken": "Notionの統合トークンを入力してください", + "notionIntegrationHelp": "内部統合を作成する at", + "notionIntegrationToken": "Notion内部統合トークン", + "notionNotConnected": "接続されていません", + "notionTokenConfigured": "トークンが設定されました。NotionツールはMCPを介して利用可能です。" }, "endpoints": { "tabProxy": "エンドポイント プロキシ", @@ -4152,6 +4331,12 @@ "providerModelLabel": "プロバイダー / モデル", "noRemoteProviders": "API キーが設定されたプロバイダーがありません", "selectProviderModel": "モデルを選択", + "customBaseUrlLabel": "カスタムベースURL(オプション)", + "customModelIdLabel": "カスタムモデルID(オプション)", + "customEndpointHelp": "OpenAI互換の/embeddingsエンドポイントを使用してください。ローカルエンドポイントは許可されていますが、クラウドメタデータターゲットはブロックされています。", + "customEndpointSave": "カスタムエンドポイントを適用する", + "customEndpointInvalid": "有効なHTTP(S)ベースURLとモデルIDの両方を入力するか、両方のフィールドを空のままにしてください。", + "customEndpointSaveFailed": "カスタム埋め込みエンドポイントを保存できませんでした。", "staticEnabledLabel": "Static Potion を有効化", "staticEnabledDesc": "potion-base-8M モデルをダウンロードしてローカルで使用", "transformersEnabledLabel": "Transformers.js を有効化", @@ -4258,7 +4443,9 @@ "cleaning": "クリーンアップ中...", "cleanNow": "今すぐクリーンアップ", "cleanupSuccess": "{count} 個のポイントが削除されました", - "cleanupFailed": "クリーンアップに失敗しました" + "cleanupFailed": "クリーンアップに失敗しました", + "hostLabel": "ホスト", + "collectionLabel": "コレクション" }, "rerank": { "enableLabel": "リランクを有効にする", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 層フォールバック図", "apiKeyMgmt": "APIキー管理", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "無料プロバイダーを設定する", + "description": "オプションで選択したサインアップ不要のプロバイダーを有効にします。続行する前に、各プロバイダーの通知とサイトを確認してください。利用可能性とレート制限は第三者によって制御されています。", + "loading": "無料プロバイダーを読み込んでいます...", + "loadFailed": "無料プロバイダーを読み込めませんでした。", + "alreadyConfigured": "すべての対象となる無料プロバイダーはすでに構成されています。", + "reviewProviderSite": "プロバイダーサイトと利用規約を確認する", + "confirmation": "これらのサードパーティプロバイダーを確認し、OmniRouteに選択した接続を作成してほしいです。", + "setupSelected": "選択したプロバイダーを設定する", + "settingUp": "設定中...", + "setupFailed": "選択したプロバイダーを設定できませんでした。既存のものは変更されませんでした。", + "retryFailed": "失敗したプロバイダーを再試行する", + "orUseApiKey": "またはAPIキーで接続します", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "作成済み", + "skipped": "すでに設定済み", + "failed": "失敗しました" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "必須。 プロバイダー API のベース URL。", "iconUrlLabel": "アイコンURL", "iconUrlHint": "任意。このプロバイダーのアイコンとして表示される画像URL。", + "iconUrlInvalid": "無効なアイコンURLです。http(s)://またはdata:image/*;base64 URLを使用してください。", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} 互換性あり (製品)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "セッションはすでに現在のものです", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "認証を適用する", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API キーを貼り付け…", "zedSaving": "保存中…", "zedImportAction": "インポート", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "自動カーソルセッションの更新を有効にする", + "cursorAgentNudgeBody": "自動セッション更新のためにcursor-agentをインストールしてください。これがないと、Cursor接続は約24時間ごとに手動で再接続する必要があります。", + "cursorAgentNudgeDismiss": "閉じる", "zedManualImportFailed": "手動インポートに失敗しました", "zedManualImportSuccess": "Zed から {provider} トークンをインポートしました", "grokImportTitle": "Grok Build 認証をインポート", @@ -5878,7 +6066,6 @@ "friendliai": "サーバーレス推論の無料枠 — クレジットカード不要", "gemini": "永久無料: Gemini 2.5 Flashが1,500 req/日 — クレジットカード不要、aistudio.google.com でキーを取得", "gigachat": "APIキーでGigaChat (Sber)に接続します。", - "github-models": "github.com/settings/tokens で 'models: read' スコープを持つGitHub PATを作成", "gitlab": "パブリックCode Suggestions API用のGitLabパーソナルアクセストークン。gitlab.comを使用しない場合は、セルフホストのベースURLを設定してください。", "gitlawb-gmi": "Gitlawb OpengatewayダッシュボードからAPIキーを取得します。", "gitlawb": "Gitlawb OpengatewayダッシュボードからAPIキーを取得します。", @@ -6017,7 +6204,8 @@ "kimi-coding": "既存のOAuthフローを使用してKimi Codingに接続します。", "kiro": "無料枠: 50クレジット/月(約25K〜100Kトークン)。⚠️ Kiroの利用規約(ToS)は、サードパーティのプロキシやハーネスの使用を禁止しています。", "codex": "既存のOAuthフローを使用してOpenAI Codexに接続します。", - "qwen": "既存のOAuthフローを使用してQwen Codeに接続します。" + "qwen": "既存のOAuthフローを使用してQwen Codeに接続します。", + "github-models": "github.com/settings/tokens で 'models: read' スコープを持つGitHub PATを作成" }, "passthroughModelsDescription": "{provider} は、プロバイダーネイティブのモデル ID を受け入れます。 /models からインポートするか、ルーティング用のカスタム ID を追加します。", "bedrockModelsDescription": "Amazon Bedrock モデルは、AWS リージョンによって範囲が定められています。 /models からインポートするか、選択したリージョンで有効になっている Bedrock モデル ID を追加します。", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "すべての設定された接続が使い果たされた場合(クォータ、クレジット、または有効期限)、このプロバイダーのキーなしティアを一時的に使用します。このプロバイダーをスキップするにはオフにしてください。匿名リクエストを送信する代わりに、キーなしティアがそれらを拒否する場合(401)に推奨されます。", "anonymousFallbackEnabled": "{provider}の匿名フォールバックが有効になりました", "anonymousFallbackDisabled": "{provider}の匿名フォールバックが無効になりました — 接続が尽きるとこのプロバイダーはスキップされます", - "anonymousFallbackUpdateFailed": "匿名フォールバック設定の更新に失敗しました" + "anonymousFallbackUpdateFailed": "匿名フォールバック設定の更新に失敗しました", + "batchDeleteFailed": "バッチ削除に失敗しました", + "batchDeleteNetworkError": "バッチ削除中のネットワークエラー", + "batchUpdateFailed": "バッチ更新に失敗しました", + "batchUpdateNetworkError": "バッチ更新中のネットワークエラー", + "categoryAudio": "オーディオ", + "categoryCloudAgent": "クラウドエージェント", + "categoryIde": "IDE", + "categoryLocal": "ローカル", + "categorySearch": "検索", + "categoryWebCookie": "ウェブクッキー", + "claudeExtraUsageBlockingDisabled": "Claudeの追加使用制限が無効になりました(追加使用が許可されています)", + "claudeExtraUsageBlockingEnabled": "Claudeの追加使用ブロックが有効になりました(追加使用はブロックされます)", + "claudeRoutingPreferenceDisabled": "プレフィックスなしのClaudeモデルはもはやClaude Codeを優先しません", + "claudeRoutingPreferenceEnabled": "プレフィックスなしのClaudeモデルは、現在Claude Codeを優先します", + "clearMediaFilter": "クリア", + "cliproxyRoutingDisabled": "リクエストは現在、ネイティブOmniRoute(直接)を使用します。", + "cliproxyRoutingEnabled": "リクエストは現在、CLIProxyAPI(より深いエミュレーション)を通じてルーティングされます。", + "codexLimitPolicyUpdated": "Codex制限ポリシーが更新されました", + "codexServiceModeUpdated": "Codexサービスモードが更新されました", + "codexServiceTierActive": "Codex {tier} サービスティアがアクティブです", + "codexTierFastLabel": "速い", + "codexTierFlexLabel": "フレックス", + "commandCodeApplyFailed": "コマンドコード認証の適用に失敗しました", + "commandCodeApplyingApproval": "ブラウザが承認されました。適用中…", + "commandCodeApplyingKey": "ブラウザ承認済みキーを適用中…", + "commandCodeApprovalInstructions": "認証URLを開き、アクセスを承認してから、返されたキー/JSON/URLを下に貼り付けてください…", + "commandCodeAuthExpired": "コマンドコードの認証が期限切れです", + "commandCodeConnected": "コマンドコードが接続されました", + "commandCodeConnectionAdded": "コマンドコード接続が追加されました", + "commandCodeLinkExpired": "コマンドコードのリンクが期限切れです", + "commandCodeOpeningStudio": "コマンドコードスタジオを開いています…", + "commandCodePopupBlocked": "ポップアップがブロックされました。ポップアップを許可して、再度 Command Code Connect をお試しください。", + "commandCodeStartFailed": "Command Code authの起動に失敗しました", + "connectionDeleted": "接続が削除されました", + "connectionFallback": "接続", + "coolingConnectionsDescription": "これらの接続は、最後のリクエストで429(レート制限)を返しました。OmniRouteは、タイマーが切れるまでそれらをスキップします — 手動での無効化は必要ありません。", + "coolingConnectionsTitle": "現在冷却中 ({count})", + "failedDeleteAlias": "エイリアスの削除に失敗しました", + "failedDeleteConnection": "接続の削除に失敗しました", + "failedDistributeProxies": "プロキシの配布に失敗しました。", + "failedSaveModelEndpointSettings": "モデルエンドポイント設定の保存に失敗しました", + "failedUpdateClaudeExtraUsagePolicy": "Claudeの追加使用ポリシーの更新に失敗しました", + "failedUpdateClaudeRoutingPreference": "Claude Codeのルーティング設定の更新に失敗しました", + "failedUpdateCliproxyRouting": "CLIProxyAPIのルーティングの更新に失敗しました", + "failedUpdateCodexLimitPolicy": "Codex制限ポリシーの更新に失敗しました", + "failedUpdateCodexServiceMode": "Codexサービスモードの更新に失敗しました", + "filterByMedia": "メディア", + "freeBadge": "無料", + "kimiCodeApiKeyLabel": "Kimi Code APIキー", + "modelTestFailed": "モデルテストに失敗しました", + "modelTestNetworkError": "ネットワークエラー テストモデル", + "networkError": "ネットワークエラー", + "networkErrorDeletingAlias": "エイリアスの削除中にネットワークエラーが発生しました", + "networkErrorSettingAlias": "エイリアスの設定中にネットワークエラーが発生しました", + "noProvidersMatch": "検索に一致するプロバイダーが見つかりません。", + "noSavedProxies": "保存されたプロキシが見つかりません。最初に設定 → プロキシでプロキシを追加してください。", + "pageLoadErrorDescription": "現在、プロバイダーのデータを読み込むことができませんでした。接続を確認して、再試行してください。", + "pageLoadErrorId": "エラー ID: {id}", + "pageLoadErrorRetry": "もう一度試してください", + "pageLoadErrorTitle": "プロバイダーの読み込みに失敗しました", + "playgroundTitle": "プレイグラウンド", + "providerDetailConnectionFlexActive": "Codex Flex サービスティアはこの接続に対してアクティブです", + "providerDetailConnectionPriorityActive": "Codex プライオリティサービスティアがこの接続に対してアクティブです", + "providerDetailGlobalFlexActive": "グローバルコーデックスフレックスサービスティアがアクティブです", + "providerDetailGlobalPriorityActive": "グローバルコーデックス優先サービスティアがアクティブです", + "proxiesDistributed": "{tagLabel}{total} 接続に対して、{assigned} プロキシ割り当てを分散しました。", + "rerankEndpoint": "再ランク付け", + "savedModelEndpointSettings": "保存されたモデルエンドポイント設定", + "searchByModelAria": "モデルで検索", + "selectSupportedEndpoint": "サポートされているエンドポイントを少なくとも1つ選択してください", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "設定", @@ -6460,7 +6719,24 @@ "loadFailed": "サブスクリプション リストの読み込みに失敗しました", "toggleFailed": "スイッチの切り替えに失敗しました", "refreshFailed": "更新に失敗しました", - "deleteFailed": "削除に失敗しました" + "deleteFailed": "削除に失敗しました", + "add": "追加", + "cancel": "キャンセル", + "configure": "設定する", + "copyEndpoint": "エンドポイントをコピー", + "coreEndpointHint": "コアエンドポイントヒント", + "coreNodesHint": "コアノード ヒント", + "create": "作成", + "deleteConfirm": "削除確認", + "empty": "空です", + "globalModeDescription": "グローバルモードの説明", + "localCoreHint": "ローカルコアヒント", + "nodeSummary": "ノードの概要", + "providerRequired": "プロバイダーが必要です", + "providerRouting": "プロバイダー ルーティング", + "refresh": "更新", + "refreshInterval": "更新間隔", + "ruleModeDescription": "ルールモードの説明" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "画像リクエストをテキスト専用モデルにルーティングする前に、自動Vision-to-Textフォールバックを実行します。", "visionBridgeEnabledLabel": "有効", "visionBridgeEnabledDesc": "画像部分を抽出されたテキストに置き換える事前呼び出しブリッジを切り替えます。", + "visionBridgeRerouteTextOnlyLabel": "テキストのみのモデルを再ルーティングする", + "visionBridgeRerouteTextOnlyDesc": "選択したモデルに画像入力がない場合、画像を含む完全なリクエストをブリッジモデルに送信します。", "visionBridgeModel": "橋梁モデル", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "ビジョンをサポートする任意のOmniRouteモデルIDをここで使用できます。", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "APIキーにmanageスコープがありません。", "BYPASS_PREFIX_NOT_ALLOWED": "1つ以上のプレフィックスがスポーン可能なルートを対象としており、バイパスできません。", "GENERIC": "認可設定の更新に失敗しました。" - } + }, + "remove": "削除" }, "resilienceBaseCooldownLabel": "基本クールダウン", "scopeLabel": "範囲", @@ -7764,7 +8043,7 @@ "modalityBridgeTestButton": "サンプル画像でテストする", "modalityBridgeTestRunning": "テスト中…", "modalityBridgeTestOk": "ブリッジ OK — {model} によって説明された {count} 画像", - "modalityBridgeTestReroute": "ブリッジはリクエストを{name}に再ルーティングしました", + "modalityBridgeTestReroute": "ブリッジはリクエストを{model}に再ルーティングしました", "modalityBridgeTestNoop": "ブリッジがアクティブになりませんでした(モデルがネイティブにビジョンをサポートしているか、ブリッジが無効になっています)", "modalityBridgeTestError": "テストに失敗しました: {message}", "modalityBridgeAudioComingSoon": "オーディオブリッジ(音声 → テキスト via /v1/audio/transcriptions)は次のリリースに搭載されます。その設定キーはすでに予約されています。", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "オーディオをテスト中…", "modalityBridgeAudioTestOk": "オーディオブリッジ OK — {count} 件のクリップが {model} によって文字起こしされました", "modalityBridgeAudioTestNoop": "Audio Bridgeはアクティブになりませんでした(ターゲットはオーディオをサポートしている可能性がありますが、STTプロバイダーが接続されていないか、ブリッジが無効になっています)", - "modalityBridgeAudioTestError": "オーディオテストに失敗しました: {message}" + "modalityBridgeAudioTestError": "オーディオテストに失敗しました: {message}", + "modelRoutingDescriptionPlaceholder": "フロンティアコンボにオーパスモデルをルーティングする", + "cliproxyapiFallbackCodes": "Cliproxyapi フォールバックコード", + "cliproxyapiFallbackDescription": "Cliproxyapi フォールバックの説明", + "cliproxyapiHealthLabel": "Cliproxyapi 健康ラベル", + "cliproxyapiImportFailed": "Cliproxyapi のインポートに失敗しました", + "cliproxyapiImportResult": "Cliproxyapi インポート結果", + "cliproxyapiInvalidUrl": "Cliproxyapi 無効な URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi ライフサイクル通知 後", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi ライフサイクル通知 前", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi ライフサイクル通知リンク", + "cliproxyapiPortLabel": "Cliproxyapi ポートラベル", + "cliproxyapiStatusLabel": "Cliproxyapi ステータス ラベル", + "cliproxyapiVersionLabel": "Cliproxyapi バージョン ラベル", + "collection": "コレクション", + "errorPage": { + "description": "現在、設定を読み込むことができませんでした。数秒後に再試行してください。", + "errorId": "エラーID: {id}", + "retry": "もう一度試してください", + "title": "設定の読み込みに失敗しました" + }, + "host": "ホスト", + "notInstalled": "インストールされていません", + "oneproxyActions": "Oneproxy アクション", + "oneproxyActive": "Oneproxy アクティブ", + "oneproxyAnonymity": "Oneproxy 匿名性", + "oneproxyCountry": "Oneproxy 国", + "oneproxyDelete": "Oneproxy 削除", + "oneproxyEmpty": "Oneproxy が空です", + "oneproxyHost": "Oneproxy ホスト", + "oneproxyLatency": "Oneproxy レイテンシ", + "oneproxyProtocol": "Oneproxyプロトコル", + "oneproxyQuality": "Oneproxyの品質", + "oneproxySyncFailed": "同期に失敗しました: {error}", + "oneproxySyncSuccess": "{total} のプロキシが同期されました ({added} 新規, {updated} 更新済み)", + "proxyDocumentationSocks5DescAfter": "プロキシドキュメント Socks5 説明 後", + "proxyFreePoolAddProxy": "プロキシフリープール プロキシを追加", + "proxyFreePoolAdding": "プロキシフリープールの追加", + "proxyFreePoolSelectProxy": "プロキシフリープール プロキシを選択", + "proxyStatusActive": "プロキシステータス: アクティブ", + "proxyStatusInactive": "プロキシステータス: 非アクティブ", + "routingAddEntry": "エントリを追加", + "settingSaveFailed": "設定の保存に失敗しました", + "settingSaved": "設定が保存されました", + "skillsmpApiKeyHintAfter": "レート制限: {limit} リクエスト/日。", + "skillsmpApiKeyHintBefore": "からAPIキーを取得してください", + "syncFailed": "同期に失敗しました", + "unhealthy": "不健康", + "oneproxyDescription": "1proxyコミュニティプラットフォームから無料の検証済みプロキシを取得して回転させる", + "oneproxySyncing": "同期中...", + "oneproxySyncNow": "今すぐ同期", + "oneproxyClearAll": "すべてクリア", + "oneproxyGoogle": "グーグル", + "oneproxyClearAllConfirm": "すべての1proxyプロキシをクリアしますか?", + "memorySkillsSkillsmpDescription": "SkillsMPに接続して、マーケットプレイスからスキルを発見し、インストールします。", + "memorySkillsActiveProviderDescription": "スキルページが検索とインストールに使用するプロバイダーを選択してください。", + "memorySkillsSkillsmpProviderTitle": "SkillsMP マーケットプレイス", + "memorySkillsSkillsmpProviderDescription": "認証されたマーケットプレイス(あなたのSkillsMP APIキーを使用)。", + "memorySkillsSkillsshProviderTitle": "skills.sh ディレクトリ", + "memorySkillsSkillsshProviderDescription": "パブリックディレクトリプロバイダー(APIキーは不要です)。", + "routingCcBridgeCatalogName": "Anthropic互換CCブリッジ", + "routingClaudeProviderName": "クロード (OAuth)", + "routingClaudeProviderDescription": "OAuth発行トークンを使用したネイティブClaudeプロバイダー。", + "routingCcBridgeName": "クロードコードブリッジ", + "routingCcBridgeDescription": "APIキーを使用したリレーエンドポイント(anthropic-compatible-cc-*)。", + "routingCustomProviderDescription": "カスタムプロバイダー。", + "routingUnknownOpKind": "未知のオペレーションタイプ: {kind}", + "routingInvalidJson": "無効なJSON: {error}", + "routingConfigMustBeObject": "設定はJSONオブジェクトでなければなりません", + "routingEnabledMustBeBoolean": "`enabled` は true または false でなければなりません", + "routingPipelineMustBeArray": "`pipeline` は ops の配列でなければなりません", + "routingPipelineTooLong": "パイプラインは50のオペレーションを超えることはできません", + "routingOpMissingKind": "Op #{index}: `kind` が欠落しているか無効です", + "routingOpUnknownKind": "Op #{index}: 不明な種類 \"{kind}\"", + "routingJsonEditorHide": "JSONエディタを非表示にする", + "routingJsonEditorImportExport": "JSONのインポート / エクスポート", + "routingJsonEditorLabel": "JSON(編集して適用するか、インポートするために貼り付ける)", + "routingApplyJson": "JSONを適用する", + "routingTransformsFootnote": "すべての変換操作は再実行時に冪等です。変更は次のリクエストですぐに反映されます。", + "cliproxyapiUnknown": "不明", + "cliproxyapiVersion": "バージョン", + "cliproxyapiHealth": "健康", + "cliproxyapiPort": "ポート", + "qdrantHost": "ホスト", + "qdrantCollection": "コレクション" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "フル", "ultra": "ウルトラ" } + }, + "modeOptions": { + "default": "デフォルト", + "off": "オフ", + "lite": "ライト", + "standard": "標準", + "aggressive": "アグレッシブ", + "ultra": "ウルトラ", + "responsesToolOutput": "レスポンスツールの出力" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "スタックの最後に実行され(RTK/Cavemanがテキストをクリーンアップした後、OmniGlyphが残りを画像に変換)、omniglyph モードを介してスタンドアロンでも実行されます。これはプレビュー版であり、エンドツーエンドの検証が完了するまではデフォルトでオフのままになります。", "saved": "保存されました。", "saveFailed": "保存できませんでした。", - "enableAria": "OmniGlyphエンジンを有効にする" + "enableAria": "OmniGlyphエンジンを有効にする", + "title": "OmniGlyph" }, "embeddedServices": { "title": "組み込みサービス", @@ -9127,7 +9500,49 @@ "unableToLoad": "システムメトリクスをロードできません", "product": "製品", "resources": "リソース", - "company": "会社名" + "company": "会社名", + "tokenHealthTooltips": { + "allHealthy": "すべてのトークンは正常です", + "needsAttention": "いくつかのトークンに注意が必要です", + "refreshFailures": "トークンのリフレッシュ失敗が検出されました", + "unknown": "健康状態不明" + }, + "systemMonitor": { + "metricsAriaLabel": "システムメトリクス", + "memory": "メモリ", + "memoryShort": "メモリ", + "uptime": "稼働時間", + "ariaLabel": "システム監視", + "title": "システムモニター", + "version": "バージョン", + "connections": "接続", + "circuitBreakers": "サーキットブレーカー", + "open": "{count} オープン", + "memoryUsage": "メモリ使用量" + }, + "never": "決して", + "justNow": "たった今", + "minutesAgo": "{count}分前", + "hoursAgo": "{count}時間前", + "tokens": "トークン", + "costs": "コスト", + "autoRefresh": "自動更新 ({seconds}s)", + "toggleAutoRefresh": "自動更新を切り替える", + "activeRequests": "アクティブリクエスト", + "totalRequests": "合計リクエスト数", + "totalInputTokens": "合計入力トークン", + "model": "モデル", + "provider": "プロバイダー", + "requests": "リクエスト", + "lastUsed": "最終使用日時", + "inputTokens": "入力トークン", + "totalTokens": "合計トークン", + "inputCost": "入力コスト", + "outputCost": "出力コスト", + "noUsageData": "まだ使用状況は記録されていません。データを表示するにはリクエストをいくつか行ってください。", + "account": "アカウント", + "accountLabel": "アカウント {id}", + "noAccountUsage": "まだアカウント固有の使用状況は記録されていません。ここでデータを見るには、OAuthアカウントを使用してリクエストを行ってください。" }, "auth": { "welcome": "ようこそ", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "アプリデータを介してリセット", + "resetViaAppDataDescription": "アプリデータディレクトリから設定ファイルを削除してパスワードをリセットしてください:", + "quitDesktopApp": "OmniRouteデスクトップアプリを完全に終了します", + "navigateToAppDataDirectory": "アプリデータディレクトリに移動します:", + "checkSystemAppDataFolder": "(システムアプリデータフォルダーを確認してください)", + "relaunchDesktopFreshSetup": "OmniRouteデスクトップアプリを再起動します — 新しいセットアップが開始されます", + "alternativeSetPasswordTitle": "代替案: 新しいパスワードを設定", + "alternativeSetPasswordDescription": "サーバー環境ファイルを介して新しい初期パスワードを設定します:", + "openServerEnvFilePrefix": "開く", + "relaunchDesktopApp": "OmniRoute デスクトップアプリを再起動します", + "codexLinkInvalidOrExpired": "このリンクは無効または期限切れです。", + "codexValidationServerError": "このリンクを検証するためにサーバーに接続できませんでした。", + "codexSaveConnectionError": "接続を保存できませんでした。リンクが期限切れの可能性があります。", + "codexDeviceLoginDisabled": "このOpenAIアカウントではデバイスコードログインが無効になっています。ChatGPTのセキュリティ設定で有効にするか、ワークスペース管理者に問い合わせてください。", + "codexAuthorizationTimedOut": "認証がタイムアウトしました。再試行するには「再度開始」をクリックしてください。", + "authenticationCancelled": "認証がキャンセルされました。", + "unexpectedAuthenticationError": "認証中に予期しないエラーが発生しました。もう一度お試しください。", + "connectOpenAiCodexTitle": "OpenAI Codexに接続する", + "codexConnectDescription": "この接続を設定するために、ChatGPTアカウントを認証してください。", + "validatingCodexLink": "リンクを検証中…", + "codexGenerateCodeDescription": "以下をクリックしてワンタイムコードを生成し、その後OpenAIにサインインしてください。", + "startCodexFlow": "開始", + "requestingOpenAiCode": "OpenAIからコードをリクエストしています…", + "codexVerificationInstructions": "1. OpenAIの認証ページを開き、2. このコードを入力してください。このページは、認証が完了すると自動的に更新されます。", + "yourCode": "あなたのコード", + "openVerificationPage": "検証ページを開く", + "copyUrlShort": "URLをコピー", + "savingConnection": "接続を保存しています…", + "codexConnected": "接続されました!", + "codexConnectionRegistered": "Codexアカウントが登録されました。このタブを閉じることができます。", + "tryAgain": "もう一度試してください", + "traeAuthorizationSuccess": "Trae 認証 ✓", + "traeAuthorizationFailed": "Traeの認証に失敗しました", + "closeAuthorizationWindow": "このウィンドウを閉じることができます。", + "returnToDashboard": "ダッシュボードに戻る。", + "resetViaAppData": "アプリデータを介してリセット", + "deleteSettingsToReset": "アプリデータディレクトリから設定ファイルを削除してパスワードをリセットしてください:", + "quitAppCompletely": "OmniRouteデスクトップアプリを完全に終了します", + "navigateToAppData": "アプリデータディレクトリに移動する", + "checkAppDataFolder": "システムアプリデータフォルダーを確認してください", + "deleteSettingsJson": "削除", + "relaunchAppFresh": "OmniRoute デスクトップアプリを再起動します — 新しいセットアップが開始されます", + "alternativeSetPassword": "代替案: 新しいパスワードを設定", + "setNewPasswordViaEnv": "サーバー環境ファイルを介して新しい初期パスワードを設定します:", + "openServerEnv": "開く", + "inDataDirectory": "データディレクトリ内で", + "addOrUpdate": "追加または更新", + "deleteAndRelaunch": "削除", + "settingsJson": "settings.json", + "fromDataDir": "データディレクトリから", + "relaunchApp": "OmniRoute デスクトップアプリを再起動します" }, "landing": { "brandName": "オムニルート", @@ -9275,7 +9741,19 @@ "ctaTitle": "AI インフラストラクチャを簡素化する準備はできていますか?", "ctaDescription": "OmniRoute との AI 統合を効率化している開発者に加わりましょう。オープンソースで無料で始められます。", "startFree": "無料で始める", - "readDocumentation": "ドキュメントを読む" + "readDocumentation": "ドキュメントを読む", + "company": "会社", + "pricing": "価格設定", + "apiReference": "API リファレンス", + "helpCenter": "ヘルプセンター", + "about": "約について", + "blog": "ブログ", + "contact": "連絡先", + "terms": "利用規約", + "privacy": "プライバシー", + "license": "ライセンス", + "footerDescription": "現代のAIインフラストラクチャのための統一インターフェース。安全で、観測可能で、スケーラブルです。", + "communityDiscussions": "コミュニティディスカッション" }, "docs": { "title": "ドキュメント", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "エージェント間の通信とツール共有のために、ACP レジストリを介してエージェントを登録および管理します。", "protocolAcpStep1": "[ダッシュボード] → [エージェント] に移動して、登録されている ACP エージェントを表示します。", "protocolAcpStep2": "機能とエンドポイント構成を備えた新しいエージェントを登録します。", - "protocolAcpStep3": "CLI ツールを使用してエージェント通信チャネルを設定します。" + "protocolAcpStep3": "CLI ツールを使用してエージェント通信チャネルを設定します。", + "metadataTitleTemplate": "%s — OmniRoute ドキュメント", + "metadataDefaultTitle": "OmniRoute ドキュメント", + "metadataDescription": "OmniRoute AIゲートウェイの包括的なドキュメント — セットアップ、API、圧縮、デプロイメント、その他。", + "layoutNavTitle": "OmniRoute ドキュメント", + "layoutHomeLink": "ドキュメントホーム", + "layoutDashboardLink": "← ダッシュボードに戻る", + "homeTitle": "OmniRoute ドキュメント", + "homeMetadataDescription": "AIをルーティング、圧縮、スケーリングするために必要なすべて — セットアップガイド、APIリファレンス、圧縮、デプロイメントなど。", + "homeTwitterDescription": "OmniRoute AIゲートウェイの包括的なドキュメント", + "homeDescription": "AIをルーティング、圧縮、スケーリングするために必要なすべてのもの", + "homeSearchHint": "ドキュメントを検索するには、Ctrl K を押してください", + "featuredQuickStartTitle": "クイックスタート", + "featuredQuickStartDescription": "OmniRouteを3分で実行する", + "featuredAutoComboTitle": "オートコンボガイド", + "featuredAutoComboDescription": "OmniRouteがあなたに最適なAIを選びます。", + "featuredProvidersTitle": "プロバイダーガイド", + "featuredProvidersDescription": "数分でAIプロバイダーを接続する", + "nonTechUsersTitle": "非技術者向け", + "nonTechUsersSubtitle": "すぐに始めましょう — 技術的なバックグラウンドは必要ありません", + "techUsersTitle": "テクニカルユーザー向け", + "techUsersSubtitle": "アーキテクチャ、API、および内部の詳細に深く掘り下げる", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute ドキュメント", + "apiExplorerMetadataDescription": "インタラクティブAPIエクスプローラー — リアルタイムのレスポンスでOmniRouteエンドポイントをライブで試す", + "apiExplorerTitle": "API エクスプローラー", + "apiExplorerDescription": "OmniRoute エンドポイントをライブで試してみてください。エンドポイントを選択し、リクエストを設定し、リアルタイムでレスポンスを確認します。", + "apiExplorerSseStarted": "SSEストリームが開始されました — リアルタイム出力はターミナル/デベロッパーツールを確認してください。", + "apiExplorerError": "エラー: {message}", + "apiExplorerAuth": "認証", + "apiExplorerResponseLabel": "応答", + "apiExplorerSelectEndpoint": "探索するエンドポイントを選択してください", + "apiExplorerChooseApi": "サイドバーからAPIを選択して、詳細を確認し、ライブで試してください", + "feedbackThanks": "フィードバックありがとうございます!", + "feedbackQuestion": "このページは役に立ちましたか?", + "pageMetadataTitle": "{title} — OmniRoute ドキュメント", + "pageMetadataDescription": "OmniRoute ドキュメント: {title}", + "breadcrumb": "パンくずリスト", + "apiReferenceTable": { + "parameters": "パラメータ", + "name": "名前", + "type": "タイプ", + "description": "説明", + "returns": "戻る", + "typePrefix": "タイプ:" + } }, "legal": { "privacyPolicy": "プライバシーポリシー", @@ -9957,7 +10479,42 @@ "successMessage": "{providerName} アカウントが接続されました。", "done": "完了", "error": "接続に失敗しました", - "tryAgain": "もう一度試してください" + "tryAgain": "もう一度試してください", + "errorSessionIncomplete": "OAuthセッションが不完全です(リダイレクトURIまたはコード検証子が不足しています)。接続を再起動して再試行してください。", + "errorExchangeFailed": "交換に失敗しました", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: デフォルトのGoogle OAuth資格情報はlocalhostでのみ機能します。リモートで使用するには、環境変数ANTIGRAVITY_OAUTH_CLIENT_IDおよびANTIGRAVITY_OAUTH_CLIENT_SECRETを介して独自のOAuth資格情報を構成してください。READMEの「リモートサーバーでのOAuth」セクションを参照してください。", + "errorSaveFailed": "保存に失敗しました", + "errorAuthorizationFailed": "認証に失敗しました", + "errorAuthorizationTimeout": "認証タイムアウト", + "errorRequestFailed": "リクエストに失敗しました", + "errorCallbackServerFailed": "コールバックサーバーの起動に失敗しました", + "errorBrowserUnavailable": "現在の環境では、このプロバイダーのブラウザーOAuthは利用できません。代わりにサポートされている認証方法を使用してください。", + "errorStateMismatch": "OAuthの状態が一致しません。接続を再起動して再試行してください。", + "errorImportAccessToken": "アクセストークンのインポートに失敗しました", + "errorSessionNotInitialized": "OAuthセッションが初期化されていません。接続フローを再起動して、もう一度お試しください。", + "errorNoAuthorizationCode": "認証コードが見つかりません。コールバックURLまたは認証コードを貼り付けてください。", + "tabDeviceCode": "デバイスコード", + "tabBrowserLogin": "ブラウザログイン", + "tabImportAuthJson": "auth.jsonをインポートする", + "tabPasteApiKey": "APIキーを貼り付ける", + "windsurfPasteDescription": "Windsurf / VS Code IDE で、コマンドパレットから「Windsurf: Provide Auth Token」コマンドを実行するか、Jupyter の「Get Windsurf Authentication Token」ボタンをクリックしてください。その後、表示されたトークンをコピーして下に貼り付けてください。windsurf.com/show-auth-token を直接開くと「リダイレクト中」ページのみが表示されます — IDE がフローを開始する必要があります。", + "grokAuthJsonDescription": "~/.grok/auth.json の完全な内容を貼り付けてください(JWT \"key\" フィールドだけではありません)。生の JWT には refresh_token がないため、有効期限切れ後に接続が切断されます (#7610)。利用可能な場合は、専用の Import auth.json モーダルを使用してください。", + "devinDesktopPasteDescription": "認証されたDevinセッションから既存のDevin APIキーを貼り付けてください。キーのエクスポートの可用性と手順は、Devinのバージョンとアカウントによって異なります。", + "devinPasteDescription": "WINDSURF_API_KEYを提供してください(`devin auth login`を介して取得するか、Windsurf IDEの「Windsurf: Provide Auth Token」コマンドを介して取得します)。", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "APIキー / トークン", + "saving": "保存中…", + "saveConnection": "接続を保存", + "gheDescription": "GitHub Enterprise インスタンスのベース URL を入力してください (例: https://ghe.yourcompany.com)。", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise の URL", + "gheUrlRequired": "GitHub Enterprise URLは必須です", + "gitlabDuoSetupTitle": "GitLab Duo OAuth セットアップ", + "gitlabDuoSetupMessage": "GitLab Duo OAuthが構成されていません。{applicationsUrl}でOAuthアプリケーションを登録し、リダイレクトURI {redirectUri}とスコープ\"{scopes}\"を設定してください。その後、{clientIdEnv}(オプションで{clientSecretEnv}も)を設定し、再起動してください。", + "gitlabDuoSetupDescription": "アプリケーションが登録され、環境変数がこのOmniRouteインスタンスに設定された後、続行をクリックしてOAuthログインを開始します。", + "continue": "続ける" }, "cursorAuthModal": { "title": "カーソルIDEの接続", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "さらに読み込む", - "loadingMore": "さらに読み込み中..." + "loadingMore": "さらに読み込み中...", + "correlationId": "相関ID", + "group": { + "showAllRows": "すべての行を表示", + "showLatestPerCorrelation": "最新の相関IDを表示", + "grouped": "グループ化された" + }, + "running": "実行中", + "interval": { + "decrease": "間隔を減らす", + "title": "自動更新間隔(秒)", + "increase": "間隔を増やす" + }, + "status": { + "inProgress": "進行中", + "recoveredByRetry": "リトライによって回復しました", + "goToParent": "親リクエストに移動", + "healedTitle": "失敗しましたが、{count} 回の再試行後に回復しました", + "healed": "治癒した", + "failedTitle": "すべての{count}回の試行が失敗しました", + "failed": "失敗しました", + "pinnedTitle": "コンテキストキャッシュセッションピンニングを介して選択されたモデル", + "pinned": "ピン留めされた" + }, + "attempts": "試行回数", + "detail": { + "collapse": "{title}を折りたたむ", + "expand": "{title}を展開する", + "copyTitle": "{title}をコピー", + "copied": "コピーしました!", + "copy": "コピー", + "autoscrollOn": "自動スクロール: オン", + "autoscrollOff": "自動スクロール: オフ", + "payload": { + "clientRawRequest": "クライアント生リクエスト", + "clientRequest": "クライアントリクエスト", + "openaiRequest": "OpenAI リクエスト", + "providerRequest": "プロバイダーリクエスト", + "providerResponse": "プロバイダーの応答", + "clientResponse": "クライアントの応答", + "pipelineError": "パイプラインエラー" + }, + "payloadMissing": "このログエントリの詳細なペイロードアーティファクトはもはや利用できません。", + "payloadCorrupt": "詳細なペイロードアーティファクトを解析できませんでした。", + "notAvailable": "該当なし", + "semanticCache": "セマンティック (OmniRoute)", + "upstreamCache": "上流 (プロバイダー)", + "ariaLabel": "リクエストログの詳細", + "completed": "完了しました", + "upstreamStatus": "上流: {status}", + "statusDiscrepancy": "OmniRouteは{provider}を返したにもかかわらず{status}を返しました", + "previousRequest": "前のリクエスト", + "nextRequest": "次のリクエスト", + "close": "詳細モーダルを閉じる", + "startedAt": "開始時刻", + "endedAt": "終了時刻", + "duration": "期間", + "model": "モデル", + "provider": "プロバイダー", + "account": "アカウント", + "input": "入力", + "totalIn": "合計入金: {value}", + "cacheRead": "キャッシュ読み取り: {value}", + "cacheWrite": "キャッシュ書き込み: {value}", + "compressed": "圧縮済み: {from} → {to} ({percent}% 節約)", + "output": "出力", + "totalOut": "合計出力: {value}", + "reasoning": "理由: {value}", + "requestedModel": "要求されたモデル", + "requestProtocol": "要求プロトコル", + "cacheSource": "キャッシュソース", + "modelPinning": "モデルピン留め", + "activeModelPinning": "アクティブ — セッションピンニングを介して選択されたモデル", + "rotated": "回転: {initial} -> {final}", + "apiKey": "APIキー", + "noApiKey": "APIキーがありません", + "combo": "コンボ", + "error": "エラー", + "unblockAll": "すべてのブロックを解除", + "cleared": "クリアされた", + "unblock": "ブロック解除", + "relatedRequests": "関連リクエスト ({count})", + "current": "現在", + "detailStatus": "詳細ステータス", + "loadingDetails": "リクエストの詳細を読み込んでいます...", + "providerEventStream": "プロバイダーイベントストリーム", + "clientEventStream": "クライアントイベントストリーム", + "eventStream": "イベントストリーム", + "responsePayloadLegacy": "レスポンスペイロード(レガシー)", + "requestPayloadLegacy": "リクエストペイロード(レガシー)", + "noPayload": "このログエントリにはペイロードデータがありません。", + "correlationId": "相関ID", + "correlationIdValue": "相関ID: {id}", + "detailedPayloadInfo": "新しいリクエストのために四段階のクライアント/プロバイダー ペイロードビューを表示したい場合は、まず詳細なログ記録を有効にしてください。" + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} が無効になりました", "providerAdded": "{provider}が追加されました", "add": "追加", - "manualApiKey": "手動APIキーを使用する" + "manualApiKey": "手動APIキーを使用する", + "createDahlTokenFailed": "Dahlトークンの作成に失敗しました", + "providerProxy": "プロキシ", + "providerProxyConfigureHint": "プロキシを設定する", + "providerProxyTitleConfigured": "プロキシが設定されました: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "利用規約による制限あり — 規約を確認してください", "caution": "注意 — 個人利用/プロキシ条項", "ok": "一般的に許容" - } + }, + "allProviders": "すべてのプロバイダー", + "noApiKeyRequired": "APIキーは不要です" }, "providerHealthAutopilot": { "title": "プロバイダーヘルスオートパイロット", @@ -12390,7 +13047,11 @@ "on": "オン", "off": "オフ", "availableProviders": "利用可能なプロバイダー ({count})", - "noProviderOverrides": "オーバーライドなし — すべてのアクティブなプロバイダーがデフォルトモデルで参加します" + "noProviderOverrides": "オーバーライドなし — すべてのアクティブなプロバイダーがデフォルトモデルで参加します", + "resetFailed": "リセットに失敗しました", + "resetSuccess": "設定がデフォルトにリセットされました", + "running": "実行中...", + "testFailed": "テストに失敗しました" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi(Moonshot AI)はOmniRouteの創設オープンソースフレンドです", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "プロバイダーはこの画像リクエストのビジョンをサポートしていません", "capabilityFilter.toolsMismatch": "プロバイダーはツール呼び出しをサポートしていません", "capabilityFilter.structuredOutputMismatch": "プロバイダーは構造化出力をサポートしていません", - "capabilityFilter.contextWindowMismatch": "リクエストがプロバイダーのコンテキストウィンドウを超えています" + "capabilityFilter.contextWindowMismatch": "リクエストがプロバイダーのコンテキストウィンドウを超えています", + "publicSystem": { + "notFound": { + "title": "ページが見つかりません", + "description": "お探しのページは存在しないか、移動されました。", + "dashboardAriaLabel": "ダッシュボードに戻る", + "statusAriaLabel": "システムステータスページを開く", + "systemStatus": "システムステータス" + }, + "error": { + "title": "内部サーバーエラー", + "description": "リクエストの処理中に問題が発生しました。私たちのチームが通知を受けており、修正に取り組んでいます。", + "errorId": "エラーID: {id}", + "detailsAriaLabel": "エラーの詳細", + "retryAriaLabel": "ページの再読み込みを試みる", + "tryAgain": "もう一度試してください", + "dashboardAriaLabel": "ダッシュボードに戻る", + "statusAriaLabel": "システムステータスを開く", + "systemStatus": "システムステータス" + }, + "globalError": { + "title": "何かがうまくいきませんでした", + "description": "予期しないエラーが発生しました。これがログに記録されており、私たちのチームが調査します。", + "detailsAriaLabel": "エラーの詳細", + "retryAriaLabel": "ページの再読み込みを試みる", + "tryAgain": "もう一度試してください", + "statusAriaLabel": "システムステータスを開く", + "systemStatus": "システムステータス" + }, + "offline": { + "title": "接続の問題", + "description": "OmniRouteは現在ネットワークに接続できません。インターネット、VPN、またはプロキシ設定を確認してください。", + "connectionRestored": "接続が復元されました", + "offlineModeDetected": "オフラインモードが検出されました", + "retryConnection": "接続を再試行", + "openStatusPage": "ステータスページを開く" + }, + "maintenance": { + "title": "定期メンテナンス", + "description": "一部のサービスはメンテナンス中に一時的に利用できません。コアルーティングは通常オンラインのままですが、管理機能は劣化する可能性があります。", + "suggestion1": "数分後に再試行してください。", + "suggestion2": "再試行する前に、現在の健康指標とプロバイダーのステータスを確認してください。", + "systemStatus": "システムの状態を表示", + "healthDashboard": "ヘルスダッシュボードを開く" + }, + "status": { + "title": "システムステータス", + "description": "OmniRouteコアサービスのライブ運用スナップショット。", + "loadingHealth": "ヘルス指標を読み込んでいます...", + "failedToLoad": "システムのヘルスを読み込めませんでした。", + "unableToReachHealth": "ヘルスエンドポイントに到達できません。接続を確認して再試行してください。", + "healthCheckFailed": "ヘルスチェックに失敗しました", + "openConnectivityHelp": "オープン接続ヘルプ", + "maintenanceInfo": "メンテナンス情報", + "service": "サービス", + "unknown": "不明", + "notAvailable": "該当なし", + "providersTracked": "追跡されたプロバイダー", + "circuitBreakerState": "プロバイダー サーキット ブレーカーの状態", + "lastUpdate": "最終更新: {timestamp}", + "uptimeMinutes": "{minutes}分", + "uptimeHoursMinutes": "{hours}時間 {minutes}分" + }, + "statusPages": { + "400": { + "title": "不正なリクエスト", + "description": "リクエストペイロードが無効または不完全です。", + "suggestion1": "再試行する前に、必須フィールドとペイロード形式を確認してください。", + "suggestion2": "APIを使用している場合は、ローカルでJSONスキーマを検証してください。", + "suggestion3": "この問題が続く場合は、ペイロードを確認するためにTranslator Playgroundでリクエストを開いてください。", + "primaryAction": "ドキュメントを開く", + "secondaryAction": "翻訳者を開く" + }, + "401": { + "title": "未承認", + "description": "このリソースにアクセスするには認証が必要です。", + "suggestion1": "再度サインインして操作を再試行してください。", + "suggestion2": "API呼び出しのために、Bearerトークンが存在し、有効であることを確認してください。", + "suggestion3": "トークンが最近ローテーションされた場合は、クライアントの資格情報を更新してください。", + "primaryAction": "ログインに移動", + "secondaryAction": "APIキーを管理する" + }, + "403": { + "title": "禁止されています", + "description": "リクエストは理解されましたが、ポリシーによりアクセスが拒否されました。", + "suggestion1": "設定でIPの許可リスト/ブロックリストルールを確認してください。", + "suggestion2": "APIキーに割り当てられたモデルおよび予算ポリシーを確認してください。", + "suggestion3": "管理者に必要な権限スコープを付与するよう依頼してください。", + "primaryAction": "オープンアクセスヘルプ", + "secondaryAction": "セキュリティ設定を開く" + }, + "408": { + "title": "リクエストタイムアウト", + "description": "サーバーは時間内に完全なリクエストを受信しませんでした。", + "suggestion1": "より小さいペイロードでリクエストを再試行してください。", + "suggestion2": "ネットワークの安定性とVPN/プロキシのレイテンシを確認してください。", + "suggestion3": "長時間の操作の場合は、ストリーミングを有効にするか、リクエストを分割してください。", + "primaryAction": "エンドポイントガイドを開く", + "secondaryAction": "ネットワークの状態を確認する" + }, + "429": { + "title": "リクエストが多すぎます", + "description": "このクライアント、キー、またはプロバイダーのレート制限を超えました。", + "suggestion1": "クールダウンを待って、提案された間隔の後に再試行してください。", + "suggestion2": "フォールバックプロバイダーを使用したコンボに切り替えます。", + "suggestion3": "設定でプロバイダーのレジリエンス/レート制限プロファイルを調整します。", + "primaryAction": "レジリエンス設定を開く", + "secondaryAction": "オープンコンボ" + }, + "500": { + "title": "内部サーバーエラー", + "description": "リクエストの処理中に予期しないサーバー側のエラーが発生しました。", + "suggestion1": "数秒後にもう一度試してください。", + "suggestion2": "ヘルス テレメトリとサーバーログを確認して、相関するリクエスト ID を探してください。", + "suggestion3": "持続する場合は、タイムスタンプとリクエストコンテキストを含めて問題を報告してください。", + "primaryAction": "ヘルスダッシュボードを開く", + "secondaryAction": "ログを開く" + }, + "502": { + "title": "不正なゲートウェイ", + "description": "上流プロバイダーまたはゲートウェイ統合が無効な応答を返しました。", + "suggestion1": "別のプロバイダーまたはアクティブなコンボルートで再試行してください。", + "suggestion2": "プロバイダーの資格情報とモデルの利用可能性を確認してください。", + "suggestion3": "フォーマット変換が関与している場合は、翻訳者の出力を検査してください。", + "primaryAction": "プロバイダーを開く", + "secondaryAction": "翻訳者を開く" + }, + "503": { + "title": "サービス利用不可", + "description": "サービスはメンテナンスまたは依存関係の劣化により、一時的に利用できません。", + "suggestion1": "少々お待ちいただき、再試行してください。", + "suggestion2": "メンテナンス通知とシステムステータスを確認してください。", + "suggestion3": "レイテンシに敏感なワークフローの場合は、フォールバックプロバイダーを使用してください。", + "primaryAction": "メンテナンスの詳細", + "secondaryAction": "システムステータス" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel}に接続", + "chooseMethod": "認証方法を選択してください:", + "builderId": "AWSビルダーID", + "builderDescription": "ほとんどのユーザーに推奨されます。{providerLabel}にリンクされたAWSアカウントでサインインしてください。", + "organization": "あなたの組織 (AWS IAM アイデンティティセンター)", + "organizationDescription": "会社のSSO開始URLを使用してください(例:{url})。", + "googleAccount": "Google アカウント", + "googleDescription": "Googleアカウントでログインしてください。", + "githubAccount": "GitHub アカウント", + "githubDescription": "GitHubアカウントでログインしてください。", + "importToken": "トークンをインポート", + "importDescription": "{providerLabel}からエクスポートされたリフレッシュトークンを貼り付けてください。", + "apiKey": "APIキー", + "apiKeyDescription": "長期有効な {providerLabel} / CodeWhisperer API キーを貼り付けてください。これはリフレッシュトークンなしでベアラー資格情報として保存されます。プロファイルの発見は最善を尽くします。", + "idcStartUrl": "IDC スタート URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "あなたの組織のAWS IAMアイデンティティセンターのURL", + "awsRegion": "AWSリージョン", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "アイデンティティセンターのAWSリージョン(デフォルト:us-east-1)", + "continue": "続ける", + "back": "戻る", + "autoDetecting": "トークンを自動検出中...", + "readingCredentials": "AWS SSO キャッシュから {providerLabel} 認証情報を読み込んでいます", + "tokenNotDetected": "{providerLabel} トークンは自動検出されませんでした。リフレッシュトークンを手動で貼り付けてください。", + "refreshToken": "リフレッシュトークン", + "tokenPlaceholder": "トークンが自動的に入力されます...", + "importing": "インポート中...", + "apiKeyPlaceholder": "{providerLabel} APIキーを貼り付けてください...", + "apiKeyStoredDescription": "長期的なベアラー資格情報として暗号化されて保存されています。リフレッシュフローはありません。", + "apiKeyRegionDescription": "キーのAWSリージョン(デフォルト:us-east-1)", + "validating": "検証中...", + "validateAndSaveApiKey": "APIキーを検証して保存する", + "errorAutoDetect": "トークンを自動検出できませんでした", + "errorAutoDetectFailed": "トークンの自動検出に失敗しました", + "errorRefreshTokenRequired": "リフレッシュトークンを入力してください", + "errorImportFailed": "インポートに失敗しました", + "errorApiKeyRequired": "Kiro APIキーを入力してください", + "errorApiKeyImportFailed": "APIキーのインポートに失敗しました", + "errorIdcStartUrlRequired": "IDCの開始URLを入力してください" + }, + "kiroSocialOAuthModal": { + "title": "{providerName}を介して{providerLabel}に接続する", + "errorStartAuthorization": "認証の開始に失敗しました", + "errorAuthorizationExpired": "認証が期限切れです。再度ログインフローを開始してください。", + "errorAuthorizationFailed": "認証に失敗しました", + "initializing": "初期化中...", + "settingUp": "{providerName} 認証の設定中", + "openIncognito": "このリンクをシークレットウィンドウで開く", + "incognitoDescription": "既存のアカウントとのセッションの競合を避けるために、シークレット/プライベートウィンドウを使用してください。", + "copyLink": "リンクをコピー", + "verificationCode": "確認コード", + "waiting": "承認を待っています...", + "cancel": "キャンセル", + "successTitle": "接続に成功しました!", + "successMessage": "あなたの{providerName}を介した{providerLabel}アカウントが接続されました。", + "done": "完了", + "errorTitle": "接続に失敗しました", + "close": "閉じる" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "認証に失敗しました", + "errorPopupBlocked": "ポップアップがブロックされました — このサイトのポップアップを許可するか、下にトークンを手動で貼り付けてください。", + "errorPopupClosed": "認証ウィンドウは完了する前に閉じられました。", + "errorAccessTokenRequired": "アクセストークンが必要です。", + "errorImportFailed": "インポートに失敗しました", + "title": "Trae SOLOに接続する", + "authorizeDescription": "ポップアップでtrae.aiを介して認証します。トークンがインポートされると、ポップアップは自動的に閉じます。", + "authorizeImportant": "重要: まず、このブラウザで trae.ai にログインしている必要があります。認証ページは既存のセッションを確認するだけで、サインインすることはできません。「ログイン失敗」と表示された場合は、「solo.trae.aiを開く」をクリックし、サインインしてからここに戻ってください。", + "waitingForAuthorization": "trae.aiを待っています…", + "authorizeWithBrowser": "ブラウザで認証する", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "またはトークンを手動で貼り付けます", + "manualInstructions": "solo.trae.ai にサインインし、DevTools → ネットワークを開き、任意のチャットメッセージを送信し、Authorization: Cloud-IDE-JWT {tokenPlaceholder} リクエストヘッダーからJWTをコピーします。JWTの有効期限は約14日です。オプションのアイデンティティフィールドは、同じリクエストボディのcommon_paramsから取得されます。", + "accessTokenLabel": "アクセストークン (Cloud-IDE-JWT)", + "webId": "ウェブ ID", + "optional": "オプション", + "bizUserId": "ビジネスユーザーID", + "userUniqueId": "ユーザー固有ID", + "scope": "スコープ", + "tenant": "テナント", + "region": "地域", + "importing": "インポート中…", + "importToken": "トークンをインポート", + "cancel": "キャンセル" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "配布中...", + "complete": "完了", + "defaultLabel": "プロキシを配布する" + } + }, + "providerTest": { + "dialogLabel": "テスト {provider}", + "deprecated": "非推奨", + "risk": "リスク", + "close": "閉じる", + "model": "モデル", + "key": "キー", + "defaultKey": "デフォルト", + "clearConversation": "会話をクリアする", + "clear": "クリア", + "tabs": { + "test": "テスト", + "logs": "ログ" + }, + "loadingLogs": "ログを読み込んでいます…", + "failedToLoadLogs": "ログの読み込みに失敗しました", + "noLogsYet": "まだログはありません", + "noLogsDescription": "テストタブからテストメッセージを送信してください — このプロバイダーのログがここに表示されます。", + "openFullLogs": "フルログページを開く", + "live": "ライブ", + "tailingLast": "最後の {count} を表示中", + "refreshNow": "今すぐ更新", + "refresh": "更新", + "unknownRequester": "不明なリクエスター", + "fields": { + "timestamp": "タイムスタンプ", + "status": "ステータス", + "duration": "期間", + "model": "モデル", + "requestedModel": "要求されたモデル", + "provider": "プロバイダー", + "requester": "リクエスター", + "tokens": "トークン" + } + }, + "proxyLog": { + "detailAriaLabel": "プロキシログの詳細", + "event": "プロキシイベント", + "close": "プロキシ詳細モーダルを閉じる", + "time": "時間", + "latency": "レイテンシ", + "clientIp": "クライアントIP", + "proxy": "プロキシ", + "direct": "直接", + "type": "タイプ", + "level": "レベル", + "provider": "プロバイダー", + "tlsFingerprint": "TLSフィンガープリント", + "directNative": "ダイレクト", + "targetUrl": "ターゲットURL", + "error": "エラー", + "configuration": "プロキシ設定" + }, + "requestTimeline": { + "title": "リクエストタイムライン", + "modes": { + "follow": "フォローする", + "followDescription": "軸が左にスクロールし、NOWラインは75%に留まります。", + "now": "今", + "nowDescription": "現在の時間にジャンプ、NOW行が中央にリセットされます", + "pan": "パン", + "panDescription": "ドラッグして探索、背景は固定されています" + }, + "reset": "リセット", + "started": "開始しました", + "ended": "終了しました", + "duration": "期間", + "status": "ステータス", + "provider": "プロバイダー", + "tokens": "トークン", + "active": "アクティブ", + "other": "その他", + "tenMinutes": "10分", + "hour": "時間", + "day": "日", + "unknownModel": "不明", + "pending": "保留中" + }, + "metadata": { + "compressionTitle": "圧縮", + "compressionDescription": "トークンの使用量とコストを削減するために、コンテキスト圧縮設定を構成します。", + "relayTitle": "OmniRoute — リレープロキシ", + "relayDescription": "AIインフラストラクチャのためのサーバーレスリレープロキシエンドポイント", + "trafficInspectorTitle": "トラフィックインスペクター — OmniRoute", + "trafficInspectorDescription": "LLMコールを監視し、アプリケーションのHTTPSトラフィックをデバッグする" + }, + "conductor": { + "title": "コンダクター — CLIエージェントのフリート", + "subtitle": "OmniConductor ハブ: ランナー、タスクキュー、カウンシル、ライブ", + "runners": "ランナー", + "tasks": "タスク", + "colName": "名前", + "colClis": "CLIs", + "colStatus": "ステータス", + "colTask": "タスク", + "colMode": "モード", + "colRunner": "ランナー", + "colSummary": "概要", + "online": "オンライン", + "offline": "オフライン", + "draining": "排水中", + "hubOffline": "コンダクターハブがオフラインまたは設定されていません (CONDUCTOR_HUB_URL) — 古いデータではなく何も表示されません。", + "noRunners": "ランナーが登録されていません", + "noTasks": "まだタスクはありません", + "detailTitle": "タスクの詳細", + "prompt": "プロンプト", + "branch": "ブランチ", + "fetchHint": "結果を取得するには: git fetch origin {branch}", + "council": "評議会", + "candidates": "候補者", + "cancel": "タスクをキャンセル", + "cancelConfirmTitle": "このタスクをキャンセルしますか?", + "cancelConfirmMessage": "ハブはランナーでの実行を中止します。これは元に戻すことはできません。", + "cancelFailed": "ハブはキャンセルを拒否しました", + "close": "閉じる", + "error": "エラー", + "faroTitle": "ファロ — フリートスポークスパーソン", + "faroSubtitle": "チャットと音声、実際の艦隊イベントに基づいています。破壊的なコマンドは常に確認を求めます。", + "faroEmpty": "艦隊について尋ねる — 例えば、「艦隊はどうですか?」", + "faroPending": "Faroが確認を求めています", + "faroPlaceholder": "Faroと話す…", + "faroSend": "送信", + "faroOffline": "Faro (スポークスパーソン) はオフラインです", + "yes": "はい", + "no": "いいえ", + "pushToTalk": "話すには押し続けてください", + "speakAnswers": "回答を話す", + "voiceModels": "音声モデル(このOmniRouteのプロバイダー/モデル)", + "voiceIdle": "話す", + "voiceListening": "リスニング中…", + "voiceThinking": "考え中…", + "voiceSpeaking": "話しています…", + "sttFailed": "転写に失敗しました(STTモデル/プロバイダーを確認してください)", + "ttsFailed": "音声合成に失敗しました(TTSモデル/プロバイダーを確認してください)", + "micDenied": "マイクが利用できないか、権限が拒否されました" + }, + "cliproxyProviderExposure": { + "title": "プロバイダーの露出", + "description": "cliproxyapi/ プレフィックスの下に CLIProxyAPI モデルをルーティングターゲットとして公開します。", + "label": "cliproxyapi/...として公開する", + "hint": "有効にすると、発見されたモデルがOmniRoute全体のプロバイダーセレクトに表示されます。", + "updateFailed": "更新に失敗しました (HTTP {status})", + "networkError": "ネットワークエラー — プロバイダーの露出設定を更新できませんでした" + } } - diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 5c3c5e362e..16c823c22d 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -172,6 +172,18 @@ "unselectAll": "선택 해제", "visibleModels": "표시됨", "selectAllConfirm": "이 조합에 모델 {count}개를 추가할까요?", + "testSelectedProviders": "테스트 공급자", + "testingSelectedProviders": "테스트 중 {done}/{total}...", + "noProvidersSelectedToTest": "아래의 제공자 중 하나 이상을 먼저 선택하세요.", + "noModelsToTestForProviders": "선택한 공급자에 대한 테스트할 모델이 없습니다.", + "testSelectedProvidersResults": "{ok} 개의 {total} 모델이 작동 중입니다.", + "selectWorkingModels": "작업 추가", + "unselectWorkingModels": "작업 선택 해제", + "noWorkingModelsToSelect": "추가할 작업 모델이 없습니다", + "providerTestHint": "팁: 공급자를 확인하세요 → 테스트 → 작동 추가. 다시 클릭하면 선택 해제됩니다.", + "selectAllProviders": "모든 공급자를 확인하세요", + "clearProviderSelection": "제공자 선택 해제", + "providersSelectedCount": "{count}개의 제공자가 확인되었습니다.", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "크기", + "toggleNoAuthProvider": "인증 없는 공급자 전환", + "loadingModels": "모델 로딩 중…", + "selectAModel": "모델을 선택하세요", + "degraded": "저하됨", + "zeroConfigBannerTitle": "제로 구성 모드에서 실행 중", + "zeroConfigBannerBody": "OmniRoute는 첫 실행 시 자동으로 보안 암호화 키를 생성합니다. 이 키는 {dataDir}에 저장됩니다. 별도의 작업이 필요하지 않습니다 — 귀하의 데이터는 암호화되어 안전합니다. 사용자 지정 키를 사용하려면 해당 파일에 JWT_SECRETSTORAGE_ENCRYPTION_KEY를 추가하십시오.", + "batchRelativeTimeIn": "{value} 안에", + "batchRelativeTimeAgo": "{value} 전", + "batchDetailsTitle": "배치 세부정보", + "batchProgress": "진행 상황", + "batchCompletedCount": "{count} 완료됨", + "batchFailedCount": "{count} 실패", + "batchPendingCount": "{count} 대기 중", + "batchTimeline": "타임라인", + "batchTimelineInProgress": "진행 중", + "batchTimelineFinalizing": "마무리 중", + "batchTimelineCompleted": "완료됨", + "batchTimelineFailed": "실패했습니다", + "batchTimelineExpires": "만료됨", + "batchTimelineExpired": "만료됨", + "batchTimelineCancelling": "취소 중", + "batchTimelineCancelled": "취소됨", + "batchTokenUsage": "토큰 사용량", + "batchMetadata": "메타데이터", + "batchFileContents": "파일 내용", + "batchFileUsedByCount": "{count, plural, one {# 배치} other {# 배치들}}", + "batchFilePreview": "미리보기", + "batchFilePreviewTruncated": "첫 번째 {shown} 줄 표시 ({total} 총 줄)", + "batchFileDownloadFull": "전체 파일 다운로드" }, "disabled": "비활성화됨", "featureFlagOmnirouteEmergencyFallbackDescription": "예산이 소진된 요청을 긴급 무료 폴백 제공자/모델로 라우팅합니다.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "구분선", "discovery": "디스커버리", "discoverySubtitle": "무료 액세스를 위한 제공자 스캔", + "conductor": "지휘자", + "conductorSubtitle": "CLI-에이전트 플릿", "resilienceConnections": "연결 복원력", "resilienceConnectionsSubtitle": "쿨다운, 차단기, 잠금 상태", "settingsModalityBridge": "모달리티 브리지", - "settingsModalityBridgeSubtitle": "텍스트 전용 모델을 위한 이미지/오디오 → 텍스트 대체" + "settingsModalityBridgeSubtitle": "텍스트 전용 모델을 위한 이미지/오디오 → 텍스트 대체", + "commandPalette": { + "title": "명령 팔레트", + "searchPlaceholder": "페이지, 설정, 도구 검색...", + "clearSearch": "검색 지우기", + "noResults": "결과가 없습니다", + "navigate": "탐색하다", + "open": "열기", + "close": "닫기" + }, + "noResults": "결과가 없습니다" }, "webhooks": { "title": "웹훅", @@ -1477,7 +1531,11 @@ "settings.update_failed": "설정 업데이트 실패", "sync.token.created": "동기화 토큰 생성됨", "sync.token.revoked": "동기화 토큰 취소됨" - } + }, + "mcpMetricCalls24h": "통화 (24시간)", + "mcpMetricSuccessRate": "성공률", + "mcpMetricAvgDuration": "평균 지속 시간", + "mcpMetricTopTool": "최고의 도구" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "새 버전을 사용할 수 있습니다. 클릭하여 업데이트하세요.", "updateStarted": "업데이트 시작됨...", "reloadingPageAutomatically": "페이지를 자동으로 새로고침하는 중...", - "providerTopology": "공급자 토폴로지" + "providerTopology": "공급자 토폴로지", + "downloadDmg": "DMG 다운로드 (macOS)", + "downloadDmgDescription": "OmniRoute 데스크탑 앱의 새 버전이 출시되었습니다. 업데이트를 위해 macOS DMG 설치 프로그램을 다운로드하고 설치해 주십시오(현재: v{version}).", + "downloadExe": "EXE 다운로드 (Windows)", + "downloadExeDescription": "OmniRoute 데스크톱 앱의 새 버전이 출시되었습니다. 업데이트를 위해 Windows EXE 설치 프로그램을 다운로드하고 설치해 주십시오 (현재: v{version}).", + "downloadAppImage": "AppImage 다운로드 (Linux)", + "downloadAppImageDescription": "OmniRoute 데스크탑 앱의 새 버전이 출시되었습니다. 업데이트를 위해 Linux AppImage 패키지를 다운로드해 주십시오(현재: v{version}).", + "downloadUpdate": "업데이트 다운로드", + "downloadUpdateDescription": "OmniRoute 데스크탑 앱의 새 버전이 출시되었습니다. 업데이트를 위해 시스템에 맞는 앱 형식을 다운로드해 주십시오(현재: v{version}).", + "updateQueued": "v{version} 업데이트가 대기 중입니다.", + "updateDockerRebuilding": "Docker 이미지가 백그라운드에서 다시 빌드되고 있습니다.", + "updateWaitingRestart": "새 버전으로 OmniRoute가 재시작되기를 기다리는 중입니다.", + "updateInstalling": "v{version} 설치 중.", + "updateRunning": "OmniRoute가 이제 v{version}을 실행 중입니다.", + "updateCompleted": "OmniRoute가 v{version}으로 업데이트되었습니다.", + "updateDockerStillRebuilding": "Docker 이미지가 여전히 v{version}에 대해 다시 빌드되고 있습니다.", + "updateInstallingBackground": "백그라운드에서 v{version} 설치 중입니다.", + "updateWaitingVersion": "v{version}에서 OmniRoute가 돌아오기를 기다리는 중입니다.", + "updateDockerStillInProgress": "Docker 재구성이 아직 진행 중입니다.", + "updateRestarting": "서비스 재시작 중입니다. OmniRoute가 온라인으로 돌아오기를 기다리는 중입니다...", + "updateTimeout": "업데이트가 시작되었지만 v{version}이 타임아웃 전에 사용할 수 없었습니다. 페이지를 새로 고치거나 서버 로그를 확인하세요.", + "updateTimedOut": "v{version} 업데이트가 시간 초과되었습니다.", + "updateStartFailed": "업데이트를 시작하지 못했습니다.", + "noResponseStream": "응답 스트림을 받지 못했습니다.", + "updateComplete": "업데이트가 완료되었습니다!", + "updateFailed": "업데이트에 실패했습니다.", + "updateNetworkError": "네트워크 오류 — 업데이트 중 연결이 끊어졌습니다.", + "stepInstallPackage": "패키지 설치", + "stepRebuildNativeModules": "네이티브 모듈 재빌드", + "stepRestartService": "서비스 재시작", + "stepComplete": "완료", + "stepError": "오류", + "updateCompleteTitle": "업데이트 완료!", + "updateFailedTitle": "업데이트 실패", + "updatingTitle": "OmniRoute 업데이트 중...", + "reloadNotice": "페이지가 몇 초 후에 자동으로 새로 고쳐집니다.", + "retryNotice": "다시 시도하거나 CLI를 통해 수동으로 업데이트하세요.", + "restartNotice": "이 페이지를 닫지 마세요. 시스템이 자동으로 재시작됩니다.", + "reloadNow": "지금 새로 고침", + "closeUpdate": "닫기", + "retryUpdate": "재시도", + "updateAvailableTitle": "업데이트 가능: v{version}{desktop}", + "desktopAppLabel": "(데스크탑 앱)", + "checkingForUpdates": "업데이트 확인 중...", + "versionAvailableForDownload": "버전 v{version}을(를) 다운로드할 수 있습니다.", + "downloadingUpdate": "업데이트 다운로드 중... {percent}% 완료.", + "updateDownloaded": "다운로드가 성공적으로 완료되었습니다! 다시 시작 및 설치를 클릭하여 적용하세요.", + "autoUpdateFailed": "자동 업데이트 실패: {reason}.", + "unknownUpdateError": "알 수 없는 오류", + "versionAvailableDesktop": "데스크탑 앱에 버전 v{version}이(가) 사용 가능합니다.", + "manualUpdateRequired": "이 설치 유형에 대해 수동 업데이트가 필요합니다.", + "restartAndInstall": "재시작 및 설치", + "checkForUpdate": "업데이트 확인", + "manualUpdate": "수동 업데이트", + "directDownloadHint": "또는 해당 설치 프로그램 형식을 직접 다운로드하십시오:", + "releaseNotes": "릴리스 노트", + "readMore": "더 읽기", + "noAuthLabel": "인증 없음" }, "analytics": { "title": "분석", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "이 요청 전후의 저장된 호출 로그에서 추론됨", "routeRecommendations": "권장 사항", "routeLimitations": "제한 사항", - "routeNoKnownLimitations": "이 설명에 대해 알려진 제한 사항이 없습니다." + "routeNoKnownLimitations": "이 설명에 대해 알려진 제한 사항이 없습니다.", + "searchAnalyticsLoading": "검색 분석 로딩 중…", + "searchAnalyticsNoData": "검색 데이터가 아직 없습니다.", + "searchAnalyticsNoDataDescription": "첫 번째 검색 후 /v1/search를 통해 검색 요청이 여기에 나타납니다.", + "searchAnalyticsToday": "{count} 오늘", + "searchAnalyticsCachedRequests": "{count} 캐시된 요청", + "searchAnalyticsApiCosts": "검색 API 비용", + "searchAnalyticsErrors": "{count} 오류", + "searchAnalyticsNoErrors": "오류 없음", + "searchAnalyticsProviderBreakdown": "제공자 분석", + "searchAnalyticsQueries": "쿼리", + "searchAnalyticsEmptyDescription": "POST /v1/search를 사용하여 웹 검색 라우팅을 시작하세요.", + "searchAnalyticsFreeTier": "무료 요금제 이용 가능: Serper (2,500/월), Brave (2,000/월), Exa (1,000/월), Tavily (1,000/월) — 총 6,500+ 무료 검색/월 자동 장애 조치 포함.", + "autoRoutingNoDataAvailable": "자동 라우팅 분석을 사용할 수 없습니다. 메트릭을 보려면 auto/ 접두사를 사용하여 요청하십시오.", + "defaultVariantLabel": "기본값", + "freeTierAvailable": "무료 요금제 이용 가능" }, "apiManager": { "title": "API 키", @@ -2348,7 +2478,9 @@ "providerCount": "{count}개 제공자", "imageToTextBridgeAvailable": "모달리티 브리지는 이제 텍스트 전용 모델을 위한 이미지를 설명할 수 있습니다. /api/v1/images/understanding가 구현되면 인라인 플레이그라운드가 제공될 것입니다.", "imageToTextBridgeCta": "Modality Bridge 설정에서 Image→Text 브리지를 구성하십시오.", - "sttBridgeCta": "Modality Bridge 설정에서 Speech→Text 브리지를 구성합니다." + "sttBridgeCta": "Modality Bridge 설정에서 Speech→Text 브리지를 구성합니다.", + "existingConnection": "기존 연결", + "openrouterSttDescription": "OpenRouter 음성 인식 모델은 구성된 OpenRouter 연결을 사용합니다. 별도의 자격 증명이 필요하지 않습니다." }, "search": { "searchQuery": "Search Query", @@ -2521,7 +2653,7 @@ "always": "항상" }, "ccDiscoveryInfoButton": "Claude Code에서 검색 기능을 활성화하는 방법", - "ccDiscoveryInfoTooltip": "claude/<provider>/<model> 미러 ID 아래에서 비클로드 모델을 광고하여 Claude Code의 게이트웨이 모델 검색이 이를 나열할 수 있도록 합니다. 전역적으로 활성화되면 모든 클라이언트에 대한 카탈로그 항목이 두 배로 증가합니다.", + "ccDiscoveryInfoTooltip": "claude/<provider>/<model> 미러 ID 아래에서 Claude가 아닌 모델을 광고하여 Claude Code의 게이트웨이 모델 검색이 이를 나열할 수 있도록 합니다. 전역적으로 활성화되면 모든 클라이언트에 대한 카탈로그 항목이 두 배로 증가합니다.", "ccDiscoveryInfoLink": "기능 플래그 열기", "ccOnboardingTitle": "gateway 모델 발견을 위한 settings.json", "ccOnboardingCopy": "복사", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "다음 위치에 붙여넣습니다.", "copilotReloadInstruction": "그런 다음 VS Code를 다시 로드하고 입력 프롬프트에 API 키를 설정하세요.", "wireApiChatCompletions": "채팅 완료(/chat/completions)", - "wireApiResponses": "응답 API(/responses)" + "wireApiResponses": "응답 API(/responses)", + "cliproxyapiActionFailed": "작업 실패", + "cliproxyapiActionSucceeded": "작업이 성공했습니다", + "cliproxyapiCheckUpdates": "업데이트 확인", + "cliproxyapiDescription": "업스트림 프록시 대체(Go 기반 OAuth)", + "cliproxyapiHealth": "건강", + "cliproxyapiHealthy": "건강한", + "cliproxyapiInstall": "설치", + "cliproxyapiNotInstalledValue": "설치되지 않음", + "cliproxyapiPort": "포트", + "cliproxyapiRequestFailed": "요청 실패", + "cliproxyapiRestart": "재시작", + "cliproxyapiStart": "시작", + "cliproxyapiStatusError": "오류", + "cliproxyapiStatusInstalled": "설치됨", + "cliproxyapiStatusNotInstalled": "설치되지 않음", + "cliproxyapiStatusRunning": "실행 중", + "cliproxyapiStatusStopped": "중지됨", + "cliproxyapiStop": "중지", + "cliproxyapiUnhealthy": "건강하지 않음", + "cliproxyapiUnknown": "알 수 없음", + "cliproxyapiUpdate": "업데이트", + "cliproxyapiUpdateAvailable": "업데이트 가능: v{current} → v{latest}", + "cliproxyapiVersion": "버전" }, "combos": { "title": "콤보", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "쿼타 소진 시에만 진행하십시오", + "fallbackOnlyOnQuotaExhaustionShort": "쿼타 전용 대체", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "모드 팩 및 가중치는 여기에 유지되며, 브레이커 런타임 상태는 Health 페이지에 유지됩니다.", "emailVisibilityHint": "여기의 계정 이메일은 글로벌 개인정보 보호 토글 설정을 따릅니다.", "emailVisibilityTooltip": "눈 아이콘을 사용하여 콤보, 제공업체 및 할당량 화면 전체에서 계정 이메일을 글로벌하게 표시하거나 숨길 수 있습니다.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "단계별 (제공자 → 모델)", + "builderModeGlobal": "전역 모델 검색 (사용자 정의 조합)", + "builderGlobalSearchPlaceholder": "모든 공급자에서 모델 검색 (예: opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "모두 추가", + "builderGlobalShortcuts": "단축키:", + "builderGlobalNoResults": "\"{query}\"에 대한 모델을 찾을 수 없습니다.", + "builderGlobalProviderLabel": "제공자:", + "builderGlobalAccountCount": "{count, plural, one {# 계정} other {# 계정}}", + "builderGlobalAdded": "추가됨", + "builderGlobalAdd": "추가", "manualModel": "수동 모델", "manualModelInvalid": "모델을 provider/model 형식으로 입력하세요.", "manualModelUnknownProvider": "알 수 없는 제공업체 접두사입니다.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "세션 가용성", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "세션 고정 끔", "kimiPresetTitle": "Kimi Coding 프리셋", "kimiPresetDescription": "Kimi K3를 기본 모델(Moonshot API)로 사용하며, 설정 시 Kimi Code 연결(kimi-coding, kimi-web)로 자동 폴백됩니다.", - "kimiPresetCta": "프리셋 추가" + "kimiPresetCta": "프리셋 추가", + "intelligentComboCount": "{count, plural, one {# 지능형 조합} other {# 지능형 조합들}}", + "providersInScope": "{count, plural, one {# 제공자가 범위 내에 있습니다} other {# 제공자가 범위 내에 있습니다}}", + "savingModePack": "{pack} 저장 중…", + "errorTitle": "콤보를 로드하지 못했습니다.", + "errorDescription": "현재 콤보 데이터를 불러올 수 없습니다. 연결을 확인하고 다시 시도하세요.", + "errorId": "오류 ID: {id}", + "errorRetry": "다시 시도해 주세요", + "comboLabel": "콤보" }, "costs": { "title": "비용", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "사용자 이름", "obsidianPassword": "비밀번호", - "obsidianTailscaleHint": "모바일에서 연결하는 경우 localhost 대신 Tailscale IP를 사용하세요. 두 기기 모두 동일한 Tailscale 네트워크에 있어야 합니다." + "obsidianTailscaleHint": "모바일에서 연결하는 경우 localhost 대신 Tailscale IP를 사용하세요. 두 기기 모두 동일한 Tailscale 네트워크에 있어야 합니다.", + "cloudSyncNotConfigured": "이 인스턴스에는 클라우드 동기화가 구성되어 있지 않습니다.", + "notionConnect": "연결하다", + "notionConnectFailed": "연결 실패", + "notionConnected": "연결됨", + "notionConnectionFailed": "연결 실패", + "notionDescription": "라우팅된 AI 모델을 통해 Notion에서 검색, 읽기, 쿼리 및 쓰기", + "notionDisconnect": "연결 끊기", + "notionDisconnectFailed": "연결 해제에 실패했습니다.", + "notionEnterToken": "Notion 통합 토큰을 입력해 주세요.", + "notionIntegrationHelp": "내부 통합을 생성합니다.", + "notionIntegrationToken": "Notion 내부 통합 토큰", + "notionNotConnected": "연결되지 않음", + "notionTokenConfigured": "토큰이 구성되었습니다. Notion 도구는 MCP를 통해 사용할 수 있습니다." }, "endpoints": { "tabProxy": "엔드포인트 프록시", @@ -4152,6 +4331,12 @@ "providerModelLabel": "제공자 / 모델", "noRemoteProviders": "API 키가 구성된 제공자가 없습니다.", "selectProviderModel": "모델 선택", + "customBaseUrlLabel": "사용자 정의 기본 URL(선택 사항)", + "customModelIdLabel": "사용자 정의 모델 ID (선택 사항)", + "customEndpointHelp": "OpenAI 호환 /embeddings 엔드포인트를 사용하세요. 로컬 엔드포인트는 허용되며, 클라우드 메타데이터 대상은 차단됩니다.", + "customEndpointSave": "사용자 정의 엔드포인트 적용", + "customEndpointInvalid": "유효한 HTTP(S) 기본 URL과 모델 ID를 모두 입력하거나 두 필드를 비워 두십시오.", + "customEndpointSaveFailed": "사용자 정의 임베딩 엔드포인트를 저장할 수 없습니다.", "staticEnabledLabel": "Static Potion 활성화", "staticEnabledDesc": "로컬에서 potion-base-8M 모델 다운로드 및 사용", "transformersEnabledLabel": "Transformers.js 활성화", @@ -4258,7 +4443,9 @@ "cleaning": "정리 중...", "cleanNow": "지금 정리", "cleanupSuccess": "{count}개 포인트 제거됨", - "cleanupFailed": "정리 실패" + "cleanupFailed": "정리 실패", + "hostLabel": "호스트", + "collectionLabel": "컬렉션" }, "rerank": { "enableLabel": "Rerank 활성화", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3계층 대체 다이어그램", "apiKeyMgmt": "API 키 관리", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "무료 제공업체 설정", + "description": "선택한 비회원 가입 제공자를 선택적으로 활성화합니다. 계속하기 전에 각 제공자의 공지 및 사이트를 검토하십시오. 사용 가능 여부 및 요금 제한은 제3자가 제어합니다.", + "loading": "무료 제공업체 로딩 중...", + "loadFailed": "무료 제공자를 로드할 수 없습니다.", + "alreadyConfigured": "모든 자격이 있는 무료 제공자가 이미 구성되어 있습니다.", + "reviewProviderSite": "제공자 사이트 및 약관 검토", + "confirmation": "저는 이 서드파티 제공업체들을 검토했으며 OmniRoute가 선택한 연결을 생성하기를 원합니다.", + "setupSelected": "선택한 공급자 설정", + "settingUp": "설정 중...", + "setupFailed": "선택한 공급자를 설정할 수 없습니다. 기존의 내용은 변경되지 않았습니다.", + "retryFailed": "실패한 공급자 다시 시도", + "orUseApiKey": "또는 API 키로 연결하세요", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "생성됨", + "skipped": "이미 구성됨", + "failed": "실패했습니다" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "필수입니다. 공급자 API 기본 URL.", "iconUrlLabel": "아이콘 URL", "iconUrlHint": "선택 사항. 이 제공자의 아이콘으로 표시될 이미지 URL입니다.", + "iconUrlInvalid": "잘못된 아이콘 URL입니다. http(s):// 또는 data:image/*;base64 URL을 사용하세요.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} 호환 가능(프로덕션)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "세션이 이미 현재입니다", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "인증 적용", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API 키 붙여넣기…", "zedSaving": "저장 중…", "zedImportAction": "가져오기", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "자동 커서 세션 갱신 활성화", + "cursorAgentNudgeBody": "자동 세션 갱신을 위해 cursor-agent를 설치하세요. 이를 설치하지 않으면 Cursor 연결은 대략 24시간마다 수동으로 재연결해야 합니다.", + "cursorAgentNudgeDismiss": "무시하기", "zedManualImportFailed": "수동 가져오기 실패", "zedManualImportSuccess": "Zed에서 {provider} 토큰을 가져왔습니다", "grokImportTitle": "Grok Build 인증 가져오기", @@ -5878,7 +6066,6 @@ "friendliai": "서버리스 추론을 위한 무료 티어 — 신용카드 불필요", "gemini": "평생 무료: Gemini 2.5 Flash 기준 1,500회 요청/일 — 신용카드 불필요, aistudio.google.com 에서 키 발급", "gigachat": "API 키로 GigaChat (Sber) 연결.", - "github-models": "github.com/settings/tokens 에서 'models: read' 범위(scope)를 가진 GitHub PAT를 생성하세요.", "gitlab": "공개 Code Suggestions API용 GitLab 개인 액세스 토큰. gitlab.com을 사용하지 않는 경우 자체 호스팅 베이스 URL을 구성하세요.", "gitlawb-gmi": "Gitlawb Opengateway 대시보드에서 API 키를 가져오세요.", "gitlawb": "Gitlawb Opengateway 대시보드에서 API 키를 가져오세요.", @@ -6017,7 +6204,8 @@ "kimi-coding": "기존 OAuth 흐름으로 Kimi Coding를 연결합니다.", "kiro": "무료 티어: 월 50 크레딧(~25K–100K 토큰). ⚠️ Kiro ToS는 서드파티 프록시/하네스 사용을 금지합니다.", "codex": "기존 OAuth 흐름으로 OpenAI Codex를 연결합니다.", - "qwen": "기존 OAuth 흐름으로 Qwen Code를 연결합니다." + "qwen": "기존 OAuth 흐름으로 Qwen Code를 연결합니다.", + "github-models": "github.com/settings/tokens 에서 'models: read' 범위(scope)를 가진 GitHub PAT를 생성하세요." }, "passthroughModelsDescription": "{provider}은 공급자 기본 모델 ID를 허용합니다. /models에서 가져오거나 라우팅을 위한 사용자 정의 ID를 추가하세요.", "bedrockModelsDescription": "Amazon Bedrock 모델은 AWS 지역별로 범위가 지정됩니다. /models에서 가져오거나 선택한 지역에서 활성화된 Bedrock 모델 ID를 추가하세요.", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "파트너 링크 — 추가 비용 없이 OmniRoute를 지원합니다", "anonymousFallbackTitle": "익명 대체", "anonymousFallbackDesc": "모든 구성된 연결이 소진되면(쿼터, 크레딧 또는 만료), 이 공급자의 키 없는 계층을 임시로 사용합니다. 익명 요청을 보내는 대신 이 공급자를 건너뛰려면 끄세요. 키 없는 계층이 요청을 거부할 때(401) 권장됩니다.", - "anonymousFallbackEnabled": "{name}에 대한 익명 대체가 활성화되었습니다.", - "anonymousFallbackDisabled": "{name}에 대한 익명 대체가 비활성화되었습니다 — 소진된 연결은 이 공급자를 건너뜁니다", - "anonymousFallbackUpdateFailed": "익명 대체 설정을 업데이트하지 못했습니다" + "anonymousFallbackEnabled": "{provider}에 대한 익명 대체가 활성화되었습니다.", + "anonymousFallbackDisabled": "{provider}에 대한 익명 대체가 비활성화되었습니다 — 소진된 연결은 이 공급자를 건너뜁니다", + "anonymousFallbackUpdateFailed": "익명 대체 설정을 업데이트하지 못했습니다", + "batchDeleteFailed": "배치 삭제 실패", + "batchDeleteNetworkError": "배치 삭제 중 네트워크 오류", + "batchUpdateFailed": "배치 업데이트에 실패했습니다.", + "batchUpdateNetworkError": "배치 업데이트 중 네트워크 오류", + "categoryAudio": "오디오", + "categoryCloudAgent": "클라우드 에이전트", + "categoryIde": "IDE", + "categoryLocal": "로컬", + "categorySearch": "검색", + "categoryWebCookie": "웹 쿠키", + "claudeExtraUsageBlockingDisabled": "Claude 추가 사용 차단이 비활성화되었습니다 (추가 사용이 허용됩니다)", + "claudeExtraUsageBlockingEnabled": "Claude 추가 사용 차단이 활성화되었습니다 (추가 사용이 차단됩니다)", + "claudeRoutingPreferenceDisabled": "접두사가 없는 Claude 모델은 더 이상 Claude Code를 선호하지 않습니다.", + "claudeRoutingPreferenceEnabled": "접두사가 없는 Claude 모델은 이제 Claude Code를 선호합니다.", + "clearMediaFilter": "지우기", + "cliproxyRoutingDisabled": "요청은 이제 네이티브 OmniRoute(직접)를 사용합니다.", + "cliproxyRoutingEnabled": "요청이 이제 CLIProxyAPI(더 깊은 에뮬레이션)를 통해 라우팅됩니다.", + "codexLimitPolicyUpdated": "Codex 제한 정책이 업데이트되었습니다", + "codexServiceModeUpdated": "Codex 서비스 모드가 업데이트되었습니다.", + "codexServiceTierActive": "Codex {tier} 서비스 계층이 활성화되었습니다.", + "codexTierFastLabel": "빠름", + "codexTierFlexLabel": "플렉스", + "commandCodeApplyFailed": "명령 코드 인증을 적용하지 못했습니다.", + "commandCodeApplyingApproval": "브라우저 승인됨, 적용 중…", + "commandCodeApplyingKey": "브라우저 승인 키 적용 중…", + "commandCodeApprovalInstructions": "인증 URL을 열고, 액세스를 승인한 다음, 아래에 반환된 키/JSON/URL을 붙여넣으세요…", + "commandCodeAuthExpired": "명령 코드 인증 만료됨", + "commandCodeConnected": "명령 코드가 연결되었습니다.", + "commandCodeConnectionAdded": "명령 코드 연결 추가됨", + "commandCodeLinkExpired": "명령 코드 링크가 만료되었습니다.", + "commandCodeOpeningStudio": "명령 코드 스튜디오 열기…", + "commandCodePopupBlocked": "팝업이 차단되었습니다. 팝업을 허용하고 Command Code Connect를 다시 시도해 주세요.", + "commandCodeStartFailed": "Command Code auth를 시작하지 못했습니다.", + "connectionDeleted": "연결이 삭제되었습니다", + "connectionFallback": "연결", + "coolingConnectionsDescription": "이 연결은 마지막 요청에서 429(요청 한도 초과)를 반환했습니다. OmniRoute는 타이머가 만료될 때까지 이들을 건너뜁니다 — 수동으로 비활성화할 필요가 없습니다.", + "coolingConnectionsTitle": "현재 냉각 중 ({count})", + "failedDeleteAlias": "별칭을 삭제하지 못했습니다.", + "failedDeleteConnection": "연결 삭제에 실패했습니다.", + "failedDistributeProxies": "프록시 배포에 실패했습니다.", + "failedSaveModelEndpointSettings": "모델 엔드포인트 설정을 저장하지 못했습니다.", + "failedUpdateClaudeExtraUsagePolicy": "Claude 추가 사용 정책 업데이트에 실패했습니다.", + "failedUpdateClaudeRoutingPreference": "Claude Code 라우팅 기본 설정을 업데이트하지 못했습니다.", + "failedUpdateCliproxyRouting": "CLIProxyAPI 라우팅 업데이트에 실패했습니다.", + "failedUpdateCodexLimitPolicy": "Codex 한도 정책 업데이트에 실패했습니다.", + "failedUpdateCodexServiceMode": "Codex 서비스 모드 업데이트에 실패했습니다.", + "filterByMedia": "미디어", + "freeBadge": "무료", + "kimiCodeApiKeyLabel": "Kimi 코드 API 키", + "modelTestFailed": "모델 테스트 실패", + "modelTestNetworkError": "네트워크 오류 테스트 모델", + "networkError": "네트워크 오류", + "networkErrorDeletingAlias": "별칭 삭제 중 네트워크 오류", + "networkErrorSettingAlias": "별칭 설정 중 네트워크 오류", + "noProvidersMatch": "검색과 일치하는 공급자가 없습니다.", + "noSavedProxies": "저장된 프록시가 없습니다. 먼저 설정 → 프록시에서 프록시를 추가하세요.", + "pageLoadErrorDescription": "현재 공급자 데이터를 불러올 수 없습니다. 연결을 확인하고 다시 시도하세요.", + "pageLoadErrorId": "오류 ID: {id}", + "pageLoadErrorRetry": "다시 시도해 주세요", + "pageLoadErrorTitle": "제공자를 로드하지 못했습니다", + "playgroundTitle": "놀이터", + "providerDetailConnectionFlexActive": "이 연결에 대해 Codex 플렉스 서비스 계층이 활성화되었습니다.", + "providerDetailConnectionPriorityActive": "Codex 우선 서비스 계층이 이 연결에 대해 활성화되었습니다.", + "providerDetailGlobalFlexActive": "Global Codex 플렉스 서비스 계층이 활성화되었습니다.", + "providerDetailGlobalPriorityActive": "글로벌 코드엑스 우선 서비스 계층이 활성화되었습니다", + "proxiesDistributed": "{tagLabel}{total} 연결에 대해 분산된 {assigned} 프록시 할당입니다.", + "rerankEndpoint": "재정렬", + "savedModelEndpointSettings": "저장된 모델 엔드포인트 설정", + "searchByModelAria": "모델로 검색", + "selectSupportedEndpoint": "지원되는 엔드포인트를 최소한 하나 선택하세요.", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "설정", @@ -6420,7 +6679,7 @@ "globalModeDesc": "모든 공급자 트래픽은 이 구독의 프록시 풀을 통과합니다.", "ruleModeDesc": "선택된 공급자의 트래픽만 프록시를 통과합니다. 나머지는 직접 연결됩니다.", "localCoreEndpoint": "로컬 코어 SOCKS5/HTTP 끝점(선택 사항)", - "localCoreEndpointPlaceholder": "양말5://127.0.0.1:1080", + "localCoreEndpointPlaceholder": "socks5://127.0.0.1:1080", "localCoreEndpointDesc": "127.0.0.1 / localhost만 허용합니다(SS/VMess/Trojan/VLESS에는 로컬 sing-box/clash 코어가 필요함).", "routeByProvider": "공급자별 라우팅(다중 선택)", "loadingProviders": "제공업체 목록 로드 중…", @@ -6437,7 +6696,7 @@ "global": "글로벌", "rule": "규칙", "enabled": "활성화됨", - "disabled": "장애인", + "disabled": "비활성화됨", "nodeCount": "노드: {count}", "needsCoreCount": "{count}에는 로컬 코어가 필요합니다.", "lastSynced": "마지막 동기화: {time}", @@ -6460,7 +6719,24 @@ "loadFailed": "구독 목록을 로드하지 못했습니다.", "toggleFailed": "스위치를 전환하지 못했습니다.", "refreshFailed": "새로고침하지 못했습니다.", - "deleteFailed": "삭제하지 못했습니다." + "deleteFailed": "삭제하지 못했습니다.", + "add": "추가", + "cancel": "취소", + "configure": "구성하다", + "copyEndpoint": "엔드포인트 복사", + "coreEndpointHint": "핵심 엔드포인트 힌트", + "coreNodesHint": "코어 노드 힌트", + "create": "생성하기", + "deleteConfirm": "삭제 확인", + "empty": "비어 있음", + "globalModeDescription": "전역 모드 설명", + "localCoreHint": "로컬 코어 힌트", + "nodeSummary": "노드 요약", + "providerRequired": "제공자가 필요합니다", + "providerRouting": "제공자 라우팅", + "refresh": "새로 고침", + "refreshInterval": "새로 고침 간격", + "ruleModeDescription": "규칙 모드 설명" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "이미지 요청을 텍스트 전용 모델로 라우팅하기 전에 자동 vision-to-text 폴백을 실행합니다.", "visionBridgeEnabledLabel": "활성화됨", "visionBridgeEnabledDesc": "이미지 부분을 추출된 텍스트로 대체하는 사전 호출 브릿지를 토글합니다.", + "visionBridgeRerouteTextOnlyLabel": "텍스트 전용 모델 재배치", + "visionBridgeRerouteTextOnlyDesc": "선택한 모델에 이미지 입력이 없을 때, 이미지를 포함한 전체 요청을 브리지 모델로 전송합니다.", "visionBridgeModel": "브릿지 모델", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "비전을 지원하는 모든 OmniRoute 모델 ID를 여기에 사용할 수 있습니다.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API 키에 manage 스코프가 없습니다.", "BYPASS_PREFIX_NOT_ALLOWED": "하나 이상의 접두사가 spawn 가능 라우트를 대상으로 하므로 우회할 수 없습니다.", "GENERIC": "Authz 설정을 업데이트하지 못했습니다." - } + }, + "remove": "제거하기" }, "resilienceBaseCooldownLabel": "기본 재사용 대기시간", "scopeLabel": "범위", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "오디오 테스트 중…", "modalityBridgeAudioTestOk": "오디오 브리지 확인 — {count} 클립이 {model}에 의해 전사되었습니다", "modalityBridgeAudioTestNoop": "오디오 브리지가 활성화되지 않았습니다(대상이 오디오를 지원할 수 있지만 STT 공급자가 연결되어 있지 않거나 브리지가 비활성화되어 있습니다)", - "modalityBridgeAudioTestError": "오디오 테스트 실패: {message}" + "modalityBridgeAudioTestError": "오디오 테스트 실패: {message}", + "modelRoutingDescriptionPlaceholder": "프론티어 콤보로 Opus 모델 라우팅", + "cliproxyapiFallbackCodes": "Cliproxyapi 대체 코드", + "cliproxyapiFallbackDescription": "Cliproxyapi 대체 설명", + "cliproxyapiHealthLabel": "Cliproxyapi 상태 레이블", + "cliproxyapiImportFailed": "Cliproxyapi 가져오기 실패", + "cliproxyapiImportResult": "Cliproxyapi 가져오기 결과", + "cliproxyapiInvalidUrl": "Cliproxyapi 잘못된 URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi 수명 주기 공지 후", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi 수명 주기 알림 이전", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi 생애 주기 알림 링크", + "cliproxyapiPortLabel": "클립록시API 포트 레이블", + "cliproxyapiStatusLabel": "Cliproxyapi 상태 레이블", + "cliproxyapiVersionLabel": "Cliproxyapi 버전 레이블", + "collection": "컬렉션", + "errorPage": { + "description": "현재 설정을 로드할 수 없습니다. 몇 초 후에 다시 시도해 주세요.", + "errorId": "오류 ID: {id}", + "retry": "다시 시도해 주세요", + "title": "설정을 불러오는 데 실패했습니다." + }, + "host": "호스트", + "notInstalled": "설치되지 않음", + "oneproxyActions": "원프록시 작업", + "oneproxyActive": "Oneproxy 활성화", + "oneproxyAnonymity": "Oneproxy 익명성", + "oneproxyCountry": "원프록시 국가", + "oneproxyDelete": "Oneproxy 삭제", + "oneproxyEmpty": "Oneproxy 비어 있음", + "oneproxyHost": "원프록시 호스트", + "oneproxyLatency": "원프록시 대기 시간", + "oneproxyProtocol": "원프록시 프로토콜", + "oneproxyQuality": "Oneproxy 품질", + "oneproxySyncFailed": "동기화 실패: {error}", + "oneproxySyncSuccess": "동기화된 {total} 프록시 ({added} 새로 추가됨, {updated} 업데이트됨)", + "proxyDocumentationSocks5DescAfter": "프록시 문서 Socks5 설명 후", + "proxyFreePoolAddProxy": "프록시 무료 풀 프록시 추가", + "proxyFreePoolAdding": "프록시 무료 풀 추가", + "proxyFreePoolSelectProxy": "프록시 무료 풀 프록시 선택", + "proxyStatusActive": "프록시 상태 활성", + "proxyStatusInactive": "프록시 상태 비활성", + "routingAddEntry": "항목 추가", + "settingSaveFailed": "설정 저장 실패", + "settingSaved": "설정이 저장되었습니다", + "skillsmpApiKeyHintAfter": ". 요청 제한: {limit} 요청/일.", + "skillsmpApiKeyHintBefore": "다음에서 API 키를 가져오세요.", + "syncFailed": "동기화 실패", + "unhealthy": "건강하지 않음", + "oneproxyDescription": "1proxy 커뮤니티 플랫폼에서 무료 검증된 프록시를 가져오고 회전시키세요.", + "oneproxySyncing": "동기화 중...", + "oneproxySyncNow": "지금 동기화", + "oneproxyClearAll": "모두 지우기", + "oneproxyGoogle": "구글", + "oneproxyClearAllConfirm": "모든 1proxy 프록시를 지우시겠습니까?", + "memorySkillsSkillsmpDescription": "SkillsMP에 연결하여 마켓플레이스에서 기술을 발견하고 설치하세요.", + "memorySkillsActiveProviderDescription": "스킬 페이지에서 검색 및 설치에 사용할 공급자를 선택하세요.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP 마켓플레이스", + "memorySkillsSkillsmpProviderDescription": "인증된 마켓플레이스(귀하의 SkillsMP API 키를 사용합니다).", + "memorySkillsSkillsshProviderTitle": "skills.sh 디렉토리", + "memorySkillsSkillsshProviderDescription": "공용 디렉토리 제공자(API 키 필요 없음).", + "routingCcBridgeCatalogName": "Anthropic-compatible CC 브리지", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "OAuth로 발급된 토큰을 사용하는 네이티브 Claude 공급자.", + "routingCcBridgeName": "Claude Code 브리지", + "routingCcBridgeDescription": "API 키를 사용하여 릴레이 엔드포인트(anthropic-compatible-cc-*)입니다.", + "routingCustomProviderDescription": "사용자 정의 공급자.", + "routingUnknownOpKind": "알 수 없는 작업 종류: {kind}", + "routingInvalidJson": "잘못된 JSON: {error}", + "routingConfigMustBeObject": "구성은 JSON 객체여야 합니다.", + "routingEnabledMustBeBoolean": "`enabled`는 true 또는 false여야 합니다.", + "routingPipelineMustBeArray": "`pipeline`은 ops의 배열이어야 합니다.", + "routingPipelineTooLong": "파이프라인은 50개의 작업을 초과할 수 없습니다.", + "routingOpMissingKind": "Op #{index}: 누락되었거나 잘못된 `kind`", + "routingOpUnknownKind": "Op #{index}: 알 수 없는 종류 \"{kind}\"", + "routingJsonEditorHide": "JSON 편집기 숨기기", + "routingJsonEditorImportExport": "JSON 가져오기 / 내보내기", + "routingJsonEditorLabel": "JSON (편집 및 적용하거나 붙여넣어 가져오기)", + "routingApplyJson": "JSON 적용", + "routingTransformsFootnote": "모든 변환 작업은 재실행 시 항등적입니다. 변경 사항은 다음 요청에서 즉시 적용됩니다.", + "cliproxyapiUnknown": "알 수 없음", + "cliproxyapiVersion": "버전", + "cliproxyapiHealth": "건강", + "cliproxyapiPort": "포트", + "qdrantHost": "호스트", + "qdrantCollection": "컬렉션" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "기본값", + "off": "꺼짐", + "lite": "라이트", + "standard": "표준", + "aggressive": "공격적", + "ultra": "울트라", + "responsesToolOutput": "응답 도구 출력" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "스택의 마지막에 실행되며(RTK/Caveman이 텍스트를 정리한 후 OmniGlyph가 나머지를 이미지로 변환), omniglyph 모드를 통해 독립 실행형으로도 실행됩니다. 이것은 미리보기이며 엔드투엔드 검증이 완료될 때까지 기본적으로 비활성화되어 있습니다.", "saved": "저장되었습니다.", "saveFailed": "저장할 수 없습니다.", - "enableAria": "OmniGlyph 엔진 활성화" + "enableAria": "OmniGlyph 엔진 활성화", + "title": "OmniGlyph" }, "embeddedServices": { "title": "임베디드 서비스", @@ -9127,7 +9500,49 @@ "unableToLoad": "시스템 측정항목을 로드할 수 없습니다.", "product": "제품", "resources": "자원", - "company": "회사" + "company": "회사", + "tokenHealthTooltips": { + "allHealthy": "모든 토큰이 정상입니다", + "needsAttention": "일부 토큰에 주의가 필요합니다", + "refreshFailures": "토큰 갱신 실패가 감지되었습니다", + "unknown": "건강 상태 불명" + }, + "systemMonitor": { + "metricsAriaLabel": "시스템 메트릭스", + "memory": "메모리", + "memoryShort": "mem", + "uptime": "가동 시간", + "ariaLabel": "시스템 모니터링", + "title": "시스템 모니터", + "version": "버전", + "connections": "연결", + "circuitBreakers": "회로 차단기", + "open": "{count} 열림", + "memoryUsage": "메모리 사용량" + }, + "never": "절대", + "justNow": "방금 지금", + "minutesAgo": "{count}분 전", + "hoursAgo": "{count}시간 전", + "tokens": "토큰", + "costs": "비용", + "autoRefresh": "자동 새로 고침 ({seconds}s)", + "toggleAutoRefresh": "자동 새로 고침 전환", + "activeRequests": "활성 요청", + "totalRequests": "총 요청 수", + "totalInputTokens": "총 입력 토큰", + "model": "모델", + "provider": "제공자", + "requests": "요청사항", + "lastUsed": "마지막 사용됨", + "inputTokens": "입력 토큰", + "totalTokens": "총 토큰", + "inputCost": "입력 비용", + "outputCost": "출력 비용", + "noUsageData": "아직 사용 기록이 없습니다. 데이터를 보려면 요청을 해보세요.", + "account": "계정", + "accountLabel": "계정 {id}", + "noAccountUsage": "아직 계정별 사용량이 기록되지 않았습니다. 이곳에서 데이터를 보려면 OAuth 계정을 사용하여 요청하세요." }, "auth": { "welcome": "환영합니다", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "앱 데이터로 재설정", + "resetViaAppDataDescription": "앱 데이터 디렉토리에서 설정 파일을 삭제하여 비밀번호를 재설정하세요:", + "quitDesktopApp": "OmniRoute 데스크탑 앱을 완전히 종료합니다.", + "navigateToAppDataDirectory": "앱 데이터 디렉토리로 이동하세요:", + "checkSystemAppDataFolder": "(시스템 앱 데이터 폴더를 확인하세요)", + "relaunchDesktopFreshSetup": "OmniRoute 데스크톱 앱을 다시 시작하세요 — 새 설정이 시작됩니다.", + "alternativeSetPasswordTitle": "대안: 새 비밀번호 설정", + "alternativeSetPasswordDescription": "서버 환경 파일을 통해 새 초기 비밀번호를 설정하세요:", + "openServerEnvFilePrefix": "열기", + "relaunchDesktopApp": "OmniRoute 데스크탑 앱을 다시 시작하세요.", + "codexLinkInvalidOrExpired": "이 링크는 유효하지 않거나 만료되었습니다.", + "codexValidationServerError": "이 링크를 검증하기 위해 서버에 연결할 수 없습니다.", + "codexSaveConnectionError": "연결을 저장할 수 없습니다. 링크가 만료되었을 수 있습니다.", + "codexDeviceLoginDisabled": "이 OpenAI 계정에 대해 장치 코드 로그인이 비활성화되어 있습니다. ChatGPT 보안 설정에서 활성화하거나 작업 공간 관리자에게 문의하세요.", + "codexAuthorizationTimedOut": "권한 부여가 시간 초과되었습니다. 다시 시도하려면 다시 시작을 클릭하십시오.", + "authenticationCancelled": "인증이 취소되었습니다.", + "unexpectedAuthenticationError": "인증 중 예기치 않은 오류가 발생했습니다. 다시 시도해 주세요.", + "connectOpenAiCodexTitle": "OpenAI Codex 연결하기", + "codexConnectDescription": "ChatGPT 계정을 인증하여 이 연결 설정을 완료하세요.", + "validatingCodexLink": "링크를 검증하는 중…", + "codexGenerateCodeDescription": "아래를 클릭하여 일회용 코드를 생성한 후 OpenAI에 로그인하세요.", + "startCodexFlow": "시작", + "requestingOpenAiCode": "OpenAI에 코드 요청 중…", + "codexVerificationInstructions": "1. OpenAI 인증 페이지를 열고 2. 이 코드를 입력하세요. 이 페이지는 인증을 완료하면 자동으로 업데이트됩니다.", + "yourCode": "당신의 코드", + "openVerificationPage": "검증 페이지 열기", + "copyUrlShort": "URL 복사", + "savingConnection": "연결 저장 중…", + "codexConnected": "연결됨!", + "codexConnectionRegistered": "Codex 계정이 등록되었습니다. 이 탭을 닫을 수 있습니다.", + "tryAgain": "다시 시도해 주세요", + "traeAuthorizationSuccess": "Trae 권한 부여 ✓", + "traeAuthorizationFailed": "Trae 권한 부여 실패", + "closeAuthorizationWindow": "이 창을 닫을 수 있습니다.", + "returnToDashboard": "대시보드로 돌아가기.", + "resetViaAppData": "앱 데이터로 재설정", + "deleteSettingsToReset": "앱 데이터 디렉토리에서 설정 파일을 삭제하여 비밀번호를 재설정하세요:", + "quitAppCompletely": "OmniRoute 데스크탑 앱을 완전히 종료합니다.", + "navigateToAppData": "앱 데이터 디렉토리로 이동하십시오", + "checkAppDataFolder": "시스템 앱 데이터 폴더를 확인하세요", + "deleteSettingsJson": "삭제", + "relaunchAppFresh": "OmniRoute 데스크탑 앱을 다시 시작하세요 — 새 설정이 시작됩니다.", + "alternativeSetPassword": "대체: 새 비밀번호 설정", + "setNewPasswordViaEnv": "서버 환경 파일을 통해 새 초기 비밀번호를 설정하세요:", + "openServerEnv": "열기", + "inDataDirectory": "데이터 디렉토리에서", + "addOrUpdate": "추가 또는 업데이트", + "deleteAndRelaunch": "삭제", + "settingsJson": "settings.json", + "fromDataDir": "데이터 디렉토리에서", + "relaunchApp": "OmniRoute 데스크탑 앱을 다시 시작하세요." }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "AI 인프라를 단순화할 준비가 되셨나요?", "ctaDescription": "OmniRoute를 통해 AI 통합을 간소화하는 개발자와 함께하세요. 오픈 소스이며 무료로 시작할 수 있습니다.", "startFree": "무료로 시작하세요", - "readDocumentation": "문서 읽기" + "readDocumentation": "문서 읽기", + "company": "회사", + "pricing": "가격 책정", + "apiReference": "API 참조", + "helpCenter": "헬프 센터", + "about": "정보", + "blog": "블로그", + "contact": "연락처", + "terms": "약관", + "privacy": "개인정보 보호", + "license": "라이선스", + "footerDescription": "현대 AI 인프라를 위한 통합 인터페이스. 안전하고, 관찰 가능하며, 확장 가능합니다.", + "communityDiscussions": "커뮤니티 토론" }, "docs": { "title": "문서", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "에이전트 간 통신 및 도구 공유를 위해 ACP 레지스트리를 통해 에이전트를 등록하고 관리합니다.", "protocolAcpStep1": "등록된 ACP 에이전트를 보려면 대시보드 → 에이전트로 이동하세요.", "protocolAcpStep2": "기능 및 엔드포인트 구성을 사용하여 새 에이전트를 등록합니다.", - "protocolAcpStep3": "CLI 도구를 사용하여 에이전트 통신 채널을 구성합니다." + "protocolAcpStep3": "CLI 도구를 사용하여 에이전트 통신 채널을 구성합니다.", + "metadataTitleTemplate": "%s — OmniRoute 문서", + "metadataDefaultTitle": "OmniRoute 문서", + "metadataDescription": "OmniRoute AI 게이트웨이에 대한 포괄적인 문서 — 설정, API, 압축, 배포 등.", + "layoutNavTitle": "OmniRoute 문서", + "layoutHomeLink": "문서 홈", + "layoutDashboardLink": "대시보드로 돌아가기 ←", + "homeTitle": "OmniRoute 문서", + "homeMetadataDescription": "AI를 라우팅하고, 압축하고, 확장하는 데 필요한 모든 것 — 설정 가이드, API 참조, 압축, 배포 등.", + "homeTwitterDescription": "OmniRoute AI 게이트웨이에 대한 포괄적인 문서", + "homeDescription": "AI를 라우팅, 압축 및 확장하는 데 필요한 모든 것", + "homeSearchHint": "문서 검색을 위해 Ctrl K를 누르세요", + "featuredQuickStartTitle": "빠른 시작", + "featuredQuickStartDescription": "3분 안에 OmniRoute 실행하기", + "featuredAutoComboTitle": "자동 콤보 가이드", + "featuredAutoComboDescription": "OmniRoute가 당신에게 가장 적합한 AI를 선택하게 하세요.", + "featuredProvidersTitle": "제공자 가이드", + "featuredProvidersDescription": "몇 분 안에 AI 공급자를 연결하세요", + "nonTechUsersTitle": "비기술 사용자용", + "nonTechUsersSubtitle": "빠르게 시작하세요 — 기술 배경이 필요 없습니다", + "techUsersTitle": "기술 사용자용", + "techUsersSubtitle": "아키텍처, API 및 내부 구조에 대한 심층 분석", + "apiExplorerMetadataTitle": "API 탐색기 — OmniRoute 문서", + "apiExplorerMetadataDescription": "인터랙티브 API 탐색기 — 실시간 응답으로 OmniRoute 엔드포인트를 실시간으로 시도해 보세요", + "apiExplorerTitle": "API 탐색기", + "apiExplorerDescription": "OmniRoute 엔드포인트를 실시간으로 사용해 보세요. 엔드포인트를 선택하고 요청을 구성한 다음 실시간으로 응답을 확인하세요.", + "apiExplorerSseStarted": "SSE 스트림이 시작되었습니다 — 실시간 출력을 보려면 터미널/개발자 도구를 확인하세요.", + "apiExplorerError": "오류: {message}", + "apiExplorerAuth": "인증", + "apiExplorerResponseLabel": "응답", + "apiExplorerSelectEndpoint": "탐색할 엔드포인트를 선택하세요", + "apiExplorerChooseApi": "사이드바에서 API를 선택하여 세부정보를 보고 실시간으로 사용해 보세요.", + "feedbackThanks": "피드백 감사합니다!", + "feedbackQuestion": "이 페이지가 도움이 되었나요?", + "pageMetadataTitle": "{title} — OmniRoute 문서", + "pageMetadataDescription": "OmniRoute 문서: {title}", + "breadcrumb": "브레드크럼브", + "apiReferenceTable": { + "parameters": "매개변수", + "name": "이름", + "type": "유형", + "description": "설명", + "returns": "반환", + "typePrefix": "유형:" + } }, "legal": { "privacyPolicy": "개인 정보 보호 정책", @@ -9957,7 +10479,42 @@ "successMessage": "귀하의 {providerName} 계정이 연결되었습니다.", "done": "완료", "error": "연결 실패", - "tryAgain": "다시 시도하세요" + "tryAgain": "다시 시도하세요", + "errorSessionIncomplete": "OAuth 세션이 불완전합니다(리디렉션 URI 또는 코드 검증기가 누락됨). 연결을 다시 시작하고 다시 시도하세요.", + "errorExchangeFailed": "교환 실패", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: 기본 Google OAuth 자격 증명은 localhost에서만 작동합니다. 원격 사용을 위해 환경 변수 ANTIGRAVITY_OAUTH_CLIENT_ID 및 ANTIGRAVITY_OAUTH_CLIENT_SECRET를 통해 자신의 OAuth 자격 증명을 구성하십시오. README의 '원격 서버에서의 OAuth' 섹션을 참조하십시오.", + "errorSaveFailed": "저장 실패", + "errorAuthorizationFailed": "인증에 실패했습니다", + "errorAuthorizationTimeout": "권한 부여 시간 초과", + "errorRequestFailed": "요청 실패", + "errorCallbackServerFailed": "콜백 서버 시작에 실패했습니다.", + "errorBrowserUnavailable": "현재 환경에서 이 공급자에 대한 브라우저 OAuth를 사용할 수 없습니다. 대신 지원되는 인증 방법을 사용하세요.", + "errorStateMismatch": "OAuth 상태 불일치. 연결을 다시 시작하고 다시 시도하세요.", + "errorImportAccessToken": "액세스 토큰을 가져오는 데 실패했습니다.", + "errorSessionNotInitialized": "OAuth 세션이 초기화되지 않았습니다. 연결 흐름을 다시 시작하고 다시 시도하십시오.", + "errorNoAuthorizationCode": "인증 코드가 없습니다. 콜백 URL 또는 인증 코드를 붙여넣으세요.", + "tabDeviceCode": "장치 코드", + "tabBrowserLogin": "브라우저 로그인", + "tabImportAuthJson": "auth.json 가져오기", + "tabPasteApiKey": "API 키 붙여넣기", + "windsurfPasteDescription": "Windsurf / VS Code IDE에서 명령 팔레트에서 \"Windsurf: Provide Auth Token\" 명령을 실행하거나 Jupyter \"Get Windsurf Authentication Token\" 버튼을 클릭한 다음, 표시된 토큰을 복사하여 아래에 붙여넣으세요. windsurf.com/show-auth-token을 직접 열면 \"Redirecting\" 페이지만 표시됩니다 — IDE가 흐름을 시작해야 합니다.", + "grokAuthJsonDescription": "~/.grok/auth.json의 전체 내용을 붙여넣으세요(단순히 JWT \"key\" 필드만이 아닙니다). 기본 JWT는 refresh_token이 없으므로 만료 후 연결이 끊깁니다(#7610). 가능할 때는 전용 Import auth.json 모달을 사용하는 것이 좋습니다.", + "devinDesktopPasteDescription": "인증된 Devin 세션에서 기존 Devin API 키를 붙여넣으세요. 키 내보내기 가능성과 단계는 Devin 버전 및 계정에 따라 다릅니다.", + "devinPasteDescription": "WINDSURF_API_KEY를 제공하십시오 ( `devin auth login`을 통해 얻거나 Windsurf IDE의 \"Windsurf: Provide Auth Token\" 명령을 통해 얻은).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API 키 / 토큰", + "saving": "저장 중…", + "saveConnection": "연결 저장", + "gheDescription": "귀하의 GitHub Enterprise 인스턴스의 기본 URL을 입력하십시오 (예: https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL이 필요합니다", + "gitlabDuoSetupTitle": "GitLab Duo OAuth 설정", + "gitlabDuoSetupMessage": "GitLab Duo OAuth가 구성되지 않았습니다. {applicationsUrl}에서 리디렉션 URI {redirectUri} 및 범위 \"{scopes}\"로 OAuth 애플리케이션을 등록한 다음 {clientIdEnv} (선택적으로 {clientSecretEnv})를 설정하고 재시작하세요.", + "gitlabDuoSetupDescription": "애플리케이션이 등록되고 이 OmniRoute 인스턴스에 환경 변수가 설정된 후, 계속 진행을 클릭하여 OAuth 로그인을 시작하세요.", + "continue": "계속하다" }, "cursorAuthModal": { "title": "Cursor IDE 연결", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "더 불러오기", - "loadingMore": "더 불러오는 중..." + "loadingMore": "더 불러오는 중...", + "correlationId": "상관 ID", + "group": { + "showAllRows": "모든 행 표시", + "showLatestPerCorrelation": "상관 ID별 최신 정보 표시", + "grouped": "그룹화됨" + }, + "running": "실행 중", + "interval": { + "decrease": "간격 줄이기", + "title": "초 단위 자동 새로 고침 간격", + "increase": "간격 늘리기" + }, + "status": { + "inProgress": "진행 중", + "recoveredByRetry": "재시도로 복구됨", + "goToParent": "상위 요청으로 이동", + "healedTitle": "실패, {count}번 재시도 후 복구됨", + "healed": "치유됨", + "failedTitle": "모든 {count} 시도가 실패했습니다", + "failed": "실패했습니다", + "pinnedTitle": "컨텍스트 캐시 세션 고정을 통해 선택된 모델", + "pinned": "고정됨" + }, + "attempts": "시도 횟수", + "detail": { + "collapse": "{title} 축소", + "expand": "{title} 확장", + "copyTitle": "{title} 복사", + "copied": "복사됨!", + "copy": "복사", + "autoscrollOn": "자동 스크롤: 켜짐", + "autoscrollOff": "자동 스크롤: 꺼짐", + "payload": { + "clientRawRequest": "클라이언트 원시 요청", + "clientRequest": "클라이언트 요청", + "openaiRequest": "OpenAI 요청", + "providerRequest": "제공자 요청", + "providerResponse": "제공자 응답", + "clientResponse": "클라이언트 응답", + "pipelineError": "파이프라인 오류" + }, + "payloadMissing": "이 로그 항목에 대한 상세 페이로드 아티팩트가 더 이상 사용 가능하지 않습니다.", + "payloadCorrupt": "상세 페이로드 아티팩트를 구문 분석할 수 없습니다.", + "notAvailable": "해당 없음", + "semanticCache": "시맨틱 (OmniRoute)", + "upstreamCache": "업스트림 (제공자)", + "ariaLabel": "요청 로그 세부정보", + "completed": "완료됨", + "upstreamStatus": "업스트림: {status}", + "statusDiscrepancy": "OmniRoute는 공급자가 {provider}를 반환했음에도 불구하고 {status}를 반환했습니다.", + "previousRequest": "이전 요청", + "nextRequest": "다음 요청", + "close": "세부 정보 모달 닫기", + "startedAt": "시작됨", + "endedAt": "종료됨", + "duration": "지속 시간", + "model": "모델", + "provider": "제공자", + "account": "계정", + "input": "입력", + "totalIn": "총 입력: {value}", + "cacheRead": "캐시 읽기: {value}", + "cacheWrite": "캐시 쓰기: {value}", + "compressed": "압축됨: {from} → {to} ({percent}% 절약됨)", + "output": "출력", + "totalOut": "총 출금: {value}", + "reasoning": "추론: {value}", + "requestedModel": "요청된 모델", + "requestProtocol": "요청 프로토콜", + "cacheSource": "캐시 소스", + "modelPinning": "모델 고정", + "activeModelPinning": "활성 — 세션 고정을 통해 선택된 모델", + "rotated": "회전됨: {initial} -> {final}", + "apiKey": "API 키", + "noApiKey": "API 키가 없습니다", + "combo": "콤보", + "error": "오류", + "unblockAll": "모두 차단 해제", + "cleared": "지워졌습니다", + "unblock": "차단 해제", + "relatedRequests": "관련 요청 ({count})", + "current": "현재", + "detailStatus": "상세 상태", + "loadingDetails": "요청 세부정보 로딩 중...", + "providerEventStream": "제공자 이벤트 스트림", + "clientEventStream": "클라이언트 이벤트 스트림", + "eventStream": "이벤트 스트림", + "responsePayloadLegacy": "응답 페이로드 (레거시)", + "requestPayloadLegacy": "요청 페이로드 (레거시)", + "noPayload": "이 로그 항목에 대한 페이로드 데이터가 없습니다.", + "correlationId": "상관 ID", + "correlationIdValue": "상관 ID: {id}", + "detailedPayloadInfo": "새 요청에 대한 4단계 클라이언트/제공자 페이로드 보기를 원하시면 먼저 자세한 로깅을 활성화하세요." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} 비활성화됨", "providerAdded": "{provider}가 추가되었습니다.", "add": "추가", - "manualApiKey": "수동 API 키 사용" + "manualApiKey": "수동 API 키 사용", + "createDahlTokenFailed": "Dahl 토큰을 생성하지 못했습니다.", + "providerProxy": "프록시", + "providerProxyConfigureHint": "프록시 구성", + "providerProxyTitleConfigured": "프록시가 구성되었습니다: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-restricted — 약관 검토 필요", "caution": "주의 — 개인 사용 / 프록시 조항", "ok": "일반적으로 허용됨" - } + }, + "allProviders": "모든 공급자", + "noApiKeyRequired": "API 키가 필요하지 않습니다" }, "providerHealthAutopilot": { "title": "제공업체 상태 오토파일럿", @@ -12390,7 +13047,11 @@ "on": "켜짐", "off": "꺼짐", "availableProviders": "사용 가능한 프로바이더 ({count})", - "noProviderOverrides": "재정의 없음 — 모든 활성 프로바이더가 기본 모델로 참여합니다" + "noProviderOverrides": "재정의 없음 — 모든 활성 프로바이더가 기본 모델로 참여합니다", + "resetFailed": "재설정 실패", + "resetSuccess": "구성을 기본값으로 재설정", + "running": "실행 중...", + "testFailed": "테스트 실패" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi(Moonshot AI)는 OmniRoute의 창립 오픈소스 친구입니다", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "제공자가 이 이미지 요청에 대한 비전을 지원하지 않습니다.", "capabilityFilter.toolsMismatch": "공급자가 도구 호출을 지원하지 않습니다.", "capabilityFilter.structuredOutputMismatch": "제공자가 구조화된 출력을 지원하지 않습니다", - "capabilityFilter.contextWindowMismatch": "요청이 공급자 컨텍스트 창을 초과했습니다" + "capabilityFilter.contextWindowMismatch": "요청이 공급자 컨텍스트 창을 초과했습니다", + "publicSystem": { + "notFound": { + "title": "페이지를 찾을 수 없습니다", + "description": "찾고 있는 페이지가 존재하지 않거나 이동되었습니다.", + "dashboardAriaLabel": "대시보드로 돌아가기", + "statusAriaLabel": "시스템 상태 페이지 열기", + "systemStatus": "시스템 상태" + }, + "error": { + "title": "내부 서버 오류", + "description": "요청을 처리하는 동안 문제가 발생했습니다. 저희 팀이 이를 인지하였으며 수정 작업을 진행 중입니다.", + "errorId": "오류 ID: {id}", + "detailsAriaLabel": "오류 세부정보", + "retryAriaLabel": "페이지를 다시 로드해 보세요", + "tryAgain": "다시 시도해 주세요", + "dashboardAriaLabel": "대시보드로 돌아가기", + "statusAriaLabel": "시스템 상태 열기", + "systemStatus": "시스템 상태" + }, + "globalError": { + "title": "문제가 발생했습니다", + "description": "예기치 않은 오류가 발생했습니다. 이 오류는 기록되었으며, 저희 팀이 조사할 것입니다.", + "detailsAriaLabel": "오류 세부정보", + "retryAriaLabel": "페이지를 다시 로드해 보세요", + "tryAgain": "다시 시도하세요", + "statusAriaLabel": "시스템 상태 열기", + "systemStatus": "시스템 상태" + }, + "offline": { + "title": "연결 문제", + "description": "OmniRoute가 현재 네트워크에 연결할 수 없습니다. 인터넷, VPN 또는 프록시 설정을 확인하세요.", + "connectionRestored": "연결이 복원되었습니다", + "offlineModeDetected": "오프라인 모드가 감지되었습니다", + "retryConnection": "연결 재시도", + "openStatusPage": "상태 페이지 열기" + }, + "maintenance": { + "title": "예정된 유지보수", + "description": "일부 서비스는 유지 관리가 진행되는 동안 일시적으로 사용할 수 없습니다. 핵심 라우팅은 일반적으로 온라인 상태를 유지하지만, 관리 기능은 저하될 수 있습니다.", + "suggestion1": "몇 분 후에 다시 시도하세요.", + "suggestion2": "재시도하기 전에 현재 건강 지표와 공급자 상태를 확인하세요.", + "systemStatus": "시스템 상태 보기", + "healthDashboard": "건강 대시보드 열기" + }, + "status": { + "title": "시스템 상태", + "description": "OmniRoute 핵심 서비스에 대한 실시간 운영 스냅샷.", + "loadingHealth": "건강 지표 로딩 중...", + "failedToLoad": "시스템 상태를 로드하지 못했습니다.", + "unableToReachHealth": "헬스 엔드포인트에 도달할 수 없습니다. 연결 상태를 확인하고 다시 시도하세요.", + "healthCheckFailed": "건강 검사 실패", + "openConnectivityHelp": "연결성 도움말", + "maintenanceInfo": "유지보수 정보", + "service": "서비스", + "unknown": "알 수 없음", + "notAvailable": "해당 없음", + "providersTracked": "추적된 공급자", + "circuitBreakerState": "제공자 회로 차단기 상태", + "lastUpdate": "마지막 업데이트: {timestamp}", + "uptimeMinutes": "{minutes}분", + "uptimeHoursMinutes": "{hours}시간 {minutes}분" + }, + "statusPages": { + "400": { + "title": "잘못된 요청", + "description": "요청 페이로드가 유효하지 않거나 불완전합니다.", + "suggestion1": "재시도하기 전에 필수 필드와 페이로드 형식을 검토하십시오.", + "suggestion2": "API를 사용하고 있다면, 로컬에서 JSON 스키마를 검증하세요.", + "suggestion3": "이 문제가 계속 발생하면, Translator Playground에서 요청을 열어 페이로드를 검사하세요.", + "primaryAction": "문서 열기", + "secondaryAction": "번역기 열기" + }, + "401": { + "title": "권한 없음", + "description": "이 리소스에 접근하려면 인증이 필요합니다.", + "suggestion1": "다시 로그인하고 작업을 재시도하세요.", + "suggestion2": "API 호출을 위해 Bearer 토큰이 존재하고 유효한지 확인하십시오.", + "suggestion3": "토큰이 최근에 교체되었다면, 클라이언트 자격 증명을 업데이트하세요.", + "primaryAction": "로그인 하러 가기", + "secondaryAction": "API 키 관리" + }, + "403": { + "title": "금지됨", + "description": "귀하의 요청은 이해되었으나, 정책에 의해 접근이 거부되었습니다.", + "suggestion1": "설정에서 IP 허용 목록/차단 목록 규칙을 확인하세요.", + "suggestion2": "API 키에 할당된 모델 및 예산 정책을 확인하세요.", + "suggestion3": "관리자에게 필요한 권한 범위를 부여해 달라고 요청하세요.", + "primaryAction": "오픈 액세스 도움말", + "secondaryAction": "보안 설정 열기" + }, + "408": { + "title": "요청 시간 초과", + "description": "서버가 제시간에 완전한 요청을 받지 못했습니다.", + "suggestion1": "더 작은 페이로드로 요청을 다시 시도하세요.", + "suggestion2": "네트워크 안정성과 VPN/프록시 지연 시간을 확인하세요.", + "suggestion3": "긴 작업의 경우 스트리밍을 활성화하거나 요청을 분할하십시오.", + "primaryAction": "엔드포인트 가이드 열기", + "secondaryAction": "네트워크 상태 확인" + }, + "429": { + "title": "요청이 너무 많습니다", + "description": "이 클라이언트, 키 또는 공급자에 대한 속도 제한이 초과되었습니다.", + "suggestion1": "쿨다운을 기다리고 제안된 간격 후에 다시 시도하세요.", + "suggestion2": "대체 공급자가 있는 콤보로 전환하십시오.", + "suggestion3": "설정에서 공급자 복원력/요율 제한 프로필을 조정하세요.", + "primaryAction": "복원력 설정 열기", + "secondaryAction": "콤보 열기" + }, + "500": { + "title": "내부 서버 오류", + "description": "요청을 처리하는 동안 예기치 않은 서버 측 오류가 발생했습니다.", + "suggestion1": "몇 초 후에 한 번 더 시도하세요.", + "suggestion2": "상태 텔레메트리 및 서버 로그에서 상관된 요청 ID를 확인하세요.", + "suggestion3": "지속적으로 발생하면, 타임스탬프와 요청 컨텍스트를 포함하여 문제를 보고하십시오.", + "primaryAction": "건강 대시보드 열기", + "secondaryAction": "로그 열기" + }, + "502": { + "title": "잘못된 게이트웨이", + "description": "업스트림 공급자 또는 게이트웨이 통합이 유효하지 않은 응답을 반환했습니다.", + "suggestion1": "다른 공급자 또는 활성 조합 경로로 다시 시도하십시오.", + "suggestion2": "제공자 자격 증명 및 모델 가용성을 확인하십시오.", + "suggestion3": "형식 변환이 포함된 경우 번역가 출력 검사.", + "primaryAction": "공급자 열기", + "secondaryAction": "번역기 열기" + }, + "503": { + "title": "서비스를 사용할 수 없습니다", + "description": "서비스가 유지 관리 또는 저하된 종속성으로 인해 일시적으로 사용할 수 없습니다.", + "suggestion1": "잠시 기다렸다가 다시 시도하세요.", + "suggestion2": "유지보수 공지 및 시스템 상태를 확인하세요.", + "suggestion3": "지연에 민감한 워크플로우의 경우 대체 공급자를 사용하세요.", + "primaryAction": "유지보수 세부정보", + "secondaryAction": "시스템 상태" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel} 연결", + "chooseMethod": "인증 방법을 선택하세요:", + "builderId": "AWS 빌더 ID", + "builderDescription": "대부분의 사용자에게 권장됩니다. {providerLabel}에 연결된 AWS 계정으로 로그인하세요.", + "organization": "귀하의 조직 (AWS IAM 아이덴티티 센터)", + "organizationDescription": "회사의 SSO 시작 URL을 사용하세요 (예: {url}).", + "googleAccount": "구글 계정", + "googleDescription": "Google 계정으로 로그인하세요.", + "githubAccount": "GitHub 계정", + "githubDescription": "GitHub 계정으로 로그인하세요.", + "importToken": "토큰 가져오기", + "importDescription": "{providerLabel}에서 내보낸 새로 고침 토큰을 붙여넣으세요.", + "apiKey": "API 키", + "apiKeyDescription": "장기 사용 가능한 {providerLabel} / CodeWhisperer API 키를 붙여넣으세요. 이 키는 새로 고침 토큰 없이 베어러 자격 증명으로 저장되며, 프로필 검색은 최선의 노력으로 수행됩니다.", + "idcStartUrl": "IDC 시작 URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "귀하의 조직의 AWS IAM Identity Center URL", + "awsRegion": "AWS 리전", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Identity Center의 AWS 리전(기본값: us-east-1)", + "continue": "계속하다", + "back": "뒤로", + "autoDetecting": "토큰 자동 감지 중...", + "readingCredentials": "AWS SSO 캐시에서 {providerLabel} 자격 증명을 읽는 중입니다.", + "tokenNotDetected": "{providerLabel} 토큰이 자동으로 감지되지 않았습니다. 새로 고침 토큰을 수동으로 붙여넣어 주십시오.", + "refreshToken": "리프레시 토큰", + "tokenPlaceholder": "토큰이 자동으로 채워집니다...", + "importing": "가져오는 중...", + "apiKeyPlaceholder": "{providerLabel} API 키를 붙여넣으세요...", + "apiKeyStoredDescription": "장기 지속되는 베어러 자격 증명으로 암호화되어 저장됩니다. 새로 고침 흐름이 없습니다.", + "apiKeyRegionDescription": "키에 대한 AWS 리전(기본값: us-east-1)", + "validating": "유효성 검사 중...", + "validateAndSaveApiKey": "API 키 검증 및 저장", + "errorAutoDetect": "토큰을 자동으로 감지할 수 없습니다.", + "errorAutoDetectFailed": "토큰 자동 감지에 실패했습니다.", + "errorRefreshTokenRequired": "새로 고침 토큰을 입력해 주세요", + "errorImportFailed": "가져오기 실패", + "errorApiKeyRequired": "Kiro API 키를 입력해 주세요", + "errorApiKeyImportFailed": "API 키 가져오기에 실패했습니다", + "errorIdcStartUrlRequired": "IDC 시작 URL을 입력해 주세요." + }, + "kiroSocialOAuthModal": { + "title": "{providerName}를 통해 {providerLabel} 연결", + "errorStartAuthorization": "인증 시작에 실패했습니다.", + "errorAuthorizationExpired": "권한이 만료되었습니다. 로그인 흐름을 다시 시작하세요.", + "errorAuthorizationFailed": "권한 부여 실패", + "initializing": "초기화 중...", + "settingUp": "{providerName} 인증 설정 중", + "openIncognito": "이 링크를 시크릿 창에서 열기", + "incognitoDescription": "세션 충돌을 피하기 위해 Incognito/Private 창을 사용하세요.", + "copyLink": "링크 복사", + "verificationCode": "인증 코드", + "waiting": "승인을 기다리는 중...", + "cancel": "취소", + "successTitle": "연결되었습니다!", + "successMessage": "귀하의 {providerLabel} 계정이 {providerName}를 통해 연결되었습니다.", + "done": "완료", + "errorTitle": "연결 실패", + "close": "닫기" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "인증에 실패했습니다", + "errorPopupBlocked": "팝업이 차단되었습니다 — 이 사이트에 대한 팝업을 허용하거나 아래에 토큰을 수동으로 붙여넣으세요.", + "errorPopupClosed": "권한 부여 창이 완료되기 전에 닫혔습니다.", + "errorAccessTokenRequired": "액세스 토큰이 필요합니다.", + "errorImportFailed": "가져오기 실패", + "title": "Trae SOLO 연결", + "authorizeDescription": "팝업에서 trae.ai를 통해 인증하세요. 토큰이 가져와지면 팝업이 자동으로 닫힙니다.", + "authorizeImportant": "중요: 먼저 trae.ai 브라우저에서 로그인해야 합니다. 인증 페이지는 기존 세션만 확인하며 — 로그인할 수 없습니다. \"로그인 실패\"가 표시되면 \"solo.trae.ai 열기\"를 클릭하고 로그인한 후 다시 여기로 돌아오세요.", + "waitingForAuthorization": "trae.ai를 기다리는 중…", + "authorizeWithBrowser": "브라우저로 인증하기", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "또는 토큰을 수동으로 붙여넣기", + "manualInstructions": "solo.trae.ai에 로그인하고 DevTools → Network를 열고, 임의의 채팅 메시지를 보내고 Authorization: Cloud-IDE-JWT {tokenPlaceholder} 요청 헤더에서 JWT를 복사하세요. JWT 수명은 약 14일입니다. 선택적 신원 필드는 동일한 요청 본문의 common_params에서 가져옵니다.", + "accessTokenLabel": "액세스 토큰 (Cloud-IDE-JWT)", + "webId": "웹 ID", + "optional": "선택 사항", + "bizUserId": "비즈 사용자 ID", + "userUniqueId": "사용자 고유 ID", + "scope": "범위", + "tenant": "세입자", + "region": "지역", + "importing": "가져오는 중…", + "importToken": "토큰 가져오기", + "cancel": "취소" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "배포 중...", + "complete": "완료", + "defaultLabel": "프록시 배포" + } + }, + "providerTest": { + "dialogLabel": "테스트 {provider}", + "deprecated": "사용 중단됨", + "risk": "위험", + "close": "닫기", + "model": "모델", + "key": "키", + "defaultKey": "기본값", + "clearConversation": "대화 지우기", + "clear": "지우기", + "tabs": { + "test": "테스트", + "logs": "로그" + }, + "loadingLogs": "로그를 로드하는 중…", + "failedToLoadLogs": "로그를 불러오는 데 실패했습니다.", + "noLogsYet": "아직 로그가 없습니다", + "noLogsDescription": "테스트 탭에서 테스트 메시지를 보내세요 — 이 공급자의 로그가 여기에 나타납니다.", + "openFullLogs": "전체 로그 페이지 열기", + "live": "실시간", + "tailingLast": "마지막 {count} 줄 보기", + "refreshNow": "지금 새로 고침", + "refresh": "새로 고침", + "unknownRequester": "알 수 없는 요청자", + "fields": { + "timestamp": "타임스탬프", + "status": "상태", + "duration": "지속 시간", + "model": "모델", + "requestedModel": "요청된 모델", + "provider": "제공자", + "requester": "요청자", + "tokens": "토큰" + } + }, + "proxyLog": { + "detailAriaLabel": "프록시 로그 세부정보", + "event": "프록시 이벤트", + "close": "프록시 세부 정보 모달 닫기", + "time": "시간", + "latency": "지연 시간", + "clientIp": "클라이언트 IP", + "proxy": "프록시", + "direct": "직접", + "type": "유형", + "level": "레벨", + "provider": "제공자", + "tlsFingerprint": "TLS 지문", + "directNative": "직접", + "targetUrl": "대상 URL", + "error": "오류", + "configuration": "프록시 구성" + }, + "requestTimeline": { + "title": "요청 타임라인", + "modes": { + "follow": "팔로우", + "followDescription": "축이 왼쪽으로 스크롤되면, NOW 선은 75%에 유지됩니다.", + "now": "지금", + "nowDescription": "현재 시간으로 이동, NOW 줄이 중앙으로 재설정됩니다.", + "pan": "팬", + "panDescription": "드래그하여 탐색하세요, 배경이 고정되어 있습니다." + }, + "reset": "재설정", + "started": "시작됨", + "ended": "끝났습니다", + "duration": "지속 시간", + "status": "상태", + "provider": "제공자", + "tokens": "토큰", + "active": "활성화", + "other": "기타", + "tenMinutes": "10분", + "hour": "시간", + "day": "일", + "unknownModel": "알 수 없음", + "pending": "보류 중" + }, + "metadata": { + "compressionTitle": "압축", + "compressionDescription": "토큰 사용량과 비용을 줄이기 위해 컨텍스트 압축 설정을 구성하세요.", + "relayTitle": "OmniRoute — 릴레이 프록시", + "relayDescription": "AI 인프라를 위한 서버리스 릴레이 프록시 엔드포인트", + "trafficInspectorTitle": "트래픽 인스펙터 — OmniRoute", + "trafficInspectorDescription": "LLM 호출 모니터링 + 모든 애플리케이션의 HTTPS 트래픽 디버깅" + }, + "conductor": { + "title": "Conductor — CLI 에이전트 플릿", + "subtitle": "OmniConductor 허브: 러너, 작업 큐 및 위원회, 실시간", + "runners": "러너", + "tasks": "작업", + "colName": "이름", + "colClis": "CLI", + "colStatus": "상태", + "colTask": "작업", + "colMode": "모드", + "colRunner": "러너", + "colSummary": "요약", + "online": "온라인", + "offline": "오프라인", + "draining": "배수 중", + "hubOffline": "컨덕터 허브 오프라인이거나 구성되지 않음 (CONDUCTOR_HUB_URL) — 오래된 데이터 대신 아무것도 표시되지 않음.", + "noRunners": "등록된 러너가 없습니다", + "noTasks": "아직 작업이 없습니다", + "detailTitle": "작업 세부정보", + "prompt": "프롬프트", + "branch": "브랜치", + "fetchHint": "결과를 가져오려면: git fetch origin {branch}", + "council": "의회", + "candidates": "후보자", + "cancel": "작업 취소", + "cancelConfirmTitle": "이 작업을 취소하시겠습니까?", + "cancelConfirmMessage": "허브는 러너에서 실행을 중단합니다. 이는 되돌릴 수 없습니다.", + "cancelFailed": "허브가 취소를 거부했습니다.", + "close": "닫기", + "error": "오류", + "faroTitle": "파로 — 함대 대변인", + "faroSubtitle": "실제 함대 이벤트에 기반한 채팅 및 음성. 파괴적인 명령은 항상 확인을 요청합니다.", + "faroEmpty": "함대에 대해 물어보세요 — 예: \"함대는 어떤가요?\"", + "faroPending": "Faro가 확인을 요청하고 있습니다.", + "faroPlaceholder": "Faro와 이야기하세요…", + "faroSend": "보내기", + "faroOffline": "Faro(대변인)가 오프라인입니다", + "yes": "네", + "no": "아니요", + "pushToTalk": "말하기 위해 길게 누르세요", + "speakAnswers": "답변하기", + "voiceModels": "음성 모델 (이 OmniRoute의 제공자/모델)", + "voiceIdle": "대화하다", + "voiceListening": "듣는 중…", + "voiceThinking": "생각 중…", + "voiceSpeaking": "말하는 중…", + "sttFailed": "전사 실패 (STT 모델/제공자를 확인하세요)", + "ttsFailed": "음성 합성에 실패했습니다 (TTS 모델/제공자를 확인하세요)", + "micDenied": "마이크를 사용할 수 없거나 권한이 거부되었습니다" + }, + "cliproxyProviderExposure": { + "title": "제공자 노출", + "description": "cliproxyapi/ 접두사 아래에 CLIProxyAPI 모델을 라우팅 대상으로 노출합니다.", + "label": "cliproxyapi/... 노출", + "hint": "활성화되면 발견된 모델이 OmniRoute 전역의 공급자 선택 목록에 나타납니다.", + "updateFailed": "업데이트 실패 (HTTP {status})", + "networkError": "네트워크 오류 — 공급자 노출 설정을 업데이트할 수 없습니다." + } } - diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index 8b3b36c902..dc4e0128e8 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -172,6 +172,18 @@ "unselectAll": "निवड रद्द करा", "visibleModels": "दृश्यमान", "selectAllConfirm": "या कॉम्बोमध्ये {count} मॉडेल जोडायचे?", + "testSelectedProviders": "चाचणी प्रदाते", + "testingSelectedProviders": "चाचणी {done}/{total}...", + "noProvidersSelectedToTest": "कृपया खालील किमान एक प्रदाता प्रथम तपासा", + "noModelsToTestForProviders": "चयनित प्रदात्यांसाठी चाचणी घेण्यासाठी कोणतेही मॉडेल नाहीत", + "testSelectedProvidersResults": "{ok} पैकी {total} मॉडेल्स कार्यरत आहेत", + "selectWorkingModels": "काम करत आहे", + "unselectWorkingModels": "काम करत नाही", + "noWorkingModelsToSelect": "अतिरिक्त करण्यासाठी कार्यरत मॉडेल्स शिल्लक नाहीत", + "providerTestHint": "टीप: प्रदाता तपासा → चाचणी → कार्यरत जोडा. पुन्हा क्लिक करा अनसिलेक्ट करण्यासाठी.", + "selectAllProviders": "सर्व प्रदात्यांची तपासणी करा", + "clearProviderSelection": "प्रदात्यांचे निवडणे रद्द करा", + "providersSelectedCount": "{count} प्रदाते तपासले", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "आकार", + "toggleNoAuthProvider": "नो-ऑथ प्रदाता टॉगल करा", + "loadingModels": "मॉडेल लोड करत आहे…", + "selectAModel": "मॉडेल निवडा", + "degraded": "कमी झालेले", + "zeroConfigBannerTitle": "झिरो-कॉन्फिग मोडमध्ये चालू आहे", + "zeroConfigBannerBody": "OmniRoute ने पहिल्या लाँचवर स्वयंचलितपणे सुरक्षित एन्क्रिप्शन कीज तयार केल्या. त्या {dataDir} मध्ये जतन केल्या जातात. कोणतीही क्रिया आवश्यक नाही — तुमचे डेटा एन्क्रिप्टेड आणि सुरक्षित आहे. कस्टम कीज वापरण्यासाठी, त्या फाईलमध्ये JWT_SECRET आणि STORAGE_ENCRYPTION_KEY जोडा.", + "batchRelativeTimeIn": "{value} मध्ये", + "batchRelativeTimeAgo": "{value} पूर्वी", + "batchDetailsTitle": "बॅच तपशील", + "batchProgress": "प्रगती", + "batchCompletedCount": "{count} पूर्ण झाले", + "batchFailedCount": "{count} अयशस्वी", + "batchPendingCount": "{count} प्रलंबित", + "batchTimeline": "कालरेषा", + "batchTimelineInProgress": "प्रगतीत", + "batchTimelineFinalizing": "अंतिम रूप देत आहे", + "batchTimelineCompleted": "पूर्ण झाले", + "batchTimelineFailed": "अयशस्वी", + "batchTimelineExpires": "कालबाह्य", + "batchTimelineExpired": "कालबाह्य", + "batchTimelineCancelling": "रद्द करत आहे", + "batchTimelineCancelled": "रद्द केलेले", + "batchTokenUsage": "टोकन वापर", + "batchMetadata": "मेटाडेटा", + "batchFileContents": "फाइल सामग्री", + "batchFileUsedByCount": "{count, plural, one {# बॅच} other {# बॅचेस}}", + "batchFilePreview": "पूर्वावलोकन", + "batchFilePreviewTruncated": "पहिल्या {shown} ओळी दाखवत आहे ({total} एकूण ओळी)", + "batchFileDownloadFull": "पूर्ण फाइल डाउनलोड करा" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "विभाजक", "discovery": "शोध", "discoverySubtitle": "मोफत ॲक्सेससाठी प्रोव्हायडर्स स्कॅन करा", + "conductor": "संवहनकर्ता", + "conductorSubtitle": "CLI-एजंट फ्लीट", "resilienceConnections": "कनेक्शन लवचिकता", "resilienceConnectionsSubtitle": "कूलडाउन, ब्रेकर, लॉकआउट स्थिती", "settingsModalityBridge": "मोडालिटी ब्रिज", - "settingsModalityBridgeSubtitle": "प्रतिमा/ऑडिओ → मजकूर-फक्त मॉडेलसाठी मजकूर बॅकअप" + "settingsModalityBridgeSubtitle": "प्रतिमा/ऑडिओ → मजकूर-फक्त मॉडेलसाठी मजकूर बॅकअप", + "commandPalette": { + "title": "आज्ञा पॅलेट", + "searchPlaceholder": "पृष्ठे, सेटिंग्ज, साधने शोधा...", + "clearSearch": "शोध साफ करा", + "noResults": "कोणतेही परिणाम नाहीत", + "navigate": "नेव्हिगेट", + "open": "उघडा", + "close": "बंद करा" + }, + "noResults": "कोणतेही परिणाम नाहीत" }, "webhooks": { "title": "वेबहुक", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Settings Update Failed", "sync.token.created": "Sync Token Created", "sync.token.revoked": "Sync Token Revoked" - } + }, + "mcpMetricCalls24h": "कॉल (24 तास)", + "mcpMetricSuccessRate": "यशाचा दर", + "mcpMetricAvgDuration": "सरासरी कालावधी", + "mcpMetricTopTool": "उच्चतम साधन" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "पृष्ठ स्वयंचलितपणे रीलोड करत आहे...", - "providerTopology": "प्रदाता टोपोलॉजी" + "providerTopology": "प्रदाता टोपोलॉजी", + "downloadDmg": "DMG डाउनलोड करा (macOS)", + "downloadDmgDescription": "OmniRoute डेस्कटॉप अॅपचा एक नवीन आवृत्ती उपलब्ध आहे. कृपया अद्यतन करण्यासाठी macOS DMG इंस्टॉलर डाउनलोड आणि स्थापित करा (सध्याचे: v{version}).", + "downloadExe": "EXE डाउनलोड करा (Windows)", + "downloadExeDescription": "OmniRoute डेस्कटॉप अॅपचा एक नवीन आवृत्ती उपलब्ध आहे. कृपया अद्यतन करण्यासाठी Windows EXE इंस्टॉलर डाउनलोड आणि स्थापित करा (सध्याचा: v{version}).", + "downloadAppImage": "अ‍ॅपइमेज डाउनलोड करा (Linux)", + "downloadAppImageDescription": "OmniRoute डेस्कटॉप अॅपचा एक नवीन आवृत्ती उपलब्ध आहे. कृपया अद्यतनासाठी Linux AppImage पॅकेज डाउनलोड करा (सध्याचे: v{version}).", + "downloadUpdate": "अद्यतन डाउनलोड करा", + "downloadUpdateDescription": "OmniRoute डेस्कटॉप अॅपचा एक नवीन आवृत्ती उपलब्ध आहे. कृपया आपल्या प्रणालीसाठी संबंधित अॅप फॉरमॅट डाउनलोड करा (सध्याचा: v{version}).", + "updateQueued": "v{version} साठी अद्यतन रांकेत आहे.", + "updateDockerRebuilding": "Docker इमेज पार्श्वभूमीत पुन्हा तयार केली जात आहे.", + "updateWaitingRestart": "नवीन आवृत्तीसह OmniRoute पुन्हा सुरू होण्याची वाट पाहत आहे.", + "updateInstalling": "v{version} स्थापित करीत आहे.", + "updateRunning": "OmniRoute आता v{version} चालू आहे.", + "updateCompleted": "OmniRoute v{version} मध्ये अद्यतनित केले.", + "updateDockerStillRebuilding": "Docker इमेज v{version} साठी अजूनही पुन्हा तयार केली जात आहे.", + "updateInstallingBackground": "पार्श्वभूमीत v{version} स्थापित करत आहे.", + "updateWaitingVersion": "OmniRoute v{version} वर परत येण्याची वाट पाहत आहे.", + "updateDockerStillInProgress": "Docker पुनर्निर्माण अजूनही प्रगतीत आहे.", + "updateRestarting": "सेवा पुन्हा सुरू होत आहे. OmniRoute पुन्हा ऑनलाइन येण्याची वाट पाहत आहे...", + "updateTimeout": "अपडेट सुरू झाला, परंतु v{version} टाइमआउटपूर्वी उपलब्ध झाला नाही. पृष्ठ ताजे करा किंवा सर्व्हर लॉग तपासा.", + "updateTimedOut": "v{version} अद्यतनासाठी वेळ संपला.", + "updateStartFailed": "अद्यतन सुरू करण्यात अयशस्वी.", + "noResponseStream": "कोणतीही प्रतिसाद प्रवाह प्राप्त झाला नाही.", + "updateComplete": "अद्यतन पूर्ण!", + "updateFailed": "अद्यतन अयशस्वी झाले.", + "updateNetworkError": "नेटवर्क त्रुटी — अद्यतनादरम्यान कनेक्शन गमावले.", + "stepInstallPackage": "पॅकेज स्थापित करा", + "stepRebuildNativeModules": "स्थानिक मॉड्यूल पुन्हा तयार करा", + "stepRestartService": "सेवा पुन्हा सुरू करा", + "stepComplete": "पूर्ण", + "stepError": "त्रुटी", + "updateCompleteTitle": "अद्यतन पूर्ण!", + "updateFailedTitle": "अद्यतन अयशस्वी झाले", + "updatingTitle": "OmniRoute अद्यतनित करत आहे...", + "reloadNotice": "पृष्ठ काही सेकंदात आपोआप पुनः लोड होईल.", + "retryNotice": "कृपया पुन्हा प्रयत्न करा किंवा CLI द्वारे मॅन्युअली अपडेट करा.", + "restartNotice": "या पृष्ठाला बंद करू नका. प्रणाली आपोआप पुन्हा सुरू होईल.", + "reloadNow": "आता पुन्हा लोड करा", + "closeUpdate": "बंद करा", + "retryUpdate": "पुन्हा प्रयत्न करा", + "updateAvailableTitle": "अपडेट उपलब्ध: v{version}{desktop}", + "desktopAppLabel": "(डेस्कटॉप अॅप)", + "checkingForUpdates": "अपडेटसाठी तपासत आहे...", + "versionAvailableForDownload": "आवृत्ती v{version} डाउनलोडसाठी उपलब्ध आहे.", + "downloadingUpdate": "अपडेट डाउनलोड करत आहे... {percent}% पूर्ण.", + "updateDownloaded": "डाउनलोड यशस्वीपणे अपडेट झाले! लागू करण्यासाठी पुनःप्रारंभ करा आणि स्थापित करा क्लिक करा.", + "autoUpdateFailed": "स्वयंचलित अद्यतन अयशस्वी: {reason}.", + "unknownUpdateError": "अज्ञात त्रुटी", + "versionAvailableDesktop": "डेस्कटॉप अॅपसाठी आवृत्ती v{version} उपलब्ध आहे.", + "manualUpdateRequired": "या स्थापना प्रकारासाठी मॅन्युअल अद्यतन आवश्यक आहे.", + "restartAndInstall": "पुनः प्रारंभ करा आणि स्थापित करा", + "checkForUpdate": "अद्यतनासाठी तपासा", + "manualUpdate": "हाताने अद्यतन करा", + "directDownloadHint": "किंवा संबंधित इन्स्टॉलर फॉरमॅट थेट डाउनलोड करा:", + "releaseNotes": "रिलीज नोट्स", + "readMore": "अधिक वाचा", + "noAuthLabel": "कोणतीही प्रमाणीकरण नाही" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "या विनंतीच्या आसपासच्या जतन केलेल्या कॉल लॉग्सवरून अनुमानित केले आहे", "routeRecommendations": "शिफारसी", "routeLimitations": "मर्यादा", - "routeNoKnownLimitations": "या स्पष्टीकरणासाठी कोणतीही ज्ञात मर्यादा नाही." + "routeNoKnownLimitations": "या स्पष्टीकरणासाठी कोणतीही ज्ञात मर्यादा नाही.", + "searchAnalyticsLoading": "शोध विश्लेषण लोड होत आहे…", + "searchAnalyticsNoData": "अद्याप कोणतीही शोध डेटा उपलब्ध नाही.", + "searchAnalyticsNoDataDescription": "पहिल्या शोधानंतर शोध विनंत्या येथे दिसतील /v1/search.", + "searchAnalyticsToday": "{count} आज", + "searchAnalyticsCachedRequests": "{count} कॅश केलेले विनंत्या", + "searchAnalyticsApiCosts": "शोध API खर्च", + "searchAnalyticsErrors": "{count} त्रुटी", + "searchAnalyticsNoErrors": "कोणतीही चूक नाही", + "searchAnalyticsProviderBreakdown": "प्रदायक विघटन", + "searchAnalyticsQueries": "क्वेरीज", + "searchAnalyticsEmptyDescription": "वेब शोध सुरू करण्यासाठी POST /v1/search वापरा.", + "searchAnalyticsFreeTier": "मोफत स्तर उपलब्ध: Serper (2,500/महिना), Brave (2,000/महिना), Exa (1,000/महिना), Tavily (1,000/महिना) — एकूण 6,500+ मोफत शोध/महिना स्वयंचलित फेलओव्हरसह.", + "autoRoutingNoDataAvailable": "ऑटो-रूटिंग विश्लेषण उपलब्ध नाही. मेट्रिक्स पाहण्यासाठी ऑटो/ प्रीफिक्स वापरून विनंत्या करा.", + "defaultVariantLabel": "डिफॉल्ट", + "freeTierAvailable": "मुक्त स्तर उपलब्ध आहे" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} प्रदाते", "imageToTextBridgeAvailable": "Modality Bridge आता मजकूर-फक्त मॉडेलसाठी चित्रांचे वर्णन करू शकतो. /api/v1/images/understanding कार्यान्वित झाल्यावर इनलाइन प्लेग्राउंड उपलब्ध होईल.", "imageToTextBridgeCta": "Modality Bridge सेटिंग्जमध्ये Image→Text ब्रिज कॉन्फिगर करा", - "sttBridgeCta": "Modality Bridge सेटिंग्जमध्ये Speech→Text ब्रिज कॉन्फिगर करा" + "sttBridgeCta": "Modality Bridge सेटिंग्जमध्ये Speech→Text ब्रिज कॉन्फिगर करा", + "existingConnection": "अस्तित्वात असलेला कनेक्शन", + "openrouterSttDescription": "OpenRouter स्पीच-टू-टेक्स्ट मॉडेल्स तुमच्या कॉन्फिगर केलेल्या OpenRouter कनेक्शनचा वापर करतात. स्वतंत्र प्रमाणपत्राची आवश्यकता नाही." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "यामध्ये पेस्ट करा:", "copilotReloadInstruction": "नंतर VS Code रीलोड करा आणि इनपुट प्रॉम्प्टमध्ये API की सेट करा.", "wireApiChatCompletions": "चॅट पूर्णता (/चॅट/पूर्णता)", - "wireApiResponses": "प्रतिसाद API (/प्रतिसाद)" + "wireApiResponses": "प्रतिसाद API (/प्रतिसाद)", + "cliproxyapiActionFailed": "क्रिया अयशस्वी झाली", + "cliproxyapiActionSucceeded": "क्रिया यशस्वी झाली", + "cliproxyapiCheckUpdates": "अपडेट्स तपासा", + "cliproxyapiDescription": "उपस्ट्रीम प्रॉक्सी फॉलबॅक (Go-आधारित OAuth)", + "cliproxyapiHealth": "आरोग्य", + "cliproxyapiHealthy": "आरोग्यदायी", + "cliproxyapiInstall": "इंस्टॉल करा", + "cliproxyapiNotInstalledValue": "इंस्टॉल केलेले नाही", + "cliproxyapiPort": "पोर्ट", + "cliproxyapiRequestFailed": "अनुरोध अयशस्वी झाला", + "cliproxyapiRestart": "पुनः प्रारंभ करा", + "cliproxyapiStart": "सुरू करा", + "cliproxyapiStatusError": "त्रुटी", + "cliproxyapiStatusInstalled": "इंस्टॉल केलेले", + "cliproxyapiStatusNotInstalled": "इंस्टॉल केलेले नाही", + "cliproxyapiStatusRunning": "चालू आहे", + "cliproxyapiStatusStopped": "थांबले", + "cliproxyapiStop": "थांबवा", + "cliproxyapiUnhealthy": "अस्वास्थ्यकर", + "cliproxyapiUnknown": "अज्ञात", + "cliproxyapiUpdate": "अद्यतन करा", + "cliproxyapiUpdateAvailable": "उपलब्ध अद्यतन: v{current} → v{latest}", + "cliproxyapiVersion": "आवृत्ती" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "फक्त कोटा संपल्यावर पुढे जा", + "fallbackOnlyOnQuotaExhaustionShort": "कोटा-फक्त बॅकअप", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "मोड पॅक आणि वेटिंग येथे राहतात; ब्रेकर रनटाइम स्थिती Health पेजवर राहते.", "emailVisibilityHint": "येथील खाते ईमेल ग्लोबल प्रायव्हसी टॉगलचे अनुसरण करतात.", "emailVisibilityTooltip": "कॉम्बो, प्रोव्हायडर्स आणि कोटा स्क्रीनवर जागतिक स्तरावर खाते ईमेल दाखवण्यासाठी किंवा लपवण्यासाठी डोळ्याच्या आयकॉनचा वापर करा.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "पायरी दर पायरी (प्रदाता → मॉडेल)", + "builderModeGlobal": "ग्लोबल मॉडेल शोध (कस्टम कॉम्बो)", + "builderGlobalSearchPlaceholder": "सर्व प्रदात्यांमध्ये मॉडेल शोधा (उदा. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "सर्व जोडा", + "builderGlobalShortcuts": "शॉर्टकट्स:", + "builderGlobalNoResults": "\"{query}\" साठी कोणताही मॉडेल सापडला नाही.", + "builderGlobalProviderLabel": "प्रदायक:", + "builderGlobalAccountCount": "{count, plural, one {# खाते} other {# खाती}}", + "builderGlobalAdded": "जोडलेले", + "builderGlobalAdd": "जोडा", "manualModel": "मॅन्युअल मॉडेल", "manualModelInvalid": "provider/model म्हणून मॉडेल प्रविष्ट करा.", "manualModelUnknownProvider": "अज्ञात प्रोव्हायडर प्रीफिक्स.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "सत्र उपलब्धता", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "स्टिकिनेस बंद", "kimiPresetTitle": "Kimi Coding प्रीसेट", "kimiPresetDescription": "प्राथमिक मॉडेल म्हणून Kimi K3 (Moonshot API), कॉन्फिगर केलेले असल्यास तुमच्या Kimi Code कनेक्शन्सवर (kimi-coding, kimi-web) स्वयंचलित फॉलबॅकसह.", - "kimiPresetCta": "प्रीसेट जोडा" + "kimiPresetCta": "प्रीसेट जोडा", + "intelligentComboCount": "{count, plural, one {# बुद्धिमान संयोजन} other {# बुद्धिमान संयोजन}}", + "providersInScope": "{count, plural, one {# प्रदाता व्याप्तीत} other {# प्रदाते व्याप्तीत}}", + "savingModePack": "{pack} जतन करत आहे…", + "errorTitle": "कॉम्बो लोड करण्यात अयशस्वी", + "errorDescription": "आम्ही सध्या कॉम्बो डेटा लोड करू शकत नाही. तुमचा कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.", + "errorId": "त्रुटी आयडी: {id}", + "errorRetry": "पुन्हा प्रयत्न करा", + "comboLabel": "कॉम्बो" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "युझरनेम", "obsidianPassword": "पासवर्ड", - "obsidianTailscaleHint": "मोबाईलवरून कनेक्ट करत असल्यास localhost ऐवजी तुमचा Tailscale IP वापरा. दोन्ही उपकरणे एकाच Tailscale नेटवर्कवर असणे आवश्यक आहे." + "obsidianTailscaleHint": "मोबाईलवरून कनेक्ट करत असल्यास localhost ऐवजी तुमचा Tailscale IP वापरा. दोन्ही उपकरणे एकाच Tailscale नेटवर्कवर असणे आवश्यक आहे.", + "cloudSyncNotConfigured": "या उदाहरणावर क्लाउड समक्रमण कॉन्फिगर केलेले नाही.", + "notionConnect": "जोडा", + "notionConnectFailed": "कनेक्ट करण्यात अयशस्वी", + "notionConnected": "जोडलेले", + "notionConnectionFailed": "संपर्क अयशस्वी झाला", + "notionDescription": "रूटेड AI मॉडेल्सद्वारे Notion मध्ये शोधा, वाचा, क्वेरी करा आणि लिहा", + "notionDisconnect": "अलग करा", + "notionDisconnectFailed": "अयशस्वी डिस्कनेक्ट करण्यास", + "notionEnterToken": "कृपया Notion एकत्रीकरण टोकन प्रविष्ट करा", + "notionIntegrationHelp": "आतील एकत्रीकरण तयार करा येथे", + "notionIntegrationToken": "Notion आंतरिक एकत्रीकरण टोकन", + "notionNotConnected": "कनेक्ट केलेले नाही", + "notionTokenConfigured": "टोकन कॉन्फिगर केले आहे. Notion साधने MCP द्वारे उपलब्ध आहेत." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "प्रोव्हाइडर / मॉडेल", "noRemoteProviders": "कॉन्फिगर केलेल्या API की सह कोणतेही प्रोव्हाइडर नाहीत", "selectProviderModel": "मॉडेल निवडा", + "customBaseUrlLabel": "कस्टम बेस URL (ऐच्छिक)", + "customModelIdLabel": "कस्टम मॉडेल आयडी (ऐच्छिक)", + "customEndpointHelp": "OpenAI-संगत /embeddings एंडपॉइंट वापरा. स्थानिक एंडपॉइंट्स परवानगी आहेत; क्लाउड मेटाडेटा लक्ष्ये अवरोधित आहेत.", + "customEndpointSave": "कस्टम एंडपॉइंट लागू करा", + "customEndpointInvalid": "दोन्ही वैध HTTP(S) बेस URL आणि मॉडेल ID प्रविष्ट करा, किंवा दोन्ही फील्ड रिक्त ठेवा.", + "customEndpointSaveFailed": "कस्टम एम्बेडिंग एंडपॉइंट जतन केला जाऊ शकला नाही.", "staticEnabledLabel": "Static Potion सक्षम करा", "staticEnabledDesc": "स्थानिक पातळीवर potion-base-8M मॉडेल डाउनलोड करा आणि वापरा", "transformersEnabledLabel": "Transformers.js सक्षम करा", @@ -4258,7 +4443,9 @@ "cleaning": "साफ करत आहे...", "cleanNow": "आता साफ करा", "cleanupSuccess": "{count} पॉईंट(्स) काढले गेले", - "cleanupFailed": "साफसफाई अयशस्वी" + "cleanupFailed": "साफसफाई अयशस्वी", + "hostLabel": "होस्ट", + "collectionLabel": "संग्रह" }, "rerank": { "enableLabel": "Rerank सक्षम करा", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-स्तरीय फॉलबॅक आकृती", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "मोफत प्रदात्यांची सेटअप करा", + "description": "पर्यायीपणे निवडलेल्या नो-साइनअप प्रदात्यांना सक्षम करा. पुढे जाण्यापूर्वी प्रत्येक प्रदात्याची नोटीस आणि साइट पुनरावलोकन करा; उपलब्धता आणि दर मर्यादा तृतीय पक्षांनी नियंत्रित केल्या आहेत.", + "loading": "मुक्त प्रदात्यांना लोड करत आहे...", + "loadFailed": "मुक्त प्रदाते लोड करू शकले नाही.", + "alreadyConfigured": "सर्व पात्र मोफत प्रदाते आधीच कॉन्फिगर केले आहेत.", + "reviewProviderSite": "प्रदात्याच्या साइट आणि अटींचा आढावा घ्या", + "confirmation": "मी या तृतीय-पक्ष पुरवठादारांचे पुनरावलोकन केले आणि OmniRoute ने निवडलेल्या कनेक्शन तयार करावेत अशी माझी इच्छा आहे.", + "setupSelected": "निवडलेल्या प्रदात्यांचे सेटअप करा", + "settingUp": "सेटिंग अप करत आहे...", + "setupFailed": "चुनेलेले प्रदाते सेट अप करता आले नाहीत. काहीही विद्यमान बदलले नाही.", + "retryFailed": "अयशस्वी प्रदात्यांना पुन्हा प्रयत्न करा", + "orUseApiKey": "किंवा API कीसह कनेक्ट करा", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "निर्मित", + "skipped": "आधीच कॉन्फिगर केले आहे", + "failed": "अयशस्वी" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "आयकॉन URL", "iconUrlHint": "पर्यायी. या प्रदात्याचा आयकॉन म्हणून दर्शविलेली इमेज URL.", + "iconUrlInvalid": "अवैध आयकॉन URL. http(s):// किंवा data:image/*;base64 URL वापरा.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "सत्र आधीच चालू आहे", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "प्रमाणीकरण लागू करा", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API की पेस्ट करा…", "zedSaving": "सेव्ह करत आहे…", "zedImportAction": "इम्पोर्ट करा", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "स्वयंचलित कर्सर सत्र नूतनीकरण सक्षम करा", + "cursorAgentNudgeBody": "स्वयंचलित सत्र नूतनीकरणासाठी cursor-agent स्थापित करा — याशिवाय, Cursor कनेक्शनला सुमारे २४ तासांनी कालांतराने मॅन्युअल री-कनेक्शनची आवश्यकता असते.", + "cursorAgentNudgeDismiss": "अस्वीकृती करा", "zedManualImportFailed": "मॅन्युअल इम्पोर्ट अयशस्वी झाले", "zedManualImportSuccess": "Zed मधून {provider} टोकन आयात केले", "grokImportTitle": "Grok Build Auth आयात करा", @@ -5878,7 +6066,6 @@ "friendliai": "सर्व्हरलेस इन्फरन्ससाठी विनामूल्य टियर — क्रेडिट कार्डची आवश्यकता नाही", "gemini": "कायमचे विनामूल्य: Gemini 2.5 Flash साठी 1,500 विनंत्या/दिवस — क्रेडिट कार्ड नाही, aistudio.google.com वर की मिळवा", "gigachat": "API की सह GigaChat (Sber) कनेक्ट करा.", - "github-models": "github.com/settings/tokens वर 'models: read' स्कोपसह GitHub PAT तयार करा", "gitlab": "सार्वजनिक Code Suggestions API साठी GitLab वैयक्तिक ॲक्सेस टोकन. gitlab.com न वापरताना सेल्फ-होस्टेड बेस URL कॉन्फिगर करा.", "gitlawb-gmi": "Gitlawb Opengateway डॅशबोर्डवरून तुमची API की मिळवा.", "gitlawb": "Gitlawb Opengateway डॅशबोर्डवरून तुमची API की मिळवा.", @@ -6017,7 +6204,8 @@ "kimi-coding": "सध्याच्या OAuth फ्लोसह Kimi Coding कनेक्ट करा.", "kiro": "मोफत स्तर: 50 क्रेडिट्स/महिना (~25K–100K टोकन्स). ⚠️ Kiro ToS तृतीय-पक्ष प्रॉक्सी/हार्नेसच्या वापरावर बंदी घालते.", "codex": "सध्याच्या OAuth फ्लोसह OpenAI Codex कनेक्ट करा.", - "qwen": "सध्याच्या OAuth फ्लोसह Qwen Code कनेक्ट करा." + "qwen": "सध्याच्या OAuth फ्लोसह Qwen Code कनेक्ट करा.", + "github-models": "github.com/settings/tokens वर 'models: read' स्कोपसह GitHub PAT तयार करा" }, "passthroughModelsDescription": "{provider} प्रदाता-नेटिव्ह मॉडेल आयडी स्वीकारते. /मॉडेलमधून आयात करा किंवा राउटिंगसाठी सानुकूल आयडी जोडा.", "bedrockModelsDescription": "Amazon बेडरॉक मॉडेल्स AWS क्षेत्राद्वारे व्यापलेले आहेत. /मॉडेल्समधून आयात करा किंवा निवडलेल्या प्रदेशात सक्षम केलेले बेडरॉक मॉडेल आयडी जोडा.", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "भागीदार लिंक — तुमच्यासाठी कोणत्याही अतिरिक्त खर्चाशिवाय OmniRoute ला सपोर्ट करते", "anonymousFallbackTitle": "अज्ञात बॅकअप", "anonymousFallbackDesc": "जेव्हा सर्व कॉन्फिगर केलेले कनेक्शन संपतात (कोटा, क्रेडिट्स, किंवा कालावधी), तेव्हा तात्पुरते या प्रदात्याचा कीलेस स्तर वापरा. गुप्त विनंत्या पाठविण्याऐवजी या प्रदात्याला वगळण्यासाठी बंद करा — जेव्हा कीलेस स्तर त्यांना नकार देतो (401) तेव्हा शिफारस केले जाते.", - "anonymousFallbackEnabled": "{name} साठी गुप्तFallback सक्षम आहे", - "anonymousFallbackDisabled": "{name} साठी गुप्त fallback अक्षम — संपलेल्या कनेक्शनने या प्रदात्याला वगळले जाईल", - "anonymousFallbackUpdateFailed": "अज्ञात फॉलबॅक सेटिंग अपडेट करण्यात अयशस्वी" + "anonymousFallbackEnabled": "{provider} साठी गुप्तFallback सक्षम आहे", + "anonymousFallbackDisabled": "{provider} साठी गुप्त fallback अक्षम — संपलेल्या कनेक्शनने या प्रदात्याला वगळले जाईल", + "anonymousFallbackUpdateFailed": "अज्ञात फॉलबॅक सेटिंग अपडेट करण्यात अयशस्वी", + "batchDeleteFailed": "बॅच हटवणे अयशस्वी झाले", + "batchDeleteNetworkError": "बॅच हटवताना नेटवर्क त्रुटी", + "batchUpdateFailed": "बॅच अद्यतन अयशस्वी झाले", + "batchUpdateNetworkError": "बॅच अद्यतनादरम्यान नेटवर्क त्रुटी", + "categoryAudio": "ऑडिओ", + "categoryCloudAgent": "क्लाउड एजंट", + "categoryIde": "आयडीई", + "categoryLocal": "स्थानिक", + "categorySearch": "शोधा", + "categoryWebCookie": "वेब कुकी", + "claudeExtraUsageBlockingDisabled": "Claude अतिरिक्त वापर अवरोधित केलेले नाही (अतिरिक्त वापराची परवानगी आहे)", + "claudeExtraUsageBlockingEnabled": "Claude अतिरिक्त वापर अवरोधित केला गेला आहे (अतिरिक्त वापर अवरोधित केला जाईल)", + "claudeRoutingPreferenceDisabled": "अनप्रिफिक्स केलेले क्लॉड मॉडेल्स आता क्लॉड कोडला प्राधान्य देत नाहीत", + "claudeRoutingPreferenceEnabled": "अनप्रिफिक्स केलेले क्लॉड मॉडेल आता क्लॉड कोडला प्राधान्य देतात", + "clearMediaFilter": "स्पष्ट करा", + "cliproxyRoutingDisabled": "आता विनंत्या स्थानिक OmniRoute (सिध्द) वापरतात", + "cliproxyRoutingEnabled": "आवश्यकता आता CLIProxyAPI (गहन अनुकरण) द्वारे मार्गस्थ केल्या जातात", + "codexLimitPolicyUpdated": "Codex मर्यादा धोरण अद्यतनित केले आहे", + "codexServiceModeUpdated": "Codex सेवा मोड अद्यतनित केला गया", + "codexServiceTierActive": "Codex {tier} सेवा स्तर सक्रिय आहे", + "codexTierFastLabel": "जलद", + "codexTierFlexLabel": "फ्लेक्स", + "commandCodeApplyFailed": "कमांड कोड प्रमाणीकरण लागू करण्यात अयशस्वी", + "commandCodeApplyingApproval": "ब्राउझर मान्यताप्राप्त, लागू करत आहे…", + "commandCodeApplyingKey": "ब्राउझर-मान्य की लागू करत आहे…", + "commandCodeApprovalInstructions": "प्रमाणपत्र URL उघडा, प्रवेश मंजूर करा, नंतर खाली परत आलेला की/JSON/URL पेस्ट करा…", + "commandCodeAuthExpired": "कमांड कोड प्रमाणपत्र कालबाह्य झाले", + "commandCodeConnected": "कमांड कोड कनेक्टेड", + "commandCodeConnectionAdded": "कमांड कोड कनेक्शन जोडले गेले", + "commandCodeLinkExpired": "कमांड कोड लिंक कालबाह्य झाला", + "commandCodeOpeningStudio": "कमांड कोड स्टुडिओ उघडत आहे…", + "commandCodePopupBlocked": "पॉपअप अवरोधित. कृपया पॉपअपला परवानगी द्या आणि Command Code Connect पुन्हा प्रयत्न करा.", + "commandCodeStartFailed": "कमांड कोड प्रमाणीकरण सुरू करण्यात अयशस्वी", + "connectionDeleted": "संपर्क हटवला गेला", + "connectionFallback": "संपर्क", + "coolingConnectionsDescription": "या कनेक्शनने त्यांच्या अंतिम विनंतीवर 429 (दर-सीमा) परत केला. OmniRoute त्यांना टाइमर संपेपर्यंत वगळेल - कोणतीही मॅन्युअल अक्षम करणे आवश्यक नाही.", + "coolingConnectionsTitle": "सध्या थंड करणे ({count})", + "failedDeleteAlias": "अलियास हटवण्यात अयशस्वी", + "failedDeleteConnection": "संपर्क हटवण्यात अयशस्वी", + "failedDistributeProxies": "प्रॉक्सी वितरित करण्यात अयशस्वी.", + "failedSaveModelEndpointSettings": "मॉडेल एंडपॉइंट सेटिंग्ज जतन करण्यात अयशस्वी", + "failedUpdateClaudeExtraUsagePolicy": "Claude अतिरिक्त-उपयोग धोरण अद्यतन करण्यात अयशस्वी", + "failedUpdateClaudeRoutingPreference": "Claude Code रूटिंग प्राधान्य अद्यतन करण्यात अयशस्वी", + "failedUpdateCliproxyRouting": "CLIProxyAPI रूटिंग अपडेट करण्यात अयशस्वी", + "failedUpdateCodexLimitPolicy": "Codex मर्यादा धोरण अद्यतन करण्यात अयशस्वी", + "failedUpdateCodexServiceMode": "Codex सेवा मोड अद्यतन करण्यात अयशस्वी", + "filterByMedia": "मीडिया", + "freeBadge": "मोफत", + "kimiCodeApiKeyLabel": "किमी कोड API की", + "modelTestFailed": "मॉडेल चाचणी अयशस्वी झाली", + "modelTestNetworkError": "नेटवर्क त्रुटी चाचणी मॉडेल", + "networkError": "नेटवर्क त्रुटी", + "networkErrorDeletingAlias": "उपयोजकाचे नाव हटवताना नेटवर्क त्रुटी", + "networkErrorSettingAlias": "अलियास सेट करताना नेटवर्क त्रुटी", + "noProvidersMatch": "तुमच्या शोधाशी जुळणारे कोणतेही प्रदाता नाहीत.", + "noSavedProxies": "कोणतेही जतन केलेले प्रॉक्सी सापडले नाहीत. प्रथम सेटिंग्ज → प्रॉक्सीमध्ये प्रॉक्सी जोडा.", + "pageLoadErrorDescription": "आम्ही सध्या प्रदाता डेटा लोड करू शकत नाही. तुमचे कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.", + "pageLoadErrorId": "त्रुटी आयडी: {id}", + "pageLoadErrorRetry": "पुन्हा प्रयत्न करा", + "pageLoadErrorTitle": "प्रदात्यांना लोड करण्यात अयशस्वी", + "playgroundTitle": "खेळाचे मैदान", + "providerDetailConnectionFlexActive": "Codex फ्लेक्स सेवा स्तर या कनेक्शनसाठी सक्रिय आहे", + "providerDetailConnectionPriorityActive": "Codex प्राधान्य सेवा स्तर या कनेक्शनसाठी सक्रिय आहे", + "providerDetailGlobalFlexActive": "ग्लोबल कोडेक्स फ्लेक्स सेवा स्तर सक्रिय आहे", + "providerDetailGlobalPriorityActive": "ग्लोबल कोडेक्स प्राधान्य सेवा स्तर सक्रिय आहे", + "proxiesDistributed": "{assigned} प्रॉक्सी असाइनमेंट(स) {tagLabel}{total} कनेक्शन(स) मध्ये वितरित केले.", + "rerankEndpoint": "पुनः क्रमबद्ध करा", + "savedModelEndpointSettings": "सुरक्षित केलेल्या मॉडेल एंडपॉइंट सेटिंग्ज", + "searchByModelAria": "मॉडेलद्वारे शोधा", + "selectSupportedEndpoint": "किमान एक समर्थित एंडपॉइंट निवडा", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "सदस्यता सूची लोड करण्यात अयशस्वी", "toggleFailed": "स्विच टॉगल करण्यात अयशस्वी", "refreshFailed": "रीफ्रेश करण्यात अयशस्वी", - "deleteFailed": "हटवण्यात अयशस्वी" + "deleteFailed": "हटवण्यात अयशस्वी", + "add": "जोडा", + "cancel": "रद्द करा", + "configure": "कॉन्फिगर करा", + "copyEndpoint": "एंडपॉइंट कॉपी करा", + "coreEndpointHint": "कोर एंडपॉइंट सूचना", + "coreNodesHint": "कोर नोड्स सूचना", + "create": "तयार करा", + "deleteConfirm": "हटवा पुष्टी", + "empty": "रिक्त", + "globalModeDescription": "ग्लोबल मोड वर्णन", + "localCoreHint": "स्थानिक कोर सूचनाअर्थ", + "nodeSummary": "नोड सारांश", + "providerRequired": "प्रदायक आवश्यक आहे", + "providerRouting": "प्रदाता मार्गनिर्देशन", + "refresh": "पुनः ताजेतवाने करा", + "refreshInterval": "ताजेतवाने अंतराल", + "ruleModeDescription": "नियम मोड वर्णन" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "केवळ-मजकूर मॉडेल्सकडे इमेज विनंत्या रूट करण्यापूर्वी स्वयंचलित व्हिजन-टू-टेक्स्ट फॉलबॅक चालवा.", "visionBridgeEnabledLabel": "सक्षम केले", "visionBridgeEnabledDesc": "इमेजचे भाग काढलेल्या मजकुरासह बदलणारा प्री-कॉल ब्रिज टॉगल करा.", + "visionBridgeRerouteTextOnlyLabel": "टेक्स्ट-फक्त मॉडेल्स पुनर्निर्देशित करा", + "visionBridgeRerouteTextOnlyDesc": "चुना झालेला मॉडेलमध्ये चित्र इनपुट नसल्यास, चित्रांसह संपूर्ण विनंती ब्रिज मॉडेलकडे पाठवा.", "visionBridgeModel": "ब्रिज मॉडेल", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "व्हिजनला समर्थन देणारा कोणताही OmniRoute मॉडेल ID येथे वापरला जाऊ शकतो.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API की मध्ये मॅनेज स्कोप नाही.", "BYPASS_PREFIX_NOT_ALLOWED": "एक किंवा अधिक प्रिफिक्स स्पॉन-सक्षम मार्गांना लक्ष्य करतात आणि ते बायपास केले जाऊ शकत नाहीत.", "GENERIC": "authz सेटिंग्ज अपडेट करण्यात अयशस्वी." - } + }, + "remove": "काढा" }, "resilienceBaseCooldownLabel": "बेस कूलडाउन", "scopeLabel": "व्याप्ती", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "ऑडिओची चाचणी करत आहे…", "modalityBridgeAudioTestOk": "ऑडिओ ब्रिज ठीक आहे — {count} क्लिप(स) {model} द्वारे ट्रान्सक्राइब केल्या गेल्या", "modalityBridgeAudioTestNoop": "ऑडिओ ब्रिज सक्रिय झाला नाही (लक्ष्य ऑडिओला समर्थन देऊ शकतो, कोणताही STT प्रदाता जोडलेला नाही, किंवा ब्रिज अक्षम आहे)", - "modalityBridgeAudioTestError": "ऑडिओ चाचणी अयशस्वी: {message}" + "modalityBridgeAudioTestError": "ऑडिओ चाचणी अयशस्वी: {message}", + "modelRoutingDescriptionPlaceholder": "फ्रंटियर कॉम्बो कडे रूट ओपस मॉडेल्स", + "cliproxyapiFallbackCodes": "क्लिप्रॉक्सीएपीआय फॉल्बॅक कोड्स", + "cliproxyapiFallbackDescription": "क्लिप्रॉक्सीएपीआय फॉल्बॅक वर्णन", + "cliproxyapiHealthLabel": "क्लिप्रॉक्सीएपीआय आरोग्य लेबल", + "cliproxyapiImportFailed": "Cliproxyapi आयात अयशस्वी झाला", + "cliproxyapiImportResult": "क्लिप्रॉक्सीएपीआय आयात परिणाम", + "cliproxyapiInvalidUrl": "Cliproxyapi अमान्य URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi जीवनचक्र नोटीस नंतर", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi जीवनचक्र सूचना आधी", + "cliproxyapiLifecycleNoticeLink": "क्लिप्रॉक्सीएपीआय जीवनचक्र सूचना लिंक", + "cliproxyapiPortLabel": "क्लिप्रॉक्सीएपीआय पोर्ट लेबल", + "cliproxyapiStatusLabel": "क्लिप्रॉक्सीएपीआय स्थिती लेबल", + "cliproxyapiVersionLabel": "क्लिप्रॉक्सीएपीआय आवृत्ती लेबल", + "collection": "संग्रह", + "errorPage": { + "description": "आम्ही सध्या सेटिंग्ज लोड करू शकत नाही. कृपया काही सेकंदात पुन्हा प्रयत्न करा.", + "errorId": "त्रुटी आयडी: {id}", + "retry": "पुन्हा प्रयत्न करा", + "title": "सेटिंग्ज लोड करण्यात अयशस्वी" + }, + "host": "होस्ट", + "notInstalled": "इंस्टॉल केलेले नाही", + "oneproxyActions": "Oneproxy क्रियाकलाप", + "oneproxyActive": "Oneproxy सक्रिय आहे", + "oneproxyAnonymity": "Oneproxy गुप्तता", + "oneproxyCountry": "वनप्रॉक्सी देश", + "oneproxyDelete": "Oneproxy हटवा", + "oneproxyEmpty": "Oneproxy रिक्त", + "oneproxyHost": "Oneproxy होस्ट", + "oneproxyLatency": "Oneproxy विलंब", + "oneproxyProtocol": "वनप्रॉक्सी प्रोटोकॉल", + "oneproxyQuality": "Oneproxy गुणवत्ता", + "oneproxySyncFailed": "सिंक अयशस्वी: {error}", + "oneproxySyncSuccess": "सिंक केलेले {total} प्रॉक्सी ({added} नवीन, {updated} अद्यतनित)", + "proxyDocumentationSocks5DescAfter": "प्रॉक्सी दस्तऐवज Socks5 वर्णन नंतर", + "proxyFreePoolAddProxy": "प्रॉक्सी फ्री पूल प्रॉक्सी जोडा", + "proxyFreePoolAdding": "प्रॉक्सी फ्री पूल जोडणे", + "proxyFreePoolSelectProxy": "प्रॉक्सी फ्री पूल प्रॉक्सी निवडा", + "proxyStatusActive": "प्रॉक्सी स्थिती सक्रिय", + "proxyStatusInactive": "प्रॉक्सी स्थिती निष्क्रिय", + "routingAddEntry": "नवीन नोंद जोडा", + "settingSaveFailed": "सेटिंग्ज जतन करण्यात अयशस्वी", + "settingSaved": "सेटिंग्ज जतन केल्या", + "skillsmpApiKeyHintAfter": ". दर मर्यादा: {limit} विनंत्या/दिवस.", + "skillsmpApiKeyHintBefore": "तुमचा API की मिळवा", + "syncFailed": "सिंक अयशस्वी झाला", + "unhealthy": "अस्वास्थ्यकर", + "oneproxyDescription": "1proxy समुदाय प्लॅटफॉर्मवरून मोफत मान्यताप्राप्त प्रॉक्सीज मिळवा आणि फिरवा", + "oneproxySyncing": "सिंक करत आहे...", + "oneproxySyncNow": "आता समन्वयित करा", + "oneproxyClearAll": "सर्व साफ करा", + "oneproxyGoogle": "गूगल", + "oneproxyClearAllConfirm": "सर्व 1proxy प्रॉक्सी स्पष्ट करा?", + "memorySkillsSkillsmpDescription": "SkillsMP शी कनेक्ट करा जेणेकरून मार्केटप्लेसमधून कौशल्ये शोधू आणि स्थापित करू शकाल.", + "memorySkillsActiveProviderDescription": "कौशल्य पृष्ठाने शोध आणि स्थापित करण्यासाठी कोणता प्रदाता वापरावा हे निवडा.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP मार्केटप्लेस", + "memorySkillsSkillsmpProviderDescription": "प्रमाणित मार्केटप्लेस (तुमच्या SkillsMP API कीचा वापर करतो).", + "memorySkillsSkillsshProviderTitle": "skills.sh निर्देशिका", + "memorySkillsSkillsshProviderDescription": "सार्वजनिक निर्देशिका प्रदाता (API की आवश्यक नाही).", + "routingCcBridgeCatalogName": "Anthropic-compatible CC ब्रिज", + "routingClaudeProviderName": "क्लॉड (OAuth)", + "routingClaudeProviderDescription": "OAuth-निर्गत टोकनसह स्थानिक क्लॉड प्रदाता.", + "routingCcBridgeName": "क्लॉड-कोड ब्रिज", + "routingCcBridgeDescription": "API कीज वापरून रिले एंडपॉइंट्स (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "कस्टम प्रदाता.", + "routingUnknownOpKind": "अज्ञात ऑप प्रकार: {kind}", + "routingInvalidJson": "अवैध JSON: {error}", + "routingConfigMustBeObject": "कॉन्फिग एक JSON ऑब्जेक्ट असावा लागतो", + "routingEnabledMustBeBoolean": "`enabled` खरे किंवा खोटे असावे", + "routingPipelineMustBeArray": "`pipeline` एक ops चा अ‍ॅरे असावा लागतो", + "routingPipelineTooLong": "पाईपलाइन 50 ऑप्सपेक्षा जास्त असू शकत नाही", + "routingOpMissingKind": "Op #{index}: गहाळ किंवा अमान्य `kind`", + "routingOpUnknownKind": "Op #{index}: अज्ञात प्रकार \"{kind}\"", + "routingJsonEditorHide": "JSON संपादक लपवा", + "routingJsonEditorImportExport": "JSON आयात / निर्यात", + "routingJsonEditorLabel": "JSON (संपादित करा आणि लागू करा, किंवा आयात करण्यासाठी पेस्ट करा)", + "routingApplyJson": "JSON लागू करा", + "routingTransformsFootnote": "सर्व ट्रान्सफॉर्म ऑप्स पुन्हा चालवल्यावर आयडेम्पोटेंट असतात. बदल लगेच पुढील विनंतीवर लागू होतात.", + "cliproxyapiUnknown": "अज्ञात", + "cliproxyapiVersion": "आवृत्ती", + "cliproxyapiHealth": "आरोग्य", + "cliproxyapiPort": "पोर्ट", + "qdrantHost": "होस्ट", + "qdrantCollection": "संग्रह" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "पूर्ण", "ultra": "अल्ट्रा" } + }, + "modeOptions": { + "default": "डिफॉल्ट", + "off": "बंद", + "lite": "लाइट", + "standard": "मानक", + "aggressive": "आक्रमक", + "ultra": "अल्ट्रा", + "responsesToolOutput": "प्रतिक्रिया साधनाचे उत्पादन" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "स्टॅकमध्ये शेवटी चालते (RTK/Caveman मजकूर साफ केल्यानंतर, OmniGlyph उर्वरित मजकूर इमेजेसमध्ये रूपांतरित करते) आणि omniglyph मोडद्वारे स्वतंत्रपणे देखील चालते. हे एक पूर्वावलोकन आहे आणि एंड-टू-एंड प्रमाणीकरण पूर्ण होईपर्यंत डीफॉल्टनुसार बंद राहते.", "saved": "जतन केले.", "saveFailed": "जतन करता आले नाही.", - "enableAria": "OmniGlyph इंजिन सक्षम करा" + "enableAria": "OmniGlyph इंजिन सक्षम करा", + "title": "OmniGlyph" }, "embeddedServices": { "title": "एम्बेडेड सेवा", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "सर्व टोकन आरोग्यदायी आहेत", + "needsAttention": "काही टोकनला लक्ष देण्याची आवश्यकता आहे", + "refreshFailures": "टोकन रिफ्रेश अयशस्वी झाले आहेत", + "unknown": "आरोग्य स्थिती अज्ञात" + }, + "systemMonitor": { + "metricsAriaLabel": "सिस्टम मेट्रिक्स", + "memory": "स्मृती", + "memoryShort": "mem", + "uptime": "उपलब्धता", + "ariaLabel": "सिस्टम मॉनिटरिंग", + "title": "सिस्टम मॉनिटर", + "version": "आवृत्ती", + "connections": "संपर्क", + "circuitBreakers": "सर्किट ब्रेकर", + "open": "{count} उघडे", + "memoryUsage": "स्मृती वापर" + }, + "never": "कधीही", + "justNow": "अतिशी लवकर", + "minutesAgo": "{count}म आधी", + "hoursAgo": "{count} तासांपूर्वी", + "tokens": "टोकन", + "costs": "खर्च", + "autoRefresh": "स्वतःच रिफ्रेश ({seconds}s)", + "toggleAutoRefresh": "ऑटो रिफ्रेश टॉगल करा", + "activeRequests": "सक्रिय विनंत्या", + "totalRequests": "एकूण विनंत्या", + "totalInputTokens": "एकूण इनपुट टोकन", + "model": "मॉडेल", + "provider": "प्रदाता", + "requests": "अनुरोध", + "lastUsed": "शेवटचा वापर झाला", + "inputTokens": "इनपुट टोकन", + "totalTokens": "एकूण टोकं", + "inputCost": "इनपुट खर्च", + "outputCost": "आउटपुट खर्च", + "noUsageData": "अजून कोणतीही वापराची नोंद नाही. येथे डेटा पाहण्यासाठी काही विनंत्या करा.", + "account": "खाते", + "accountLabel": "खाते {id}", + "noAccountUsage": "अजून कोणतीही खाते-विशिष्ट वापराची नोंद केलेली नाही. येथे डेटा पाहण्यासाठी OAuth खात्यांचा वापर करून विनंत्या करा." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "अॅप डेटा द्वारे रीसेट करा", + "resetViaAppDataDescription": "आपला पासवर्ड रीसेट करण्यासाठी अॅप डेटा निर्देशिकेतून सेटिंग्ज फाइल हटवा:", + "quitDesktopApp": "OmniRoute डेस्कटॉप अॅप पूर्णपणे बंद करा", + "navigateToAppDataDirectory": "अॅप डेटा निर्देशिकेत जा:", + "checkSystemAppDataFolder": "(तुमच्या प्रणाली अॅप डेटा फोल्डरची तपासणी करा)", + "relaunchDesktopFreshSetup": "OmniRoute डेस्कटॉप अॅप पुन्हा सुरू करा — हे नवीन सेटअप सुरू करेल", + "alternativeSetPasswordTitle": "पर्यायी: नवीन पासवर्ड सेट करा", + "alternativeSetPasswordDescription": "सर्व्हर पर्यावरण फाइलद्वारे नवीन प्रारंभिक पासवर्ड सेट करा:", + "openServerEnvFilePrefix": "उघडा", + "relaunchDesktopApp": "OmniRoute डेस्कटॉप अॅप पुन्हा सुरू करा", + "codexLinkInvalidOrExpired": "हा दुवा अमान्य आहे किंवा कालबाह्य झाला आहे.", + "codexValidationServerError": "या लिंकची पडताळणी करण्यासाठी सर्व्हरपर्यंत पोहोचता आले नाही.", + "codexSaveConnectionError": "संपर्क जतन करू शकला नाही. लिंक कालबाह्य झाली असू शकते.", + "codexDeviceLoginDisabled": "या OpenAI खात्यासाठी डिव्हाइस कोड लॉगिन अक्षम आहे. ते ChatGPT सुरक्षा सेटिंग्जमध्ये सक्षम करा (किंवा आपल्या कार्यक्षेत्राच्या प्रशासकाला विचारा).", + "codexAuthorizationTimedOut": "अधिकृतता कालबाह्य झाली. पुन्हा प्रयत्न करण्यासाठी Start again वर क्लिक करा.", + "authenticationCancelled": "प्रमाणीकरण रद्द करण्यात आले.", + "unexpectedAuthenticationError": "प्रमाणीकरणादरम्यान अनपेक्षित त्रुटी. कृपया पुन्हा प्रयत्न करा.", + "connectOpenAiCodexTitle": "OpenAI Codex कनेक्ट करा", + "codexConnectDescription": "या कनेक्शनची सेटिंग पूर्ण करण्यासाठी ChatGPT खात्याला अधिकृत करा.", + "validatingCodexLink": "लिंकची पडताळणी करत आहे…", + "codexGenerateCodeDescription": "खाली क्लिक करा एकदाच वापरायचा कोड तयार करण्यासाठी, नंतर OpenAI मध्ये साइन इन करा.", + "startCodexFlow": "सुरू करा", + "requestingOpenAiCode": "OpenAI कडून कोडची विनंती करत आहे…", + "codexVerificationInstructions": "1. OpenAI प्रमाणीकरण पृष्ठ उघडा आणि 2. हा कोड प्रविष्ट करा. आपण अधिकृत केल्यावर हे पृष्ठ आपोआप अद्यतनित होते.", + "yourCode": "तुमचा कोड", + "openVerificationPage": "सत्यापन पृष्ठ उघडा", + "copyUrlShort": "URL कॉपी करा", + "savingConnection": "संपर्क जतन करत आहे…", + "codexConnected": "जोडले गेले!", + "codexConnectionRegistered": "Codex खाते नोंदणीकृत झाले. तुम्ही हा टॅब बंद करू शकता.", + "tryAgain": "पुन्हा प्रयत्न करा", + "traeAuthorizationSuccess": "Trae अधिकृतता ✓", + "traeAuthorizationFailed": "Trae अधिकृतता अयशस्वी झाली", + "closeAuthorizationWindow": "तुम्ही हा विंडो बंद करू शकता.", + "returnToDashboard": "डॅशबोर्डवर परत जा.", + "resetViaAppData": "अॅप डेटा द्वारे रीसेट करा", + "deleteSettingsToReset": "आपला पासवर्ड रीसेट करण्यासाठी अॅप डेटा निर्देशिकेतून सेटिंग्ज फाइल हटवा:", + "quitAppCompletely": "OmniRoute डेस्कटॉप अॅप पूर्णपणे बंद करा", + "navigateToAppData": "अॅप डेटा निर्देशिकेत जा", + "checkAppDataFolder": "तुमच्या प्रणाली अॅप डेटा फोल्डरची तपासणी करा", + "deleteSettingsJson": "काढा", + "relaunchAppFresh": "OmniRoute डेस्कटॉप अॅप पुन्हा सुरू करा — हे नवीन सेटअप सुरू करेल", + "alternativeSetPassword": "पर्यायी: नवीन पासवर्ड सेट करा", + "setNewPasswordViaEnv": "सर्व्हर वातावरण फाइलद्वारे नवीन प्रारंभिक पासवर्ड सेट करा:", + "openServerEnv": "उघडा", + "inDataDirectory": "डेटा निर्देशिकेत", + "addOrUpdate": "जोडा किंवा अद्यतनित करा", + "deleteAndRelaunch": "काढा", + "settingsJson": "settings.json", + "fromDataDir": "डेटा निर्देशिकेतून", + "relaunchApp": "OmniRoute डेस्कटॉप अॅप पुन्हा सुरू करा" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "कंपनी", + "pricing": "किमती", + "apiReference": "API संदर्भ", + "helpCenter": "साहाय्य केंद्र", + "about": "बद्दल", + "blog": "ब्लॉग", + "contact": "संपर्क", + "terms": "अटी", + "privacy": "गोपनीयता", + "license": "परवाना", + "footerDescription": "आधुनिक AI पायाभूत सुविधांसाठी एकत्रित इंटरफेस. सुरक्षित, निरीक्षणीय, आणि स्केलेबल.", + "communityDiscussions": "समुदाय चर्चा" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute दस्तऐवज", + "metadataDefaultTitle": "OmniRoute दस्तऐवज", + "metadataDescription": "OmniRoute AI गेटवे साठी व्यापक दस्तऐवज — सेटअप, API, संकुचन, तैनाती, आणि अधिक.", + "layoutNavTitle": "OmniRoute दस्तऐवज", + "layoutHomeLink": "डॉक्स होम", + "layoutDashboardLink": "← डॅशबोर्डवर परत जा", + "homeTitle": "OmniRoute दस्तऐवज", + "homeMetadataDescription": "तुमच्या AI साठी रूट, संकुचन, आणि स्केल करण्यासाठी तुम्हाला आवश्यक सर्वकाही — सेटअप मार्गदर्शक, API संदर्भ, संकुचन, तैनाती, आणि अधिक.", + "homeTwitterDescription": "OmniRoute AI गेटवे साठी सर्वसमावेशक दस्तऐवज", + "homeDescription": "तुमच्या AI साठी रूट, संकुचन, आणि स्केल करण्यासाठी तुम्हाला आवश्यक सर्व काही", + "homeSearchHint": "Ctrl K दाबा दस्तऐवज शोधण्यासाठी", + "featuredQuickStartTitle": "जलद प्रारंभ", + "featuredQuickStartDescription": "3 मिनिटांत OmniRoute चालू करा", + "featuredAutoComboTitle": "ऑटो-कॉम्बो मार्गदर्शक", + "featuredAutoComboDescription": "OmniRoute तुमच्यासाठी सर्वोत्तम AI निवडू देईल", + "featuredProvidersTitle": "प्रदात्यांचा मार्गदर्शक", + "featuredProvidersDescription": "मिनिटांत AI प्रदात्यांना कनेक्ट करा", + "nonTechUsersTitle": "अ-तांत्रिक वापरकर्त्यांसाठी", + "nonTechUsersSubtitle": "जल्दी सुरू करा — कोणतीही तांत्रिक पार्श्वभूमी आवश्यक नाही", + "techUsersTitle": "तांत्रिक वापरकर्त्यांसाठी", + "techUsersSubtitle": "आर्किटेक्चर, APIs, आणि अंतर्गत गोष्टींमध्ये खोलवर प्रवेश करा", + "apiExplorerMetadataTitle": "API एक्सप्लोरर — OmniRoute दस्तऐवज", + "apiExplorerMetadataDescription": "इंटरएक्टिव API एक्सप्लोरर — वास्तविक-वेळ प्रतिसादांसह OmniRoute एंडपॉइंट्स आजमावा", + "apiExplorerTitle": "API अन्वेषक", + "apiExplorerDescription": "OmniRoute एंडपॉइंट्स थेट वापरून पहा. एक एंडपॉइंट निवडा, तुमचा विनंती सेट करा, आणि वास्तविक वेळेत प्रतिसाद पहा.", + "apiExplorerSseStarted": "SSE प्रवाह सुरू झाला — वास्तविक-वेळ आउटपुटसाठी टर्मिनल/devtools तपासा.", + "apiExplorerError": "त्रुटी: {message}", + "apiExplorerAuth": "प्रमाणपत्र", + "apiExplorerResponseLabel": "प्रतिक्रिया", + "apiExplorerSelectEndpoint": "एक एंडपॉइंट निवडा ज्याचा अभ्यास करायचा आहे", + "apiExplorerChooseApi": "साइडबारमधून API निवडा जेणेकरून तपशील पाहता येतील आणि ते थेट वापरता येतील", + "feedbackThanks": "आपल्या अभिप्रायाबद्दल धन्यवाद!", + "feedbackQuestion": "हे पृष्ठ उपयुक्त होते का?", + "pageMetadataTitle": "{title} — OmniRoute दस्तऐवज", + "pageMetadataDescription": "OmniRoute दस्तऐवज: {title}", + "breadcrumb": "ब्रेडक्रंब", + "apiReferenceTable": { + "parameters": "पॅरामीटर्स", + "name": "नाव", + "type": "टाइप", + "description": "विवरण", + "returns": "परत करते", + "typePrefix": "टाइप:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth सत्र अपूर्ण आहे (पुनर्निर्देश URI किंवा कोड सत्यापक गहाळ आहे). कनेक्शन पुन्हा सुरू करा आणि पुन्हा प्रयत्न करा.", + "errorExchangeFailed": "विनिमय अयशस्वी झाला", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: डिफॉल्ट Google OAuth क्रेडेन्शियल्स फक्त localhost वर कार्य करतात. दूरस्थ वापरासाठी, आपल्या स्वतःच्या OAuth क्रेडेन्शियल्स पर्यावरणीय चलांद्वारे कॉन्फिगर करा: ANTIGRAVITY_OAUTH_CLIENT_ID आणि ANTIGRAVITY_OAUTH_CLIENT_SECRET. 'दूरस्थ सर्व्हरवरील OAuth' या README विभागाकडे पहा.", + "errorSaveFailed": "जतन करण्यात अयशस्वी", + "errorAuthorizationFailed": "अधिकृतता अयशस्वी झाली", + "errorAuthorizationTimeout": "अधिकृतता टाइमआउट", + "errorRequestFailed": "अनुरोध अयशस्वी झाला", + "errorCallbackServerFailed": "कॉलबॅक सर्व्हर सुरू करण्यात अयशस्वी", + "errorBrowserUnavailable": "सध्याच्या वातावरणात या प्रदात्यासाठी ब्राउझर OAuth उपलब्ध नाही. त्याऐवजी समर्थित प्रमाणीकरण पद्धत वापरा.", + "errorStateMismatch": "OAuth स्थिती विसंगती. कनेक्शन पुन्हा सुरू करा आणि पुन्हा प्रयत्न करा.", + "errorImportAccessToken": "अॅक्सेस टोकन आयात करण्यात अयशस्वी", + "errorSessionNotInitialized": "OAuth सत्र प्रारंभित केलेले नाही. कनेक्शन प्रवाह पुन्हा सुरू करा आणि पुन्हा प्रयत्न करा.", + "errorNoAuthorizationCode": "कोणताही अधिकृतता कोड सापडला नाही. कॉलबॅक URL किंवा प्रमाणीकरण कोड पेस्ट करा.", + "tabDeviceCode": "डिव्हाइस कोड", + "tabBrowserLogin": "ब्राउझर लॉगिन", + "tabImportAuthJson": "auth.json आयात करा", + "tabPasteApiKey": "API की पेस्ट करा", + "windsurfPasteDescription": "Windsurf / VS Code IDE मध्ये, कमांड पॅलेटमधून \"Windsurf: Provide Auth Token\" कमांड चालवा (किंवा Jupyter \"Get Windsurf Authentication Token\" बटणावर क्लिक करा), नंतर दर्शविलेला टोकन कॉपी करा आणि खाली पेस्ट करा. windsurf.com/show-auth-token थेट उघडल्यास फक्त \"Redirecting\" पृष्ठ दिसते — IDE नेच प्रवाह सुरू करावा लागतो.", + "grokAuthJsonDescription": "~/.grok/auth.json चा संपूर्ण मजकूर पेस्ट करा (फक्त JWT \"key\" क्षेत्र नाही). एक साधा JWT मध्ये refresh_token नसतो, त्यामुळे कनेक्शन कालबाह्य झाल्यावर थांबते (#7610). उपलब्ध असल्यास समर्पित Import auth.json मोडला प्राधान्य द्या.", + "devinDesktopPasteDescription": "एक प्रमाणित Devin सत्रातून विद्यमान Devin API की पेस्ट करा. की निर्यात उपलब्धता आणि चरण Devin आवृत्ती आणि खात्यानुसार भिन्न असू शकतात.", + "devinPasteDescription": "आपला WINDSURF_API_KEY प्रदान करा (जो `devin auth login` द्वारे किंवा Windsurf IDE \"Windsurf: Provide Auth Token\" कमांडद्वारे मिळविला जातो).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API की / टोकन", + "saving": "जतन करत आहे…", + "saveConnection": "संपर्क जतन करा", + "gheDescription": "तुमच्या GitHub Enterprise उदाहरणाचा बेस URL प्रविष्ट करा (उदाहरणार्थ, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL आवश्यक आहे", + "gitlabDuoSetupTitle": "GitLab Duo OAuth सेटअप", + "gitlabDuoSetupMessage": "GitLab Duo OAuth कॉन्फिगर केलेले नाही. {applicationsUrl} येथे एक OAuth अनुप्रयोग नोंदणी करा ज्यामध्ये पुनर्निर्देश URI {redirectUri} आणि स्कोप्स \"{scopes}\" आहेत, नंतर {clientIdEnv} (आणि पर्यायी {clientSecretEnv}) सेट करा आणि पुन्हा सुरू करा.", + "gitlabDuoSetupDescription": "अर्ज नोंदणीकृत झाल्यानंतर आणि या OmniRoute उदाहरणावर env vars सेट केल्यानंतर, OAuth लॉगिन सुरू करण्यासाठी Continue वर क्लिक करा.", + "continue": "सुरू ठेवा" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "आणखी लोड करा", - "loadingMore": "आणखी लोड होत आहे..." + "loadingMore": "आणखी लोड होत आहे...", + "correlationId": "संबंधित आयडी", + "group": { + "showAllRows": "सर्व पंक्ती दर्शवा", + "showLatestPerCorrelation": "संबंध आयडीनुसार नवीनतम दर्शवा", + "grouped": "गटबद्ध" + }, + "running": "चालू आहे", + "interval": { + "decrease": "अवधि कमी करा", + "title": "सेकंदांमध्ये ऑटो-रिफ्रेश अंतर", + "increase": "अवधि वाढवा" + }, + "status": { + "inProgress": "प्रगतीत", + "recoveredByRetry": "पुनर्प्रयत्नाने पुनर्प्राप्त केलेले", + "goToParent": "पालक विनंतीकडे जा", + "healedTitle": "अयशस्वी, {count} पुनर्प्रयत्नांनंतर पुनर्प्राप्त झाले", + "healed": "सामान्य झाले", + "failedTitle": "सर्व {count} प्रयत्न अयशस्वी झाले", + "failed": "अयशस्वी", + "pinnedTitle": "संदर्भ-कॅश सत्र पिनिंगद्वारे मॉडेल निवडले गेले", + "pinned": "पिन केलेले" + }, + "attempts": "प्रयत्न", + "detail": { + "collapse": "{title} कमी करा", + "expand": "{title} विस्तृत करा", + "copyTitle": "कॉपी {title}", + "copied": "कॉपी केले!", + "copy": "कॉपी", + "autoscrollOn": "ऑटोस्क्रोल: चालू", + "autoscrollOff": "ऑटोस्क्रोल: बंद", + "payload": { + "clientRawRequest": "क्लायंट कच्चा विनंती", + "clientRequest": "ग्राहक विनंती", + "openaiRequest": "OpenAI विनंती", + "providerRequest": "प्रदाता विनंती", + "providerResponse": "प्रदात्याचा प्रतिसाद", + "clientResponse": "ग्राहक प्रतिसाद", + "pipelineError": "पाइपलाइन त्रुटी" + }, + "payloadMissing": "या लॉग नोंदीसाठी तपशीलवार पेलोड आर्टिफॅक्ट आता उपलब्ध नाही.", + "payloadCorrupt": "तपशीलवार पेलोड आर्टिफॅक्ट पार्स केला जाऊ शकला नाही.", + "notAvailable": "N/A", + "semanticCache": "सामान्य (OmniRoute)", + "upstreamCache": "उपस्ट्रीम (प्रदाते)", + "ariaLabel": "अनुरोध लॉग तपशील", + "completed": "पूर्ण झाले", + "upstreamStatus": "उपस्ट्रीम: {status}", + "statusDiscrepancy": "OmniRoute ने {provider} परत दिला तरी {status} परत केला", + "previousRequest": "मागील विनंती", + "nextRequest": "पुढील विनंती", + "close": "तपशील मोडाल बंद करा", + "startedAt": "सुरू झालेले आहे", + "endedAt": "समाप्त झालेले आहे", + "duration": "कालावधी", + "model": "मॉडेल", + "provider": "प्रदायक", + "account": "खाते", + "input": "इनपुट", + "totalIn": "एकूण: {value}", + "cacheRead": "कॅश वाचन: {value}", + "cacheWrite": "कॅश लेखन: {value}", + "compressed": "संकुचित: {from} → {to} ({percent}% वाचवले)", + "output": "आउटपुट", + "totalOut": "एकूण बाहेर: {value}", + "reasoning": "तर्क: {value}", + "requestedModel": "विनंती केलेला मॉडेल", + "requestProtocol": "आवश्यक प्रोटोकॉल", + "cacheSource": "कॅश स्रोत", + "modelPinning": "मॉडेल पिनिंग", + "activeModelPinning": "सक्रिय — सत्र पिनिंगद्वारे निवडलेला मॉडेल", + "rotated": "रोटेटेड: {initial} -> {final}", + "apiKey": "API की", + "noApiKey": "API की नाही", + "combo": "कॉम्बो", + "error": "त्रुटी", + "unblockAll": "सर्व अनब्लॉक करा", + "cleared": "क्लिअर केलेले", + "unblock": "अनब्लॉक करा", + "relatedRequests": "संबंधित विनंत्या ({count})", + "current": "सध्याचा", + "detailStatus": "तपशील स्थिती", + "loadingDetails": "अनुरोध तपशील लोड करत आहे...", + "providerEventStream": "प्रदाता इव्हेंट स्ट्रीम", + "clientEventStream": "क्लायंट इव्हेंट स्ट्रीम", + "eventStream": "इव्हेंट स्ट्रीम", + "responsePayloadLegacy": "प्रतिक्रिया पेलोड (लेगसी)", + "requestPayloadLegacy": "अनुरोध पेलोड (लेगसी)", + "noPayload": "या लॉग नोंदीसाठी कोणतीही पेलोड डेटा उपलब्ध नाही.", + "correlationId": "संबंधित आयडी", + "correlationIdValue": "संबंधित आयडी: {id}", + "detailedPayloadInfo": "नवीन विनंत्यांसाठी चार-चरणीय क्लायंट/प्रदाता पेलोड दृश्य पाहण्यासाठी प्रथम तपशीलवार लॉगिंग सक्षम करा." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} अक्षम केले", "providerAdded": "{provider} जोडले गेले", "add": "जोडा", - "manualApiKey": "हाताने API की वापरा" + "manualApiKey": "हाताने API की वापरा", + "createDahlTokenFailed": "Dahl टोकन तयार करण्यात अयशस्वी झाले", + "providerProxy": "प्रॉक्सी", + "providerProxyConfigureHint": "प्रॉक्सी कॉन्फिगर करा", + "providerProxyTitleConfigured": "प्रॉक्सी कॉन्फिगर केले: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-प्रतिबंधित — अटींचे पुनरावलोकन करा", "caution": "सावधान — वैयक्तिक-वापर / प्रॉक्सी अटी", "ok": "सामान्यतः अनुमती देणारे" - } + }, + "allProviders": "सर्व प्रदाते", + "noApiKeyRequired": "API की आवश्यकता नाही" }, "providerHealthAutopilot": { "title": "प्रदाता आरोग्य ऑटोपायलट", @@ -12390,7 +13047,11 @@ "on": "चालू", "off": "बंद", "availableProviders": "उपलब्ध प्रोव्हायडर्स ({count})", - "noProviderOverrides": "कोणतेही ओव्हरराइड नाहीत — सर्व सक्रिय प्रोव्हायडर्स त्यांच्या डीफॉल्ट मॉडेल्ससह सहभागी होतील" + "noProviderOverrides": "कोणतेही ओव्हरराइड नाहीत — सर्व सक्रिय प्रोव्हायडर्स त्यांच्या डीफॉल्ट मॉडेल्ससह सहभागी होतील", + "resetFailed": "रीसेट अयशस्वी झाला", + "resetSuccess": "कॉन्फिग डिफॉल्टवर रीसेट करा", + "running": "चालू आहे...", + "testFailed": "चाचणी अयशस्वी झाली" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) हा OmniRoute चा संस्थापक ओपन सोर्स मित्र आहे", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "या प्रतिमेच्या विनंतीसाठी प्रदाता दृश्याचे समर्थन करत नाही", "capabilityFilter.toolsMismatch": "प्रदायक साधन कॉलिंगला समर्थन करत नाही", "capabilityFilter.structuredOutputMismatch": "प्रदायक संरचित आउटपुटला समर्थन करत नाही", - "capabilityFilter.contextWindowMismatch": "विनंती प्रदाता संदर्भ विंडो ओलांडते" + "capabilityFilter.contextWindowMismatch": "विनंती प्रदाता संदर्भ विंडो ओलांडते", + "publicSystem": { + "notFound": { + "title": "पृष्ठ सापडले नाही", + "description": "आपण शोधत असलेली पृष्ठ अस्तित्वात नाही किंवा हलवली गेली आहे.", + "dashboardAriaLabel": "डॅशबोर्डवर परत जा", + "statusAriaLabel": "सिस्टम स्थिती पृष्ठ उघडा", + "systemStatus": "सिस्टम स्थिती" + }, + "error": { + "title": "आतील सर्व्हर त्रुटी", + "description": "तुमच्या विनंतीची प्रक्रिया करताना काहीतरी चूक झाली. आमच्या टीमला माहिती देण्यात आली आहे आणि ते एक दुरुस्तीवर काम करत आहेत.", + "errorId": "त्रुटी आयडी: {id}", + "detailsAriaLabel": "त्रुटी तपशील", + "retryAriaLabel": "पृष्ठ लोड करण्याचा प्रयत्न पुन्हा करा", + "tryAgain": "पुन्हा प्रयत्न करा", + "dashboardAriaLabel": "डॅशबोर्डवर परत जा", + "statusAriaLabel": "सिस्टम स्थिती उघडा", + "systemStatus": "सिस्टम स्थिती" + }, + "globalError": { + "title": "काहीतरी चुकलं आहे", + "description": "एक अनपेक्षित त्रुटी झाली. हे लॉग केले गेले आहे आणि आमची टीम तपासणी करेल.", + "detailsAriaLabel": "त्रुटी तपशील", + "retryAriaLabel": "पृष्ठ लोड करण्याचा प्रयत्न करा", + "tryAgain": "पुन्हा प्रयत्न करा", + "statusAriaLabel": "सिस्टम स्थिती उघडा", + "systemStatus": "सिस्टम स्थिती" + }, + "offline": { + "title": "संपर्क समस्या", + "description": "OmniRoute सध्या नेटवर्कवर पोहोचू शकत नाही. आपल्या इंटरनेट, VPN, किंवा प्रॉक्सी सेटिंग्ज तपासा.", + "connectionRestored": "संपर्क पुनर्स्थापित झाला", + "offlineModeDetected": "ऑफलाइन मोड शोधला गेला", + "retryConnection": "कनेक्शन पुन्हा प्रयत्न करा", + "openStatusPage": "स्टेटस पृष्ठ उघडा" + }, + "maintenance": { + "title": "नियोजित देखभाल", + "description": "काही सेवा देखभालीच्या प्रक्रियेत असताना तात्पुरत्या स्वरूपात उपलब्ध नाहीत. मुख्य रूटिंग सामान्यतः ऑनलाइन राहते, परंतु व्यवस्थापन वैशिष्ट्ये कमी होऊ शकतात.", + "suggestion1": "काही मिनिटांनी पुन्हा प्रयत्न करा.", + "suggestion2": "पुन्हा प्रयत्न करण्यापूर्वी वर्तमान आरोग्य निर्देशक आणि प्रदाता स्थिती तपासा.", + "systemStatus": "सिस्टम स्थिती पहा", + "healthDashboard": "आरोग्य डॅशबोर्ड उघडा" + }, + "status": { + "title": "सिस्टम स्थिती", + "description": "OmniRoute मुख्य सेवांसाठी थेट कार्यात्मक स्नॅपशॉट.", + "loadingHealth": "आरोग्य मेट्रिक्स लोड करत आहे...", + "failedToLoad": "सिस्टम आरोग्य लोड करण्यात अयशस्वी.", + "unableToReachHealth": "आरोग्य समाप्तीवर पोहोचता येत नाही. कनेक्टिव्हिटी तपासा आणि पुन्हा प्रयत्न करा.", + "healthCheckFailed": "आरोग्य तपासणी अयशस्वी झाली", + "openConnectivityHelp": "ओपन कनेक्टिव्हिटी मदत", + "maintenanceInfo": "देखभाल माहिती", + "service": "सेवा", + "unknown": "अज्ञात", + "notAvailable": "n/a", + "providersTracked": "प्रदात्यांचे ट्रॅकिंग केले आहे", + "circuitBreakerState": "प्रदाता सर्किट ब्रेकर स्थिती", + "lastUpdate": "अखेरचा अद्यतन: {timestamp}", + "uptimeMinutes": "{minutes}म", + "uptimeHoursMinutes": "{hours}त {minutes}म" + }, + "statusPages": { + "400": { + "title": "वाईट विनंती", + "description": "अनुरोधाचा पेलोड अमान्य किंवा अपूर्ण आहे.", + "suggestion1": "पुन्हा प्रयत्न करण्यापूर्वी आवश्यक क्षेत्रे आणि पेलोड स्वरूपाची पुनरावलोकन करा.", + "suggestion2": "जर तुम्ही API वापरत असाल, तर स्थानिकरित्या JSON स्कीमा प्रमाणित करा.", + "suggestion3": "जर हे चालू राहिले, तर पेलोड तपासण्यासाठी Translator Playground मध्ये विनंती उघडा.", + "primaryAction": "डॉक्युमेंटेशन उघडा", + "secondaryAction": "अनुवादक उघडा" + }, + "401": { + "title": "अनधिकृत", + "description": "या संसाधनावर प्रवेश करण्यासाठी प्रमाणीकरण आवश्यक आहे.", + "suggestion1": "पुन्हा साइन इन करा आणि क्रिया पुन्हा प्रयत्न करा.", + "suggestion2": "API कॉलसाठी, Bearer टोकन उपस्थित आणि वैध आहे याची पुष्टी करा.", + "suggestion3": "जर टोकन अलीकडेच फिरवले गेले असेल, तर आपल्या क्लायंट क्रेडेन्शियल्स अपडेट करा.", + "primaryAction": "लॉगिनवर जा", + "secondaryAction": "API कीज व्यवस्थापित करा" + }, + "403": { + "title": "प्रतिबंधित", + "description": "तुमचा विनंती समजला, पण धोरणामुळे प्रवेश नाकारला आहे.", + "suggestion1": "सेटिंग्जमध्ये IP परवानगी सूची/अवरोध सूची नियम तपासा.", + "suggestion2": "आपल्या API कीसाठी असाइन केलेले मॉडेल आणि बजेट धोरणे सत्यापित करा.", + "suggestion3": "एक प्रशासकाला आवश्यक परवानगी श्रेणी देण्यास सांगा.", + "primaryAction": "ओपन ऍक्सेस मदत", + "secondaryAction": "सुरक्षा सेटिंग्ज उघडा" + }, + "408": { + "title": "अनुरोधाचा वेळ संपला", + "description": "सर्व्हरने वेळेत संपूर्ण विनंती प्राप्त केली नाही.", + "suggestion1": "कृपया लहान पेलोडसह विनंती पुन्हा करा.", + "suggestion2": "तुमच्या नेटवर्क स्थिरतेची आणि VPN/प्रॉक्सी विलंबाची तपासणी करा.", + "suggestion3": "दीर्घ कार्यांसाठी, स्ट्रीमिंग सक्षम करा किंवा विनंती विभाजित करा.", + "primaryAction": "एंडपॉइंट मार्गदर्शक उघडा", + "secondaryAction": "नेटवर्क स्थिती तपासा" + }, + "429": { + "title": "अधिकाधिक विनंत्या", + "description": "या क्लायंट, की, किंवा प्रदात्यासाठी दर मर्यादा ओलांडल्या गेल्या.", + "suggestion1": "कूलडाऊनसाठी थांबा आणि सुचवलेल्या अंतरानंतर पुन्हा प्रयत्न करा.", + "suggestion2": "फॉलबॅक प्रदात्यांसह कॉम्बोवर स्विच करा.", + "suggestion3": "सेटिंग्जमध्ये प्रदाता स्थिरता/दर-सीमा प्रोफाइल समायोजित करा.", + "primaryAction": "रेसिलियन्स सेटिंग्ज उघडा", + "secondaryAction": "ओपन कॉम्बोज" + }, + "500": { + "title": "आतील सर्व्हर त्रुटी", + "description": "आपल्या विनंती प्रक्रिया करताना एक अनपेक्षित सर्व्हर-साइड त्रुटी आली.", + "suggestion1": "काही सेकंदांत पुन्हा प्रयत्न करा.", + "suggestion2": "आरोग्य टेलीमेट्री आणि सर्व्हर लॉग्जमध्ये संबंधित विनंती आयडीसाठी तपासा.", + "suggestion3": "जर समस्या कायम राहिली, तर टाइमस्टॅम्प आणि विनंती संदर्भासह समस्या नोंदवा.", + "primaryAction": "आरोग्य डॅशबोर्ड उघडा", + "secondaryAction": "लॉग्स उघडा" + }, + "502": { + "title": "खराब गेटवे", + "description": "उपस्ट्रीम प्रदाता किंवा गेटवे एकत्रीकरणाने अमान्य प्रतिसाद दिला.", + "suggestion1": "इतर प्रदात्यासह किंवा सक्रिय संयोजन मार्गाने पुन्हा प्रयत्न करा.", + "suggestion2": "प्रदात्याचे प्रमाणपत्र आणि मॉडेल उपलब्धता तपासा.", + "suggestion3": "फॉरमॅट रूपांतरण समाविष्ट असल्यास अनुवादक आउटपुट तपासा.", + "primaryAction": "प्रदात्यांना उघडा", + "secondaryAction": "अनुवादक उघडा" + }, + "503": { + "title": "सेवा उपलब्ध नाही", + "description": "सेवा तात्पुरती उपलब्ध नाही कारण देखभाल किंवा कमी झालेल्या अवलंबनांमुळे.", + "suggestion1": "कृपया एक क्षण थांबा आणि पुन्हा प्रयत्न करा.", + "suggestion2": "देखभाल सूचना आणि प्रणाली स्थिती तपासा.", + "suggestion3": "आपल्या कार्यप्रवाहासाठी विलंब संवेदनशील असल्यास फॉलबॅक प्रदात्यांचा वापर करा.", + "primaryAction": "देखभाल तपशील", + "secondaryAction": "सिस्टम स्थिती" + } + } + }, + "kiroAuthModal": { + "title": "जोडा {providerLabel}", + "chooseMethod": "आपली प्रमाणीकरण पद्धत निवडा:", + "builderId": "AWS बिल्डर आयडी", + "builderDescription": "अधिकांश वापरकर्त्यांसाठी शिफारस केलेले. {providerLabel} शी संबंधित AWS खात्यात साइन इन करा.", + "organization": "तुमचा संघटन (AWS IAM आयडेंटिटी सेंटर)", + "organizationDescription": "आपल्या कंपनीच्या SSO प्रारंभ URL चा वापर करा (उदाहरण: {url}).", + "googleAccount": "गूगल खाते", + "googleDescription": "आपल्या Google खात्याने लॉगिन करा.", + "githubAccount": "GitHub खाते", + "githubDescription": "आपल्या GitHub खात्याने लॉगिन करा.", + "importToken": "टोकन आयात करा", + "importDescription": "{providerLabel} कडून निर्यात केलेला रिफ्रेश टोकन पेस्ट करा.", + "apiKey": "एपीआय की", + "apiKeyDescription": "दीर्घकालीन {providerLabel} / CodeWhisperer API की पेस्ट करा. हे रिफ्रेश टोकनशिवाय बिअर क्रेडेन्शियल म्हणून संग्रहित केले जाते; प्रोफाइल शोध सर्वोत्तम प्रयत्न आहे.", + "idcStartUrl": "IDC प्रारंभ URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "तुमच्या संस्थेचा AWS IAM आयडेंटिटी सेंटर URL", + "awsRegion": "AWS क्षेत्र", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "आपल्या आयडेंटिटी सेंटरसाठी AWS क्षेत्र (डीफॉल्ट: us-east-1)", + "continue": "सुरू ठेवा", + "back": "परत", + "autoDetecting": "टोकन स्वयंचलितपणे शोधत आहे...", + "readingCredentials": "AWS SSO कॅशे मधून {providerLabel} प्रमाणपत्र वाचन करत आहे", + "tokenNotDetected": "{providerLabel} टोकन स्वयंचलितपणे शोधले गेले नाही. कृपया तुमचा रिफ्रेश टोकन manually पेस्ट करा.", + "refreshToken": "ताजेतवाने टोकन", + "tokenPlaceholder": "टोकन आपोआप भरण्यात येईल...", + "importing": "आयात करत आहे...", + "apiKeyPlaceholder": "आपला {providerLabel} API की पेस्ट करा...", + "apiKeyStoredDescription": "दीर्घकालीन धारक प्रमाणपत्र म्हणून संग्रहित केलेले एन्क्रिप्टेड. ताजेतवाने करण्याची प्रक्रिया नाही.", + "apiKeyRegionDescription": "कीसाठी AWS क्षेत्र (डिफॉल्ट: us-east-1)", + "validating": "मान्य करत आहे...", + "validateAndSaveApiKey": "API की मान्य करा आणि जतन करा", + "errorAutoDetect": "टोकन स्वयंचलितपणे ओळखता आले नाही", + "errorAutoDetectFailed": "टोकन स्वयंचलितपणे ओळखण्यात अयशस्वी", + "errorRefreshTokenRequired": "कृपया एक रिफ्रेश टोकन प्रविष्ट करा", + "errorImportFailed": "आयात अयशस्वी झाली", + "errorApiKeyRequired": "कृपया एक Kiro API की प्रविष्ट करा", + "errorApiKeyImportFailed": "API की आयात करण्यात अयशस्वी झाला", + "errorIdcStartUrlRequired": "कृपया आपला IDC प्रारंभ URL प्रविष्ट करा" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} ला {providerName} द्वारे कनेक्ट करा", + "errorStartAuthorization": "अधिकृतता सुरू करण्यात अयशस्वी", + "errorAuthorizationExpired": "अधिकृतता कालबाह्य झाली. पुन्हा लॉगिन प्रवाह सुरू करा.", + "errorAuthorizationFailed": "अधिकृतता अयशस्वी झाली", + "initializing": "प्रारंभ करत आहे...", + "settingUp": "{providerName} प्रमाणीकरण सेट करत आहे", + "openIncognito": "या लिंकला इन्कॉग्निटो विंडोमध्ये उघडा", + "incognitoDescription": "सध्याच्या खात्यांसोबत सत्र संघर्ष टाळण्यासाठी एक इन्कॉग्निटो/खाजगी विंडो वापरा.", + "copyLink": "लिंक कॉपी करा", + "verificationCode": "सत्यापन कोड", + "waiting": "अधिकृततेची प्रतीक्षा करत आहे...", + "cancel": "रद्द करा", + "successTitle": "संपूर्णपणे कनेक्ट झाले!", + "successMessage": "तुमचा {providerLabel} खाती {providerName} द्वारे जोडले गेले आहे.", + "done": "पूर्ण झाले", + "errorTitle": "संपर्क अयशस्वी झाला", + "close": "बंद करा" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "अधिकृतता अयशस्वी झाली", + "errorPopupBlocked": "पॉपअप अवरोधित — या साइटसाठी पॉपअपला परवानगी द्या, किंवा खाली टोकन manually पेस्ट करा.", + "errorPopupClosed": "अधिकृतता विंडो पूर्ण होण्यापूर्वी बंद करण्यात आली.", + "errorAccessTokenRequired": "अॅक्सेस टोकन आवश्यक आहे.", + "errorImportFailed": "आयात अयशस्वी झाली", + "title": "कनेक्ट ट्रे सोलो", + "authorizeDescription": "trae.ai मध्ये पॉपअपद्वारे अधिकृत करा. टोकन आयात झाल्यावर पॉपअप स्वतःच बंद होईल.", + "authorizeImportant": "महत्त्वाचे: तुम्हाला trae.ai मध्ये या ब्राउझरमध्ये प्रथम लॉगिन केलेले असावे. अधिकृत पृष्ठ फक्त विद्यमान सत्राची पुष्टी करते — ते तुम्हाला लॉगिन करू शकत नाही. तुम्हाला \"लॉगिन अयशस्वी\" दिसल्यास, \"open solo.trae.ai\" वर क्लिक करा, लॉगिन करा, आणि नंतर येथे परत या.", + "waitingForAuthorization": "trae.ai साठी वाट पाहत आहे…", + "authorizeWithBrowser": "ब्राउझरद्वारे अधिकृत करा", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "किंवा टोकन हाताने पेस्ट करा", + "manualInstructions": "solo.trae.ai मध्ये साइन इन करा, DevTools → Network उघडा, कोणतीही चॅट संदेश पाठवा, आणि Authorization: Cloud-IDE-JWT {tokenPlaceholder} विनंती हेडरमधून JWT कॉपी करा. JWT आयुष्य ~14 दिवस आहे. वैकल्पिक ओळख क्षेत्रे त्याच विनंती शरीरातील common_params मधून येतात.", + "accessTokenLabel": "ऍक्सेस टोकन (क्लाउड-आयडीई-जेडब्ल्यूटी)", + "webId": "वेब आयडी", + "optional": "पर्यायी", + "bizUserId": "बिझ वापरकर्ता आयडी", + "userUniqueId": "वापरकर्ता अद्वितीय आयडी", + "scope": "व्याप्ती", + "tenant": "भाडेकरू", + "region": "क्षेत्र", + "importing": "आयात करत आहे…", + "importToken": "टोकन आयात करा", + "cancel": "रद्द करा" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "वितरण करत आहे...", + "complete": "पूर्ण", + "defaultLabel": "प्रॉक्सी वितरित करा" + } + }, + "providerTest": { + "dialogLabel": "चाचणी {provider}", + "deprecated": "अवशिष्ट", + "risk": "जोखम", + "close": "बंद करा", + "model": "मॉडेल", + "key": "की", + "defaultKey": "डिफॉल्ट", + "clearConversation": "संवाद स्पष्ट करा", + "clear": "स्पष्ट करा", + "tabs": { + "test": "चाचणी", + "logs": "लॉग्स" + }, + "loadingLogs": "लॉग लोड करत आहे…", + "failedToLoadLogs": "लॉग लोड करण्यात अयशस्वी", + "noLogsYet": "अजून लॉग नाहीत", + "noLogsDescription": "Test टॅबमधून एक चाचणी संदेश पाठवा — या प्रदात्यासाठी लॉग येथे दिसतील.", + "openFullLogs": "पूर्ण लॉग पृष्ठ उघडा", + "live": "सजीव", + "tailingLast": "शेवटचे {count} पाहत आहे", + "refreshNow": "आता ताजेतवाने करा", + "refresh": "ताजेतवाने करा", + "unknownRequester": "अज्ञात विनंती करणारा", + "fields": { + "timestamp": "टाइमस्टॅम्प", + "status": "स्थिती", + "duration": "कालावधी", + "model": "मॉडेल", + "requestedModel": "विनंती केलेला मॉडेल", + "provider": "प्रदाते", + "requester": "अनुरोधकर्ता", + "tokens": "टोकन" + } + }, + "proxyLog": { + "detailAriaLabel": "प्रॉक्सी लॉग तपशील", + "event": "प्रॉक्सी इव्हेंट", + "close": "प्रॉक्सी तपशील मोडाल बंद करा", + "time": "वेळ", + "latency": "उशीर", + "clientIp": "क्लायंट IP", + "proxy": "प्रॉक्सी", + "direct": "सिधा", + "type": "टाइप", + "level": "पातळी", + "provider": "प्रदाता", + "tlsFingerprint": "TLS फिंगरप्रिंट", + "directNative": "सिधा", + "targetUrl": "लक्ष्य URL", + "error": "त्रुटी", + "configuration": "प्रॉक्सी कॉन्फिगरेशन" + }, + "requestTimeline": { + "title": "अनुरोध कालावधी", + "modes": { + "follow": "अनुसरण करा", + "followDescription": "अक्ष डावीकडे स्क्रोल करतो, आता रेषा 75% वर राहते", + "now": "आता", + "nowDescription": "सध्याच्या वेळेस उडी मारा, आता ओळ मध्यभागी रीसेट होते", + "pan": "पॅन", + "panDescription": "आवाज शोधण्यासाठी खेचा, पार्श्वभूमी थांबलेली आहे" + }, + "reset": "पुनर्स्थापित करा", + "started": "सुरू झाले", + "ended": "समाप्त झाला", + "duration": "कालावधी", + "status": "स्थिती", + "provider": "प्रदाता", + "tokens": "टोकन", + "active": "सक्रिय", + "other": "इतर", + "tenMinutes": "10मिनिट्स", + "hour": "तास", + "day": "दिवस", + "unknownModel": "अज्ञात", + "pending": "प्रलंबित" + }, + "metadata": { + "compressionTitle": "संकुचन", + "compressionDescription": "संदर्भ संकुचन सेटिंग्ज कॉन्फिगर करा जेणेकरून टोकन वापर आणि खर्च कमी होऊ शकेल.", + "relayTitle": "OmniRoute — रिले प्रॉक्सी", + "relayDescription": "तुमच्या AI पायाभूत सुविधांसाठी सर्व्हरलेस रिले प्रॉक्सी एंडपॉइंट्स", + "trafficInspectorTitle": "ट्रॅफिक इन्स्पेक्टर — ओम्नीरूट", + "trafficInspectorDescription": "LLM कॉल्सचे निरीक्षण करा + कोणत्याही अनुप्रयोगाच्या HTTPS ट्रॅफिकचे डिबग करा" + }, + "conductor": { + "title": "कंडक्टर — CLI-एजंट फ्लीट", + "subtitle": "OmniConductor हब: धावक, कार्य रांगा आणि परिषद, थेट", + "runners": "धावक", + "tasks": "कार्ये", + "colName": "नाव", + "colClis": "सीएलआय", + "colStatus": "स्थिती", + "colTask": "कार्य", + "colMode": "मोड", + "colRunner": "धावक", + "colSummary": "सारांश", + "online": "ऑनलाइन", + "offline": "ऑफलाइन", + "draining": "ओसंडणे", + "hubOffline": "कंडक्टर हब ऑफलाइन आहे किंवा कॉन्फिगर केलेला नाही (CONDUCTOR_HUB_URL) — जुन्या डेटाऐवजी काहीही दाखवत नाही.", + "noRunners": "कोणतेही धावक नोंदणीकृत नाहीत", + "noTasks": "अजून कोणतीही कार्ये नाहीत", + "detailTitle": "कार्याचे तपशील", + "prompt": "प्रॉम्प्ट", + "branch": "शाखा", + "fetchHint": "परिणाम मिळवा: git fetch origin {branch}", + "council": "परिषद", + "candidates": "उम्मीदवार", + "cancel": "कार्य रद्द करा", + "cancelConfirmTitle": "या कार्य रद्द करायचे का?", + "cancelConfirmMessage": "हब रनरवर कार्यान्वयन थांबवेल. हे पूर्ववत केले जाऊ शकत नाही.", + "cancelFailed": "हबने रद्द करण्यास नकार दिला", + "close": "बंद करा", + "error": "त्रुटी", + "faroTitle": "फारो — ताफा प्रवक्ते", + "faroSubtitle": "चॅट आणि आवाज, वास्तविक फ्लीट इव्हेंटमध्ये अँकर्ड. नाशक आदेश नेहमी पुष्टीसाठी विचारतात.", + "faroEmpty": "गाडीबद्दल विचारा — उदा. \"गाडी कशी आहे?\"", + "faroPending": "Faro पुष्टीसाठी विचारत आहे", + "faroPlaceholder": "Faroशी बोला…", + "faroSend": "पाठवा", + "faroOffline": "फारो (प्रतिनिधी) ऑफलाइन आहे", + "yes": "होय", + "no": "नाही", + "pushToTalk": "बोलण्यासाठी धरून ठेवा", + "speakAnswers": "उत्तर बोला", + "voiceModels": "व्हॉइस मॉडेल (या OmniRoute चा प्रदाता/मॉडेल)", + "voiceIdle": "बोलणे", + "voiceListening": "ऐकणे…", + "voiceThinking": "विचार करत आहे…", + "voiceSpeaking": "बोलत आहे…", + "sttFailed": "ट्रान्सक्रिप्शन अयशस्वी झाले (STT मॉडेल/प्रदात्याची तपासणी करा)", + "ttsFailed": "भाषण संश्लेषण अयशस्वी झाले (TTS मॉडेल/प्रदाता तपासा)", + "micDenied": "मायक्रोफोन उपलब्ध नाही किंवा परवानगी नाकारली आहे" + }, + "cliproxyProviderExposure": { + "title": "प्रदाता प्रदर्शन", + "description": "cliproxyapi/ प्रिफिक्स अंतर्गत CLIProxyAPI मॉडेल्सना रूटिंग लक्ष्य म्हणून उघडा.", + "label": "cliproxyapi/... म्हणून उघडा", + "hint": "सक्रिय केल्यास, शोधलेले मॉडेल OmniRoute मध्ये प्रदाता निवडींमध्ये दिसतात.", + "updateFailed": "अद्यतन करण्यात अयशस्वी (HTTP {status})", + "networkError": "नेटवर्क त्रुटी — प्रदाता एक्सपोजर सेटिंग अद्यतनित करता येत नाही" + } } - diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 81a7dabb28..2ec703fb26 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -172,6 +172,18 @@ "unselectAll": "Batal pilih semua", "visibleModels": "kelihatan", "selectAllConfirm": "Tambah {count} model ke kombinasi ini?", + "testSelectedProviders": "Penyedia Ujian", + "testingSelectedProviders": "Menguji {done}/{total}...", + "noProvidersSelectedToTest": "Sila semak sekurang-kurangnya satu penyedia di bawah terlebih dahulu", + "noModelsToTestForProviders": "Tiada model untuk diuji bagi penyedia yang dipilih", + "testSelectedProvidersResults": "{ok} daripada {total} model berfungsi", + "selectWorkingModels": "Tambah berfungsi", + "unselectWorkingModels": "Deselect Bekerja", + "noWorkingModelsToSelect": "Tiada model yang berfungsi lagi untuk ditambah", + "providerTestHint": "Petua: semak penyedia → Uji → Tambah berfungsi. Klik sekali lagi untuk tidak memilih.", + "selectAllProviders": "Semak semua penyedia", + "clearProviderSelection": "Nyahpilih penyedia", + "providersSelectedCount": "{count} penyedia diperiksa", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Saiz", + "toggleNoAuthProvider": "Togol penyedia tanpa pengesahan", + "loadingModels": "Memuatkan model…", + "selectAModel": "Pilih model", + "degraded": "Terjejas", + "zeroConfigBannerTitle": "Berjalan dalam mod tanpa konfigurasi", + "zeroConfigBannerBody": "OmniRoute secara automatik menjana kunci penyulitan selamat pada pelancaran pertama. Kunci tersebut disimpan di {dataDir}. Tiada tindakan diperlukan — data anda disulitkan dan selamat. Untuk menggunakan kunci tersuai, tambah JWT_SECRET dan STORAGE_ENCRYPTION_KEY ke dalam fail tersebut.", + "batchRelativeTimeIn": "dalam {value}", + "batchRelativeTimeAgo": "{value} yang lalu", + "batchDetailsTitle": "Butiran Batch", + "batchProgress": "Kemajuan", + "batchCompletedCount": "{count} selesai", + "batchFailedCount": "{count} gagal", + "batchPendingCount": "{count} menunggu", + "batchTimeline": "Garis Masa", + "batchTimelineInProgress": "Dalam Proses", + "batchTimelineFinalizing": "Memuktamadkan", + "batchTimelineCompleted": "Selesai", + "batchTimelineFailed": "Gagal", + "batchTimelineExpires": "Tamat Tempoh", + "batchTimelineExpired": "Tamat Tempoh", + "batchTimelineCancelling": "Membatalkan", + "batchTimelineCancelled": "Dibatalkan", + "batchTokenUsage": "Penggunaan Token", + "batchMetadata": "Metadata", + "batchFileContents": "Kandungan Fail", + "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Pratonton", + "batchFilePreviewTruncated": "Menunjukkan {shown} baris pertama ({total} jumlah baris)", + "batchFileDownloadFull": "Muat Turun Fail Penuh" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Pemisah", "discovery": "Penemuan", "discoverySubtitle": "Imbas penyedia untuk akses percuma", + "conductor": "Pengendali", + "conductorSubtitle": "CLI-ejen armada", "resilienceConnections": "Daya Tahan Sambungan", "resilienceConnectionsSubtitle": "Cooldown, breaker, status penguncian", "settingsModalityBridge": "Jambatan Modality", - "settingsModalityBridgeSubtitle": "Fallback imej/audio → teks untuk model hanya teks" + "settingsModalityBridgeSubtitle": "Fallback imej/audio → teks untuk model hanya teks", + "commandPalette": { + "title": "Palet Perintah", + "searchPlaceholder": "Cari halaman, tetapan, alat...", + "clearSearch": "Kosongkan carian", + "noResults": "Tiada hasil", + "navigate": "navigasi", + "open": "buka", + "close": "tutup" + }, + "noResults": "Tiada hasil" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Kemas Kini Tetapan Gagal", "sync.token.created": "Token Penyegerakan Dicipta", "sync.token.revoked": "Token Penyegerakan Dibatalkan" - } + }, + "mcpMetricCalls24h": "Panggilan (24j)", + "mcpMetricSuccessRate": "Kadar kejayaan", + "mcpMetricAvgDuration": "Purata tempoh", + "mcpMetricTopTool": "Alat Terbaik" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Versi baharu tersedia. Klik untuk mengemas kini.", "updateStarted": "Kemas kini bermula...", "reloadingPageAutomatically": "Memuat semula halaman secara automatik...", - "providerTopology": "Topologi Pembekal" + "providerTopology": "Topologi Pembekal", + "downloadDmg": "Muat Turun DMG (macOS)", + "downloadDmgDescription": "Versi baru aplikasi desktop OmniRoute tersedia. Sila muat turun dan pasang pemasang DMG macOS untuk mengemas kini (semasa: v{version}).", + "downloadExe": "Muat Turun EXE (Windows)", + "downloadExeDescription": "Versi baru aplikasi desktop OmniRoute tersedia. Sila muat turun dan pasang pemasang EXE Windows untuk mengemas kini (semasa: v{version}).", + "downloadAppImage": "Muat Turun AppImage (Linux)", + "downloadAppImageDescription": "Versi baru aplikasi desktop OmniRoute tersedia. Sila muat turun pakej AppImage Linux untuk mengemas kini (semasa: v{version}).", + "downloadUpdate": "Muat Turun Kemas Kini", + "downloadUpdateDescription": "Versi baharu aplikasi desktop OmniRoute tersedia. Sila muat turun format aplikasi yang sesuai untuk sistem anda untuk mengemas kini (semasa: v{version}).", + "updateQueued": "Kemaskini dalam barisan kepada v{version}.", + "updateDockerRebuilding": "Imej Docker sedang membina semula di latar belakang.", + "updateWaitingRestart": "Menunggu OmniRoute untuk dimulakan semula dengan versi baharu.", + "updateInstalling": "Memasang v{version}.", + "updateRunning": "OmniRoute kini sedang berjalan v{version}.", + "updateCompleted": "OmniRoute dikemas kini ke v{version}.", + "updateDockerStillRebuilding": "Imej Docker masih membina semula untuk v{version}.", + "updateInstallingBackground": "Memasang v{version} di latar belakang.", + "updateWaitingVersion": "Menunggu OmniRoute untuk kembali pada v{version}.", + "updateDockerStillInProgress": "Docker rebuild masih dalam proses.", + "updateRestarting": "Proses pengulangan perkhidmatan sedang dijalankan. Menunggu OmniRoute untuk kembali dalam talian...", + "updateTimeout": "Kemaskini telah dimulakan, tetapi v{version} tidak tersedia sebelum tamat tempoh. Segarkan halaman atau semak log pelayan.", + "updateTimedOut": "Kemaskini ke v{version} telah tamat waktu.", + "updateStartFailed": "Gagal untuk memulakan kemas kini.", + "noResponseStream": "Tiada aliran respons diterima.", + "updateComplete": "Kemaskini lengkap!", + "updateFailed": "Kemaskini gagal.", + "updateNetworkError": "Ralat rangkaian — sambungan terputus semasa kemas kini.", + "stepInstallPackage": "Pasang Pakej", + "stepRebuildNativeModules": "Bina Semula Modul Asli", + "stepRestartService": "Mulakan Semula Perkhidmatan", + "stepComplete": "Lengkap", + "stepError": "Ralat", + "updateCompleteTitle": "Kemaskini Lengkap!", + "updateFailedTitle": "Kemas Kini Gagal", + "updatingTitle": "Mengemas kini OmniRoute...", + "reloadNotice": "Halaman akan dimuat semula secara automatik dalam beberapa saat.", + "retryNotice": "Sila cuba lagi atau kemas kini secara manual melalui CLI.", + "restartNotice": "Jangan tutup halaman ini. Sistem akan dimulakan semula secara automatik.", + "reloadNow": "Muat Semula Sekarang", + "closeUpdate": "Tutup", + "retryUpdate": "Cuba Lagi", + "updateAvailableTitle": "Kemas Kini Tersedia: v{version}{desktop}", + "desktopAppLabel": "(Aplikasi Desktop)", + "checkingForUpdates": "Memeriksa kemas kini...", + "versionAvailableForDownload": "Versi v{version} tersedia untuk dimuat turun.", + "downloadingUpdate": "Mendownload kemas kini... {percent}% lengkap.", + "updateDownloaded": "Kemaskini dimuat turun dengan jayanya! Klik Mulakan Semula & Pasang untuk menerapkan.", + "autoUpdateFailed": "Kemas kini automatik gagal: {reason}.", + "unknownUpdateError": "Ralat tidak diketahui", + "versionAvailableDesktop": "Versi v{version} tersedia untuk aplikasi desktop.", + "manualUpdateRequired": "Kemaskini manual diperlukan untuk jenis pemasangan ini.", + "restartAndInstall": "Mulakan Semula & Pasang", + "checkForUpdate": "Semak Kemas Kini", + "manualUpdate": "Kemas Kini Manual", + "directDownloadHint": "Atau muat turun format pemasang yang sesuai secara langsung:", + "releaseNotes": "Nota Rilisan", + "readMore": "Baca Lagi", + "noAuthLabel": "Tiada Auth" }, "analytics": { "title": "Analitis", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Disimpulkan daripada log panggilan berterusan sekitar permintaan ini", "routeRecommendations": "Cadangan", "routeLimitations": "Had", - "routeNoKnownLimitations": "Tiada had yang diketahui untuk penjelasan ini." + "routeNoKnownLimitations": "Tiada had yang diketahui untuk penjelasan ini.", + "searchAnalyticsLoading": "Memuatkan analitik carian…", + "searchAnalyticsNoData": "Tiada data carian tersedia lagi.", + "searchAnalyticsNoDataDescription": "Permintaan carian akan muncul di sini selepas carian pertama melalui /v1/search.", + "searchAnalyticsToday": "{count} hari ini", + "searchAnalyticsCachedRequests": "{count} permintaan yang disimpan", + "searchAnalyticsApiCosts": "kos API carian", + "searchAnalyticsErrors": "{count} ralat", + "searchAnalyticsNoErrors": "Tiada ralat", + "searchAnalyticsProviderBreakdown": "Pecahan Penyedia", + "searchAnalyticsQueries": "pertanyaan", + "searchAnalyticsEmptyDescription": "Gunakan POST /v1/search untuk memulakan penghalaan carian web.", + "searchAnalyticsFreeTier": "Pelan percuma tersedia: Serper (2,500/bulan), Brave (2,000/bulan), Exa (1,000/bulan), Tavily (1,000/bulan) — jumlah 6,500+ carian percuma/bulan dengan pemulihan automatik.", + "autoRoutingNoDataAvailable": "Tiada analitik auto-routing tersedia. Buat permintaan menggunakan awalan auto/ untuk melihat metrik.", + "defaultVariantLabel": "Lalai", + "freeTierAvailable": "Pelan percuma tersedia" }, "apiManager": { "title": "Kunci API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} penyedia", "imageToTextBridgeAvailable": "Modality Bridge kini boleh menerangkan imej untuk model teks sahaja. Permainan dalam talian akan tersedia apabila /api/v1/images/understanding dilaksanakan.", "imageToTextBridgeCta": "Konfigurasikan jambatan Imej→Teks dalam tetapan Jambatan Modality", - "sttBridgeCta": "Konfigurasikan jambatan Ucapan→Teks dalam tetapan Jambatan Modality" + "sttBridgeCta": "Konfigurasikan jambatan Ucapan→Teks dalam tetapan Jambatan Modality", + "existingConnection": "Sambungan sedia ada", + "openrouterSttDescription": "Model suara-ke-teks OpenRouter menggunakan sambungan OpenRouter yang telah anda konfigurasi. Tiada kelayakan berasingan diperlukan." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Tampalkan ke dalam:", "copilotReloadInstruction": "Kemudian muat semula VS Code dan tetapkan kunci API dalam prompt input.", "wireApiChatCompletions": "Selesai Sembang (/sembang/penyelesaian)", - "wireApiResponses": "API Respons (/respons)" + "wireApiResponses": "API Respons (/respons)", + "cliproxyapiActionFailed": "Tindakan gagal", + "cliproxyapiActionSucceeded": "Tindakan berjaya", + "cliproxyapiCheckUpdates": "Semak Kemas Kini", + "cliproxyapiDescription": "Fallback proksi hulu (OAuth berasaskan Go)", + "cliproxyapiHealth": "Kesihatan", + "cliproxyapiHealthy": "Sihat", + "cliproxyapiInstall": "Pasang", + "cliproxyapiNotInstalledValue": "Tidak dipasang", + "cliproxyapiPort": "Pelabuhan", + "cliproxyapiRequestFailed": "Permintaan gagal", + "cliproxyapiRestart": "Mulakan Semula", + "cliproxyapiStart": "Mula", + "cliproxyapiStatusError": "Ralat", + "cliproxyapiStatusInstalled": "Dipasang", + "cliproxyapiStatusNotInstalled": "Tidak Dipasang", + "cliproxyapiStatusRunning": "Sedang Berjalan", + "cliproxyapiStatusStopped": "Dihentikan", + "cliproxyapiStop": "Hentikan", + "cliproxyapiUnhealthy": "Tidak Sihat", + "cliproxyapiUnknown": "Tidak Dikenali", + "cliproxyapiUpdate": "Kemas Kini", + "cliproxyapiUpdateAvailable": "Kemas kini tersedia: v{current} → v{latest}", + "cliproxyapiVersion": "Versi" }, "combos": { "title": "Kombo", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Hanya maju apabila kuota habis", + "fallbackOnlyOnQuotaExhaustionShort": "fallback hanya kuota", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Pek mod dan pemberat kekal di sini; keadaan masa jalan pemutus kekal di halaman Kesihatan.", "emailVisibilityHint": "E-mel akaun di sini mengikut togol privasi global.", "emailVisibilityTooltip": "Gunakan ikon mata untuk mendedahkan atau menyembunyikan e-mel akaun secara global merentas kombo, penyedia dan skrin kuota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Langkah demi langkah (Penyedia → Model)", + "builderModeGlobal": "Carian model global (Gabungan tersuai)", + "builderGlobalSearchPlaceholder": "Cari model di semua penyedia (contoh: opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Tambah semua", + "builderGlobalShortcuts": "Pintasan:", + "builderGlobalNoResults": "Tiada model ditemui untuk \"{query}\".", + "builderGlobalProviderLabel": "Penyedia:", + "builderGlobalAccountCount": "{count, plural, one {# akaun} other {# akaun}}", + "builderGlobalAdded": "Ditambah", + "builderGlobalAdd": "Tambah", "manualModel": "Model manual", "manualModelInvalid": "Masukkan model sebagai penyedia/model.", "manualModelUnknownProvider": "Awalan penyedia tidak diketahui.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Ketersediaan Sesi", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Kelekatan tidak aktif", "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 sebagai model utama (Moonshot API), dengan sandaran automatik ke sambungan Kimi Code anda (kimi-coding, kimi-web) apabila dikonfigurasikan.", - "kimiPresetCta": "Tambah preset" + "kimiPresetCta": "Tambah preset", + "intelligentComboCount": "{count, plural, one {# gabungan pintar} other {# gabungan pintar}}", + "providersInScope": "{count, plural, one {# penyedia dalam skop} other {# penyedia dalam skop}}", + "savingModePack": "Menyimpan {pack}…", + "errorTitle": "Gagal memuatkan kombinasi", + "errorDescription": "Kami tidak dapat memuatkan data combo buat masa ini. Semak sambungan anda dan cuba lagi.", + "errorId": "Ralat ID: {id}", + "errorRetry": "Cuba Lagi", + "comboLabel": "Gabungan" }, "costs": { "title": "Kos", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nama pengguna", "obsidianPassword": "Kata laluan", - "obsidianTailscaleHint": "Gunakan IP Tailscale anda dan bukannya localhost jika menyambung dari peranti mudah alih. Kedua-dua peranti mestilah berada pada rangkaian Tailscale yang sama." + "obsidianTailscaleHint": "Gunakan IP Tailscale anda dan bukannya localhost jika menyambung dari peranti mudah alih. Kedua-dua peranti mestilah berada pada rangkaian Tailscale yang sama.", + "cloudSyncNotConfigured": "Penyelarasan awan tidak dikonfigurasikan pada instance ini.", + "notionConnect": "Sambung", + "notionConnectFailed": "Gagal untuk menyambung", + "notionConnected": "Sambung", + "notionConnectionFailed": "Sambungan gagal", + "notionDescription": "Cari, baca, kueri, dan tulis ke Notion melalui model AI yang diarahkan", + "notionDisconnect": "Putus Sambungan", + "notionDisconnectFailed": "Gagal untuk memutuskan sambungan", + "notionEnterToken": "Sila masukkan token integrasi Notion", + "notionIntegrationHelp": "Buat Integrasi Dalaman di", + "notionIntegrationToken": "Token Integrasi Dalaman Notion", + "notionNotConnected": "Tidak disambungkan", + "notionTokenConfigured": "Token telah dikonfigurasikan. Alat Notion boleh didapati melalui MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Penyedia / Model", "noRemoteProviders": "Tiada penyedia dengan kunci API yang dikonfigurasikan", "selectProviderModel": "Pilih model", + "customBaseUrlLabel": "URL asas tersuai (pilihan)", + "customModelIdLabel": "ID model tersuai (pilihan)", + "customEndpointHelp": "Gunakan titik akhir /embeddings yang serasi dengan OpenAI. Titik akhir tempatan dibenarkan; sasaran metadata awan diblok.", + "customEndpointSave": "Terapkan titik akhir khusus", + "customEndpointInvalid": "Masukkan kedua-dua URL asas HTTP(S) yang sah dan ID model, atau biarkan kedua-dua medan kosong.", + "customEndpointSaveFailed": "Titik akhir penyisipan khusus tidak dapat disimpan.", "staticEnabledLabel": "Dayakan Static Potion", "staticEnabledDesc": "Muat turun dan gunakan model potion-base-8M secara tempatan", "transformersEnabledLabel": "Dayakan Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Membersihkan...", "cleanNow": "Bersihkan sekarang", "cleanupSuccess": "{count} titik dialih keluar", - "cleanupFailed": "Pembersihan gagal" + "cleanupFailed": "Pembersihan gagal", + "hostLabel": "Hos", + "collectionLabel": "Koleksi" }, "rerank": { "enableLabel": "Dayakan Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Gambar rajah sandar 3 peringkat OmniRoute", "apiKeyMgmt": "Mgmt Kunci API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Tetapkan penyedia percuma", + "description": "Secara pilihan, aktifkan penyedia tanpa pendaftaran yang dipilih. Semak notis dan laman setiap penyedia sebelum meneruskan; ketersediaan dan had kadar dikawal oleh pihak ketiga.", + "loading": "Memuat penyedia percuma...", + "loadFailed": "Tidak dapat memuat penyedia percuma.", + "alreadyConfigured": "Semua penyedia percuma yang layak sudah dikonfigurasikan.", + "reviewProviderSite": "Semak laman penyedia dan terma", + "confirmation": "Saya telah menyemak penyedia pihak ketiga ini dan ingin OmniRoute untuk membuat sambungan yang dipilih.", + "setupSelected": "Tetapkan penyedia yang dipilih", + "settingUp": "Sedang menyediakan...", + "setupFailed": "Tidak dapat menyediakan penyedia yang dipilih. Tiada yang sedia ada telah diubah.", + "retryFailed": "Cuba semula penyedia yang gagal", + "orUseApiKey": "atau sambungkan dengan kunci API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "dicipta", + "skipped": "sudah dikonfigurasi", + "failed": "gagal" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Diperlukan. URL asas API pembekal.", "iconUrlLabel": "URL Ikon", "iconUrlHint": "Pilihan. URL imej yang ditunjukkan sebagai ikon penyedia ini.", + "iconUrlInvalid": "URL ikon tidak sah. Gunakan URL http(s):// atau data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Serasi (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sesi sudah sedia ada", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Gunakan pengesahan", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Tampal kunci API…", "zedSaving": "Menyimpan…", "zedImportAction": "Import", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktifkan pembaharuan sesi Kursor secara automatik", + "cursorAgentNudgeBody": "Pasang cursor-agent untuk pembaharuan sesi automatik — tanpa itu, sambungan Cursor memerlukan penyambungan manual secara berkala kira-kira setiap 24 jam.", + "cursorAgentNudgeDismiss": "Tolak", "zedManualImportFailed": "Import manual gagal", "zedManualImportSuccess": "Token {provider} diimport daripada Zed", "grokImportTitle": "Import Pengesahan Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Peringkat percuma untuk inferens tanpa pelayan — tiada kad kredit diperlukan", "gemini": "Percuma selamanya: 1,500 req/hari untuk Gemini 2.5 Flash — tiada kad kredit, dapatkan kunci di aistudio.google.com", "gigachat": "Sambungkan GigaChat (Sber) dengan kunci API.", - "github-models": "Cipta PAT GitHub dengan skop 'models: read' di github.com/settings/tokens", "gitlab": "Token akses peribadi GitLab untuk API Code Suggestions awam. Konfigurasikan URL asas dihoskan sendiri apabila tidak menggunakan gitlab.com.", "gitlawb-gmi": "Dapatkan kunci API anda daripada papan pemuka Gitlawb Opengateway.", "gitlawb": "Dapatkan kunci API anda daripada papan pemuka Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Sambungkan Kimi Coding dengan aliran OAuth sedia ada.", "kiro": "Peringkat percuma: 50 kredit/bulan (~25K–100K token). ⚠️ ToS Kiro melarang penggunaan proksi/harness pihak ketiga.", "codex": "Sambungkan OpenAI Codex dengan aliran OAuth sedia ada.", - "qwen": "Sambungkan Qwen Code dengan aliran OAuth sedia ada." + "qwen": "Sambungkan Qwen Code dengan aliran OAuth sedia ada.", + "github-models": "Cipta PAT GitHub dengan skop 'models: read' di github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} menerima ID model asli pembekal. Import daripada /models atau tambahkan ID tersuai untuk penghalaan.", "bedrockModelsDescription": "Model Amazon Bedrock diliputi oleh rantau AWS. Import daripada /models atau tambah ID model Bedrock yang didayakan di rantau yang dipilih.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Apabila semua sambungan yang dikonfigurasikan habis (kuota, kredit, atau tamat tempoh), gunakan sementara tier tanpa kunci penyedia ini. Matikan untuk mengabaikan penyedia ini daripada menghantar permintaan tanpa nama — disyorkan apabila tier tanpa kunci menolak permintaan tersebut (401).", "anonymousFallbackEnabled": "Fallback tanpa nama diaktifkan untuk {provider}", "anonymousFallbackDisabled": "Fallback tanpa nama dinyahaktifkan untuk {provider} — sambungan yang habis akan melangkau penyedia ini", - "anonymousFallbackUpdateFailed": "Gagal mengemas kini tetapan fallback tanpa nama" + "anonymousFallbackUpdateFailed": "Gagal mengemas kini tetapan fallback tanpa nama", + "batchDeleteFailed": "Penghapusan kumpulan gagal", + "batchDeleteNetworkError": "Ralat rangkaian semasa penghapusan kumpulan", + "batchUpdateFailed": "Kemas kini kumpulan gagal", + "batchUpdateNetworkError": "Ralat rangkaian semasa kemas kini kumpulan", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agen Awan", + "categoryIde": "IDE", + "categoryLocal": "Tempatan", + "categorySearch": "Cari", + "categoryWebCookie": "Kuki Web", + "claudeExtraUsageBlockingDisabled": "Penyekatan penggunaan tambahan Claude dilumpuhkan (penggunaan tambahan dibenarkan)", + "claudeExtraUsageBlockingEnabled": "Penyekatan penggunaan tambahan Claude diaktifkan (penggunaan tambahan akan disekat)", + "claudeRoutingPreferenceDisabled": "Model Claude tanpa awalan tidak lagi mengutamakan Claude Code", + "claudeRoutingPreferenceEnabled": "Model Claude tanpa awalan kini lebih mengutamakan Claude Code", + "clearMediaFilter": "Bersihkan", + "cliproxyRoutingDisabled": "Permintaan kini menggunakan OmniRoute asli (langsung)", + "cliproxyRoutingEnabled": "Permintaan kini melalui CLIProxyAPI (emulasi yang lebih mendalam)", + "codexLimitPolicyUpdated": "Dasar had Codex telah dikemas kini", + "codexServiceModeUpdated": "Modus perkhidmatan Codex telah dikemas kini", + "codexServiceTierActive": "Tahap perkhidmatan Codex {tier} sedang aktif", + "codexTierFastLabel": "Cepat", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Gagal untuk memohon Kod Perintah auth", + "commandCodeApplyingApproval": "Pelayar diluluskan, sedang memohon…", + "commandCodeApplyingKey": "Memohon kunci yang diluluskan oleh pelayar…", + "commandCodeApprovalInstructions": "Buka URL pengesahan, luluskan akses, kemudian tampal kunci/JSON/URL yang dikembalikan di bawah…", + "commandCodeAuthExpired": "Kod Perintah auth telah tamat tempoh", + "commandCodeConnected": "Kod Perintah disambungkan", + "commandCodeConnectionAdded": "Kod Perintah sambungan ditambah", + "commandCodeLinkExpired": "Pautan Kod Perintah telah tamat tempoh", + "commandCodeOpeningStudio": "Membuka Command Code Studio…", + "commandCodePopupBlocked": "Popup disekat. Sila benarkan popup dan cuba Command Code Connect sekali lagi.", + "commandCodeStartFailed": "Gagal untuk memulakan Command Code auth", + "connectionDeleted": "Sambungan dipadamkan", + "connectionFallback": "sambungan", + "coolingConnectionsDescription": "Sambungan ini mengembalikan 429 (had kadar) pada permintaan terakhir mereka. OmniRoute akan mengabaikannya sehingga pemasa tamat — tiada penyahaktifan manual diperlukan.", + "coolingConnectionsTitle": "Sedang menyejukkan ({count})", + "failedDeleteAlias": "Gagal untuk memadam alias", + "failedDeleteConnection": "Gagal untuk memadam sambungan", + "failedDistributeProxies": "Gagal untuk mengedarkan proksi.", + "failedSaveModelEndpointSettings": "Gagal menyimpan tetapan titik akhir model", + "failedUpdateClaudeExtraUsagePolicy": "Gagal untuk mengemas kini polisi penggunaan tambahan Claude", + "failedUpdateClaudeRoutingPreference": "Gagal untuk mengemas kini pilihan penghalaan Claude Code", + "failedUpdateCliproxyRouting": "Gagal untuk mengemas kini penghalaan CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Gagal mengemas kini dasar had Codex", + "failedUpdateCodexServiceMode": "Gagal mengemas kini mod perkhidmatan Codex", + "filterByMedia": "Media", + "freeBadge": "Percuma", + "kimiCodeApiKeyLabel": "Kunci API Kimi Code", + "modelTestFailed": "Ujian model gagal", + "modelTestNetworkError": "Ralat rangkaian menguji model", + "networkError": "Ralat rangkaian", + "networkErrorDeletingAlias": "Ralat rangkaian semasa memadam alias", + "networkErrorSettingAlias": "Ralat rangkaian menetapkan alias", + "noProvidersMatch": "Tiada penyedia yang sepadan dengan carian anda.", + "noSavedProxies": "Tiada proksi yang disimpan ditemui. Tambah proksi dalam Tetapan → Proksi terlebih dahulu.", + "pageLoadErrorDescription": "Kami tidak dapat memuatkan data penyedia buat masa ini. Semak sambungan anda dan cuba lagi.", + "pageLoadErrorId": "Ralat ID: {id}", + "pageLoadErrorRetry": "Cuba Lagi", + "pageLoadErrorTitle": "Gagal memuat penyedia", + "playgroundTitle": "Taman Permainan", + "providerDetailConnectionFlexActive": "Tingkat perkhidmatan Codex flex aktif untuk sambungan ini", + "providerDetailConnectionPriorityActive": "Tingkat perkhidmatan keutamaan Codex aktif untuk sambungan ini", + "providerDetailGlobalFlexActive": "Tingkat perkhidmatan Global Codex flex sedang aktif", + "providerDetailGlobalPriorityActive": "Tahap perkhidmatan keutamaan Global Codex sedang aktif", + "proxiesDistributed": "Pengagihan {assigned} tugasan proksi merentasi {tagLabel}{total} sambungan.", + "rerankEndpoint": "Susun Semula", + "savedModelEndpointSettings": "Tetapan titik akhir model yang disimpan", + "searchByModelAria": "Cari mengikut model", + "selectSupportedEndpoint": "Pilih sekurang-kurangnya satu titik akhir yang disokong", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "tetapan", @@ -6460,7 +6719,24 @@ "loadFailed": "Gagal memuatkan senarai langganan", "toggleFailed": "Gagal menukar suis", "refreshFailed": "Gagal memuat semula", - "deleteFailed": "Gagal memadam" + "deleteFailed": "Gagal memadam", + "add": "Tambah", + "cancel": "Batal", + "configure": "Konfigurasikan", + "copyEndpoint": "Salin Endpoint", + "coreEndpointHint": "Petunjuk Titik Akhir Teras", + "coreNodesHint": "Petunjuk Nod Teras", + "create": "Cipta", + "deleteConfirm": "Sahkan Padam", + "empty": "Kosong", + "globalModeDescription": "Deskripsi Mod Global", + "localCoreHint": "Petunjuk Inti Tempatan", + "nodeSummary": "Ringkasan Nod", + "providerRequired": "Penyedia Diperlukan", + "providerRouting": "Penghalaan Penyedia", + "refresh": "Segar Semula", + "refreshInterval": "Selang Penyegaran", + "ruleModeDescription": "Deskripsi Mod Peraturan" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Jalankan sandaran penglihatan-ke-teks automatik sebelum menghalakan permintaan imej ke model teks sahaja.", "visionBridgeEnabledLabel": "Didayakan", "visionBridgeEnabledDesc": "Togol jambatan pra-panggilan yang menggantikan bahagian imej dengan teks yang diekstrak.", + "visionBridgeRerouteTextOnlyLabel": "Alihkan model teks sahaja", + "visionBridgeRerouteTextOnlyDesc": "Hantar permintaan lengkap, termasuk imej, kepada model jambatan apabila model yang dipilih tiada input imej.", "visionBridgeModel": "Model Jambatan", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Mana-mana ID model OmniRoute yang menyokong penglihatan boleh digunakan di sini.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Kunci API tidak mempunyai skop manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Satu atau lebih awalan menyasarkan laluan berkeupayaan spawn dan tidak boleh dipintas.", "GENERIC": "Gagal mengemas kini tetapan authz." - } + }, + "remove": "Buang" }, "resilienceBaseCooldownLabel": "Cooldown asas", "scopeLabel": "Skop", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Menguji audio…", "modalityBridgeAudioTestOk": "Jambatan Audio OK — {count} klip telah ditranskripsikan oleh {model}", "modalityBridgeAudioTestNoop": "Audio Bridge tidak diaktifkan (sasaran mungkin menyokong audio, tiada penyedia STT yang disambungkan, atau jambatan dinyahdayakan)", - "modalityBridgeAudioTestError": "Ujian audio gagal: {message}" + "modalityBridgeAudioTestError": "Ujian audio gagal: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus models ke frontier combo", + "cliproxyapiFallbackCodes": "Kod Sandaran Cliproxyapi", + "cliproxyapiFallbackDescription": "Deskripsi Fallback Cliproxyapi", + "cliproxyapiHealthLabel": "Label Kesihatan Cliproxyapi", + "cliproxyapiImportFailed": "Kegagalan Import Cliproxyapi", + "cliproxyapiImportResult": "Keputusan Import Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Tidak Sah", + "cliproxyapiLifecycleNoticeAfter": "Notis Kitar Hidup Cliproxyapi Selepas", + "cliproxyapiLifecycleNoticeBefore": "Notis Kitar Hayat Cliproxyapi Sebelum", + "cliproxyapiLifecycleNoticeLink": "Pautan Notis Kitaran Hidup Cliproxyapi", + "cliproxyapiPortLabel": "Label Port Cliproxyapi", + "cliproxyapiStatusLabel": "Label Status Cliproxyapi", + "cliproxyapiVersionLabel": "Label Versi Cliproxyapi", + "collection": "Koleksi", + "errorPage": { + "description": "Kami tidak dapat memuatkan tetapan buat masa ini. Sila cuba semula dalam beberapa saat.", + "errorId": "Ralat ID: {id}", + "retry": "Cuba Lagi", + "title": "Gagal memuat tetapan" + }, + "host": "Hos", + "notInstalled": "Tidak dipasang", + "oneproxyActions": "Tindakan Oneproxy", + "oneproxyActive": "Oneproxy Aktif", + "oneproxyAnonymity": "Anonymiti Oneproxy", + "oneproxyCountry": "Satuproxy Negara", + "oneproxyDelete": "Oneproxy Padam", + "oneproxyEmpty": "Oneproxy Kosong", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Kelewatan Oneproxy", + "oneproxyProtocol": "Protokol Oneproxy", + "oneproxyQuality": "Kualiti Oneproxy", + "oneproxySyncFailed": "Penyelarasan gagal: {error}", + "oneproxySyncSuccess": "Diselaraskan {total} proksi ({added} baru, {updated} dikemas kini)", + "proxyDocumentationSocks5DescAfter": "Dokumentasi Proksi Socks5 Desc Selepas", + "proxyFreePoolAddProxy": "Tambah Proksi Kolam Tanpa Proksi", + "proxyFreePoolAdding": "Menambah Kolam Tanpa Proksi", + "proxyFreePoolSelectProxy": "Pilih Proksi Kolam Tanpa Proksi", + "proxyStatusActive": "Status Proksi Aktif", + "proxyStatusInactive": "Status Proksi Tidak Aktif", + "routingAddEntry": "Tambah entri", + "settingSaveFailed": "Penyimpanan Tetapan Gagal", + "settingSaved": "Tetapan Disimpan", + "skillsmpApiKeyHintAfter": ". Had kadar: {limit} permintaan/hari.", + "skillsmpApiKeyHintBefore": "Dapatkan kunci API anda dari", + "syncFailed": "Penyegerakan gagal", + "unhealthy": "Tidak Sihat", + "oneproxyDescription": "Ambil dan putar proksi yang disahkan percuma dari platform komuniti 1proxy", + "oneproxySyncing": "Menyegerakkan...", + "oneproxySyncNow": "Segerakkan Sekarang", + "oneproxyClearAll": "Kosongkan Semua", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Padam semua proksi 1proxy?", + "memorySkillsSkillsmpDescription": "Sambung ke SkillsMP untuk meneroka dan memasang kemahiran dari pasaran.", + "memorySkillsActiveProviderDescription": "Pilih penyedia mana yang digunakan oleh halaman Kemahiran untuk carian dan pemasangan.", + "memorySkillsSkillsmpProviderTitle": "Pasaran SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Pasaran yang disahkan (menggunakan kunci API SkillsMP anda).", + "memorySkillsSkillsshProviderTitle": "Direktori skills.sh", + "memorySkillsSkillsshProviderDescription": "Penyedia direktori awam (tiada kunci API diperlukan).", + "routingCcBridgeCatalogName": "Jambatan CC yang serasi dengan Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Penyedia Claude asli dengan token yang dikeluarkan oleh OAuth.", + "routingCcBridgeName": "Jambatan Claude-Code", + "routingCcBridgeDescription": "Titik akhir relay menggunakan kunci API (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Penyedia tersuai.", + "routingUnknownOpKind": "Jenis op tidak dikenali: {kind}", + "routingInvalidJson": "JSON Tidak Sah: {error}", + "routingConfigMustBeObject": "Konfigurasi mesti merupakan objek JSON", + "routingEnabledMustBeBoolean": "`enabled` mesti benar atau salah", + "routingPipelineMustBeArray": "`pipeline` mesti merupakan satu array ops", + "routingPipelineTooLong": "Pipeline tidak boleh melebihi 50 ops", + "routingOpMissingKind": "Op #{index}: `kind` hilang atau tidak sah", + "routingOpUnknownKind": "Op #{index}: jenis tidak diketahui \"{kind}\"", + "routingJsonEditorHide": "Sembunyikan penyunting JSON", + "routingJsonEditorImportExport": "Import / export JSON", + "routingJsonEditorLabel": "JSON (edit dan terapkan, atau tampal untuk mengimport)", + "routingApplyJson": "Terapkan JSON", + "routingTransformsFootnote": "Semua operasi transform adalah idempotent pada pengulangan. Perubahan berkuat kuasa serta-merta pada permintaan seterusnya.", + "cliproxyapiUnknown": "Tidak Dikenali", + "cliproxyapiVersion": "Versi", + "cliproxyapiHealth": "Kesihatan", + "cliproxyapiPort": "Pelabuhan", + "qdrantHost": "Hos", + "qdrantCollection": "Koleksi" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Penuh", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Paparansedia", + "off": "Matikan", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Agresif", + "ultra": "Ultra", + "responsesToolOutput": "Keluaran alat respons" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Berjalan terakhir dalam tindanan (selepas RTK/Caveman membersihkan teks, OmniGlyph menukar baki kepada imej) dan juga berjalan secara bersendirian melalui mod omniglyph. Ini ialah pratonton dan kekal dimatikan secara lalai sehingga pengesahan hujung-ke-hujung selesai.", "saved": "Disimpan.", "saveFailed": "Tidak dapat menyimpan.", - "enableAria": "Dayakan enjin OmniGlyph" + "enableAria": "Dayakan enjin OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Perkhidmatan Terbenam", @@ -9127,7 +9500,49 @@ "unableToLoad": "Tidak dapat memuatkan metrik sistem", "product": "produk", "resources": "Sumber", - "company": "Syarikat" + "company": "Syarikat", + "tokenHealthTooltips": { + "allHealthy": "Semua token sihat", + "needsAttention": "Beberapa token memerlukan perhatian", + "refreshFailures": "Kegagalan penyegaran token dikesan", + "unknown": "Status kesihatan tidak diketahui" + }, + "systemMonitor": { + "metricsAriaLabel": "Metrik sistem", + "memory": "Memori", + "memoryShort": "mem", + "uptime": "Waktu Aktif", + "ariaLabel": "Pemantauan sistem", + "title": "Pemantau Sistem", + "version": "Versi", + "connections": "Sambungan", + "circuitBreakers": "Pemutus Litar", + "open": "{count} terbuka", + "memoryUsage": "Penggunaan memori" + }, + "never": "Tidak pernah", + "justNow": "Baru sahaja", + "minutesAgo": "{count}m yang lalu", + "hoursAgo": "{count}j yang lalu", + "tokens": "Token", + "costs": "Kos", + "autoRefresh": "Penyegaran Automatik ({seconds}s)", + "toggleAutoRefresh": "Togol penyegaran automatik", + "activeRequests": "Permintaan Aktif", + "totalRequests": "Jumlah Permintaan", + "totalInputTokens": "Jumlah Token Input", + "model": "Model", + "provider": "Penyedia", + "requests": "Permintaan", + "lastUsed": "Terakhir Digunakan", + "inputTokens": "Token Input", + "totalTokens": "Jumlah Token", + "inputCost": "Kos Input", + "outputCost": "Kos Pengeluaran", + "noUsageData": "Tiada penggunaan yang direkodkan lagi. Buat beberapa permintaan untuk melihat data di sini.", + "account": "Akaun", + "accountLabel": "Akaun {id}", + "noAccountUsage": "Tiada penggunaan khusus akaun yang direkodkan lagi. Buat permintaan menggunakan akaun OAuth untuk melihat data di sini." }, "auth": { "welcome": "Selamat datang", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Tetapkan Semula melalui Data Aplikasi", + "resetViaAppDataDescription": "Padam fail tetapan dari direktori data aplikasi untuk menetapkan semula kata laluan anda:", + "quitDesktopApp": "Tutup aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppDataDirectory": "Navigasi ke direktori data aplikasi:", + "checkSystemAppDataFolder": "(Semak folder data aplikasi sistem anda)", + "relaunchDesktopFreshSetup": "Lancar semula aplikasi desktop OmniRoute — ia akan memulakan penyediaan baru", + "alternativeSetPasswordTitle": "Alternatif: Tetapkan Kata Laluan Baru", + "alternativeSetPasswordDescription": "Tetapkan kata laluan awal yang baru melalui fail persekitaran pelayan:", + "openServerEnvFilePrefix": "Buka", + "relaunchDesktopApp": "Lancar semula aplikasi desktop OmniRoute", + "codexLinkInvalidOrExpired": "Pautan ini tidak sah atau telah tamat tempoh.", + "codexValidationServerError": "Tidak dapat menghubungi pelayan untuk mengesahkan pautan ini.", + "codexSaveConnectionError": "Tidak dapat menyimpan sambungan. Pautan mungkin telah tamat tempoh.", + "codexDeviceLoginDisabled": "Log masuk kod peranti tidak diaktifkan untuk akaun OpenAI ini. Aktifkan dalam tetapan keselamatan ChatGPT (atau minta admin ruang kerja anda).", + "codexAuthorizationTimedOut": "Kebenaran telah tamat. Klik Mula semula untuk mencuba lagi.", + "authenticationCancelled": "Pengesahan telah dibatalkan.", + "unexpectedAuthenticationError": "Ralat tidak dijangka semasa pengesahan. Sila cuba lagi.", + "connectOpenAiCodexTitle": "Sambungkan OpenAI Codex", + "codexConnectDescription": "Luluskan akaun ChatGPT untuk menyelesaikan penyediaan sambungan ini.", + "validatingCodexLink": "Mengesahkan pautan…", + "codexGenerateCodeDescription": "Klik di bawah untuk menghasilkan kod sekali pakai, kemudian log masuk ke OpenAI.", + "startCodexFlow": "Mula", + "requestingOpenAiCode": "Meminta kod dari OpenAI…", + "codexVerificationInstructions": "1. Buka halaman pengesahan OpenAI dan 2. masukkan kod ini. Halaman ini akan dikemas kini secara automatik setelah anda memberi kebenaran.", + "yourCode": "Kod anda", + "openVerificationPage": "Buka halaman pengesahan", + "copyUrlShort": "Salin URL", + "savingConnection": "Menyimpan sambungan…", + "codexConnected": "Sambung!", + "codexConnectionRegistered": "Akaun Codex telah didaftarkan. Anda boleh menutup tab ini.", + "tryAgain": "Cuba lagi", + "traeAuthorizationSuccess": "Kebenaran Trae ✓", + "traeAuthorizationFailed": "Kegagalan pengesahan Trae", + "closeAuthorizationWindow": "Anda boleh menutup tetingkap ini.", + "returnToDashboard": "Kembali ke papan pemuka.", + "resetViaAppData": "Tetapkan Semula melalui Data Aplikasi", + "deleteSettingsToReset": "Padam fail tetapan dari direktori data aplikasi untuk menetapkan semula kata laluan anda:", + "quitAppCompletely": "Tutup aplikasi desktop OmniRoute sepenuhnya", + "navigateToAppData": "Navigasi ke direktori data aplikasi", + "checkAppDataFolder": "Semak folder data aplikasi sistem anda", + "deleteSettingsJson": "Padam", + "relaunchAppFresh": "Lancarkan semula aplikasi desktop OmniRoute — ia akan memulakan penyediaan baru", + "alternativeSetPassword": "Alternatif: Tetapkan Kata Laluan Baru", + "setNewPasswordViaEnv": "Tetapkan kata laluan awal yang baru melalui fail persekitaran pelayan:", + "openServerEnv": "Buka", + "inDataDirectory": "di direktori data", + "addOrUpdate": "Tambah atau kemas kini", + "deleteAndRelaunch": "Padam", + "settingsJson": "settings.json", + "fromDataDir": "dari direktori data", + "relaunchApp": "Lancar semula aplikasi desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Bersedia untuk Memudahkan Infrastruktur AI Anda?", "ctaDescription": "Sertai pembangun yang memperkemas penyepaduan AI mereka dengan OmniRoute. Sumber terbuka dan percuma untuk bermula.", "startFree": "Mula Percuma", - "readDocumentation": "Baca Dokumentasi" + "readDocumentation": "Baca Dokumentasi", + "company": "Syarikat", + "pricing": "Harga", + "apiReference": "Rujukan API", + "helpCenter": "Pusat Bantuan", + "about": "Tentang", + "blog": "Blog", + "contact": "Hubungi", + "terms": "Terma", + "privacy": "Privasi", + "license": "Lesen", + "footerDescription": "Antaramuka bersatu untuk infrastruktur AI moden. Selamat, boleh diperhatikan, dan boleh skala.", + "communityDiscussions": "Perbincangan Komuniti" }, "docs": { "title": "Dokumentasi", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Daftar dan urus ejen melalui pendaftaran ACP untuk komunikasi antara ejen dan perkongsian alat.", "protocolAcpStep1": "Navigasi ke Papan Pemuka → Ejen untuk melihat ejen ACP berdaftar.", "protocolAcpStep2": "Daftar ejen baharu dengan keupayaan dan konfigurasi titik akhir.", - "protocolAcpStep3": "Gunakan Alat CLI untuk mengkonfigurasi saluran komunikasi ejen." + "protocolAcpStep3": "Gunakan Alat CLI untuk mengkonfigurasi saluran komunikasi ejen.", + "metadataTitleTemplate": "%s — Dokumen OmniRoute", + "metadataDefaultTitle": "Dokumentasi OmniRoute", + "metadataDescription": "Dokumentasi menyeluruh untuk gerbang OmniRoute AI — penyediaan, API, pemampatan, penyebaran, dan banyak lagi.", + "layoutNavTitle": "Dokumen OmniRoute", + "layoutHomeLink": "Halaman Utama Dokumen", + "layoutDashboardLink": "← Kembali ke Papan Pemuka", + "homeTitle": "Dokumentasi OmniRoute", + "homeMetadataDescription": "Segala yang anda perlukan untuk meroute, memampatkan, dan mengembangkan AI anda — panduan pemasangan, rujukan API, pemampatan, penyebaran, dan banyak lagi.", + "homeTwitterDescription": "Dokumen komprehensif untuk gerbang OmniRoute AI", + "homeDescription": "Segala yang anda perlukan untuk mengarahkan, memampatkan, dan mengembangkan AI anda", + "homeSearchHint": "Tekan Ctrl K untuk mencari dokumen", + "featuredQuickStartTitle": "Permulaan Pantas", + "featuredQuickStartDescription": "Dapatkan OmniRoute berfungsi dalam 3 minit", + "featuredAutoComboTitle": "Panduan Auto-Combo", + "featuredAutoComboDescription": "Biarkan OmniRoute memilih AI terbaik untuk anda", + "featuredProvidersTitle": "Panduan Penyedia", + "featuredProvidersDescription": "Sambungkan penyedia AI dalam beberapa minit", + "nonTechUsersTitle": "Untuk Pengguna Bukan Teknikal", + "nonTechUsersSubtitle": "Mulakan dengan cepat — tiada latar belakang teknikal diperlukan", + "techUsersTitle": "Untuk Pengguna Teknologi", + "techUsersSubtitle": "Mendalami seni bina, API, dan dalaman", + "apiExplorerMetadataTitle": "Peneroka API — Dokumen OmniRoute", + "apiExplorerMetadataDescription": "Penerokaan API Interaktif — cuba titik akhir OmniRoute secara langsung dengan respons masa nyata", + "apiExplorerTitle": "Peneroka API", + "apiExplorerDescription": "Cuba ujian titik akhir OmniRoute secara langsung. Pilih titik akhir, konfigurasikan permintaan anda, dan lihat responsnya secara masa nyata.", + "apiExplorerSseStarted": "Aliran SSE bermula — semak terminal/devtools untuk output masa nyata.", + "apiExplorerError": "Ralat: {message}", + "apiExplorerAuth": "auth", + "apiExplorerResponseLabel": "Tindak Balas", + "apiExplorerSelectEndpoint": "Pilih titik akhir untuk diterokai", + "apiExplorerChooseApi": "Pilih API dari bar sisi untuk melihat butiran dan mencubanya secara langsung", + "feedbackThanks": "Terima kasih atas maklum balas anda!", + "feedbackQuestion": "Adakah halaman ini berguna?", + "pageMetadataTitle": "{title} — Dokumen OmniRoute", + "pageMetadataDescription": "Dokumentasi OmniRoute: {title}", + "breadcrumb": "Jejak Navigasi", + "apiReferenceTable": { + "parameters": "Parameter", + "name": "Nama", + "type": "Jenis", + "description": "Penerangan", + "returns": "Pulangan", + "typePrefix": "Jenis:" + } }, "legal": { "privacyPolicy": "Dasar Privasi", @@ -9957,7 +10479,42 @@ "successMessage": "Akaun {providerName} anda telah disambungkan.", "done": "Selesai", "error": "Sambungan gagal", - "tryAgain": "Cuba lagi" + "tryAgain": "Cuba lagi", + "errorSessionIncomplete": "Sesi OAuth tidak lengkap (URI pengalihan atau pengesah kod hilang). Mulakan semula sambungan dan cuba lagi.", + "errorExchangeFailed": "Pertukaran gagal", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Kredensial Google OAuth lalai hanya berfungsi di localhost. Untuk penggunaan jarak jauh, konfigurasi kredensial OAuth anda sendiri melalui pembolehubah persekitaran: ANTIGRAVITY_OAUTH_CLIENT_ID dan ANTIGRAVITY_OAUTH_CLIENT_SECRET. Lihat bahagian README 'OAuth di Pelayan Jarak Jauh'.", + "errorSaveFailed": "Simpan gagal", + "errorAuthorizationFailed": "Kebenaran gagal", + "errorAuthorizationTimeout": "Masa Tamat Kebenaran", + "errorRequestFailed": "Permintaan gagal", + "errorCallbackServerFailed": "Gagal untuk memulakan pelayan callback", + "errorBrowserUnavailable": "OAuth Pelayar tidak tersedia untuk penyedia ini dalam persekitaran semasa. Gunakan kaedah pengesahan yang disokong sebagai ganti.", + "errorStateMismatch": "Ketidakpadanan keadaan OAuth. Mulakan semula sambungan dan cuba lagi.", + "errorImportAccessToken": "Gagal untuk mengimport token akses", + "errorSessionNotInitialized": "Sesi OAuth tidak diinisialisasi. Mulakan aliran sambungan dan cuba lagi.", + "errorNoAuthorizationCode": "Tiada kod pengesahan ditemui. Tampal URL pemanggil atau Kod Pengesahan.", + "tabDeviceCode": "Kod Peranti", + "tabBrowserLogin": "Log Masuk Pelayar", + "tabImportAuthJson": "Import auth.json", + "tabPasteApiKey": "Tampal Kunci API", + "windsurfPasteDescription": "Dalam Windsurf / VS Code IDE, jalankan arahan \"Windsurf: Provide Auth Token\" dari palet arahan (atau klik butang Jupyter \"Get Windsurf Authentication Token\"), kemudian salin token yang ditunjukkan dan tampal di bawah. Membuka windsurf.com/show-auth-token secara langsung hanya menunjukkan halaman \"Redirecting\" — IDE mesti memulakan aliran.", + "grokAuthJsonDescription": "Tampal keseluruhan kandungan ~/.grok/auth.json (bukan hanya medan \"key\" JWT). JWT yang kosong tiada refresh_token, jadi sambungan terputus selepas tamat tempoh (#7610). Utamakan modal Import auth.json yang khusus apabila tersedia.", + "devinDesktopPasteDescription": "Tampal kunci API Devin yang sedia ada dari sesi Devin yang telah disahkan. Ketersediaan eksport kunci dan langkah-langkah berbeza mengikut versi Devin dan akaun.", + "devinPasteDescription": "Sila berikan WINDSURF_API_KEY anda (diperoleh melalui `devin auth login`, atau melalui perintah IDE Windsurf \"Windsurf: Provide Auth Token\").", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Kunci API / Token", + "saving": "Menyimpan…", + "saveConnection": "Simpan Sambungan", + "gheDescription": "Masukkan URL asas bagi instance GitHub Enterprise anda (contoh: https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "URL GitHub Enterprise diperlukan", + "gitlabDuoSetupTitle": "Persediaan OAuth Duo GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth tidak dikonfigurasikan. Daftarkan aplikasi OAuth di {applicationsUrl} dengan URI pengalihan {redirectUri} dan skop \"{scopes}\", kemudian tetapkan {clientIdEnv} (dan secara pilihan {clientSecretEnv}) dan mulakan semula.", + "gitlabDuoSetupDescription": "Setelah aplikasi didaftarkan dan pembolehubah env ditetapkan pada instance OmniRoute ini, klik Teruskan untuk memulakan log masuk OAuth.", + "continue": "Teruskan" }, "cursorAuthModal": { "title": "Sambungkan IDE Kursor", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Muat Lebih Banyak", - "loadingMore": "Memuatkan lebih banyak..." + "loadingMore": "Memuatkan lebih banyak...", + "correlationId": "ID Korelasi", + "group": { + "showAllRows": "Tunjukkan semua baris", + "showLatestPerCorrelation": "Tunjukkan terkini mengikut ID korelasi", + "grouped": "Dikumpulkan" + }, + "running": "berjalan", + "interval": { + "decrease": "Kurangkan selang", + "title": "Selang penyegaran automatik dalam saat", + "increase": "Tingkatkan selang" + }, + "status": { + "inProgress": "Dalam proses", + "recoveredByRetry": "Dipulihkan dengan mencuba semula", + "goToParent": "Pergi ke permintaan induk", + "healedTitle": "Gagal, pulih selepas {count} percubaan", + "healed": "sembuh", + "failedTitle": "Semua {count} percubaan gagal", + "failed": "gagal", + "pinnedTitle": "Model dipilih melalui penetapan sesi cache konteks", + "pinned": "disematkan" + }, + "attempts": "cuba", + "detail": { + "collapse": "Runtuhkan {title}", + "expand": "Kembangkan {title}", + "copyTitle": "Salin {title}", + "copied": "Disalin!", + "copy": "Salin", + "autoscrollOn": "Autoscroll: hidup", + "autoscrollOff": "Autoscroll: mati", + "payload": { + "clientRawRequest": "Permintaan Mentah Klien", + "clientRequest": "Permintaan Klien", + "openaiRequest": "Permintaan OpenAI", + "providerRequest": "Permintaan Penyedia", + "providerResponse": "Respons Penyedia", + "clientResponse": "Tanggapan Klien", + "pipelineError": "Ralat Saluran" + }, + "payloadMissing": "Artifak payload terperinci tidak lagi tersedia untuk entri log ini.", + "payloadCorrupt": "Artifak payload terperinci tidak dapat dianalisis.", + "notAvailable": "N/A", + "semanticCache": "Semantik (OmniRoute)", + "upstreamCache": "Huluan (Penyedia)", + "ariaLabel": "Butiran log permintaan", + "completed": "Selesai", + "upstreamStatus": "Hulu: {status}", + "statusDiscrepancy": "OmniRoute mengembalikan {status} walaupun penyedia mengembalikan {provider}", + "previousRequest": "Permintaan sebelumnya", + "nextRequest": "Permintaan seterusnya", + "close": "Tutup modal butiran", + "startedAt": "Dimulakan Pada", + "endedAt": "Tamat Pada", + "duration": "Tempoh", + "model": "Model", + "provider": "Penyedia", + "account": "Akaun", + "input": "Input", + "totalIn": "Jumlah Masuk: {value}", + "cacheRead": "Cache Baca: {value}", + "cacheWrite": "Cache Tulis: {value}", + "compressed": "Dikompress: {from} → {to} ({percent}% disimpan)", + "output": "Keluaran", + "totalOut": "Jumlah Keluar: {value}", + "reasoning": "Alasan: {value}", + "requestedModel": "Model Yang Diminta", + "requestProtocol": "Protokol Req", + "cacheSource": "Sumber Cache", + "modelPinning": "Penetapan Model", + "activeModelPinning": "Aktif — model dipilih melalui penetapan sesi", + "rotated": "Diputar: {initial} -> {final}", + "apiKey": "Kunci API", + "noApiKey": "Tiada kunci API", + "combo": "Gabungan", + "error": "Ralat", + "unblockAll": "Nyah sekat semua", + "cleared": "Dibersihkan", + "unblock": "Buka Sekatan", + "relatedRequests": "Permintaan Berkaitan ({count})", + "current": "semasa", + "detailStatus": "Status Butiran", + "loadingDetails": "Memuatkan butiran permintaan...", + "providerEventStream": "Aliran Acara Penyedia", + "clientEventStream": "Aliran Acara Klien", + "eventStream": "Aliran Acara", + "responsePayloadLegacy": "Payload Respons (Legacy)", + "requestPayloadLegacy": "Beban Permintaan (Legacy)", + "noPayload": "Tiada data payload tersedia untuk entri log ini.", + "correlationId": "ID Korelasi", + "correlationIdValue": "ID Korelasi: {id}", + "detailedPayloadInfo": "Aktifkan log terperinci terlebih dahulu jika anda ingin pandangan muatan klien/pemberi perkhidmatan empat peringkat untuk permintaan baru." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} dinyahdayakan", "providerAdded": "{provider} ditambahkan", "add": "Tambah", - "manualApiKey": "Gunakan kunci API manual" + "manualApiKey": "Gunakan kunci API manual", + "createDahlTokenFailed": "Gagal untuk mencipta token Dahl", + "providerProxy": "Proksi", + "providerProxyConfigureHint": "Konfigurasikan proksi", + "providerProxyTitleConfigured": "Proksi dikonfigurasikan: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Dihadkan oleh ToS — semak syarat", "caution": "Amaran — klausa kegunaan peribadi / proksi", "ok": "Secara amnya membenarkan" - } + }, + "allProviders": "Semua penyedia", + "noApiKeyRequired": "Tiada kunci API diperlukan" }, "providerHealthAutopilot": { "title": "Autopilot Kesihatan Penyedia", @@ -12390,7 +13047,11 @@ "on": "HIDUP", "off": "MATI", "availableProviders": "Penyedia yang tersedia ({count})", - "noProviderOverrides": "Tiada penggantian — semua penyedia aktif akan mengambil bahagian dengan model lalai mereka" + "noProviderOverrides": "Tiada penggantian — semua penyedia aktif akan mengambil bahagian dengan model lalai mereka", + "resetFailed": "Tetapan semula gagal", + "resetSuccess": "Tetapan dikembalikan kepada lalai", + "running": "Sedang berjalan...", + "testFailed": "Ujian gagal" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) ialah Rakan Sumber Terbuka pengasas OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Penyedia tidak menyokong penglihatan untuk permintaan imej ini", "capabilityFilter.toolsMismatch": "Penyedia tidak menyokong panggilan alat", "capabilityFilter.structuredOutputMismatch": "Penyedia tidak menyokong output berstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi tetingkap konteks penyedia" + "capabilityFilter.contextWindowMismatch": "Permintaan melebihi tetingkap konteks penyedia", + "publicSystem": { + "notFound": { + "title": "Halaman tidak ditemui", + "description": "Halaman yang anda cari tidak wujud atau telah dipindahkan.", + "dashboardAriaLabel": "Kembali ke papan pemuka", + "statusAriaLabel": "Buka halaman status sistem", + "systemStatus": "Status Sistem" + }, + "error": { + "title": "Ralat Pelayan Dalaman", + "description": "Sesuatu telah berlaku semasa memproses permintaan anda. Pasukan kami telah diberitahu dan sedang berusaha untuk membetulkannya.", + "errorId": "Ralat ID: {id}", + "detailsAriaLabel": "Butiran ralat", + "retryAriaLabel": "Cuba muat semula halaman tersebut", + "tryAgain": "Cuba Lagi", + "dashboardAriaLabel": "Kembali ke papan pemuka", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "globalError": { + "title": "Sesuatu telah berlaku kesilapan", + "description": "Ralat yang tidak dijangka telah berlaku. Ini telah direkodkan dan pasukan kami akan menyiasat.", + "detailsAriaLabel": "Butiran ralat", + "retryAriaLabel": "Cuba muat semula halaman tersebut", + "tryAgain": "Cuba Lagi", + "statusAriaLabel": "Buka status sistem", + "systemStatus": "Status Sistem" + }, + "offline": { + "title": "Masalah Konektiviti", + "description": "OmniRoute tidak dapat mengakses rangkaian sekarang. Semak internet, VPN, atau tetapan proksi anda.", + "connectionRestored": "Sambungan dipulihkan", + "offlineModeDetected": "Mod Dalam Talian Dikesan", + "retryConnection": "Cuba Semula Sambungan", + "openStatusPage": "Buka Halaman Status" + }, + "maintenance": { + "title": "Penyelenggaraan Jadual", + "description": "Beberapa perkhidmatan tidak tersedia buat sementara waktu semasa penyelenggaraan sedang dijalankan. Penghalaan teras biasanya kekal dalam talian, tetapi ciri pengurusan mungkin terjejas.", + "suggestion1": "Cuba lagi selepas beberapa minit.", + "suggestion2": "Semak penunjuk kesihatan semasa dan status penyedia sebelum mencuba semula.", + "systemStatus": "Lihat Status Sistem", + "healthDashboard": "Buka Papan Pemuka Kesihatan" + }, + "status": { + "title": "Status Sistem", + "description": "Snapshot operasi langsung untuk perkhidmatan teras OmniRoute.", + "loadingHealth": "Memuatkan metrik kesihatan...", + "failedToLoad": "Gagal memuat kesihatan sistem.", + "unableToReachHealth": "Tidak dapat mengakses titik akhir kesihatan. Semak sambungan dan cuba lagi.", + "healthCheckFailed": "Pemeriksaan Kesihatan Gagal", + "openConnectivityHelp": "Bantuan Konektiviti Terbuka", + "maintenanceInfo": "Info Penyelenggaraan", + "service": "Perkhidmatan", + "unknown": "tidak diketahui", + "notAvailable": "n/a", + "providersTracked": "Penyedia Dipantau", + "circuitBreakerState": "Keadaan Pemutus Litar Penyedia", + "lastUpdate": "Kemaskini terakhir: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}j {minutes}m" + }, + "statusPages": { + "400": { + "title": "Permintaan Tidak Sah", + "description": "Muatan permintaan tidak sah atau tidak lengkap.", + "suggestion1": "Semak medan yang diperlukan dan format payload sebelum mencuba semula.", + "suggestion2": "Jika anda menggunakan API, sahkan skema JSON secara tempatan.", + "suggestion3": "Jika ini terus berlaku, buka permintaan di Translator Playground untuk memeriksa payload.", + "primaryAction": "Buka Dokumentasi", + "secondaryAction": "Buka Penterjemah" + }, + "401": { + "title": "Tidak Dibenarkan", + "description": "Pengesahan diperlukan untuk mengakses sumber ini.", + "suggestion1": "Log masuk semula dan cuba operasi tersebut.", + "suggestion2": "Untuk panggilan API, sahkan token Bearer ada dan sah.", + "suggestion3": "Jika token baru-baru ini diputar, kemas kini kelayakan klien anda.", + "primaryAction": "Pergi ke Log Masuk", + "secondaryAction": "Urus Kunci API" + }, + "403": { + "title": "Dilarang", + "description": "Permintaan anda telah difahami, tetapi akses ditolak oleh polisi.", + "suggestion1": "Semak peraturan senarai benaran/senarai sekatan IP dalam tetapan.", + "suggestion2": "Sahkan model dan dasar bajet yang ditetapkan kepada kunci API anda.", + "suggestion3": "Minta seorang pentadbir untuk memberikan skop kebenaran yang diperlukan.", + "primaryAction": "Bantuan Akses Terbuka", + "secondaryAction": "Buka Tetapan Keselamatan" + }, + "408": { + "title": "Masa Permintaan Tamat", + "description": "Pelayan tidak menerima permintaan yang lengkap dalam masa yang ditetapkan.", + "suggestion1": "Cuba semula permintaan dengan muatan yang lebih kecil.", + "suggestion2": "Periksa kestabilan rangkaian anda dan latensi VPN/proksi.", + "suggestion3": "Untuk operasi yang panjang, aktifkan penstriman atau bahagikan permintaan.", + "primaryAction": "Buka Panduan Endpoint", + "secondaryAction": "Semak Status Rangkaian" + }, + "429": { + "title": "Terlalu Banyak Permintaan", + "description": "Had batasan kadar melebihi untuk klien, kunci, atau penyedia ini.", + "suggestion1": "Tunggu untuk cooldown dan cuba semula selepas selang yang dicadangkan.", + "suggestion2": "Tukar kepada combo dengan penyedia sandaran.", + "suggestion3": "Tweak profil ketahanan/penghad kadar penyedia dalam tetapan.", + "primaryAction": "Buka Tetapan Ketahanan", + "secondaryAction": "Buka Kombinasi" + }, + "500": { + "title": "Ralat Pelayan Dalaman", + "description": "Ralat tidak dijangka di pihak pelayan berlaku semasa memproses permintaan anda.", + "suggestion1": "Cuba semula dalam beberapa saat.", + "suggestion2": "Semak telemetri kesihatan dan log pelayan untuk ID permintaan yang berkaitan.", + "suggestion3": "Jika berterusan, laporkan isu dengan cap waktu dan konteks permintaan.", + "primaryAction": "Buka Papan Pemuka Kesihatan", + "secondaryAction": "Buka Log" + }, + "502": { + "title": "Gerbang Buruk", + "description": "Penyedia hulu atau integrasi gerbang mengembalikan respons yang tidak sah.", + "suggestion1": "Cuba semula dengan penyedia lain atau laluan combo aktif.", + "suggestion2": "Semak kelayakan penyedia dan ketersediaan model.", + "suggestion3": "Periksa output penterjemah jika pengubahsuaian format terlibat.", + "primaryAction": "Buka Penyedia", + "secondaryAction": "Buka Penterjemah" + }, + "503": { + "title": "Perkhidmatan Tidak Tersedia", + "description": "Perkhidmatan tidak tersedia buat sementara waktu kerana penyelenggaraan atau kebergantungan yang terjejas.", + "suggestion1": "Tunggu sebentar dan cuba lagi.", + "suggestion2": "Semak notis penyelenggaraan dan status sistem.", + "suggestion3": "Gunakan penyedia sandaran jika aliran kerja anda sensitif terhadap latensi.", + "primaryAction": "Butiran Penyelenggaraan", + "secondaryAction": "Status Sistem" + } + } + }, + "kiroAuthModal": { + "title": "Sambung {providerLabel}", + "chooseMethod": "Pilih kaedah pengesahan anda:", + "builderId": "ID Pembina AWS", + "builderDescription": "Disyorkan untuk kebanyakan pengguna. Log masuk dengan akaun AWS yang dikaitkan dengan {providerLabel}.", + "organization": "Organisasi Anda (AWS IAM Identity Center)", + "organizationDescription": "Gunakan URL permulaan SSO syarikat anda (contoh: {url}).", + "googleAccount": "Akaun Google", + "googleDescription": "Log masuk dengan akaun Google anda.", + "githubAccount": "Akaun GitHub", + "githubDescription": "Log masuk dengan akaun GitHub anda.", + "importToken": "Import Token", + "importDescription": "Tampal token penyegaran yang dieksport dari {providerLabel}.", + "apiKey": "Kunci API", + "apiKeyDescription": "Tampal kunci API {providerLabel} / CodeWhisperer yang tahan lama. Ia disimpan sebagai kelayakan pembawa tanpa token penyegaran; penemuan profil adalah usaha terbaik.", + "idcStartUrl": "URL Mula IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL Pusat Identiti AWS IAM Organisasi Anda", + "awsRegion": "Wilayah AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Wilayah AWS untuk Pusat Identiti anda (lalai: us-east-1)", + "continue": "Teruskan", + "back": "Kembali", + "autoDetecting": "Mengesan token secara automatik...", + "readingCredentials": "Membaca kelayakan {providerLabel} dari cache AWS SSO", + "tokenNotDetected": "Token {providerLabel} tidak dikesan secara automatik. Sila tampal token penyegaran anda secara manual.", + "refreshToken": "Token Segar", + "tokenPlaceholder": "Token akan diisi secara automatik...", + "importing": "Mengimport...", + "apiKeyPlaceholder": "Tampal kunci API {providerLabel} anda...", + "apiKeyStoredDescription": "Disimpan secara terenkripsi sebagai kelayakan pembawa yang tahan lama. Tiada aliran penyegaran.", + "apiKeyRegionDescription": "Wilayah AWS untuk kunci (lalai: us-east-1)", + "validating": "Mengesahkan...", + "validateAndSaveApiKey": "Sahkan dan Simpan Kunci API", + "errorAutoDetect": "Tidak dapat mengesan token secara automatik", + "errorAutoDetectFailed": "Gagal untuk mengesan token secara automatik", + "errorRefreshTokenRequired": "Sila masukkan token penyegaran", + "errorImportFailed": "Import gagal", + "errorApiKeyRequired": "Sila masukkan kunci API Kiro", + "errorApiKeyImportFailed": "Pengimportan kunci API gagal", + "errorIdcStartUrlRequired": "Sila masukkan URL permulaan IDC anda" + }, + "kiroSocialOAuthModal": { + "title": "Sambung {providerLabel} melalui {providerName}", + "errorStartAuthorization": "Gagal untuk memulakan pengesahan", + "errorAuthorizationExpired": "Kebenaran telah tamat. Mulakan aliran log masuk semula.", + "errorAuthorizationFailed": "Kebenaran gagal", + "initializing": "Memulakan...", + "settingUp": "Mengatur pengesahan {providerName}", + "openIncognito": "Buka pautan ini dalam tetingkap Incognito", + "incognitoDescription": "Gunakan tetingkap Incognito/Peribadi untuk mengelakkan konflik sesi dengan akaun yang sedia ada.", + "copyLink": "Salin pautan", + "verificationCode": "Kod pengesahan", + "waiting": "Menunggu untuk pengesahan...", + "cancel": "Batal", + "successTitle": "Sambungan Berjaya!", + "successMessage": "Akaun {providerLabel} anda melalui {providerName} telah disambungkan.", + "done": "Selesai", + "errorTitle": "Sambungan Gagal", + "close": "Tutup" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Kebenaran gagal", + "errorPopupBlocked": "Popup disekat — benarkan popup untuk laman ini, atau tampal token secara manual di bawah.", + "errorPopupClosed": "Tetingkap Pengesahan ditutup sebelum selesai.", + "errorAccessTokenRequired": "Token akses diperlukan.", + "errorImportFailed": "Import gagal", + "title": "Sambungkan Trae SOLO", + "authorizeDescription": "Luluskan melalui trae.ai dalam tetingkap timbul. Tetingkap timbul akan menutup dirinya sendiri setelah token diimport.", + "authorizeImportant": "Penting: anda mesti log masuk ke trae.ai dalam pelayar ini terlebih dahulu. Halaman pengesahan hanya mengesahkan sesi yang sedia ada — ia tidak boleh log masuk untuk anda. Jika anda melihat \"Log Masuk Gagal\", klik \"Buka solo.trae.ai\", log masuk, kemudian kembali ke sini.", + "waitingForAuthorization": "Menunggu trae.ai…", + "authorizeWithBrowser": "Luluskan dengan Penyemak Imbas", + "openSoloTrae": "Buka solo.trae.ai", + "orPasteManually": "atau tampal token secara manual", + "manualInstructions": "Log masuk ke solo.trae.ai, buka DevTools → Network, hantar sebarang mesej chat, dan salin JWT dari Authorization: Cloud-IDE-JWT {tokenPlaceholder} header permintaan. Jangka hayat JWT adalah ~14 hari. Medan identiti pilihan datang dari common_params dalam badan permintaan yang sama.", + "accessTokenLabel": "Token Akses (Cloud-IDE-JWT)", + "webId": "ID Web", + "optional": "pilihanal", + "bizUserId": "ID Pengguna Biz", + "userUniqueId": "ID Unik Pengguna", + "scope": "Skop", + "tenant": "Penyewa", + "region": "Wilayah", + "importing": "Mengimport…", + "importToken": "Import Token", + "cancel": "Batal" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Mengagihkan...", + "complete": "Lengkap", + "defaultLabel": "Sebarkan Proksi" + } + }, + "providerTest": { + "dialogLabel": "Uji {provider}", + "deprecated": "tidak lagi disokong", + "risk": "risiko", + "close": "Tutup", + "model": "Model", + "key": "Kunci", + "defaultKey": "lalai", + "clearConversation": "Bersihkan perbualan", + "clear": "Bersihkan", + "tabs": { + "test": "Uji", + "logs": "Log" + }, + "loadingLogs": "Memuatkan log…", + "failedToLoadLogs": "Gagal memuat log", + "noLogsYet": "Tiada log lagi", + "noLogsDescription": "Hantar mesej ujian dari tab Ujian — log untuk penyedia ini akan muncul di sini.", + "openFullLogs": "Buka halaman log penuh", + "live": "Langsung", + "tailingLast": "menyemak terakhir {count}", + "refreshNow": "Segarkan sekarang", + "refresh": "Segar Semula", + "unknownRequester": "pembuat permintaan tidak dikenali", + "fields": { + "timestamp": "Cap Masa", + "status": "Status", + "duration": "Tempoh", + "model": "Model", + "requestedModel": "Model yang diminta", + "provider": "Penyedia", + "requester": "Pemohon", + "tokens": "Token" + } + }, + "proxyLog": { + "detailAriaLabel": "Butiran log proksi", + "event": "Acara Proksi", + "close": "Tutup modal butiran proksi", + "time": "Masa", + "latency": "Kelewatan", + "clientIp": "IP Klien", + "proxy": "Proksi", + "direct": "Langsung", + "type": "Jenis", + "level": "Tahap", + "provider": "Penyedia", + "tlsFingerprint": "Jejak TLS", + "directNative": "Langsung", + "targetUrl": "URL Sasaran", + "error": "Ralat", + "configuration": "Konfigurasi Proksi" + }, + "requestTimeline": { + "title": "Garis Masa Permintaan", + "modes": { + "follow": "Ikuti", + "followDescription": "Paksi tatal ke kiri, garis NOW kekal pada 75%", + "now": "Sekarang", + "nowDescription": "Lompat ke waktu semasa, garis NOW menetapkan semula ke tengah", + "pan": "Kuali", + "panDescription": "Seret untuk meneroka, latar belakang beku" + }, + "reset": "Tetapkan Semula", + "started": "Dimulakan", + "ended": "Tamat", + "duration": "Tempoh", + "status": "Status", + "provider": "Penyedia", + "tokens": "Token", + "active": "Aktif", + "other": "Lain-lain", + "tenMinutes": "10min", + "hour": "jam", + "day": "hari", + "unknownModel": "tidak diketahui", + "pending": "menunggu" + }, + "metadata": { + "compressionTitle": "Pemampatan", + "compressionDescription": "Konfigurasikan tetapan pemampatan konteks untuk mengurangkan penggunaan token dan kos.", + "relayTitle": "OmniRoute — Proksi Relay", + "relayDescription": "Titik akhir proksi relay tanpa pelayan untuk infrastruktur AI anda", + "trafficInspectorTitle": "Pemeriksa Trafik — OmniRoute", + "trafficInspectorDescription": "Pantau panggilan LLM + debug trafik HTTPS mana-mana aplikasi" + }, + "conductor": { + "title": "Conductor — armada CLI-ejen", + "subtitle": "OmniConductor hub: pelari, antrian tugas dan majlis, langsung", + "runners": "Pelari", + "tasks": "Tugas", + "colName": "Nama", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Tugas", + "colMode": "Modus", + "colRunner": "Pelari", + "colSummary": "Ringkasan", + "online": "dalam talian", + "offline": "tidak dalam talian", + "draining": "mengalir", + "hubOffline": "Hab konduktor tidak dalam talian atau tidak dikonfigurasikan (CONDUCTOR_HUB_URL) — menunjukkan tiada apa-apa selain data lama.", + "noRunners": "Tiada pelari yang mendaftar", + "noTasks": "Tiada tugas lagi", + "detailTitle": "Butiran tugas", + "prompt": "Tanya", + "branch": "Cawangan", + "fetchHint": "Ambil hasil dengan: git fetch origin {branch}", + "council": "Majlis", + "candidates": "Calon-calon", + "cancel": "Batalkan tugas", + "cancelConfirmTitle": "Batalkan tugas ini?", + "cancelConfirmMessage": "Hub akan membatalkan pelaksanaan pada pelari. Ini tidak boleh dibatalkan.", + "cancelFailed": "Pusat menolak pembatalan", + "close": "Tutup", + "error": "Ralat", + "faroTitle": "Faro — jurucakap armada", + "faroSubtitle": "Sembang dan suara, berakar pada acara armada sebenar. Perintah yang merosakkan sentiasa meminta pengesahan.", + "faroEmpty": "Tanya tentang armada — contohnya \"bagaimana keadaan armada?\"", + "faroPending": "Faro sedang meminta pengesahan", + "faroPlaceholder": "bercakap dengan Faro…", + "faroSend": "hantar", + "faroOffline": "Faro (jurucakap) tidak dalam talian", + "yes": "Ya", + "no": "Tidak", + "pushToTalk": "Tahan untuk bercakap", + "speakAnswers": "bercakap jawapan", + "voiceModels": "Model Suara (penyedia/model OmniRoute ini)", + "voiceIdle": "bercakap", + "voiceListening": "mendengar…", + "voiceThinking": "berfikir…", + "voiceSpeaking": "bercakap…", + "sttFailed": "Transkripsi gagal (semak model/provider STT)", + "ttsFailed": "Penghasilan ucapan gagal (semak model/provider TTS)", + "micDenied": "Mikrofon tidak tersedia atau kebenaran ditolak" + }, + "cliproxyProviderExposure": { + "title": "Pendedahan Penyedia", + "description": "Dedahkan model CLIProxyAPI sebagai sasaran penghalaan di bawah awalan cliproxyapi/.", + "label": "Expose sebagai cliproxyapi/...", + "hint": "Apabila diaktifkan, model yang ditemui akan muncul dalam pilihan penyedia di seluruh OmniRoute.", + "updateFailed": "Gagal untuk mengemas kini (HTTP {status})", + "networkError": "Ralat rangkaian — tidak dapat mengemas kini tetapan pendedahan penyedia" + } } - diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 3894646d32..68e9efc0de 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -172,6 +172,18 @@ "unselectAll": "Selectie opheffen", "visibleModels": "zichtbaar", "selectAllConfirm": "{count} modellen aan deze combinatie toevoegen?", + "testSelectedProviders": "Testproviders", + "testingSelectedProviders": "Testen {done}/{total}...", + "noProvidersSelectedToTest": "Controleer eerst ten minste één aanbieder hieronder", + "noModelsToTestForProviders": "Geen modellen om te testen voor de geselecteerde aanbieders", + "testSelectedProvidersResults": "{ok} van {total} modellen werken", + "selectWorkingModels": "Voeg toe werken", + "unselectWorkingModels": "Deselecteren werkt", + "noWorkingModelsToSelect": "Geen werkende modellen meer om toe te voegen", + "providerTestHint": "Tip: controleer een provider → Test → Voeg werkend toe. Klik opnieuw om te deselecteren.", + "selectAllProviders": "Controleer alle providers", + "clearProviderSelection": "Deselecteer providers", + "providersSelectedCount": "{count} providers gecontroleerd", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Grootte", + "toggleNoAuthProvider": "Schakel no-auth provider in/uit", + "loadingModels": "Modellen laden…", + "selectAModel": "Selecteer een model", + "degraded": "Afgebroken", + "zeroConfigBannerTitle": "Uitvoeren in zero-config-modus", + "zeroConfigBannerBody": "OmniRoute genereert automatisch veilige versleutelingssleutels bij de eerste lancering. Ze worden opgeslagen in {dataDir}. Er is geen actie vereist — uw gegevens zijn versleuteld en veilig. Om aangepaste sleutels te gebruiken, voeg JWT_SECRET en STORAGE_ENCRYPTION_KEY toe aan dat bestand.", + "batchRelativeTimeIn": "in {value}", + "batchRelativeTimeAgo": "{value} geleden", + "batchDetailsTitle": "Batchdetails", + "batchProgress": "Voortgang", + "batchCompletedCount": "{count} voltooid", + "batchFailedCount": "{count} mislukt", + "batchPendingCount": "{count} in behandeling", + "batchTimeline": "Tijdlijn", + "batchTimelineInProgress": "In Behandeling", + "batchTimelineFinalizing": "Finaliseren", + "batchTimelineCompleted": "Voltooid", + "batchTimelineFailed": "Mislukt", + "batchTimelineExpires": "Verloopt", + "batchTimelineExpired": "Verlopen", + "batchTimelineCancelling": "Annuleren", + "batchTimelineCancelled": "Geannuleerd", + "batchTokenUsage": "Tokengebruik", + "batchMetadata": "Metadata", + "batchFileContents": "Bestandsinhoud", + "batchFileUsedByCount": "Gebruikt door {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Voorbeeld", + "batchFilePreviewTruncated": "Eerste {shown} regels weergeven ({total} totaal regels)", + "batchFileDownloadFull": "Download Volledig Bestand" }, "disabled": "Uitgeschakeld", "featureFlagOmnirouteEmergencyFallbackDescription": "Routeer verzoeken met uitgeput budget naar de gratis nood-fallbackprovider/-model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Scheidingslijn", "discovery": "Detectie", "discoverySubtitle": "Providers scannen op gratis toegang", + "conductor": "Conductor", + "conductorSubtitle": "CLI-agent vloot", "resilienceConnections": "Verbindingsveerkracht", "resilienceConnectionsSubtitle": "Cooldown, breaker, lockout-status", "settingsModalityBridge": "Modality Brug", - "settingsModalityBridgeSubtitle": "Afbeelding/audio → tekst fallback voor alleen-tekstmodellen" + "settingsModalityBridgeSubtitle": "Afbeelding/audio → tekst fallback voor alleen-tekstmodellen", + "commandPalette": { + "title": "Opdrachtpalet", + "searchPlaceholder": "Zoek pagina's, instellingen, tools...", + "clearSearch": "Zoekopdracht wissen", + "noResults": "Geen resultaten", + "navigate": "navigeren", + "open": "open", + "close": "sluiten" + }, + "noResults": "Geen resultaten" }, "webhooks": { "title": "Webhaken", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Bijwerken van instellingen mislukt", "sync.token.created": "Synchronisatietoken aangemaakt", "sync.token.revoked": "Synchronisatietoken ingetrokken" - } + }, + "mcpMetricCalls24h": "Oproepen (24u)", + "mcpMetricSuccessRate": "Succespercentage", + "mcpMetricAvgDuration": "Gem. duur", + "mcpMetricTopTool": "Top tool" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Er is een nieuwe versie beschikbaar. Klik om bij te werken.", "updateStarted": "Update gestart...", "reloadingPageAutomatically": "Pagina automatisch herladen...", - "providerTopology": "Provider-topologie" + "providerTopology": "Provider-topologie", + "downloadDmg": "Download DMG (macOS)", + "downloadDmgDescription": "Er is een nieuwe versie van de OmniRoute desktopapp beschikbaar. Download en installeer alstublieft de macOS DMG-installatieprogramma om bij te werken (huidig: v{version}).", + "downloadExe": "Download EXE (Windows)", + "downloadExeDescription": "Er is een nieuwe versie van de OmniRoute desktopapp beschikbaar. Download en installeer alstublieft de Windows EXE-installatieprogramma om bij te werken (huidig: v{version}).", + "downloadAppImage": "Download AppImage (Linux)", + "downloadAppImageDescription": "Er is een nieuwe versie van de OmniRoute desktop-app beschikbaar. Download alstublieft het Linux AppImage-pakket om bij te werken (huidig: v{version}).", + "downloadUpdate": "Download Update", + "downloadUpdateDescription": "Er is een nieuwe versie van de OmniRoute desktop-app beschikbaar. Download alstublieft het respectieve app-formaat voor uw systeem om bij te werken (huidig: v{version}).", + "updateQueued": "Geplande update naar v{version}.", + "updateDockerRebuilding": "Docker-image wordt op de achtergrond opnieuw opgebouwd.", + "updateWaitingRestart": "Wachten op OmniRoute om opnieuw op te starten met de nieuwe versie.", + "updateInstalling": "Installeren v{version}.", + "updateRunning": "OmniRoute draait nu versie v{version}.", + "updateCompleted": "OmniRoute bijgewerkt naar v{version}.", + "updateDockerStillRebuilding": "Docker-image wordt nog steeds opnieuw opgebouwd voor v{version}.", + "updateInstallingBackground": "v{version} op de achtergrond aan het installeren.", + "updateWaitingVersion": "Wachten op OmniRoute om terug te komen op v{version}.", + "updateDockerStillInProgress": "Docker rebuild is nog steeds bezig.", + "updateRestarting": "Service herstarten in uitvoering. Wachten tot OmniRoute weer online is...", + "updateTimeout": "Update gestart, maar v{version} was niet beschikbaar voor de time-out. Vernieuw de pagina of controleer de serverlogs.", + "updateTimedOut": "Bijwerken naar v{version} is time-out gegaan.", + "updateStartFailed": "Kon update niet starten.", + "noResponseStream": "Geen antwoordstream ontvangen.", + "updateComplete": "Update voltooid!", + "updateFailed": "Bijwerken mislukt.", + "updateNetworkError": "Netwerkfout — verbinding verloren tijdens update.", + "stepInstallPackage": "Installeer Pakket", + "stepRebuildNativeModules": "Herbouw Native Modules", + "stepRestartService": "Herstart Service", + "stepComplete": "Voltooid", + "stepError": "Fout", + "updateCompleteTitle": "Update Voltooid!", + "updateFailedTitle": "Bijwerken Mislukt", + "updatingTitle": "OmniRoute bijwerken...", + "reloadNotice": "De pagina wordt over een paar seconden automatisch opnieuw geladen.", + "retryNotice": "Probeer het opnieuw of werk handmatig bij via de CLI.", + "restartNotice": "Sluit deze pagina niet. Het systeem zal automatisch opnieuw opstarten.", + "reloadNow": "Nu Herladen", + "closeUpdate": "Sluiten", + "retryUpdate": "Opnieuw proberen", + "updateAvailableTitle": "Update Beschikbaar: v{version}{desktop}", + "desktopAppLabel": "(Bureaubladapp)", + "checkingForUpdates": "Controleren op updates...", + "versionAvailableForDownload": "Versie v{version} is beschikbaar voor download.", + "downloadingUpdate": "Update aan het downloaden... {percent}% voltooid.", + "updateDownloaded": "Update succesvol gedownload! Klik op Herstarten & Installeren om toe te passen.", + "autoUpdateFailed": "Automatische update mislukt: {reason}.", + "unknownUpdateError": "Onbekende fout", + "versionAvailableDesktop": "Versie v{version} is beschikbaar voor de desktopapp.", + "manualUpdateRequired": "Handmatige update vereist voor dit type installatie.", + "restartAndInstall": "Herstarten & Installeren", + "checkForUpdate": "Controleer op Update", + "manualUpdate": "Handmatige Update", + "directDownloadHint": "Of download het respectieve installerformaat direct:", + "releaseNotes": "Release-opmerkingen", + "readMore": "Lees Meer", + "noAuthLabel": "Geen Auth" }, "analytics": { "title": "Analyses", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Afgeleid uit opgeslagen call-logs rond dit verzoek", "routeRecommendations": "Aanbevelingen", "routeLimitations": "Beperkingen", - "routeNoKnownLimitations": "Geen bekende beperkingen voor deze uitleg." + "routeNoKnownLimitations": "Geen bekende beperkingen voor deze uitleg.", + "searchAnalyticsLoading": "Zoeken naar analytics…", + "searchAnalyticsNoData": "Geen zoekgegevens beschikbaar.", + "searchAnalyticsNoDataDescription": "Zoekopdrachten zullen hier verschijnen na de eerste zoekopdracht via /v1/search.", + "searchAnalyticsToday": "{count} vandaag", + "searchAnalyticsCachedRequests": "{count} gecachte verzoeken", + "searchAnalyticsApiCosts": "zoek API-kosten", + "searchAnalyticsErrors": "{count} fouten", + "searchAnalyticsNoErrors": "Geen fouten", + "searchAnalyticsProviderBreakdown": "Leveranciersoverzicht", + "searchAnalyticsQueries": "query's", + "searchAnalyticsEmptyDescription": "Gebruik POST /v1/search om webzoekopdrachten te starten.", + "searchAnalyticsFreeTier": "Gratis tier beschikbaar: Serper (2.500/maand), Brave (2.000/maand), Exa (1.000/maand), Tavily (1.000/maand) — totaal 6.500+ gratis zoekopdrachten/maand met automatische failover.", + "autoRoutingNoDataAvailable": "Geen auto-routing analytics beschikbaar. Doe verzoeken met de auto/ prefix om statistieken te zien.", + "defaultVariantLabel": "Standaard", + "freeTierAvailable": "Gratis tier beschikbaar" }, "apiManager": { "title": "API-sleutels", @@ -2348,7 +2478,9 @@ "providerCount": "{count} providers", "imageToTextBridgeAvailable": "Modality Bridge kan nu afbeeldingen beschrijven voor tekst-only modellen. De inline playground zal beschikbaar zijn wanneer /api/v1/images/understanding is geïmplementeerd.", "imageToTextBridgeCta": "Configureer de Image→Text-brug in de Modality Bridge-instellingen", - "sttBridgeCta": "Configureer de Spraak→Tekst brug in de Modality Bridge-instellingen" + "sttBridgeCta": "Configureer de Spraak→Tekst brug in de Modality Bridge-instellingen", + "existingConnection": "Bestaande verbinding", + "openrouterSttDescription": "OpenRouter spraak-naar-tekstmodellen gebruiken uw geconfigureerde OpenRouter-verbinding. Er zijn geen aparte inloggegevens vereist." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Plakken in:", "copilotReloadInstruction": "Herlaad vervolgens VS Code en stel de API-sleutel in bij de invoerprompt.", "wireApiChatCompletions": "Chatvoltooiingen (/chat/voltooiingen)", - "wireApiResponses": "Reacties-API (/reacties)" + "wireApiResponses": "Reacties-API (/reacties)", + "cliproxyapiActionFailed": "Actie mislukt", + "cliproxyapiActionSucceeded": "Actie geslaagd", + "cliproxyapiCheckUpdates": "Controleer op updates", + "cliproxyapiDescription": "Upstream proxy fallback (Go-gebaseerde OAuth)", + "cliproxyapiHealth": "Gezondheid", + "cliproxyapiHealthy": "Gezond", + "cliproxyapiInstall": "Installeren", + "cliproxyapiNotInstalledValue": "Niet geïnstalleerd", + "cliproxyapiPort": "Haven", + "cliproxyapiRequestFailed": "Verzoek mislukt", + "cliproxyapiRestart": "Herstarten", + "cliproxyapiStart": "Start", + "cliproxyapiStatusError": "Fout", + "cliproxyapiStatusInstalled": "Geïnstalleerd", + "cliproxyapiStatusNotInstalled": "Niet Geïnstalleerd", + "cliproxyapiStatusRunning": "Lopen", + "cliproxyapiStatusStopped": "Gestopt", + "cliproxyapiStop": "Stop", + "cliproxyapiUnhealthy": "Ongezond", + "cliproxyapiUnknown": "Onbekend", + "cliproxyapiUpdate": "Bijwerken", + "cliproxyapiUpdateAvailable": "Update beschikbaar: v{current} → v{latest}", + "cliproxyapiVersion": "Versie" }, "combos": { "title": "Combo's", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Alleen doorgaan bij quota-uitputting", + "fallbackOnlyOnQuotaExhaustionShort": "quota-only fallback", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Moduspakket en weging blijven hier; de breaker runtime-status blijft op de Statuspagina.", "emailVisibilityHint": "E-mailadressen van accounts volgen hier de globale privacy-schakelaar.", "emailVisibilityTooltip": "Gebruik het oogpictogram om e-mailadressen van accounts globaal te tonen of te verbergen in combo's, providers en quotaschermen.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Stap voor stap (Provider → Model)", + "builderModeGlobal": "Globale modelzoektocht (Aangepaste combinatie)", + "builderGlobalSearchPlaceholder": "Zoek modellen bij alle aanbieders (bijv. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Alles toevoegen", + "builderGlobalShortcuts": "Sneltoetsen:", + "builderGlobalNoResults": "Geen model gevonden voor \"{query}\".", + "builderGlobalProviderLabel": "Provider:", + "builderGlobalAccountCount": "{count, plural, one {# account} other {# accounts}}", + "builderGlobalAdded": "Toegevoegd", + "builderGlobalAdd": "Toevoegen", "manualModel": "Handmatig model", "manualModelInvalid": "Voer een model in als provider/model.", "manualModelUnknownProvider": "Onbekend provider-voorvoegsel.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Beschikbaarheid van de Sessie", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Sessievastheid uit", "kimiPresetTitle": "Kimi Coding-preset", "kimiPresetDescription": "Kimi K3 als het primaire model (Moonshot API), met automatische terugval naar uw Kimi Code-verbindingen (kimi-coding, kimi-web) indien geconfigureerd.", - "kimiPresetCta": "Preset toevoegen" + "kimiPresetCta": "Preset toevoegen", + "intelligentComboCount": "{count, plural, one {# intelligente combinatie} other {# intelligente combinaties}}", + "providersInScope": "{count, plural, one {# provider in scope} other {# providers in scope}}", + "savingModePack": "Opslaan {pack}…", + "errorTitle": "Kon combos niet laden", + "errorDescription": "We konden de combogegevens op dit moment niet laden. Controleer je verbinding en probeer het opnieuw.", + "errorId": "Fout-ID: {id}", + "errorRetry": "Probeer het opnieuw", + "comboLabel": "Combo" }, "costs": { "title": "Kosten", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Gebruikersnaam", "obsidianPassword": "Wachtwoord", - "obsidianTailscaleHint": "Gebruik je Tailscale-IP in plaats van localhost als je verbinding maakt vanaf een mobiel apparaat. Beide apparaten moeten zich op hetzelfde Tailscale-netwerk bevinden." + "obsidianTailscaleHint": "Gebruik je Tailscale-IP in plaats van localhost als je verbinding maakt vanaf een mobiel apparaat. Beide apparaten moeten zich op hetzelfde Tailscale-netwerk bevinden.", + "cloudSyncNotConfigured": "Cloud-synchronisatie is niet geconfigureerd op deze instantie.", + "notionConnect": "Verbinden", + "notionConnectFailed": "Verbinden mislukt", + "notionConnected": "Verbonden", + "notionConnectionFailed": "Verbinding mislukt", + "notionDescription": "Zoek, lees, vraag en schrijf naar Notion via gerouteerde AI-modellen", + "notionDisconnect": "Ontkoppelen", + "notionDisconnectFailed": "Verbinding verbreken mislukt", + "notionEnterToken": "Voer een Notion-integratietoken in", + "notionIntegrationHelp": "Maak een interne integratie aan bij", + "notionIntegrationToken": "Notion Interne Integratietoken", + "notionNotConnected": "Niet verbonden", + "notionTokenConfigured": "Token geconfigureerd. Notion-tools zijn beschikbaar via MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Model", "noRemoteProviders": "Geen providers met geconfigureerde API-sleutel", "selectProviderModel": "Selecteer een model", + "customBaseUrlLabel": "Aangepaste basis-URL (optioneel)", + "customModelIdLabel": "Aangepaste model-ID (optioneel)", + "customEndpointHelp": "Gebruik een OpenAI-compatibele /embeddings eindpunt. Lokale eindpunten zijn toegestaan; cloudmetadata-doelen zijn geblokkeerd.", + "customEndpointSave": "Pas aangepaste eindpunt toe", + "customEndpointInvalid": "Voer zowel een geldige HTTP(S) basis-URL als een model-ID in, of laat beide velden leeg.", + "customEndpointSaveFailed": "Het aangepaste inbeddings-eindpunt kon niet worden opgeslagen.", "staticEnabledLabel": "Statische Potion inschakelen", "staticEnabledDesc": "Download en gebruik het potion-base-8M-model lokaal", "transformersEnabledLabel": "Transformers.js inschakelen", @@ -4258,7 +4443,9 @@ "cleaning": "Opschonen...", "cleanNow": "Nu opschonen", "cleanupSuccess": "{count} punt(en) verwijderd", - "cleanupFailed": "Opschonen mislukt" + "cleanupFailed": "Opschonen mislukt", + "hostLabel": "Host", + "collectionLabel": "Collectie" }, "rerank": { "enableLabel": "Rerank inschakelen", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute fallback-diagram met 3 niveaus", "apiKeyMgmt": "API-sleutelbeheer", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Stel gratis providers in", + "description": "Optioneel geselecteerde no-signup providers inschakelen. Bekijk de kennisgeving en site van elke provider voordat je verdergaat; beschikbaarheid en snelheidslimieten worden beheerd door derden.", + "loading": "Laden van gratis aanbieders...", + "loadFailed": "Kon gratis aanbieders niet laden.", + "alreadyConfigured": "Alle in aanmerking komende gratis aanbieders zijn al geconfigureerd.", + "reviewProviderSite": "Beoordeel de aanbiedersite en voorwaarden", + "confirmation": "Ik heb deze externe aanbieders beoordeeld en wil dat OmniRoute de geselecteerde verbindingen aanmaakt.", + "setupSelected": "Stel geselecteerde providers in", + "settingUp": "Instellen...", + "setupFailed": "Kon de geselecteerde providers niet instellen. Niets bestaands is gewijzigd.", + "retryFailed": "Herhaal mislukte providers", + "orUseApiKey": "of verbind met een API-sleutel", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "gemaakt", + "skipped": "al reeds geconfigureerd", + "failed": "mislukt" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Vereist. Basis-URL van de provider-API.", "iconUrlLabel": "Pictogram-URL", "iconUrlHint": "Optioneel. Afbeeldings-URL die wordt getoond als het pictogram van deze provider.", + "iconUrlInvalid": "Ongeldige pictogram-URL. Gebruik een http(s):// of data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatibel (product)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessie al actueel", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Autorisatie toepassen", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API-sleutel plakken…", "zedSaving": "Opslaan…", "zedImportAction": "Importeren", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Schakel automatische Cursor-sessievernieuwing in", + "cursorAgentNudgeBody": "Installeer cursor-agent voor automatische sessievernieuwing — zonder dit moet je Cursor-verbindingen ongeveer elke 24 uur handmatig opnieuw verbinden.", + "cursorAgentNudgeDismiss": "Afwijzen", "zedManualImportFailed": "Handmatige import mislukt", "zedManualImportSuccess": "Geïmporteerd {provider}-token uit Zed", "grokImportTitle": "Grok Build-authenticatie importeren", @@ -5878,7 +6066,6 @@ "friendliai": "Gratis abonnement voor serverloze inferentie — geen creditcard vereist", "gemini": "Altijd gratis: 1.500 verzoeken/dag voor Gemini 2.5 Flash — geen creditcard, haal de sleutel op via aistudio.google.com", "gigachat": "Verbind GigaChat (Sber) met een API-sleutel.", - "github-models": "Maak een GitHub PAT aan met de scope 'models: read' op github.com/settings/tokens", "gitlab": "Persoonlijk toegangstoken van GitLab voor de openbare Code Suggestions-API. Configureer een zelf-gehoste basis-URL als je gitlab.com niet gebruikt.", "gitlawb-gmi": "Haal je API-sleutel op uit het Gitlawb Opengateway-dashboard.", "gitlawb": "Haal je API-sleutel op uit het Gitlawb Opengateway-dashboard.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Verbind Kimi Coding met de bestaande OAuth-flow.", "kiro": "Gratis tier: 50 credits/maand (~25K–100K tokens). ⚠️ Kiro ToS verbiedt het gebruik van externe proxy/harness.", "codex": "Verbind OpenAI Codex met de bestaande OAuth-flow.", - "qwen": "Verbind Qwen Code met de bestaande OAuth-flow." + "qwen": "Verbind Qwen Code met de bestaande OAuth-flow.", + "github-models": "Maak een GitHub PAT aan met de scope 'models: read' op github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accepteert provider-native model-ID's. Importeer uit /models of voeg aangepaste ID's toe voor routering.", "bedrockModelsDescription": "Amazon Bedrock-modellen zijn afgestemd op de AWS-regio. Importeer uit /models of voeg Bedrock-model-ID's toe die zijn ingeschakeld in de geselecteerde regio.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Wanneer alle geconfigureerde verbindingen zijn uitgeput (quota, tegoeden of vervaldatum), gebruik tijdelijk de keyless-laag van deze provider. Zet uit om deze provider over te slaan in plaats van anonieme verzoeken te verzenden - aanbevolen wanneer de keyless-laag deze afwijst (401).", "anonymousFallbackEnabled": "Anonieme fallback ingeschakeld voor {provider}", "anonymousFallbackDisabled": "Anonieme fallback uitgeschakeld voor {provider} — uitgeputte verbindingen zullen deze provider overslaan", - "anonymousFallbackUpdateFailed": "Kon de anonieme fallback-instelling niet bijwerken" + "anonymousFallbackUpdateFailed": "Kon de anonieme fallback-instelling niet bijwerken", + "batchDeleteFailed": "Batch verwijderen mislukt", + "batchDeleteNetworkError": "Netwerkfout tijdens batchverwijdering", + "batchUpdateFailed": "Batch-update mislukt", + "batchUpdateNetworkError": "Netwerkfout tijdens batchupdate", + "categoryAudio": "Audio", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Lokaal", + "categorySearch": "Zoeken", + "categoryWebCookie": "Webcookie", + "claudeExtraUsageBlockingDisabled": "Claude extra-gebruik blokkering uitgeschakeld (extra gebruik is toegestaan)", + "claudeExtraUsageBlockingEnabled": "Claude extra-gebruik blokkering ingeschakeld (extra gebruik zal worden geblokkeerd)", + "claudeRoutingPreferenceDisabled": "Ongeprefixed Claude-modellen geven niet langer de voorkeur aan Claude Code", + "claudeRoutingPreferenceEnabled": "Ongeprefixed Claude-modellen geven nu de voorkeur aan Claude Code", + "clearMediaFilter": "Wissen", + "cliproxyRoutingDisabled": "Verzoeken gebruiken nu de native OmniRoute (direct)", + "cliproxyRoutingEnabled": "Verzoeken worden nu via CLIProxyAPI geleid (diepere emulatie)", + "codexLimitPolicyUpdated": "Codex limietbeleid bijgewerkt", + "codexServiceModeUpdated": "Codex service modus bijgewerkt", + "codexServiceTierActive": "Codex {tier} servicelaag is actief", + "codexTierFastLabel": "Snel", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Kon de Command Code-authenticatie niet toepassen", + "commandCodeApplyingApproval": "Browser goedgekeurd, toepassen…", + "commandCodeApplyingKey": "Toepassen van browser-goedgekeurd sleutel…", + "commandCodeApprovalInstructions": "Open de auth-URL, keur de toegang goed en plak vervolgens de teruggegeven sleutel/JSON/URL hieronder…", + "commandCodeAuthExpired": "Opdrachtcode is verlopen", + "commandCodeConnected": "Opdrachtcode verbonden", + "commandCodeConnectionAdded": "Command Code verbinding toegevoegd", + "commandCodeLinkExpired": "De link voor de opdrachtcode is verlopen", + "commandCodeOpeningStudio": "Opdracht Code Studio openen…", + "commandCodePopupBlocked": "Pop-up geblokkeerd. Sta pop-ups toe en probeer Command Code Connect opnieuw.", + "commandCodeStartFailed": "Kon opdracht Code auth niet starten", + "connectionDeleted": "Verbinding verwijderd", + "connectionFallback": "verbinding", + "coolingConnectionsDescription": "Deze verbindingen hebben een 429 (rate-limit) geretourneerd bij hun laatste verzoek. OmniRoute zal ze overslaan totdat de timer verloopt — handmatig uitschakelen is niet nodig.", + "coolingConnectionsTitle": "Momenteel aan het koelen ({count})", + "failedDeleteAlias": "Kon alias niet verwijderen", + "failedDeleteConnection": "Verbinding verwijderen mislukt", + "failedDistributeProxies": "Mislukt om proxies te distribueren.", + "failedSaveModelEndpointSettings": "Kon de instellingen voor het model-eindpunt niet opslaan", + "failedUpdateClaudeExtraUsagePolicy": "Mislukt om het extra-gebruik beleid van Claude bij te werken", + "failedUpdateClaudeRoutingPreference": "Kon niet bijwerken voorkeur voor Claude Code routering", + "failedUpdateCliproxyRouting": "Kon niet bijwerken van CLIProxyAPI-routering", + "failedUpdateCodexLimitPolicy": "Kon de Codex limietbeleid niet bijwerken", + "failedUpdateCodexServiceMode": "Kon de Codex-service modus niet bijwerken", + "filterByMedia": "Media", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kimi Code API-sleutel", + "modelTestFailed": "Modeltest mislukt", + "modelTestNetworkError": "Netwerkfout testmodel", + "networkError": "Netwerkfout", + "networkErrorDeletingAlias": "Netwerkfout bij het verwijderen van alias", + "networkErrorSettingAlias": "Netwerkfout bij het instellen van alias", + "noProvidersMatch": "Geen aanbieders die overeenkomen met uw zoekopdracht.", + "noSavedProxies": "Geen opgeslagen proxies gevonden. Voeg eerst proxies toe in Instellingen → Proxy.", + "pageLoadErrorDescription": "We konden de providergegevens op dit moment niet laden. Controleer je verbinding en probeer het opnieuw.", + "pageLoadErrorId": "Fout-ID: {id}", + "pageLoadErrorRetry": "Probeer het opnieuw", + "pageLoadErrorTitle": "Kon leveranciers niet laden", + "playgroundTitle": "Speelplaats", + "providerDetailConnectionFlexActive": "Codex flex service tier is actief voor deze verbinding", + "providerDetailConnectionPriorityActive": "Codex prioriteitsdienstniveau is actief voor deze verbinding", + "providerDetailGlobalFlexActive": "De globale Codex flex service tier is actief", + "providerDetailGlobalPriorityActive": "De globale Codex prioriteitsdienstlaag is actief", + "proxiesDistributed": "Verspreide {assigned} proxytoewijzing(en) over {tagLabel}{total} verbinding(en).", + "rerankEndpoint": "Herordenen", + "savedModelEndpointSettings": "Instellingen voor opgeslagen model-eindpunt", + "searchByModelAria": "Zoeken op model", + "selectSupportedEndpoint": "Selecteer ten minste één ondersteunde eindpunt", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Instellingen", @@ -6460,7 +6719,24 @@ "loadFailed": "Kan de abonnementslijst niet laden", "toggleFailed": "Kan de schakelaar niet omzetten", "refreshFailed": "Vernieuwen is mislukt", - "deleteFailed": "Kan niet verwijderen" + "deleteFailed": "Kan niet verwijderen", + "add": "Toevoegen", + "cancel": "Annuleren", + "configure": "Configureren", + "copyEndpoint": "Kopieer Eindpunt", + "coreEndpointHint": "Kern Eindpunt Hint", + "coreNodesHint": "Kern Knoop Hint", + "create": "Aanmaken", + "deleteConfirm": "Verwijder Bevestigen", + "empty": "Leeg", + "globalModeDescription": "Globale Modus Beschrijving", + "localCoreHint": "Lokale Kernhint", + "nodeSummary": "Knoop Samenvatting", + "providerRequired": "Provider Vereist", + "providerRouting": "Provider Routing", + "refresh": "Vernieuwen", + "refreshInterval": "Vernieuwingsinterval", + "ruleModeDescription": "Regelmodus Beschrijving" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Voer een automatische vision-naar-tekst-terugval uit voordat afbeeldingsverzoeken naar modellen met alleen tekst worden gerouteerd.", "visionBridgeEnabledLabel": "Ingeschakeld", "visionBridgeEnabledDesc": "Schakel de pre-call bridge in/uit die afbeeldingsonderdelen vervangt door geëxtraheerde tekst.", + "visionBridgeRerouteTextOnlyLabel": "Herschikken van tekst-only modellen", + "visionBridgeRerouteTextOnlyDesc": "Stuur het volledige verzoek, inclusief afbeeldingen, naar het brugmodel wanneer het geselecteerde model geen afbeeldingsinvoer heeft.", "visionBridgeModel": "Brugmodel", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Elk OmniRoute-model-ID dat vision ondersteunt, kan hier worden gebruikt.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-sleutel mist de manage-scope.", "BYPASS_PREFIX_NOT_ALLOWED": "Een of meer prefixes zijn gericht op spawn-compatibele routes en kunnen niet worden omzeild.", "GENERIC": "Bijwerken van authz-instellingen mislukt." - } + }, + "remove": "Verwijderen" }, "resilienceBaseCooldownLabel": "Basis afkoeling", "scopeLabel": "Reikwijdte", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Audio testen…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) getranscribeerd door {model}", "modalityBridgeAudioTestNoop": "Audio Bridge is niet geactiveerd (het doel kan audio ondersteunen, er is geen STT-provider verbonden, of de brug is uitgeschakeld)", - "modalityBridgeAudioTestError": "Audio-test mislukt: {message}" + "modalityBridgeAudioTestError": "Audio-test mislukt: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus-modellen naar frontier-combo", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Codes", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback Beschrijving", + "cliproxyapiHealthLabel": "Cliproxyapi Gezondheidslabel", + "cliproxyapiImportFailed": "Cliproxyapi Importeren Mislukt", + "cliproxyapiImportResult": "Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "Cliproxyapi Ongeldige URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Levenscyclusmelding Na", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Levenscyclusmelding Voor", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Levenscyclus Kennisgeving Link", + "cliproxyapiPortLabel": "Cliproxyapi Poortlabel", + "cliproxyapiStatusLabel": "Cliproxyapi Status Label", + "cliproxyapiVersionLabel": "Cliproxyapi Versie Label", + "collection": "Verzameling", + "errorPage": { + "description": "We konden de instellingen op dit moment niet laden. Probeer het over een paar seconden opnieuw.", + "errorId": "Fout-ID: {id}", + "retry": "Probeer het opnieuw", + "title": "Instellingen konden niet worden geladen" + }, + "host": "Host", + "notInstalled": "Niet geïnstalleerd", + "oneproxyActions": "Oneproxy Acties", + "oneproxyActive": "Oneproxy Actief", + "oneproxyAnonymity": "Oneproxy Anonimiteit", + "oneproxyCountry": "Oneproxy Land", + "oneproxyDelete": "Oneproxy Verwijderen", + "oneproxyEmpty": "Oneproxy Leeg", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latentie", + "oneproxyProtocol": "Oneproxy Protocol", + "oneproxyQuality": "Oneproxy Kwaliteit", + "oneproxySyncFailed": "Synchronisatie mislukt: {error}", + "oneproxySyncSuccess": "Gesynchroniseerde {total} proxies ({added} nieuw, {updated} bijgewerkt)", + "proxyDocumentationSocks5DescAfter": "Proxy Documentatie Socks5 Beschrijving Na", + "proxyFreePoolAddProxy": "Proxy Vrije Pool Proxy Toevoegen", + "proxyFreePoolAdding": "Proxy Vrije Pool Toevoegen", + "proxyFreePoolSelectProxy": "Proxy Vrije Pool Selecteer Proxy", + "proxyStatusActive": "Proxystatus Actief", + "proxyStatusInactive": "Proxystatus Inactief", + "routingAddEntry": "Voeg invoer toe", + "settingSaveFailed": "Instelling Opslaan Mislukt", + "settingSaved": "Instelling Opgeslagen", + "skillsmpApiKeyHintAfter": ". Snelheidslimiet: {limit} verzoeken/dag.", + "skillsmpApiKeyHintBefore": "Haal je API-sleutel op van", + "syncFailed": "Synchronisatie mislukt", + "unhealthy": "Ongezond", + "oneproxyDescription": "Haal gratis gevalideerde proxies op en roteer ze van het 1proxy community platform", + "oneproxySyncing": "Synchroniseren...", + "oneproxySyncNow": "Nu Synchroniseren", + "oneproxyClearAll": "Alles Wissen", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Alle 1proxy proxies wissen?", + "memorySkillsSkillsmpDescription": "Verbind met SkillsMP om vaardigheden te ontdekken en te installeren vanuit de marketplace.", + "memorySkillsActiveProviderDescription": "Kies welke provider de Skills-pagina gebruikt voor zoeken en installeren.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marktplaats", + "memorySkillsSkillsmpProviderDescription": "Geauthenticeerde marktplaats (maakt gebruik van uw SkillsMP API-sleutel).", + "memorySkillsSkillsshProviderTitle": "skills.sh Map", + "memorySkillsSkillsshProviderDescription": "Openbare directoryprovider (geen API-sleutel vereist).", + "routingCcBridgeCatalogName": "Anthropic-compatibele CC-brug", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Native Claude-provider met door OAuth uitgegeven tokens.", + "routingCcBridgeName": "Claude-Code Brug", + "routingCcBridgeDescription": "Relay-eindpunten met API-sleutels (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Aangepaste provider.", + "routingUnknownOpKind": "Onbekende op kind: {kind}", + "routingInvalidJson": "Ongeldige JSON: {error}", + "routingConfigMustBeObject": "Config moet een JSON-object zijn", + "routingEnabledMustBeBoolean": "`enabled` moet waar of onwaar zijn", + "routingPipelineMustBeArray": "`pipeline` moet een array van ops zijn", + "routingPipelineTooLong": "De pipeline mag niet meer dan 50 ops overschrijden", + "routingOpMissingKind": "Op #{index}: ontbrekende of ongeldige `kind`", + "routingOpUnknownKind": "Op #{index}: onbekend type \"{kind}\"", + "routingJsonEditorHide": "Verberg JSON-editor", + "routingJsonEditorImportExport": "Importeren / exporteren JSON", + "routingJsonEditorLabel": "JSON (bewerken en toepassen, of plakken om te importeren)", + "routingApplyJson": "Pas JSON toe", + "routingTransformsFootnote": "Alle transformatie-operaties zijn idempotent bij herhaalde uitvoering. Wijzigingen worden onmiddellijk van kracht bij de volgende aanvraag.", + "cliproxyapiUnknown": "Onbekend", + "cliproxyapiVersion": "Versie", + "cliproxyapiHealth": "Gezondheid", + "cliproxyapiPort": "Haven", + "qdrantHost": "Host", + "qdrantCollection": "Verzameling" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Volledig", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Standaard", + "off": "Uit", + "lite": "Lite", + "standard": "Standaard", + "aggressive": "Agressief", + "ultra": "Ultra", + "responsesToolOutput": "Antwoordentool-uitvoer" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Draait als laatste in de stack (nadat RTK/Caveman de tekst opschoont, converteert OmniGlyph de rest naar afbeeldingen) en draait ook standalone via de omniglyph-modus. Dit is een preview en blijft standaard uitgeschakeld totdat de end-to-end-validatie is voltooid.", "saved": "Opgeslagen.", "saveFailed": "Opslaan mislukt.", - "enableAria": "Schakel de OmniGlyph-engine in" + "enableAria": "Schakel de OmniGlyph-engine in", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Ingebedde services", @@ -9127,7 +9500,49 @@ "unableToLoad": "Kan systeemstatistieken niet laden", "product": "Product", "resources": "Hulpbronnen", - "company": "Bedrijf" + "company": "Bedrijf", + "tokenHealthTooltips": { + "allHealthy": "Alle tokens gezond", + "needsAttention": "Sommige tokens hebben aandacht nodig", + "refreshFailures": "Token vernieuwingsfouten gedetecteerd", + "unknown": "Gezondheidsstatus onbekend" + }, + "systemMonitor": { + "metricsAriaLabel": "Systeemstatistieken", + "memory": "Geheugen", + "memoryShort": "mem", + "uptime": "Uptime", + "ariaLabel": "Systeemmonitoring", + "title": "Systeemmonitor", + "version": "Versie", + "connections": "Verbindingen", + "circuitBreakers": "Circuit Breakers", + "open": "{count} open", + "memoryUsage": "Geheugengebruik" + }, + "never": "Nooit", + "justNow": "Net nu", + "minutesAgo": "{count}m geleden", + "hoursAgo": "{count}u geleden", + "tokens": "Tokens", + "costs": "Kosten", + "autoRefresh": "Automatisch Vernieuwen ({seconds}s)", + "toggleAutoRefresh": "Schakel automatische verversing in/uit", + "activeRequests": "Actieve Verzoeken", + "totalRequests": "Totaal Aantal Verzoeken", + "totalInputTokens": "Totaal Invoertokens", + "model": "Model", + "provider": "Provider", + "requests": "Verzoeken", + "lastUsed": "Laatst Gebruikt", + "inputTokens": "Invoertokens", + "totalTokens": "Totaal Aantal Tokens", + "inputCost": "Invoerkosten", + "outputCost": "Uitvoerkosten", + "noUsageData": "Er zijn nog geen gebruiksgegevens geregistreerd. Doe enkele verzoeken om hier gegevens te zien.", + "account": "Account", + "accountLabel": "Account {id}", + "noAccountUsage": "Er zijn nog geen account-specifieke gegevens geregistreerd. Doe verzoeken met OAuth-accounts om hier gegevens te zien." }, "auth": { "welcome": "Welkom", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Reset via App Gegevens", + "resetViaAppDataDescription": "Verwijder het instellingenbestand uit de app-datamap om je wachtwoord opnieuw in te stellen:", + "quitDesktopApp": "Sluit de OmniRoute desktopapp volledig af", + "navigateToAppDataDirectory": "Navigeer naar de app-gegevensmap:", + "checkSystemAppDataFolder": "(Controlleer je systeem app gegevensmap)", + "relaunchDesktopFreshSetup": "Herstart de OmniRoute desktopapp — het zal een nieuwe installatie starten", + "alternativeSetPasswordTitle": "Alternatief: Stel Nieuw Wachtwoord In", + "alternativeSetPasswordDescription": "Stel een nieuw initieel wachtwoord in via het serveromgeving bestand:", + "openServerEnvFilePrefix": "Open", + "relaunchDesktopApp": "Herstart de OmniRoute desktop-app", + "codexLinkInvalidOrExpired": "Deze link is ongeldig of is verlopen.", + "codexValidationServerError": "Kon de server niet bereiken om deze link te valideren.", + "codexSaveConnectionError": "Kon de verbinding niet opslaan. De link is mogelijk verlopen.", + "codexDeviceLoginDisabled": "Apparaatcode-inloggen is uitgeschakeld voor dit OpenAI-account. Schakel het in de beveiligingsinstellingen van ChatGPT in (of vraag je werkruimtebeheerder).", + "codexAuthorizationTimedOut": "Autorisatie is verlopen. Klik op Start opnieuw om het opnieuw te proberen.", + "authenticationCancelled": "Authenticatie is geannuleerd.", + "unexpectedAuthenticationError": "Onverwachte fout tijdens authenticatie. Probeer het opnieuw.", + "connectOpenAiCodexTitle": "Verbind OpenAI Codex", + "codexConnectDescription": "Authorize een ChatGPT-account om deze verbinding af te ronden.", + "validatingCodexLink": "Link aan het valideren…", + "codexGenerateCodeDescription": "Klik hieronder om een eenmalige code te genereren en meld je vervolgens aan bij OpenAI.", + "startCodexFlow": "Start", + "requestingOpenAiCode": "Code opvragen bij OpenAI…", + "codexVerificationInstructions": "1. Open de OpenAI verificatiepagina en 2. voer deze code in. Deze pagina wordt automatisch bijgewerkt zodra je autoriseert.", + "yourCode": "Je code", + "openVerificationPage": "Open verificatiepagina", + "copyUrlShort": "Kopieer URL", + "savingConnection": "Verbinden opslaan…", + "codexConnected": "Verbonden!", + "codexConnectionRegistered": "Het Codex-account is geregistreerd. Je kunt deze tab sluiten.", + "tryAgain": "Probeer het opnieuw", + "traeAuthorizationSuccess": "Trae autorisatie ✓", + "traeAuthorizationFailed": "Trae-autorisatie mislukt", + "closeAuthorizationWindow": "Je kunt dit venster sluiten.", + "returnToDashboard": "Terug naar het dashboard.", + "resetViaAppData": "Reset via App Gegevens", + "deleteSettingsToReset": "Verwijder het instellingenbestand uit de app-datamap om je wachtwoord opnieuw in te stellen:", + "quitAppCompletely": "Sluit de OmniRoute desktop-app volledig af", + "navigateToAppData": "Navigeer naar de app-gegevensmap", + "checkAppDataFolder": "Controleer uw systeem app gegevensmap", + "deleteSettingsJson": "Verwijderen", + "relaunchAppFresh": "Herstart de OmniRoute desktop-app — het zal een nieuwe installatie starten", + "alternativeSetPassword": "Alternatief: Stel Nieuw Wachtwoord In", + "setNewPasswordViaEnv": "Stel een nieuw initieel wachtwoord in via het serveromgeving bestand:", + "openServerEnv": "Openen", + "inDataDirectory": "in de datamap", + "addOrUpdate": "Toevoegen of bijwerken", + "deleteAndRelaunch": "Verwijderen", + "settingsJson": "settings.json", + "fromDataDir": "van de datamap", + "relaunchApp": "Herstart de OmniRoute desktop-app" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Klaar om uw AI-infrastructuur te vereenvoudigen?", "ctaDescription": "Sluit u aan bij ontwikkelaars die hun AI-integraties stroomlijnen met OmniRoute. Open source en gratis om te beginnen.", "startFree": "Begin gratis", - "readDocumentation": "Documentatie lezen" + "readDocumentation": "Documentatie lezen", + "company": "Bedrijf", + "pricing": "Prijzen", + "apiReference": "API Referentie", + "helpCenter": "Helpcentrum", + "about": "Over", + "blog": "Blog", + "contact": "Contact", + "terms": "Voorwaarden", + "privacy": "Privacy", + "license": "Licentie", + "footerDescription": "De uniforme interface voor moderne AI-infrastructuur. Veiliger, observeerbaar en schaalbaar.", + "communityDiscussions": "Gemeenschapsdiscussies" }, "docs": { "title": "Documentatie", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registreer en beheer agenten via het ACP-register voor communicatie tussen agenten en het delen van tools.", "protocolAcpStep1": "Navigeer naar Dashboard → Agenten om geregistreerde ACP-agenten te bekijken.", "protocolAcpStep2": "Registreer nieuwe agenten met mogelijkheden en eindpuntconfiguratie.", - "protocolAcpStep3": "Gebruik CLI Tools om communicatiekanalen voor agenten te configureren." + "protocolAcpStep3": "Gebruik CLI Tools om communicatiekanalen voor agenten te configureren.", + "metadataTitleTemplate": "%s — OmniRoute Documentatie", + "metadataDefaultTitle": "OmniRoute Documentatie", + "metadataDescription": "Uitgebreide documentatie voor de OmniRoute AI-gateway — installatie, API, compressie, implementatie en meer.", + "layoutNavTitle": "OmniRoute Documentatie", + "layoutHomeLink": "Documenten Startpagina", + "layoutDashboardLink": "← Terug naar Dashboard", + "homeTitle": "OmniRoute Documentatie", + "homeMetadataDescription": "Alles wat je nodig hebt om je AI te routeren, comprimeren en schalen — installatiehandleidingen, API-referentie, compressie, implementatie en meer.", + "homeTwitterDescription": "Uitgebreide documentatie voor OmniRoute AI-gateway", + "homeDescription": "Alles wat je nodig hebt om je AI te routeren, comprimeren en schalen", + "homeSearchHint": "Druk op Ctrl K om de documentatie te doorzoeken", + "featuredQuickStartTitle": "Snelle Start", + "featuredQuickStartDescription": "Krijg OmniRoute binnen 3 minuten aan de praat", + "featuredAutoComboTitle": "Auto-Combo Gids", + "featuredAutoComboDescription": "Laat OmniRoute de beste AI voor jou kiezen", + "featuredProvidersTitle": "Providers Gids", + "featuredProvidersDescription": "Verbind AI-leveranciers in enkele minuten", + "nonTechUsersTitle": "Voor Niet-Technische Gebruikers", + "nonTechUsersSubtitle": "Begin snel — geen technische achtergrond nodig", + "techUsersTitle": "Voor Techgebruikers", + "techUsersSubtitle": "Diepgaande verkenning van architectuur, API's en interne systemen", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interactieve API-onderzoeker — probeer OmniRoute-eindpunten live met realtime reacties", + "apiExplorerTitle": "API Verkenner", + "apiExplorerDescription": "Probeer OmniRoute-eindpunten live. Selecteer een eindpunt, configureer uw verzoek en zie de reactie in real time.", + "apiExplorerSseStarted": "SSE-stream gestart — controleer de terminal/devtools voor realtime-uitvoer.", + "apiExplorerError": "Fout: {message}", + "apiExplorerAuth": "auth", + "apiExplorerResponseLabel": "Antwoord", + "apiExplorerSelectEndpoint": "Selecteer een eindpunt om te verkennen", + "apiExplorerChooseApi": "Kies een API uit de zijbalk om details te zien en het live uit te proberen", + "feedbackThanks": "Bedankt voor je feedback!", + "feedbackQuestion": "Was deze pagina nuttig?", + "pageMetadataTitle": "{title} — OmniRoute Documentatie", + "pageMetadataDescription": "OmniRoute documentatie: {title}", + "breadcrumb": "Broodkruimel", + "apiReferenceTable": { + "parameters": "Parameters", + "name": "Naam", + "type": "Type", + "description": "Beschrijving", + "returns": "Retourneert", + "typePrefix": "Type:" + } }, "legal": { "privacyPolicy": "Privacybeleid", @@ -9957,7 +10479,42 @@ "successMessage": "Uw {providerName} account is gekoppeld.", "done": "Klaar", "error": "Verbinding mislukt", - "tryAgain": "Probeer het opnieuw" + "tryAgain": "Probeer het opnieuw", + "errorSessionIncomplete": "OAuth-sessie is onvolledig (ontbrekende omleidings-URI of codeverifier). Herstart de verbinding en probeer het opnieuw.", + "errorExchangeFailed": "Uitwisseling mislukt", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: De standaard Google OAuth-gegevens werken alleen op localhost. Voor extern gebruik, configureer je eigen OAuth-gegevens via omgevingsvariabelen: ANTIGRAVITY_OAUTH_CLIENT_ID en ANTIGRAVITY_OAUTH_CLIENT_SECRET. Zie de README-sectie 'OAuth op een externe server'.", + "errorSaveFailed": "Opslaan mislukt", + "errorAuthorizationFailed": "Autorisatie mislukt", + "errorAuthorizationTimeout": "Autorisatietime-out", + "errorRequestFailed": "Verzoek mislukt", + "errorCallbackServerFailed": "Kon de callbackserver niet starten", + "errorBrowserUnavailable": "Browser OAuth is niet beschikbaar voor deze provider in de huidige omgeving. Gebruik in plaats daarvan de ondersteunde authenticatiemethode.", + "errorStateMismatch": "OAuth status mismatch. Herstart de verbinding en probeer het opnieuw.", + "errorImportAccessToken": "Mislukt om toegangstoken te importeren", + "errorSessionNotInitialized": "OAuth-sessie niet geïnitialiseerd. Herstart de verbindingsstroom en probeer het opnieuw.", + "errorNoAuthorizationCode": "Geen autorisatiecode gevonden. Plak de callback-URL of de Authenticatiecode.", + "tabDeviceCode": "Apparaatcode", + "tabBrowserLogin": "Browser Inloggen", + "tabImportAuthJson": "Importeer auth.json", + "tabPasteApiKey": "Plak API-sleutel", + "windsurfPasteDescription": "In de Windsurf / VS Code IDE, voer de opdracht \"Windsurf: Provide Auth Token\" uit vanuit de opdrachtpalet (of klik op de Jupyter \"Get Windsurf Authentication Token\" knop), kopieer vervolgens de getoonde token en plak deze hieronder. Het rechtstreeks openen van windsurf.com/show-auth-token toont alleen een \"Redirecting\" pagina — de IDE moet de flow initiëren.", + "grokAuthJsonDescription": "Plak de VOLLEDIGE inhoud van ~/.grok/auth.json (niet alleen het JWT \"key\" veld). Een blote JWT heeft geen refresh_token, dus de verbinding stopt na verloop (#7610). Geef de voorkeur aan de speciale Import auth.json-modus wanneer deze beschikbaar is.", + "devinDesktopPasteDescription": "Plak een bestaande Devin API-sleutel van een geauthenticeerde Devin-sessie. De beschikbaarheid van sleutelexport en de stappen variëren per Devin-versie en account.", + "devinPasteDescription": "Geef uw WINDSURF_API_KEY op (verkregen via `devin auth login`, of via de Windsurf IDE \"Windsurf: Provide Auth Token\" opdracht).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API-sleutel / Token", + "saving": "Opslaan…", + "saveConnection": "Verbinding Opslaan", + "gheDescription": "Voer de basis-URL van uw GitHub Enterprise-instantie in (bijv. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise-URL", + "gheUrlRequired": "GitHub Enterprise-URL is vereist", + "gitlabDuoSetupTitle": "GitLab Duo OAuth-configuratie", + "gitlabDuoSetupMessage": "GitLab Duo OAuth is niet geconfigureerd. Registreer een OAuth-toepassing op {applicationsUrl} met omleidings-URI {redirectUri} en scopes \"{scopes}\", stel vervolgens {clientIdEnv} in (en optioneel {clientSecretEnv}) en herstart.", + "gitlabDuoSetupDescription": "Nadat de applicatie is geregistreerd en de omgevingsvariabelen zijn ingesteld op deze OmniRoute-instantie, klik op Doorgaan om de OAuth-login te starten.", + "continue": "Doorgaan" }, "cursorAuthModal": { "title": "Sluit Cursor-IDE aan", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Meer laden", - "loadingMore": "Meer laden..." + "loadingMore": "Meer laden...", + "correlationId": "Correlatie-ID", + "group": { + "showAllRows": "Toon alle rijen", + "showLatestPerCorrelation": "Toon laatste per correlatie-ID", + "grouped": "Groepgewijs" + }, + "running": "aan het draaien", + "interval": { + "decrease": "Verlaag interval", + "title": "Automatische verversingsinterval in seconden", + "increase": "Verhoog interval" + }, + "status": { + "inProgress": "In uitvoering", + "recoveredByRetry": "Hersteld door opnieuw te proberen", + "goToParent": "Ga naar bovenliggend verzoek", + "healedTitle": "Mislukt, hersteld na {count} pogingen", + "healed": "genezen", + "failedTitle": "Alle {count} pogingen zijn mislukt", + "failed": "mislukt", + "pinnedTitle": "Model geselecteerd via context-cache sessiepinnen", + "pinned": "vastgezet" + }, + "attempts": "pogingen", + "detail": { + "collapse": "Vouw {title} samen", + "expand": "Breid {title} uit", + "copyTitle": "Kopieer {title}", + "copied": "Gekopieerd!", + "copy": "Kopieer", + "autoscrollOn": "Autoscroll: aan", + "autoscrollOff": "Autoscroll: uit", + "payload": { + "clientRawRequest": "Client Rauwe Verzoek", + "clientRequest": "Klantverzoek", + "openaiRequest": "OpenAI Verzoek", + "providerRequest": "Aanbieder Verzoek", + "providerResponse": "Provider Reactie", + "clientResponse": "Klantreactie", + "pipelineError": "Pijplijnfout" + }, + "payloadMissing": "Gedetailleerde payload-artifact is niet langer beschikbaar voor deze logvermelding.", + "payloadCorrupt": "Gedetailleerde payload-artifact kon niet worden geparsed.", + "notAvailable": "N/A", + "semanticCache": "Semantisch (OmniRoute)", + "upstreamCache": "Upstream (Provider)", + "ariaLabel": "Verzoeklogdetails", + "completed": "Voltooid", + "upstreamStatus": "Stroomopwaarts: {status}", + "statusDiscrepancy": "OmniRoute gaf {status} terug, ook al gaf de provider {provider} terug", + "previousRequest": "Vorige aanvraag", + "nextRequest": "Volgende verzoek", + "close": "Sluit detailvenster", + "startedAt": "Begon Op", + "endedAt": "Eindigde Op", + "duration": "Duur", + "model": "Model", + "provider": "Provider", + "account": "Account", + "input": "Invoer", + "totalIn": "Totaal In: {value}", + "cacheRead": "Cache Lezen: {value}", + "cacheWrite": "Cache Schrijven: {value}", + "compressed": "Gecomprimeerd: {from} → {to} ({percent}% bespaard)", + "output": "Uitvoer", + "totalOut": "Totaal Uit: {value}", + "reasoning": "Redenering: {value}", + "requestedModel": "Aangevraagd Model", + "requestProtocol": "Req Protocol", + "cacheSource": "Cachebron", + "modelPinning": "Model Pinning", + "activeModelPinning": "Actief — model geselecteerd via sessiepinnen", + "rotated": "Geroteerd: {initial} -> {final}", + "apiKey": "API-sleutel", + "noApiKey": "Geen API-sleutel", + "combo": "Combo", + "error": "Fout", + "unblockAll": "Alle deblokkeren", + "cleared": "Geverwijderd", + "unblock": "Deblokkeren", + "relatedRequests": "Gerelateerde Verzoeken ({count})", + "current": "huidig", + "detailStatus": "Detailstatus", + "loadingDetails": "Verzoekdetails laden...", + "providerEventStream": "Provider Evenementenstroom", + "clientEventStream": "Client Evenementenstroom", + "eventStream": "Evenementenstroom", + "responsePayloadLegacy": "Responselast (Legacy)", + "requestPayloadLegacy": "Verzoekpayload (Legacy)", + "noPayload": "Geen payloadgegevens beschikbaar voor deze logvermelding.", + "correlationId": "Correlatie-ID", + "correlationIdValue": "Correlatie-ID: {id}", + "detailedPayloadInfo": "Schakel eerst gedetailleerde logging in als je de vier-fasen client/provider payloadweergave voor nieuwe verzoeken wilt." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} uitgeschakeld", "providerAdded": "{provider} toegevoegd", "add": "Toevoegen", - "manualApiKey": "Gebruik een handmatige API-sleutel" + "manualApiKey": "Gebruik een handmatige API-sleutel", + "createDahlTokenFailed": "Mislukt om Dahl-token te maken", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configureer proxy", + "providerProxyTitleConfigured": "Proxy geconfigureerd: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-beperkt — bekijk de voorwaarden", "caution": "Let op — clausules voor persoonlijk gebruik / proxy's", "ok": "Algemeen permissief" - } + }, + "allProviders": "Alle aanbieders", + "noApiKeyRequired": "Geen API-sleutel vereist" }, "providerHealthAutopilot": { "title": "Autopilot providerstatus", @@ -12390,7 +13047,11 @@ "on": "AAN", "off": "UIT", "availableProviders": "Beschikbare providers ({count})", - "noProviderOverrides": "Geen overschrijvingen — alle actieve providers nemen deel met hun standaardmodellen" + "noProviderOverrides": "Geen overschrijvingen — alle actieve providers nemen deel met hun standaardmodellen", + "resetFailed": "Reset mislukt", + "resetSuccess": "Configuratie teruggezet naar standaardinstellingen", + "running": "Bezig met uitvoeren...", + "testFailed": "Test mislukt" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) is OmniRoutes oprichtende open source-vriend", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Provider ondersteunt geen visie voor dit afbeeldingsverzoek", "capabilityFilter.toolsMismatch": "Provider ondersteunt het aanroepen van tools niet", "capabilityFilter.structuredOutputMismatch": "Provider ondersteunt geen gestructureerde uitvoer", - "capabilityFilter.contextWindowMismatch": "Verzoek overschrijdt de contextvenster van de provider" + "capabilityFilter.contextWindowMismatch": "Verzoek overschrijdt de contextvenster van de provider", + "publicSystem": { + "notFound": { + "title": "Pagina niet gevonden", + "description": "De pagina die je zoekt bestaat niet of is verplaatst.", + "dashboardAriaLabel": "Terug naar dashboard", + "statusAriaLabel": "Open systeemstatuspagina", + "systemStatus": "Systeemstatus" + }, + "error": { + "title": "Interne Serverfout", + "description": "Er is iets misgegaan bij het verwerken van uw verzoek. Ons team is op de hoogte gesteld en werkt aan een oplossing.", + "errorId": "Fout-ID: {id}", + "detailsAriaLabel": "Foutdetails", + "retryAriaLabel": "Probeer de pagina opnieuw te laden", + "tryAgain": "Probeer Het Opnieuw", + "dashboardAriaLabel": "Terug naar dashboard", + "statusAriaLabel": "Open systeemstatus", + "systemStatus": "Systeemstatus" + }, + "globalError": { + "title": "Er is iets misgegaan", + "description": "Er is een onverwachte fout opgetreden. Dit is geregistreerd en ons team zal het onderzoeken.", + "detailsAriaLabel": "Foutdetails", + "retryAriaLabel": "Probeer de pagina opnieuw te laden", + "tryAgain": "Probeer het opnieuw", + "statusAriaLabel": "Open systeemstatus", + "systemStatus": "Systeemstatus" + }, + "offline": { + "title": "Verbindingsprobleem", + "description": "OmniRoute kan momenteel het netwerk niet bereiken. Controleer uw internet-, VPN- of proxy-instellingen.", + "connectionRestored": "Verbinding hersteld", + "offlineModeDetected": "Offline-modus gedetecteerd", + "retryConnection": "Verbind opnieuw", + "openStatusPage": "Open Status Pagina" + }, + "maintenance": { + "title": "Geplande Onderhoud", + "description": "Sommige diensten zijn tijdelijk niet beschikbaar terwijl het onderhoud aan de gang is. De kernroutering blijft meestal online, maar beheersfuncties kunnen verminderd zijn.", + "suggestion1": "Probeer het over een paar minuten opnieuw.", + "suggestion2": "Controleer de huidige gezondheidsindicatoren en de status van de provider voordat je het opnieuw probeert.", + "systemStatus": "Bekijk Systeemstatus", + "healthDashboard": "Open Gezondheidsdashboard" + }, + "status": { + "title": "Systeemstatus", + "description": "Live operationele momentopname voor OmniRoute kernservices.", + "loadingHealth": "Gezondheidsstatistieken laden...", + "failedToLoad": "Kon systeemgezondheid niet laden.", + "unableToReachHealth": "Kan de gezondheids-eindpunt niet bereiken. Controleer de connectiviteit en probeer het opnieuw.", + "healthCheckFailed": "Gezondheidscontrole Mislukt", + "openConnectivityHelp": "Open Connectivity Help", + "maintenanceInfo": "Onderhoudsinformatie", + "service": "Dienst", + "unknown": "onbekend", + "notAvailable": "n/a", + "providersTracked": "Gevolgde Providers", + "circuitBreakerState": "Provider Circuit Breaker Status", + "lastUpdate": "Laatste update: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}u {minutes}m" + }, + "statusPages": { + "400": { + "title": "Ongeldig verzoek", + "description": "De aanvraagpayload is ongeldig of incompleet.", + "suggestion1": "Controleer de vereiste velden en het payloadformaat voordat u het opnieuw probeert.", + "suggestion2": "Als je de API gebruikt, valideer dan het JSON-schema lokaal.", + "suggestion3": "Als dit blijft gebeuren, open dan het verzoek in Translator Playground om de payload te inspecteren.", + "primaryAction": "Open Documentatie", + "secondaryAction": "Open Vertaler" + }, + "401": { + "title": "Ongeautoriseerd", + "description": "Authenticatie is vereist om toegang te krijgen tot deze bron.", + "suggestion1": "Log opnieuw in en probeer de bewerking opnieuw.", + "suggestion2": "Voor API-aanroepen, bevestig dat de Bearer-token aanwezig en geldig is.", + "suggestion3": "Als het token recentelijk is gedraaid, werk dan uw clientreferenties bij.", + "primaryAction": "Ga naar Inloggen", + "secondaryAction": "Beheer API-sleutels" + }, + "403": { + "title": "Verboden", + "description": "Uw verzoek is begrepen, maar toegang is geweigerd door beleid.", + "suggestion1": "Controleer IP-toegestaan/geblokkeerd regels in instellingen.", + "suggestion2": "Controleer de model- en budgetbeleid die aan uw API-sleutel zijn toegewezen.", + "suggestion3": "Vraag een beheerder om de vereiste machtigingsscope toe te kennen.", + "primaryAction": "Open Access Hulp", + "secondaryAction": "Open Beveiligingsinstellingen" + }, + "408": { + "title": "Verzoek Tijdslimiet", + "description": "De server heeft niet op tijd een volledige aanvraag ontvangen.", + "suggestion1": "Probeer de aanvraag opnieuw met een kleinere payload.", + "suggestion2": "Controleer de stabiliteit van uw netwerk en de latentie van VPN/proxy.", + "suggestion3": "Voor lange bewerkingen, schakel streaming in of splits de aanvraag.", + "primaryAction": "Open Endpoint Gids", + "secondaryAction": "Controleer Netwerkstatus" + }, + "429": { + "title": "Te Veel Verzoeken", + "description": "De rate-limieten zijn overschreden voor deze client, sleutel of provider.", + "suggestion1": "Wacht op de cooldown en probeer het opnieuw na het voorgestelde interval.", + "suggestion2": "Schakel over naar een combinatie met fallback-providers.", + "suggestion3": "Stel de veerkracht-/snelheidslimietprofielen van de provider in de instellingen af.", + "primaryAction": "Open Weerbaarheidsinstellingen", + "secondaryAction": "Open Combos" + }, + "500": { + "title": "Interne Serverfout", + "description": "Er is een onverwachte serverfout opgetreden tijdens het verwerken van uw verzoek.", + "suggestion1": "Probeer het opnieuw over een paar seconden.", + "suggestion2": "Controleer de gezondheids-telemetrie en serverlogs op gecorreleerde aanvraag-ID's.", + "suggestion3": "Als het aanhoudt, rapporteer het probleem met tijdstempel en verzoekcontext.", + "primaryAction": "Open Gezondheidsdashboard", + "secondaryAction": "Open Logs" + }, + "502": { + "title": "Slechte Gateway", + "description": "De upstream provider of gateway-integratie heeft een ongeldige reactie teruggegeven.", + "suggestion1": "Probeer het opnieuw met een andere provider of actieve combo-route.", + "suggestion2": "Controleer de providerreferenties en de beschikbaarheid van het model.", + "suggestion3": "Inspecteer de uitvoer van de vertaler als er een formaatconversie betrokken is.", + "primaryAction": "Open Providers", + "secondaryAction": "Open Vertaler" + }, + "503": { + "title": "Service Niet Beschikbaar", + "description": "De service is tijdelijk niet beschikbaar vanwege onderhoud of verlaagde afhankelijkheden.", + "suggestion1": "Wacht een moment en probeer het opnieuw.", + "suggestion2": "Controleer onderhoudsmededelingen en systeemstatus.", + "suggestion3": "Gebruik fallback-providers als je workflow gevoelig is voor latentie.", + "primaryAction": "Onderhoudsdetails", + "secondaryAction": "Systeemstatus" + } + } + }, + "kiroAuthModal": { + "title": "Verbind {providerLabel}", + "chooseMethod": "Kies uw authenticatiemethode:", + "builderId": "AWS Builder ID", + "builderDescription": "Aanbevolen voor de meeste gebruikers. Meld je aan met het AWS-account dat is gekoppeld aan {providerLabel}.", + "organization": "Uw Organisatie (AWS IAM Identiteitscentrum)", + "organizationDescription": "Gebruik de start-URL van uw bedrijfs-SSO (voorbeeld: {url}).", + "googleAccount": "Google-account", + "googleDescription": "Log in met je Google-account.", + "githubAccount": "GitHub-account", + "githubDescription": "Log in met je GitHub-account.", + "importToken": "Token Importeren", + "importDescription": "Plak een vernieuwings-token geëxporteerd van {providerLabel}.", + "apiKey": "API-sleutel", + "apiKeyDescription": "Plak een langdurige {providerLabel} / CodeWhisperer API-sleutel. Deze wordt opgeslagen als een bearer-credential zonder verversingstoken; profielontdekking is op beste inspanning.", + "idcStartUrl": "IDC Start URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "De URL van het AWS IAM Identity Center van uw organisatie", + "awsRegion": "AWS-regio", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-regio voor uw Identity Center (standaard: us-east-1)", + "continue": "Doorgaan", + "back": "Terug", + "autoDetecting": "Token automatisch detecteren...", + "readingCredentials": "Lezen van {providerLabel} referenties uit de AWS SSO-cache", + "tokenNotDetected": "{providerLabel} token werd niet automatisch gedetecteerd. Gelieve uw verversingstoken handmatig in te voeren.", + "refreshToken": "Vernieuw Token", + "tokenPlaceholder": "Token wordt automatisch ingevuld...", + "importing": "Importeren...", + "apiKeyPlaceholder": "Plak uw {providerLabel} API-sleutel...", + "apiKeyStoredDescription": "Opgeslagen versleuteld als een langlevende draagbare referentie. Er is geen verversingsstroom.", + "apiKeyRegionDescription": "AWS-regio voor de sleutel (standaard: us-east-1)", + "validating": "Bezig met valideren...", + "validateAndSaveApiKey": "Valideer en Sla API-sleutel Op", + "errorAutoDetect": "Kon token niet automatisch detecteren", + "errorAutoDetectFailed": "Automatisch token detecteren mislukt", + "errorRefreshTokenRequired": "Voer een verversingstoken in", + "errorImportFailed": "Importeren mislukt", + "errorApiKeyRequired": "Voer een Kiro API-sleutel in", + "errorApiKeyImportFailed": "Importeren van API-sleutel mislukt", + "errorIdcStartUrlRequired": "Voer uw IDC-start-URL in" + }, + "kiroSocialOAuthModal": { + "title": "Verbind {providerLabel} via {providerName}", + "errorStartAuthorization": "Mislukt om autorisatie te starten", + "errorAuthorizationExpired": "Autorisatie is verlopen. Start de inlogprocedure opnieuw.", + "errorAuthorizationFailed": "Autorisatie mislukt", + "initializing": "Initialiseren...", + "settingUp": "{providerName} authenticatie instellen", + "openIncognito": "Open deze link in een Incognito-venster", + "incognitoDescription": "Gebruik een Incognito/Privévenster om sessieconflicten met bestaande accounts te voorkomen.", + "copyLink": "Kopieer link", + "verificationCode": "Verificatiecode", + "waiting": "Wachten op autorisatie...", + "cancel": "Annuleren", + "successTitle": "Succesvol Verbonden!", + "successMessage": "Uw {providerLabel} account via {providerName} is verbonden.", + "done": "Klaar", + "errorTitle": "Verbinding Mislukt", + "close": "Sluiten" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorisatie mislukt", + "errorPopupBlocked": "Pop-up geblokkeerd — sta pop-ups voor deze site toe, of plak de token handmatig hieronder.", + "errorPopupClosed": "Het autorisatievenster is gesloten voordat het voltooid was.", + "errorAccessTokenRequired": "Toegangstoken is vereist.", + "errorImportFailed": "Importeren mislukt", + "title": "Verbind Trae SOLO", + "authorizeDescription": "Autoriseren via trae.ai in een popup. De popup sluit zichzelf zodra de token is geïmporteerd.", + "authorizeImportant": "Belangrijk: je moet eerst ingelogd zijn op trae.ai in browser. De autorisatiepagina bevestigt alleen een bestaande sessie — het kan je niet inloggen. Als je \"Inloggen mislukt\" ziet, klik dan op \"Open solo.trae.ai\", log in en keer dan hier terug.", + "waitingForAuthorization": "Wachten op trae.ai…", + "authorizeWithBrowser": "Autoriseren met Browser", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "of plak een token handmatig in", + "manualInstructions": "Log in op solo.trae.ai, open DevTools → Netwerk, stuur een chatbericht en kopieer de JWT uit de Authorization: Cloud-IDE-JWT {tokenPlaceholder} aanvraagheader. De levensduur van de JWT is ~14 dagen. Optionele identiteitsvelden komen van common_params in dezelfde aanvraagbody.", + "accessTokenLabel": "Toegangstoken (Cloud-IDE-JWT)", + "webId": "Web-ID", + "optional": "optioneel", + "bizUserId": "Biz Gebruikers-ID", + "userUniqueId": "Gebruiker Unieke ID", + "scope": "Omvang", + "tenant": "Huurder", + "region": "Regio", + "importing": "Importeren…", + "importToken": "Token Importeren", + "cancel": "Annuleren" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distributie...", + "complete": "Voltooid", + "defaultLabel": "Proxies Verdelen" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "verouderd", + "risk": "risico", + "close": "Sluiten", + "model": "Model", + "key": "Sleutel", + "defaultKey": "standaard", + "clearConversation": "Gesprek wissen", + "clear": "Wissen", + "tabs": { + "test": "Test", + "logs": "Logboeken" + }, + "loadingLogs": "Logs laden…", + "failedToLoadLogs": "Kon logs niet laden", + "noLogsYet": "Nog geen logs", + "noLogsDescription": "Stuur een testbericht vanaf het Test-tabblad — logboeken voor deze provider verschijnen hier.", + "openFullLogs": "Open volledige logpagina", + "live": "Live", + "tailingLast": "laatste {count} aan het volgen", + "refreshNow": "Vernieuw nu", + "refresh": "Vernieuwen", + "unknownRequester": "onbekende aanvrager", + "fields": { + "timestamp": "Tijdstempel", + "status": "Status", + "duration": "Duur", + "model": "Model", + "requestedModel": "Aangevraagd model", + "provider": "Provider", + "requester": "Aanvrager", + "tokens": "Tokens" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy log details", + "event": "Proxy-evenement", + "close": "Sluit proxy detailvenster", + "time": "Tijd", + "latency": "Latentie", + "clientIp": "Klant IP", + "proxy": "Proxy", + "direct": "Direct", + "type": "Type", + "level": "Niveau", + "provider": "Provider", + "tlsFingerprint": "TLS-vingerafdruk", + "directNative": "Direct", + "targetUrl": "Doel-URL", + "error": "Fout", + "configuration": "Proxyconfiguratie" + }, + "requestTimeline": { + "title": "Verzoek Tijdlijn", + "modes": { + "follow": "Volgen", + "followDescription": "As as de as naar links, blijft de NOW-lijn op 75%", + "now": "Nu", + "nowDescription": "Spring naar huidige tijd, NOW-lijn reset naar midden", + "pan": "Pan", + "panDescription": "Sleep om te verkennen, achtergrond is bevroren" + }, + "reset": "Resetten", + "started": "Gestart", + "ended": "Eindigde", + "duration": "Duur", + "status": "Status", + "provider": "Provider", + "tokens": "Tokens", + "active": "Actief", + "other": "Overig", + "tenMinutes": "10min", + "hour": "uur", + "day": "dag", + "unknownModel": "onbekend", + "pending": "in behandeling" + }, + "metadata": { + "compressionTitle": "Compressie", + "compressionDescription": "Configureer de instellingen voor contextcompressie om het tokenverbruik en de kosten te verlagen.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy-eindpunten voor je AI-infrastructuur", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitor LLM-aanroepen + debug het HTTPS-verkeer van elke applicatie" + }, + "conductor": { + "title": "Conductor — CLI-agent vloot", + "subtitle": "OmniConductor hub: runners, takenwachtrij en raden, live", + "runners": "Hardlopers", + "tasks": "Taken", + "colName": "Naam", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Taak", + "colMode": "Modus", + "colRunner": "Loper", + "colSummary": "Samenvatting", + "online": "online", + "offline": "offline", + "draining": "afvoeren", + "hubOffline": "Conductor hub offline of niet geconfigureerd (CONDUCTOR_HUB_URL) — toont niets in plaats van verouderde gegevens.", + "noRunners": "Geen lopers geregistreerd", + "noTasks": "Nog geen taken", + "detailTitle": "Taakdetails", + "prompt": "Opdracht", + "branch": "Tak", + "fetchHint": "Haal het resultaat op met: git fetch origin {branch}", + "council": "Raad", + "candidates": "Kandidaten", + "cancel": "Taak annuleren", + "cancelConfirmTitle": "Deze taak annuleren?", + "cancelConfirmMessage": "De hub zal de uitvoering op de runner afbreken. Dit kan niet ongedaan gemaakt worden.", + "cancelFailed": "De hub heeft de annulering geweigerd", + "close": "Sluiten", + "error": "Fout", + "faroTitle": "Faro — vlootwoordvoerder", + "faroSubtitle": "Chat en stem, verankerd in echte vlootevenementen. Destructieve opdrachten vragen altijd om bevestiging.", + "faroEmpty": "Vraag naar de vloot — bijv. \"hoe gaat het met de vloot?\"", + "faroPending": "Faro vraagt om bevestiging", + "faroPlaceholder": "praat met Faro…", + "faroSend": "verzenden", + "faroOffline": "Faro (woordvoerder) is offline", + "yes": "Ja", + "no": "Nee", + "pushToTalk": "Houd vast om te praten", + "speakAnswers": "spreek antwoorden", + "voiceModels": "Stemmodellen (provider/model van deze OmniRoute)", + "voiceIdle": "praat", + "voiceListening": "luisteren…", + "voiceThinking": "denkend…", + "voiceSpeaking": "spreken…", + "sttFailed": "Transcriptie mislukt (controleer het STT-model/provider)", + "ttsFailed": "Spraaksynthetisatie mislukt (controleer het TTS-model/provider)", + "micDenied": "Microfoon niet beschikbaar of toestemming geweigerd" + }, + "cliproxyProviderExposure": { + "title": "Provider Blootstelling", + "description": "Exposeer CLIProxyAPI-modellen als een routerdoel onder de cliproxyapi/ prefix.", + "label": "Exposeer als cliproxyapi/...", + "hint": "Wanneer ingeschakeld, verschijnen ontdekte modellen in providerselecties in OmniRoute.", + "updateFailed": "Kon niet bijwerken (HTTP {status})", + "networkError": "Netwerkfout — kon de blootstellingsinstelling van de provider niet bijwerken" + } } - diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 91a73fc105..5f08492b6b 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -172,6 +172,18 @@ "unselectAll": "Fjern alle valg", "visibleModels": "synlige", "selectAllConfirm": "Legge til {count} modeller i denne kombinasjonen?", + "testSelectedProviders": "Testleverandører", + "testingSelectedProviders": "Tester {done}/{total}...", + "noProvidersSelectedToTest": "Sjekk minst én leverandør nedenfor først", + "noModelsToTestForProviders": "Ingen modeller å teste for de valgte leverandørene", + "testSelectedProvidersResults": "{ok} av {total} modeller fungerer", + "selectWorkingModels": "Legg til arbeidende", + "unselectWorkingModels": "Fjern valg av arbeid", + "noWorkingModelsToSelect": "Ingen arbeidsmodeller igjen å legge til", + "providerTestHint": "Tips: sjekk en leverandør → Test → Legg til fungerende. Klikk igjen for å fjerne valget.", + "selectAllProviders": "Sjekk alle leverandører", + "clearProviderSelection": "Fjern merket for leverandører", + "providersSelectedCount": "{count} leverandører sjekket", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Størrelse", + "toggleNoAuthProvider": "Bytt til ingen-autentisering leverandør", + "loadingModels": "Laster inn modeller…", + "selectAModel": "Velg en modell", + "degraded": "Degradert", + "zeroConfigBannerTitle": "Kjører i null-konfigurasjonsmodus", + "zeroConfigBannerBody": "OmniRoute genererte automatisk sikre krypteringsnøkler ved første oppstart. De blir lagret i {dataDir}. Ingen handling er nødvendig — dataene dine er kryptert og trygge. For å bruke tilpassede nøkler, legg til JWT_SECRET og STORAGE_ENCRYPTION_KEY i den filen.", + "batchRelativeTimeIn": "i {value}", + "batchRelativeTimeAgo": "{value} siden", + "batchDetailsTitle": "Batchdetaljer", + "batchProgress": "Fremdrift", + "batchCompletedCount": "{count} fullført", + "batchFailedCount": "{count} mislyktes", + "batchPendingCount": "{count} ventende", + "batchTimeline": "Tidslinje", + "batchTimelineInProgress": "Under Behandling", + "batchTimelineFinalizing": "Ferdigstillelse", + "batchTimelineCompleted": "Fullført", + "batchTimelineFailed": "Feilet", + "batchTimelineExpires": "Utløper", + "batchTimelineExpired": "Utløpt", + "batchTimelineCancelling": "Avbryter", + "batchTimelineCancelled": "Avbrutt", + "batchTokenUsage": "Tokenbruk", + "batchMetadata": "Metadata", + "batchFileContents": "Filinnhold", + "batchFileUsedByCount": "Brukt av {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Forhåndsvisning", + "batchFilePreviewTruncated": "Viser de første {shown} linjene ({total} totalt linjer)", + "batchFileDownloadFull": "Last ned full fil" }, "disabled": "Deaktivert", "featureFlagOmnirouteEmergencyFallbackDescription": "Rut forespørsler med oppbrukt budsjett til gratis reserveleverandør/-modell for nødstilfeller.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Skillelinje", "discovery": "Oppdagelse", "discoverySubtitle": "Skann leverandører for gratis tilgang", + "conductor": "Konduktør", + "conductorSubtitle": "CLI-agent flåte", "resilienceConnections": "Tilkoblingsresiliens", "resilienceConnectionsSubtitle": "Cooldown, bryter, lockout-status", "settingsModalityBridge": "Modality Bridge", - "settingsModalityBridgeSubtitle": "Bilde/lyd → tekst fallback for tekstbare modeller" + "settingsModalityBridgeSubtitle": "Bilde/lyd → tekst fallback for tekstbare modeller", + "commandPalette": { + "title": "Kommando palett", + "searchPlaceholder": "Søk etter sider, innstillinger, verktøy...", + "clearSearch": "Tøm søk", + "noResults": "Ingen resultater", + "navigate": "navigere", + "open": "åpne", + "close": "lukk" + }, + "noResults": "Ingen resultater" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Oppdatering av innstillinger mislyktes", "sync.token.created": "Synkroniseringstoken opprettet", "sync.token.revoked": "Synkroniseringstoken tilbakekalt" - } + }, + "mcpMetricCalls24h": "Anrop (24t)", + "mcpMetricSuccessRate": "Suksessrate", + "mcpMetricAvgDuration": "Gjennomsnittlig varighet", + "mcpMetricTopTool": "Topp verktøy" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "En ny versjon er tilgjengelig. Klikk for å oppdatere.", "updateStarted": "Oppdatering startet...", "reloadingPageAutomatically": "Laster siden automatisk på nytt...", - "providerTopology": "Leverandørtopologi" + "providerTopology": "Leverandørtopologi", + "downloadDmg": "Last ned DMG (macOS)", + "downloadDmgDescription": "En ny versjon av OmniRoute skrivebordsappen er tilgjengelig. Vennligst last ned og installer macOS DMG-installasjonsprogrammet for å oppdatere (nåværende: v{version}).", + "downloadExe": "Last ned EXE (Windows)", + "downloadExeDescription": "En ny versjon av OmniRoute skrivebordsappen er tilgjengelig. Vennligst last ned og installer Windows EXE-installasjonsprogrammet for å oppdatere (nåværende: v{version}).", + "downloadAppImage": "Last ned AppImage (Linux)", + "downloadAppImageDescription": "En ny versjon av OmniRoute skrivebordsappen er tilgjengelig. Vennligst last ned Linux AppImage-pakken for å oppdatere (nåværende: v{version}).", + "downloadUpdate": "Last ned oppdatering", + "downloadUpdateDescription": "En ny versjon av OmniRoute skrivebordsappen er tilgjengelig. Vennligst last ned det respektive appformatet for systemet ditt for å oppdatere (nåværende: v{version}).", + "updateQueued": "Køet oppdatering til v{version}.", + "updateDockerRebuilding": "Docker-bildet bygges på nytt i bakgrunnen.", + "updateWaitingRestart": "Venter på at OmniRoute skal starte på nytt med den nye versjonen.", + "updateInstalling": "Installerer v{version}.", + "updateRunning": "OmniRoute kjører nå v{version}.", + "updateCompleted": "OmniRoute oppdatert til v{version}.", + "updateDockerStillRebuilding": "Docker-bildet bygges fortsatt på nytt for v{version}.", + "updateInstallingBackground": "Installerer v{version} i bakgrunnen.", + "updateWaitingVersion": "Venter på at OmniRoute skal komme tilbake på v{version}.", + "updateDockerStillInProgress": "Docker ombygging pågår fortsatt.", + "updateRestarting": "Tjenestestart pågår. Venter på at OmniRoute skal komme tilbake online...", + "updateTimeout": "Oppdatering startet, men v{version} ble ikke tilgjengelig før tidsavbrudd. Oppdater siden eller sjekk serverlogger.", + "updateTimedOut": "Oppdatering til v{version} tok for lang tid.", + "updateStartFailed": "Kunne ikke starte oppdateringen.", + "noResponseStream": "Ingen responsstrøm mottatt.", + "updateComplete": "Oppdatering fullført!", + "updateFailed": "Oppdatering mislyktes.", + "updateNetworkError": "Nettverksfeil — tilkoblingen mistet under oppdatering.", + "stepInstallPackage": "Installer Pakke", + "stepRebuildNativeModules": "Bygg Native Moduler", + "stepRestartService": "Start Tjeneste", + "stepComplete": "Fullført", + "stepError": "Feil", + "updateCompleteTitle": "Oppdatering Fullført!", + "updateFailedTitle": "Oppdatering Mislyktes", + "updatingTitle": "Oppdaterer OmniRoute...", + "reloadNotice": "Siden vil laste inn på nytt automatisk om noen sekunder.", + "retryNotice": "Vennligst prøv igjen eller oppdater manuelt via CLI.", + "restartNotice": "Ikke lukk denne siden. Systemet vil starte på nytt automatisk.", + "reloadNow": "Last inn på nytt", + "closeUpdate": "Lukk", + "retryUpdate": "Prøv igjen", + "updateAvailableTitle": "Oppdatering tilgjengelig: v{version}{desktop}", + "desktopAppLabel": "(Skrivebordsapp)", + "checkingForUpdates": "Sjekker etter oppdateringer...", + "versionAvailableForDownload": "Versjon v{version} er tilgjengelig for nedlasting.", + "downloadingUpdate": "Laster ned oppdatering... {percent}% fullført.", + "updateDownloaded": "Oppdatering lastet ned! Klikk på Start på nytt og installer for å bruke.", + "autoUpdateFailed": "Automatisk oppdatering mislyktes: {reason}.", + "unknownUpdateError": "Ukjent feil", + "versionAvailableDesktop": "Versjon v{version} er tilgjengelig for skrivebordsappen.", + "manualUpdateRequired": "Manuell oppdatering kreves for denne installasjonstypen.", + "restartAndInstall": "Start På Nytt & Installer", + "checkForUpdate": "Sjekk etter oppdatering", + "manualUpdate": "Manuell Oppdatering", + "directDownloadHint": "Eller last ned den respektive installasjonsformatet direkte:", + "releaseNotes": "Utgivelsesnotater", + "readMore": "Les Mer", + "noAuthLabel": "Ingen autentisering" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Utledet fra lagrede samtalelogger rundt denne forespørselen", "routeRecommendations": "Anbefalinger", "routeLimitations": "Begrensninger", - "routeNoKnownLimitations": "Ingen kjente begrensninger for denne forklaringen." + "routeNoKnownLimitations": "Ingen kjente begrensninger for denne forklaringen.", + "searchAnalyticsLoading": "Laster inn søkeanalyse…", + "searchAnalyticsNoData": "Ingen søkedata tilgjengelig ennå.", + "searchAnalyticsNoDataDescription": "Søkeforespørslene vil vises her etter den første søket via /v1/search.", + "searchAnalyticsToday": "{count} i dag", + "searchAnalyticsCachedRequests": "{count} bufrede forespørseler", + "searchAnalyticsApiCosts": "søke API-kostnader", + "searchAnalyticsErrors": "{count} feil", + "searchAnalyticsNoErrors": "Ingen feil", + "searchAnalyticsProviderBreakdown": "Leverandørfordeling", + "searchAnalyticsQueries": "forespørseler", + "searchAnalyticsEmptyDescription": "Bruk POST /v1/search for å starte ruting av nettsøk.", + "searchAnalyticsFreeTier": "Gratisnivå tilgjengelig: Serper (2 500/mnd), Brave (2 000/mnd), Exa (1 000/mnd), Tavily (1 000/mnd) — totalt 6 500+ gratis søk/mnd med automatisk failover.", + "autoRoutingNoDataAvailable": "Ingen auto-ruting analyser tilgjengelig. Gjør forespørsel med auto/ prefikset for å se metrikker.", + "defaultVariantLabel": "Standard", + "freeTierAvailable": "Gratis nivå tilgjengelig" }, "apiManager": { "title": "API-nøkler", @@ -2348,7 +2478,9 @@ "providerCount": "{count} leverandører", "imageToTextBridgeAvailable": "Modality Bridge kan nå beskrive bilder for tekstbare modeller. Inline-lekplassen vil være tilgjengelig når /api/v1/images/understanding er implementert.", "imageToTextBridgeCta": "Konfigurer Image→Text-broen i Modality Bridge-innstillingene", - "sttBridgeCta": "Konfigurer Tale→Tekst-broen i Modality Bridge-innstillinger" + "sttBridgeCta": "Konfigurer Tale→Tekst-broen i Modality Bridge-innstillinger", + "existingConnection": "Eksisterende tilkobling", + "openrouterSttDescription": "OpenRouter tale-til-tekst modeller bruker din konfigurerte OpenRouter-tilkobling. Ingen separate legitimasjon er nødvendig." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Lim inn i:", "copilotReloadInstruction": "Last deretter inn VS Code på nytt og angi API-nøkkelen i inndatafeltet.", "wireApiChatCompletions": "Chatfullføringer (/chat/fullføringer)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Handling mislyktes", + "cliproxyapiActionSucceeded": "Handling fullført", + "cliproxyapiCheckUpdates": "Sjekk oppdateringer", + "cliproxyapiDescription": "Oppstrøms proxy-fallback (Go-basert OAuth)", + "cliproxyapiHealth": "Helse", + "cliproxyapiHealthy": "Sunn", + "cliproxyapiInstall": "Installer", + "cliproxyapiNotInstalledValue": "Ikke installert", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Forespørselen mislyktes", + "cliproxyapiRestart": "Start på nytt", + "cliproxyapiStart": "Start", + "cliproxyapiStatusError": "Feil", + "cliproxyapiStatusInstalled": "Installert", + "cliproxyapiStatusNotInstalled": "Ikke installert", + "cliproxyapiStatusRunning": "Kjører", + "cliproxyapiStatusStopped": "Stoppet", + "cliproxyapiStop": "Stopp", + "cliproxyapiUnhealthy": "Usunn", + "cliproxyapiUnknown": "Ukjent", + "cliproxyapiUpdate": "Oppdater", + "cliproxyapiUpdateAvailable": "Oppdatering tilgjengelig: v{current} → v{latest}", + "cliproxyapiVersion": "Versjon" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Bare gå videre ved kvoteutløp", + "fallbackOnlyOnQuotaExhaustionShort": "kvote-eller-fallback", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Moduspakke og vekting forblir her; kjøretidsstatus for kretsbryter forblir på Helse-siden.", "emailVisibilityHint": "Konto-e-poster her følger den globale personvernbryteren.", "emailVisibilityTooltip": "Bruk øyeikonet for å vise eller skjule konto-e-poster globalt på tvers av komboer, leverandører og kvoteskjermer.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Trinn for trinn (Leverandør → Modell)", + "builderModeGlobal": "Global modell søk (Egendefinert kombinasjon)", + "builderGlobalSearchPlaceholder": "Søk etter modeller på tvers av alle leverandører (f.eks. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Legg til alt", + "builderGlobalShortcuts": "Snarveier:", + "builderGlobalNoResults": "Ingen modell funnet for \"{query}\".", + "builderGlobalProviderLabel": "Leverandør:", + "builderGlobalAccountCount": "{count, plural, one {# konto} other {# kontoer}}", + "builderGlobalAdded": "Lagt til", + "builderGlobalAdd": "Legg til", "manualModel": "Manuell modell", "manualModelInvalid": "Angi en modell som leverandør/modell.", "manualModelUnknownProvider": "Ukjent leverandørprefiks.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Økt Tilgjengelighet", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Øktlåsing av", "kimiPresetTitle": "Kimi Coding-forhåndsinnstilling", "kimiPresetDescription": "Kimi K3 som primærmodell (Moonshot API), med automatisk tilbakefall til dine Kimi Code-tilkoblinger (kimi-coding, kimi-web) når konfigurert.", - "kimiPresetCta": "Legg til forhåndsinnstilling" + "kimiPresetCta": "Legg til forhåndsinnstilling", + "intelligentComboCount": "{count, plural, one {# intelligent kombinasjon} other {# intelligente kombinasjoner}}", + "providersInScope": "{count, plural, one {# leverandør i omfang} other {# leverandører i omfang}}", + "savingModePack": "Lagrer {pack}…", + "errorTitle": "Kunne ikke laste inn kombinasjoner", + "errorDescription": "Vi kunne ikke laste inn kombinasjonsdata akkurat nå. Sjekk tilkoblingen din og prøv igjen.", + "errorId": "Feil-ID: {id}", + "errorRetry": "Prøv igjen", + "comboLabel": "Kombinasjon" }, "costs": { "title": "Kostnader", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Brukernavn", "obsidianPassword": "Passord", - "obsidianTailscaleHint": "Bruk Tailscale-IP-en din i stedet for localhost hvis du kobler til fra mobil. Begge enhetene må være på samme Tailscale-nettverk." + "obsidianTailscaleHint": "Bruk Tailscale-IP-en din i stedet for localhost hvis du kobler til fra mobil. Begge enhetene må være på samme Tailscale-nettverk.", + "cloudSyncNotConfigured": "Cloud sync er ikke konfigurert på denne instansen.", + "notionConnect": "Koble til", + "notionConnectFailed": "Kunne ikke koble til", + "notionConnected": "Koblet", + "notionConnectionFailed": "Tilkobling mislyktes", + "notionDescription": "Søk, les, spør, og skriv til Notion gjennom rutede AI-modeller", + "notionDisconnect": "Koble fra", + "notionDisconnectFailed": "Kunne ikke koble fra", + "notionEnterToken": "Vennligst skriv inn en Notion-integrasjonstoken", + "notionIntegrationHelp": "Opprett en intern integrasjon på", + "notionIntegrationToken": "Notion Intern Integrasjonstoken", + "notionNotConnected": "Ikke tilkoblet", + "notionTokenConfigured": "Token konfigurert. Notion-verktøy er tilgjengelige via MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Leverandør / Modell", "noRemoteProviders": "Ingen leverandører med konfigurert API-nøkkel", "selectProviderModel": "Velg en modell", + "customBaseUrlLabel": "Egendefinert base-URL (valgfritt)", + "customModelIdLabel": "Egendefinert modell-ID (valgfritt)", + "customEndpointHelp": "Bruk et OpenAI-kompatibelt /embeddings-endepunkt. Lokale endepunkter er tillatt; skymetadata-mål er blokkert.", + "customEndpointSave": "Bruk tilpasset endepunkt", + "customEndpointInvalid": "Skriv inn både en gyldig HTTP(S) base-URL og en modell-ID, eller la begge feltene stå tomme.", + "customEndpointSaveFailed": "Den tilpassede innbyggingsendepunktet kunne ikke lagres.", "staticEnabledLabel": "Aktiver Static Potion", "staticEnabledDesc": "Last ned og bruk potion-base-8M-modell lokalt", "transformersEnabledLabel": "Aktiver Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Rydder...", "cleanNow": "Rydd nå", "cleanupSuccess": "{count} punkt(er) fjernet", - "cleanupFailed": "Opprydding mislyktes" + "cleanupFailed": "Opprydding mislyktes", + "hostLabel": "Vert", + "collectionLabel": "Samling" }, "rerank": { "enableLabel": "Aktiver Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-lags reservediagram", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Sett opp gratis leverandører", + "description": "Valgfritt aktiver utvalgte leverandører uten registrering. Gå gjennom hver leverandørs varsel og nettsted før du fortsetter; tilgjengelighet og hastighetsgrenser styres av tredjepart.", + "loading": "Laster inn gratis leverandører...", + "loadFailed": "Kunne ikke laste inn gratis leverandører.", + "alreadyConfigured": "Alle kvalifiserte gratisleverandører er allerede konfigurert.", + "reviewProviderSite": "Gå gjennom leverandørens nettsted og vilkår", + "confirmation": "Jeg har gjennomgått disse tredjepartsleverandørene og ønsker at OmniRoute skal opprette de valgte tilkoblingene.", + "setupSelected": "Sett opp valgte leverandører", + "settingUp": "Setter opp...", + "setupFailed": "Kunne ikke sette opp de valgte leverandørene. Ingenting eksisterende ble endret.", + "retryFailed": "Prøv på nytt mislykkede leverandører", + "orUseApiKey": "eller koble til med en API-nøkkel", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "opprettet", + "skipped": "allerede konfigurert", + "failed": "mislyktes" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Obligatorisk. Leverandørens API-base-URL.", "iconUrlLabel": "Ikon-URL", "iconUrlHint": "Valgfritt. Bilde-URL som vises som denne leverandørens ikon.", + "iconUrlInvalid": "Ugyldig ikon-URL. Bruk en http(s):// eller data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibel (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Økten er allerede aktiv", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Bruk autentisering", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Lim inn API-nøkkel…", "zedSaving": "Lagrer…", "zedImportAction": "Importer", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktiver automatisk fornyelse av Cursor-økt", + "cursorAgentNudgeBody": "Installer cursor-agent for automatisk sesjonsfornyelse — uten det, trenger Cursor-tilkoblinger periodisk manuell gjenoppretting omtrent hver 24. time.", + "cursorAgentNudgeDismiss": "Avvis", "zedManualImportFailed": "Manuell import mislyktes", "zedManualImportSuccess": "Importerte {provider}-token fra Zed", "grokImportTitle": "Importer Grok Build-autentisering", @@ -5878,7 +6066,6 @@ "friendliai": "Gratisnivå for serverløs inferens — ingen kredittkort påkrevd", "gemini": "Gratis for alltid: 1,500 req/dag for Gemini 2.5 Flash — ingen kredittkort, hent nøkkel på aistudio.google.com", "gigachat": "Koble til GigaChat (Sber) med en API-nøkkel.", - "github-models": "Opprett et GitHub PAT med 'models: read'-omfang på github.com/settings/tokens", "gitlab": "GitLab personlig adgangstoken for det offentlige Code Suggestions-API-et. Konfigurer en selvvertet base-URL når du ikke bruker gitlab.com.", "gitlawb-gmi": "Hent API-nøkkelen din fra Gitlawb Opengateway-dashbordet.", "gitlawb": "Hent API-nøkkelen din fra Gitlawb Opengateway-dashbordet.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Koble til Kimi Coding med den eksisterende OAuth-flyten.", "kiro": "Gratisnivå: 50 kreditter/måned (~25K–100K tokens). ⚠️ Kiros brukervilkår forbyr bruk av tredjeparts proxy/harness.", "codex": "Koble til OpenAI Codex med den eksisterende OAuth-flyten.", - "qwen": "Koble til Qwen Code med den eksisterende OAuth-flyten." + "qwen": "Koble til Qwen Code med den eksisterende OAuth-flyten.", + "github-models": "Opprett et GitHub PAT med 'models: read'-omfang på github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} godtar leverandør-native modell-ID-er. Importer fra /models eller legg til egendefinerte ID-er for ruting.", "bedrockModelsDescription": "Amazon Bedrock-modeller er omfattet av AWS-regionen. Importer fra /models eller legg til berggrunnsmodell-IDer aktivert i den valgte regionen.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Når alle konfigurerte tilkoblinger er brukt opp (kvote, kreditter eller utløp), bruk midlertidig denne leverandørens nøkkelløse nivå. Slå av for å hoppe over denne leverandøren i stedet for å sende anonyme forespørsel — anbefales når det nøkkelløse nivået avviser dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktivert for {provider}", "anonymousFallbackDisabled": "Anonym fallback deaktivert for {provider} — utmattede tilkoblinger vil hoppe over denne leverandøren", - "anonymousFallbackUpdateFailed": "Kunne ikke oppdatere anonym fallback-innstilling" + "anonymousFallbackUpdateFailed": "Kunne ikke oppdatere anonym fallback-innstilling", + "batchDeleteFailed": "Batch sletting mislyktes", + "batchDeleteNetworkError": "Nettverksfeil under batch-sletting", + "batchUpdateFailed": "Batchoppdatering mislyktes", + "batchUpdateNetworkError": "Nettverksfeil under batchoppdatering", + "categoryAudio": "Lyd", + "categoryCloudAgent": "Skyagent", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Søk", + "categoryWebCookie": "Nettkake", + "claudeExtraUsageBlockingDisabled": "Claude ekstra-bruk blokkering deaktivert (ekstra bruk er tillatt)", + "claudeExtraUsageBlockingEnabled": "Claude ekstra-bruk blokkering aktivert (ekstra bruk vil bli blokkert)", + "claudeRoutingPreferenceDisabled": "Uten prefiks Claude-modeller foretrekker ikke lenger Claude Code", + "claudeRoutingPreferenceEnabled": "Uten prefiks Claude-modeller foretrekker nå Claude Code", + "clearMediaFilter": "Tøm", + "cliproxyRoutingDisabled": "Forespørslene bruker nå native OmniRoute (direkte)", + "cliproxyRoutingEnabled": "Forespørslene rutes nå gjennom CLIProxyAPI (dypere emulering)", + "codexLimitPolicyUpdated": "Codex grensepolicy oppdatert", + "codexServiceModeUpdated": "Codex tjenestemodus oppdatert", + "codexServiceTierActive": "Codex {tier} tjenestelag er aktivt", + "codexTierFastLabel": "Rask", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Kunne ikke bruke kommandoen Code auth", + "commandCodeApplyingApproval": "Nettleser godkjent, anvender…", + "commandCodeApplyingKey": "Bruker nettlesergodkjent nøkkel…", + "commandCodeApprovalInstructions": "Åpne auth-URL-en, godkjenn tilgang, og lim deretter inn den returnerte nøkkelen/JSON-en/URL-en nedenfor…", + "commandCodeAuthExpired": "Kommando Kode auth utløpt", + "commandCodeConnected": "Kommando Kode tilkoblet", + "commandCodeConnectionAdded": "Kommando Kode-tilkobling lagt til", + "commandCodeLinkExpired": "Kommando Kode-lenke utløpt", + "commandCodeOpeningStudio": "Åpner Command Code Studio…", + "commandCodePopupBlocked": "Popup blokkert. Vennligst tillat popup-vinduer og prøv Command Code Connect igjen.", + "commandCodeStartFailed": "Kunne ikke starte Command Code auth", + "connectionDeleted": "Tilkobling slettet", + "connectionFallback": "tilkobling", + "coolingConnectionsDescription": "Disse tilkoblingene returnerte en 429 (rate-limit) på sin siste forespørsel. OmniRoute vil hoppe over dem til timeren utløper — ingen manuell deaktivering nødvendig.", + "coolingConnectionsTitle": "For øyeblikket kjøler ({count})", + "failedDeleteAlias": "Kunne ikke slette aliaset", + "failedDeleteConnection": "Kunne ikke slette tilkoblingen", + "failedDistributeProxies": "Kunne ikke distribuere proxyer.", + "failedSaveModelEndpointSettings": "Kunne ikke lagre innstillingene for modellendepunktet", + "failedUpdateClaudeExtraUsagePolicy": "Kunne ikke oppdatere Claude ekstra-bruksregler", + "failedUpdateClaudeRoutingPreference": "Kunne ikke oppdatere Claude Code rutepreferanse", + "failedUpdateCliproxyRouting": "Kunne ikke oppdatere CLIProxyAPI-ruting", + "failedUpdateCodexLimitPolicy": "Kunne ikke oppdatere Codex grensepolicy", + "failedUpdateCodexServiceMode": "Kunne ikke oppdatere Codex-tjenestemodus", + "filterByMedia": "Media", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kimi Code API-nøkkel", + "modelTestFailed": "Modelltesten feilet", + "modelTestNetworkError": "Nettverksfeil testing modell", + "networkError": "Nettverksfeil", + "networkErrorDeletingAlias": "Nettverksfeil ved sletting av alias", + "networkErrorSettingAlias": "Nettverksfeil ved innstilling av alias", + "noProvidersMatch": "Ingen leverandører samsvarer med søket ditt.", + "noSavedProxies": "Ingen lagrede proxyer funnet. Legg til proxyer i Innstillinger → Proxy først.", + "pageLoadErrorDescription": "Vi kunne ikke laste inn leverandørdata akkurat nå. Sjekk tilkoblingen din og prøv igjen.", + "pageLoadErrorId": "Feil-ID: {id}", + "pageLoadErrorRetry": "Prøv igjen", + "pageLoadErrorTitle": "Kunne ikke laste inn leverandører", + "playgroundTitle": "Lekeplass", + "providerDetailConnectionFlexActive": "Codex flex tjenestelag er aktivt for denne forbindelsen", + "providerDetailConnectionPriorityActive": "Codex prioriteringstjeneste nivå er aktiv for denne forbindelsen", + "providerDetailGlobalFlexActive": "Global Codex flex tjenestelag er aktivt", + "providerDetailGlobalPriorityActive": "Global Codex prioriteringstjeneste nivå er aktivt", + "proxiesDistributed": "Distribuert {assigned} proxy tildeling(er) over {tagLabel}{total} tilkobling(er).", + "rerankEndpoint": "Rangér på nytt", + "savedModelEndpointSettings": "Innstillinger for lagrede modellendepunkter", + "searchByModelAria": "Søk etter modell", + "selectSupportedEndpoint": "Velg minst ett støttet endepunkt", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Innstillinger", @@ -6460,7 +6719,24 @@ "loadFailed": "Kunne ikke laste inn abonnementslisten", "toggleFailed": "Kunne ikke slå bryteren", "refreshFailed": "Kunne ikke oppdatere", - "deleteFailed": "Kunne ikke slette" + "deleteFailed": "Kunne ikke slette", + "add": "Legg til", + "cancel": "Avbryt", + "configure": "Konfigurer", + "copyEndpoint": "Kopier Endepunkt", + "coreEndpointHint": "Kjerne Endepunkt Hint", + "coreNodesHint": "Kjerne Noder Hint", + "create": "Opprett", + "deleteConfirm": "Slett Bekreftelse", + "empty": "Tom", + "globalModeDescription": "Global Modus Beskrivelse", + "localCoreHint": "Lokal Kjernehint", + "nodeSummary": "Node Sammendrag", + "providerRequired": "Leverandør påkrevd", + "providerRouting": "Leverandør Ruting", + "refresh": "Oppdater", + "refreshInterval": "Oppdateringsintervall", + "ruleModeDescription": "Regelmodus Beskrivelse" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Kjør en automatisk bilde-til-tekst-fallback før bildeforespørsler rutes til modeller som kun støtter tekst.", "visionBridgeEnabledLabel": "Aktivert", "visionBridgeEnabledDesc": "Slå av/på førkallsbroen som erstatter bildedeler med ekstrahert tekst.", + "visionBridgeRerouteTextOnlyLabel": "Omdiriger tekstbare modeller", + "visionBridgeRerouteTextOnlyDesc": "Send den komplette forespørselen, inkludert bilder, til bro-modellen når den valgte modellen ikke har bildeinngang.", "visionBridgeModel": "Bromodell", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Enhver OmniRoute-modell-ID som støtter syn kan brukes her.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-nøkkelen mangler manage-scope.", "BYPASS_PREFIX_NOT_ALLOWED": "Ett eller flere prefikser er rettet mot spawn-kapable ruter og kan ikke omgås.", "GENERIC": "Kunne ikke oppdatere authz-innstillinger." - } + }, + "remove": "Fjern" }, "resilienceBaseCooldownLabel": "Base nedkjøling", "scopeLabel": "Omfang", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Tester lyd…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klipp(e) transkribert av {model}", "modalityBridgeAudioTestNoop": "Audio Bridge ble ikke aktivert (målet kan støtte lyd, ingen STT-leverandør er tilkoblet, eller broen er deaktivert)", - "modalityBridgeAudioTestError": "Lydtest mislyktes: {message}" + "modalityBridgeAudioTestError": "Lydtest mislyktes: {message}", + "modelRoutingDescriptionPlaceholder": "Rute Opus-modeller til frontier-kombinasjon", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Koder", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback Beskrivelse", + "cliproxyapiHealthLabel": "Cliproxyapi Helse Etikett", + "cliproxyapiImportFailed": "Cliproxyapi Import Mislyktes", + "cliproxyapiImportResult": "Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "Cliproxyapi Ugyldig URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Livssyklusvarsel Etter", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Livssyklusvarsel Før", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Livssyklusvarsling Lenke", + "cliproxyapiPortLabel": "Cliproxyapi Port Merke", + "cliproxyapiStatusLabel": "Cliproxyapi Status Etikett", + "cliproxyapiVersionLabel": "Cliproxyapi Versjonsmerke", + "collection": "Samling", + "errorPage": { + "description": "Vi kunne ikke laste inn innstillingene akkurat nå. Vennligst prøv igjen om noen sekunder.", + "errorId": "Feil ID: {id}", + "retry": "Prøv igjen", + "title": "Kunne ikke laste inn innstillinger" + }, + "host": "Vert", + "notInstalled": "Ikke installert", + "oneproxyActions": "Oneproxy Handlinger", + "oneproxyActive": "Oneproxy Aktiv", + "oneproxyAnonymity": "Oneproxy Anonymitet", + "oneproxyCountry": "Oneproxy Land", + "oneproxyDelete": "Oneproxy Slett", + "oneproxyEmpty": "Oneproxy Tomt", + "oneproxyHost": "Oneproxy Vertskap", + "oneproxyLatency": "Oneproxy Latency", + "oneproxyProtocol": "Oneproxy-protokoll", + "oneproxyQuality": "Oneproxy Kvalitet", + "oneproxySyncFailed": "Synkronisering mislyktes: {error}", + "oneproxySyncSuccess": "Synkroniserte {total} proxyer ({added} nye, {updated} oppdaterte)", + "proxyDocumentationSocks5DescAfter": "Proxy Dokumentasjon Socks5 Beskrivelse Etter", + "proxyFreePoolAddProxy": "Proxy Gratis Pool Legg Til Proxy", + "proxyFreePoolAdding": "Proxy Gratis Pool Legger Til", + "proxyFreePoolSelectProxy": "Proxy Gratis Pool Velg Proxy", + "proxyStatusActive": "Proxy Status Aktiv", + "proxyStatusInactive": "Proxy Status Inaktiv", + "routingAddEntry": "Legg til oppføring", + "settingSaveFailed": "Lagring av innstillinger mislyktes", + "settingSaved": "Innstilling Lagret", + "skillsmpApiKeyHintAfter": ". Rate limit: {limit} forespørseler/dag.", + "skillsmpApiKeyHintBefore": "Få API-nøkkelen din fra", + "syncFailed": "Synkronisering mislyktes", + "unhealthy": "Usunn", + "oneproxyDescription": "Hent og roter gratis validerte proxyer fra 1proxy fellesskapsplattformen", + "oneproxySyncing": "Synkroniserer...", + "oneproxySyncNow": "Synk Nå", + "oneproxyClearAll": "Fjern Alt", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Fjern alle 1proxy-proxyer?", + "memorySkillsSkillsmpDescription": "Koble til SkillsMP for å oppdage og installere ferdigheter fra markedet.", + "memorySkillsActiveProviderDescription": "Velg hvilken leverandør Skills-siden bruker for søk og installasjon.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Markedsplass", + "memorySkillsSkillsmpProviderDescription": "Autentisert markedsplass (bruker din SkillsMP API-nøkkel).", + "memorySkillsSkillsshProviderTitle": "skills.sh Katalog", + "memorySkillsSkillsshProviderDescription": "Offentlig katalogleverandør (ingen API-nøkkel kreves).", + "routingCcBridgeCatalogName": "Anthropic-kompatibel CC-bro", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Native Claude-leverandør med OAuth-utstedte tokens.", + "routingCcBridgeName": "Claude-Code Broen", + "routingCcBridgeDescription": "Relay-endepunkter ved bruk av API-nøkler (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Egendefinert leverandør.", + "routingUnknownOpKind": "Ukjent op type: {kind}", + "routingInvalidJson": "Ugyldig JSON: {error}", + "routingConfigMustBeObject": "Konfigurasjonen må være et JSON-objekt", + "routingEnabledMustBeBoolean": "`enabled` må være true eller false", + "routingPipelineMustBeArray": "`pipeline` må være et array av ops", + "routingPipelineTooLong": "Pipeline kan ikke overstige 50 ops", + "routingOpMissingKind": "Op #{index}: mangler eller er ugyldig `kind`", + "routingOpUnknownKind": "Op #{index}: ukjent type \"{kind}\"", + "routingJsonEditorHide": "Skjul JSON-redigerer", + "routingJsonEditorImportExport": "Importer / eksporter JSON", + "routingJsonEditorLabel": "JSON (rediger og bruk, eller lim inn for å importere)", + "routingApplyJson": "Bruk JSON", + "routingTransformsFootnote": "Alle transformasjonsoperasjoner er idempotente ved ny kjøring. Endringer trer i kraft umiddelbart ved neste forespørsel.", + "cliproxyapiUnknown": "Ukjent", + "cliproxyapiVersion": "Versjon", + "cliproxyapiHealth": "Helse", + "cliproxyapiPort": "Port", + "qdrantHost": "Vert", + "qdrantCollection": "Samling" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Standard", + "off": "Av", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Aggressiv", + "ultra": "Ultra", + "responsesToolOutput": "Svarverktøyutdata" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Kjører sist i stakken (etter at RTK/Caveman renser teksten, og OmniGlyph konverterer resten til bilder) og kjører også frittstående via omniglyph-modus. Dette er en forhåndsvisning og forblir deaktivert som standard til end-til-end-validering er fullført.", "saved": "Lagret.", "saveFailed": "Kunne ikke lagre.", - "enableAria": "Aktiver OmniGlyph-motoren" + "enableAria": "Aktiver OmniGlyph-motoren", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Innebygde tjenester", @@ -9127,7 +9500,49 @@ "unableToLoad": "Kan ikke laste inn systemberegninger", "product": "Produkt", "resources": "Ressurser", - "company": "Selskapet" + "company": "Selskapet", + "tokenHealthTooltips": { + "allHealthy": "Alle tokens er sunne", + "needsAttention": "Noen tokens trenger oppmerksomhet", + "refreshFailures": "Token oppfriskningsfeil oppdaget", + "unknown": "Helsesituasjon ukjent" + }, + "systemMonitor": { + "metricsAriaLabel": "Systemmetrikker", + "memory": "Minne", + "memoryShort": "mem", + "uptime": "Oppetid", + "ariaLabel": "Systemovervåking", + "title": "Systemovervåkning", + "version": "Versjon", + "connections": "Tilkoblinger", + "circuitBreakers": "Kretsbrytere", + "open": "{count} åpen", + "memoryUsage": "Minnebruk" + }, + "never": "Aldri", + "justNow": "Akkurat nå", + "minutesAgo": "{count}m siden", + "hoursAgo": "{count}t siden", + "tokens": "Tokens", + "costs": "Kostnader", + "autoRefresh": "Automatisk Oppdatering ({seconds}s)", + "toggleAutoRefresh": "Veksle automatisk oppdatering", + "activeRequests": "Aktive forespørseler", + "totalRequests": "Totale forespørseler", + "totalInputTokens": "Totale Inndata Tokens", + "model": "Modell", + "provider": "Leverandør", + "requests": "Forespørseler", + "lastUsed": "Sist Brukt", + "inputTokens": "Inndata Tokens", + "totalTokens": "Totale Tokens", + "inputCost": "Inndata Kostnad", + "outputCost": "Utgangskostnad", + "noUsageData": "Ingen bruk registrert ennå. Gjør noen forespørsel for å se data her.", + "account": "Konto", + "accountLabel": "Konto {id}", + "noAccountUsage": "Ingen konto-spesifik bruk registrert ennå. Gjør forespørsel med OAuth-kontoer for å se data her." }, "auth": { "welcome": "Velkommen", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Tilbakestill via App-data", + "resetViaAppDataDescription": "Slett innstillingsfilen fra appdata-katalogen for å tilbakestille passordet ditt:", + "quitDesktopApp": "Avslutt OmniRoute skrivebordsapp helt", + "navigateToAppDataDirectory": "Naviger til appdata-katalogen:", + "checkSystemAppDataFolder": "(Sjekk systemets appdata-mappe)", + "relaunchDesktopFreshSetup": "Start på nytt OmniRoute skrivebordsapp — det vil starte en ny oppsett", + "alternativeSetPasswordTitle": "Alternativ: Sett Nytt Passord", + "alternativeSetPasswordDescription": "Sett et nytt initialpassord via servermiljøfilen:", + "openServerEnvFilePrefix": "Åpne", + "relaunchDesktopApp": "Start på nytt OmniRoute skrivebordsapp'en", + "codexLinkInvalidOrExpired": "Denne lenken er ugyldig eller utløpt.", + "codexValidationServerError": "Kunne ikke nå serveren for å validere denne lenken.", + "codexSaveConnectionError": "Kunne ikke lagre tilkoblingen. Lenken kan ha utløpt.", + "codexDeviceLoginDisabled": "Enhetskodeinnlogging er deaktivert for denne OpenAI-kontoen. Aktiver det i ChatGPT-sikkerhetsinnstillingene (eller spør din arbeidsområdeadministrator).", + "codexAuthorizationTimedOut": "Autorisasjonen utløp. Klikk Start på nytt for å prøve igjen.", + "authenticationCancelled": "Autentisering ble avbrutt.", + "unexpectedAuthenticationError": "Uventet feil under autentisering. Vennligst prøv igjen.", + "connectOpenAiCodexTitle": "Koble til OpenAI Codex", + "codexConnectDescription": "Autoriser en ChatGPT-konto for å fullføre oppsettet av denne forbindelsen.", + "validatingCodexLink": "Validerer lenke…", + "codexGenerateCodeDescription": "Klikk nedenfor for å generere en engangskode, og logg deretter inn på OpenAI.", + "startCodexFlow": "Start", + "requestingOpenAiCode": "Ber om kode fra OpenAI…", + "codexVerificationInstructions": "1. Åpne OpenAI-verifiseringssiden og 2. skriv inn denne koden. Denne siden oppdateres automatisk når du autoriserer.", + "yourCode": "Din kode", + "openVerificationPage": "Åpne verifiseringsside", + "copyUrlShort": "Kopier URL", + "savingConnection": "Lagrer tilkobling…", + "codexConnected": "Koblet!", + "codexConnectionRegistered": "Codex-kontoen ble registrert. Du kan lukke denne fanen.", + "tryAgain": "Prøv igjen", + "traeAuthorizationSuccess": "Trae autorisasjon ✓", + "traeAuthorizationFailed": "Trae autorisasjon mislyktes", + "closeAuthorizationWindow": "Du kan lukke dette vinduet.", + "returnToDashboard": "Gå tilbake til dashbordet.", + "resetViaAppData": "Tilbakestill via App Data", + "deleteSettingsToReset": "Slett innstillingsfilen fra appdata-katalogen for å tilbakestille passordet ditt:", + "quitAppCompletely": "Avslutt OmniRoute skrivebordsappen helt", + "navigateToAppData": "Naviger til appdata-katalogen", + "checkAppDataFolder": "Sjekk systemappdata-mappen din", + "deleteSettingsJson": "Slett", + "relaunchAppFresh": "Start på nytt OmniRoute skrivebordsapp — det vil starte en ny oppsett", + "alternativeSetPassword": "Alternativ: Sett Nytt Passord", + "setNewPasswordViaEnv": "Sett et nytt startpassord via servermiljøfilen:", + "openServerEnv": "Åpne", + "inDataDirectory": "i datakatalogen", + "addOrUpdate": "Legg til eller oppdater", + "deleteAndRelaunch": "Slett", + "settingsJson": "settings.json", + "fromDataDir": "fra datakatalogen", + "relaunchApp": "Start på nytt OmniRoute skrivebordsapp'en" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Klar til å forenkle AI-infrastrukturen din?", "ctaDescription": "Bli med utviklere som strømlinjeformer AI-integrasjonene sine med OmniRoute. Åpen kildekode og gratis å starte.", "startFree": "Start gratis", - "readDocumentation": "Les dokumentasjon" + "readDocumentation": "Les dokumentasjon", + "company": "Selskap", + "pricing": "Priser", + "apiReference": "API Referanse", + "helpCenter": "Hjelpesenter", + "about": "Om", + "blog": "Blogg", + "contact": "Kontakt", + "terms": "Vilkår", + "privacy": "Personvern", + "license": "Lisens", + "footerDescription": "Det enhetlige grensesnittet for moderne AI-infrastruktur. Sikkert, observerbart og skalerbart.", + "communityDiscussions": "Fellesskapsdiskusjoner" }, "docs": { "title": "Dokumentasjon", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registrer og administrer agenter via ACP-registeret for kommunikasjon mellom agenter og deling av verktøy.", "protocolAcpStep1": "Naviger til Dashboard → Agenter for å se registrerte ACP-agenter.", "protocolAcpStep2": "Registrer nye agenter med muligheter og endepunktkonfigurasjon.", - "protocolAcpStep3": "Bruk CLI-verktøy for å konfigurere agentkommunikasjonskanaler." + "protocolAcpStep3": "Bruk CLI-verktøy for å konfigurere agentkommunikasjonskanaler.", + "metadataTitleTemplate": "%s — OmniRoute Doku", + "metadataDefaultTitle": "OmniRoute Dokumentasjon", + "metadataDescription": "Omfattende dokumentasjon for OmniRoute AI-gateway — oppsett, API, komprimering, distribusjon og mer.", + "layoutNavTitle": "OmniRoute-dokumentasjon", + "layoutHomeLink": "Dokumentasjon Hjem", + "layoutDashboardLink": "← Tilbake til Dashbord", + "homeTitle": "OmniRoute Dokumentasjon", + "homeMetadataDescription": "Alt du trenger for å rute, komprimere og skalere AI-en din — oppsettsguider, API-referanse, komprimering, distribusjon og mer.", + "homeTwitterDescription": "Omfattende dokumentasjon for OmniRoute AI-gateway", + "homeDescription": "Alt du trenger for å rute, komprimere og skalere AI-en din", + "homeSearchHint": "Trykk Ctrl K for å søke i dokumentasjonen", + "featuredQuickStartTitle": "Rask Start", + "featuredQuickStartDescription": "Få OmniRoute i gang på 3 minutter", + "featuredAutoComboTitle": "Auto-Combo Veiledning", + "featuredAutoComboDescription": "La OmniRoute velge den beste AI-en for deg", + "featuredProvidersTitle": "Leverandørguide", + "featuredProvidersDescription": "Koble til AI-leverandører på minutter", + "nonTechUsersTitle": "For Ikke-Tekniske Brukere", + "nonTechUsersSubtitle": "Kom i gang raskt — ingen teknisk bakgrunn nødvendig", + "techUsersTitle": "For Teknologibrukere", + "techUsersSubtitle": "Dypdykk i arkitektur, API-er og interne systemer", + "apiExplorerMetadataTitle": "API Utforsker — OmniRoute Dokumentasjon", + "apiExplorerMetadataDescription": "Interaktiv API-utforsker — prøv OmniRoute-endepunkter live med sanntidsrespons", + "apiExplorerTitle": "API Utforsker", + "apiExplorerDescription": "Prøv OmniRoute-endepunkter live. Velg et endepunkt, konfigurer forespørselen din, og se svaret i sanntid.", + "apiExplorerSseStarted": "SSE-strøm startet — sjekk terminalen/devtools for sanntidsutdata.", + "apiExplorerError": "Feil: {message}", + "apiExplorerAuth": "autentisering", + "apiExplorerResponseLabel": "Respons", + "apiExplorerSelectEndpoint": "Velg et endepunkt å utforske", + "apiExplorerChooseApi": "Velg et API fra sidepanelet for å se detaljer og prøve det live", + "feedbackThanks": "Takk for tilbakemeldingen!", + "feedbackQuestion": "Var denne siden nyttig?", + "pageMetadataTitle": "{title} — OmniRoute Doku", + "pageMetadataDescription": "OmniRoute dokumentasjon: {title}", + "breadcrumb": "Brødsmulesti", + "apiReferenceTable": { + "parameters": "Parametere", + "name": "Navn", + "type": "Type", + "description": "Beskrivelse", + "returns": "Returnerer", + "typePrefix": "Type:" + } }, "legal": { "privacyPolicy": "Personvernerklæring", @@ -9957,7 +10479,42 @@ "successMessage": "Din {providerName}-konto er tilkoblet.", "done": "Ferdig", "error": "Tilkobling mislyktes", - "tryAgain": "Prøv igjen" + "tryAgain": "Prøv igjen", + "errorSessionIncomplete": "OAuth-økten er ufullstendig (mangler omdirigerings-URI eller kodeverifiserer). Start tilkoblingen på nytt og prøv igjen.", + "errorExchangeFailed": "Bytte mislyktes", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: De standard Google OAuth-legitimasjonene fungerer kun på localhost. For ekstern bruk, konfigurer dine egne OAuth-legitimasjoner via miljøvariabler: ANTIGRAVITY_OAUTH_CLIENT_ID og ANTIGRAVITY_OAUTH_CLIENT_SECRET. Se README-seksjonen 'OAuth på en ekstern server'.", + "errorSaveFailed": "Lagring mislyktes", + "errorAuthorizationFailed": "Autorisasjon mislyktes", + "errorAuthorizationTimeout": "Autorisasjons tidsavbrudd", + "errorRequestFailed": "Forespørselen mislyktes", + "errorCallbackServerFailed": "Kunne ikke starte tilbakeringingsserveren", + "errorBrowserUnavailable": "Browser OAuth er ikke tilgjengelig for denne leverandøren i det nåværende miljøet. Bruk den støttede autentiseringsmetoden i stedet.", + "errorStateMismatch": "OAuth-tilstandsmismatch. Start forbindelsen på nytt og prøv igjen.", + "errorImportAccessToken": "Feil ved import av tilgangstoken", + "errorSessionNotInitialized": "OAuth-økt ikke initialisert. Start tilkoblingsflyten på nytt og prøv igjen.", + "errorNoAuthorizationCode": "Ingen autorisasjonskode funnet. Lim inn callback-URL-en eller autentiseringskoden.", + "tabDeviceCode": "Enhetskode", + "tabBrowserLogin": "Nettleserinnlogging", + "tabImportAuthJson": "Importer auth.json", + "tabPasteApiKey": "Lim inn API-nøkkel", + "windsurfPasteDescription": "I Windsurf / VS Code IDE, kjør kommandoen \"Windsurf: Provide Auth Token\" fra kommandopaletten (eller klikk på Jupyter \"Get Windsurf Authentication Token\"-knappen), kopier deretter den viste token og lim den inn nedenfor. Åpning av windsurf.com/show-auth-token direkte viser bare en \"Redirecting\"-side — IDE-en må initiere flyten.", + "grokAuthJsonDescription": "Lim inn hele innholdet av ~/.grok/auth.json (ikke bare JWT \"nøkkel\"-feltet). En bare JWT har ingen refresh_token, så tilkoblingen dør etter utløp (#7610). Foretrekk den dedikerte Import auth.json-modalen når den er tilgjengelig.", + "devinDesktopPasteDescription": "Lim inn en eksisterende Devin API-nøkkel fra en autentisert Devin-økt. Tilgjengelighet for nøkkeleksport og trinn varierer etter Devin-versjon og konto.", + "devinPasteDescription": "Oppgi din WINDSURF_API_KEY (fått via `devin auth login`, eller via Windsurf IDE \"Windsurf: Provide Auth Token\" kommandoen).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Bygg auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API-nøkkel / Token", + "saving": "Lagrer…", + "saveConnection": "Lagre Tilkobling", + "gheDescription": "Skriv inn basis-URL-en til din GitHub Enterprise-instans (f.eks. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise-URL", + "gheUrlRequired": "GitHub Enterprise-URL er påkrevd", + "gitlabDuoSetupTitle": "GitLab Duo OAuth-oppsett", + "gitlabDuoSetupMessage": "GitLab Duo OAuth er ikke konfigurert. Registrer en OAuth-applikasjon på {applicationsUrl} med omdirigerings-URI {redirectUri} og omfang \"{scopes}\", sett deretter {clientIdEnv} (og valgfritt {clientSecretEnv}) og start på nytt.", + "gitlabDuoSetupDescription": "Etter at applikasjonen er registrert og miljøvariablene er satt på denne OmniRoute-instansen, klikk Fortsett for å starte OAuth-påloggingen.", + "continue": "Fortsett" }, "cursorAuthModal": { "title": "Koble til markør-IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Last inn mer", - "loadingMore": "Laster inn mer..." + "loadingMore": "Laster inn mer...", + "correlationId": "Korrelerings-ID", + "group": { + "showAllRows": "Vis alle rader", + "showLatestPerCorrelation": "Vis nyeste per korrelasjons-ID", + "grouped": "Gruppert" + }, + "running": "kjører", + "interval": { + "decrease": "Reduser intervall", + "title": "Automatisk oppdateringsintervall i sekunder", + "increase": "Øk intervall" + }, + "status": { + "inProgress": "Under behandling", + "recoveredByRetry": "Gjenopprettet ved å prøve igjen", + "goToParent": "Gå til overordnet forespørsel", + "healedTitle": "Feilet, gjenopprettet etter {count} forsøk", + "healed": "helbredet", + "failedTitle": "Alle {count} forsøk mislyktes", + "failed": "feilet", + "pinnedTitle": "Modell valgt via kontekst-cache økt festing", + "pinned": "festet" + }, + "attempts": "forsøk", + "detail": { + "collapse": "Kollaps {title}", + "expand": "Utvid {title}", + "copyTitle": "Kopier {title}", + "copied": "Kopiert!", + "copy": "Kopier", + "autoscrollOn": "Autoscroll: på", + "autoscrollOff": "Autoscroll: av", + "payload": { + "clientRawRequest": "Klient Rå Forespørsel", + "clientRequest": "Klientforespørsel", + "openaiRequest": "OpenAI Forespørsel", + "providerRequest": "Leverandørforespørsel", + "providerResponse": "Leverandørrespons", + "clientResponse": "Klientrespons", + "pipelineError": "Pipeline-feil" + }, + "payloadMissing": "Detaljert nyttelastartefakt er ikke lenger tilgjengelig for denne loggoppføringen.", + "payloadCorrupt": "Detaljert nyttelastartefakt kunne ikke bli analysert.", + "notAvailable": "N/A", + "semanticCache": "Semantisk (OmniRoute)", + "upstreamCache": "Oppstrøms (Leverandør)", + "ariaLabel": "Forespørsel loggdetalj", + "completed": "Fullført", + "upstreamStatus": "Oppstrøms: {status}", + "statusDiscrepancy": "OmniRoute returnerte {status} selv om leverandøren returnerte {provider}", + "previousRequest": "Forrige forespørsel", + "nextRequest": "Neste forespørsel", + "close": "Lukk detaljmodalen", + "startedAt": "Startet Klokken", + "endedAt": "Avsluttet Kl", + "duration": "Varighet", + "model": "Modell", + "provider": "Leverandør", + "account": "Konto", + "input": "Inndata", + "totalIn": "Total Inn: {value}", + "cacheRead": "Cache Lesing: {value}", + "cacheWrite": "Cache Skriv: {value}", + "compressed": "Komprimert: {from} → {to} ({percent}% spart)", + "output": "Utdata", + "totalOut": "Total Ut: {value}", + "reasoning": "Begrunnelse: {value}", + "requestedModel": "Forespurt Modell", + "requestProtocol": "Req Protokoll", + "cacheSource": "Cache Kilde", + "modelPinning": "Modellpining", + "activeModelPinning": "Aktiv — modell valgt via sesjonsfeste", + "rotated": "Rotert: {initial} -> {final}", + "apiKey": "API-nøkkel", + "noApiKey": "Ingen API-nøkkel", + "combo": "Kombinasjon", + "error": "Feil", + "unblockAll": "Fjern blokkering av alt", + "cleared": "Tømt", + "unblock": "Fjern blokkering", + "relatedRequests": "Relaterte forespørseler ({count})", + "current": "nåværende", + "detailStatus": "Detaljstatus", + "loadingDetails": "Laster inn forespørsel detaljer...", + "providerEventStream": "Leverandør Hendelsesstrøm", + "clientEventStream": "Klient Hendelsesstrøm", + "eventStream": "Hendelsesstrøm", + "responsePayloadLegacy": "Respons Payload (Legacy)", + "requestPayloadLegacy": "Forespørsel Payload (Legacy)", + "noPayload": "Ingen nyttelastdata tilgjengelig for denne loggoppføringen.", + "correlationId": "Korrelasjons-ID", + "correlationIdValue": "Korrelerings-ID: {id}", + "detailedPayloadInfo": "Aktiver detaljert logging først hvis du vil ha den fire-trinns klient/leverandør nyttelastvisningen for nye forespørseler." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} deaktivert", "providerAdded": "{provider} lagt til", "add": "Legg til", - "manualApiKey": "Bruk en manuell API-nøkkel" + "manualApiKey": "Bruk en manuell API-nøkkel", + "createDahlTokenFailed": "Kunne ikke opprette Dahl-token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Konfigurer proxy", + "providerProxyTitleConfigured": "Proxy konfigurert: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-begrenset — gjennomgå vilkår", "caution": "Forsiktig — klausuler for personlig bruk / proxy", "ok": "Generelt tillatende" - } + }, + "allProviders": "Alle leverandører", + "noApiKeyRequired": "Ingen API-nøkkel nødvendig" }, "providerHealthAutopilot": { "title": "Autopilot for leverandørhelse", @@ -12390,7 +13047,11 @@ "on": "PÅ", "off": "AV", "availableProviders": "Tilgjengelige leverandører ({count})", - "noProviderOverrides": "Ingen overstyringer — alle aktive leverandører vil delta med sine standardmodeller" + "noProviderOverrides": "Ingen overstyringer — alle aktive leverandører vil delta med sine standardmodeller", + "resetFailed": "Tilbakestilling mislyktes", + "resetSuccess": "Konfigurasjon tilbakestilt til standardinnstillinger", + "running": "Kjører...", + "testFailed": "Testet mislyktes" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) er OmniRoutes grunnleggende open source-venn", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Leverandøren støtter ikke visjon for denne bildeforespørselen", "capabilityFilter.toolsMismatch": "Leverandøren støtter ikke verktøykall.", "capabilityFilter.structuredOutputMismatch": "Leverandøren støtter ikke strukturert utdata", - "capabilityFilter.contextWindowMismatch": "Forespørselen overskrider leverandørens kontekstvindu" + "capabilityFilter.contextWindowMismatch": "Forespørselen overskrider leverandørens kontekstvindu", + "publicSystem": { + "notFound": { + "title": "Siden ble ikke funnet", + "description": "Siden du leter etter eksisterer ikke eller har blitt flyttet.", + "dashboardAriaLabel": "Gå tilbake til dashbordet", + "statusAriaLabel": "Åpne systemstatusside", + "systemStatus": "Systemstatus" + }, + "error": { + "title": "Intern Serverfeil", + "description": "Noe gikk galt under behandlingen av forespørselen din. Teamet vårt har blitt varslet og jobber med en løsning.", + "errorId": "Feil-ID: {id}", + "detailsAriaLabel": "Feildetaljer", + "retryAriaLabel": "Prøv å laste inn siden på nytt", + "tryAgain": "Prøv igjen", + "dashboardAriaLabel": "Gå tilbake til dashbordet", + "statusAriaLabel": "Åpne systemstatus", + "systemStatus": "Systemstatus" + }, + "globalError": { + "title": "Noe gikk galt", + "description": "En uventet feil oppstod. Dette har blitt loggført, og teamet vårt vil undersøke.", + "detailsAriaLabel": "Feildetaljer", + "retryAriaLabel": "Prøv å laste inn siden på nytt", + "tryAgain": "Prøv igjen", + "statusAriaLabel": "Åpne systemstatus", + "systemStatus": "Systemstatus" + }, + "offline": { + "title": "Tilkoblingsproblem", + "description": "OmniRoute kan ikke nå nettverket akkurat nå. Sjekk internett-, VPN- eller proxyinnstillingene dine.", + "connectionRestored": "Tilkobling gjenopprettet", + "offlineModeDetected": "Offline-modus oppdaget", + "retryConnection": "Prøv igjen å koble til", + "openStatusPage": "Åpne Statusside" + }, + "maintenance": { + "title": "Planlagt Vedlikehold", + "description": "Noen tjenester er midlertidig utilgjengelige mens vedlikehold pågår. Kjerne-routing forblir vanligvis online, men administrasjonsfunksjoner kan være redusert.", + "suggestion1": "Prøv igjen om noen minutter.", + "suggestion2": "Sjekk nåværende helseindikatorer og leverandørstatus før du prøver igjen.", + "systemStatus": "Vis Systemstatus", + "healthDashboard": "Åpne Helseoversikt" + }, + "status": { + "title": "Systemstatus", + "description": "Live operativt øyeblikksbilde for OmniRoute kjerne tjenester.", + "loadingHealth": "Laster helsemetrikker...", + "failedToLoad": "Kunne ikke laste systemhelse.", + "unableToReachHealth": "Kan ikke nå helse-endepunktet. Sjekk tilkoblingen og prøv igjen.", + "healthCheckFailed": "Helsekontroll Mislyktes", + "openConnectivityHelp": "Åpen Tilkoblingshjelp", + "maintenanceInfo": "Vedlikeholdsinfo", + "service": "Tjeneste", + "unknown": "ukjent", + "notAvailable": "n/a", + "providersTracked": "Leverandører Sporet", + "circuitBreakerState": "Leverandør Kretsbryterstatus", + "lastUpdate": "Siste oppdatering: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}t {minutes}m" + }, + "statusPages": { + "400": { + "title": "Feil forespørsel", + "description": "Forespørselens nyttelast er ugyldig eller ufullstendig.", + "suggestion1": "Gå gjennom nødvendige felt og nyttelastformat før du prøver igjen.", + "suggestion2": "Hvis du bruker API-en, valider JSON-skjemaet lokalt.", + "suggestion3": "Hvis dette fortsetter å skje, åpne forespørselen i Translator Playground for å inspisere nyttelasten.", + "primaryAction": "Åpne dokumentasjon", + "secondaryAction": "Åpne oversetter" + }, + "401": { + "title": "Uautorisert", + "description": "Autentisering kreves for å få tilgang til denne ressursen.", + "suggestion1": "Logg inn igjen og prøv operasjonen på nytt.", + "suggestion2": "For API-kall, bekreft at Bearer-tokenet er til stede og gyldig.", + "suggestion3": "Hvis tokenet nylig ble rotert, oppdater klientlegitimasjonen din.", + "primaryAction": "Gå til Innlogging", + "secondaryAction": "Administrer API-nøkler" + }, + "403": { + "title": "Forbudt", + "description": "Din forespørsel ble forstått, men tilgang er nektet av policy.", + "suggestion1": "Sjekk IP tillatelses-/blokkering regler i innstillinger.", + "suggestion2": "Bekreft modell- og budsjettpolitikker tildelt din API-nøkkel.", + "suggestion3": "Be en administrator om å gi den nødvendige tillatelsesomfanget.", + "primaryAction": "Åpen tilgang Hjelp", + "secondaryAction": "Åpne sikkerhetsinnstillinger" + }, + "408": { + "title": "Tidsavbrudd for forespørsel", + "description": "Serveren mottok ikke en fullstendig forespørsel i tide.", + "suggestion1": "Prøv forespørselen på nytt med en mindre nyttelast.", + "suggestion2": "Sjekk nettverksstabiliteten din og VPN/proxy-latens.", + "suggestion3": "For lange operasjoner, aktiver streaming eller del opp forespørselen.", + "primaryAction": "Åpne Endepunktguide", + "secondaryAction": "Sjekk nettverksstatus" + }, + "429": { + "title": "For Mange Forespørseler", + "description": "Rategrensene ble overskredet for denne klienten, nøkkelen eller leverandøren.", + "suggestion1": "Vent på nedkjøling og prøv igjen etter det foreslåtte intervallet.", + "suggestion2": "Bytt til en kombinasjon med fallback-leverandører.", + "suggestion3": "Juster leverandørens motstandsdyktighet/rate-limit-profiler i innstillingene.", + "primaryAction": "Åpne Resilience-innstillinger", + "secondaryAction": "Åpne kombinasjoner" + }, + "500": { + "title": "Intern Serverfeil", + "description": "Det oppstod en uventet serverfeil under behandling av forespørselen din.", + "suggestion1": "Prøv igjen om noen sekunder.", + "suggestion2": "Sjekk helsetelemetri og serverlogger for korrelerte forespørsel-IDer.", + "suggestion3": "Hvis problemet vedvarer, rapporter problemet med tidsstempel og forespørselens kontekst.", + "primaryAction": "Åpne Helse Dashboard", + "secondaryAction": "Åpne logger" + }, + "502": { + "title": "Dårlig Gateway", + "description": "Oppstrømsleverandør eller gateway-integrasjon returnerte et ugyldig svar.", + "suggestion1": "Prøv igjen med en annen leverandør eller aktiv kombinasjonsrute.", + "suggestion2": "Sjekk leverandørens legitimasjon og tilgjengelighet av modeller.", + "suggestion3": "Inspiser oversetterens utdata hvis formatkonvertering er involvert.", + "primaryAction": "Åpne leverandører", + "secondaryAction": "Åpne oversetter" + }, + "503": { + "title": "Tjeneste utilgjengelig", + "description": "Tjenesten er midlertidig utilgjengelig på grunn av vedlikehold eller reduserte avhengigheter.", + "suggestion1": "Vent et øyeblikk og prøv igjen.", + "suggestion2": "Sjekk vedlikeholdsvarsler og systemstatus.", + "suggestion3": "Bruk fallback-leverandører hvis arbeidsflyten din er latensfølsom.", + "primaryAction": "Vedlikeholdsdetaljer", + "secondaryAction": "Systemstatus" + } + } + }, + "kiroAuthModal": { + "title": "Koble til {providerLabel}", + "chooseMethod": "Velg din autentiseringsmetode:", + "builderId": "AWS Builder ID", + "builderDescription": "Anbefalt for de fleste brukere. Logg inn med AWS-kontoen knyttet til {providerLabel}.", + "organization": "Din organisasjon (AWS IAM Identity Center)", + "organizationDescription": "Bruk start-URL-en for selskapets SSO (for eksempel: {url}).", + "googleAccount": "Google-konto", + "googleDescription": "Logg inn med Google-kontoen din.", + "githubAccount": "GitHub-konto", + "githubDescription": "Logg inn med GitHub-kontoen din.", + "importToken": "Importer Token", + "importDescription": "Lim inn en oppfriskningstoken eksportert fra {providerLabel}.", + "apiKey": "API-nøkkel", + "apiKeyDescription": "Lim inn en langvarig {providerLabel} / CodeWhisperer API-nøkkel. Den lagres som en bærerlegitimasjon uten oppdateringsnøkkel; profiloppdagelse er best-effort.", + "idcStartUrl": "IDC Start URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Din organisasjons AWS IAM Identity Center-URL", + "awsRegion": "AWS-region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-region for din Identity Center (standard: us-east-1)", + "continue": "Fortsett", + "back": "Tilbake", + "autoDetecting": "Automatisk oppdagelse av token...", + "readingCredentials": "Leser {providerLabel} legitimasjon fra AWS SSO-cache", + "tokenNotDetected": "{providerLabel} token ble ikke automatisk oppdaget. Vennligst lim inn refresh-tokenet ditt manuelt.", + "refreshToken": "Oppdater Token", + "tokenPlaceholder": "Token vil bli automatisk fylt ut...", + "importing": "Importerer...", + "apiKeyPlaceholder": "Lim inn din {providerLabel} API-nøkkel...", + "apiKeyStoredDescription": "Lagrert kryptert som en langvarig bærerlegitimasjon. Det er ingen oppdateringsflyt.", + "apiKeyRegionDescription": "AWS-region for nøkkelen (standard: us-east-1)", + "validating": "Validerer...", + "validateAndSaveApiKey": "Valider og Lagre API-nøkkel", + "errorAutoDetect": "Kunne ikke automatisk oppdage token", + "errorAutoDetectFailed": "Kunne ikke automatisk oppdage token", + "errorRefreshTokenRequired": "Vennligst skriv inn en oppfriskningstoken", + "errorImportFailed": "Importen mislyktes", + "errorApiKeyRequired": "Vennligst skriv inn en Kiro API-nøkkel", + "errorApiKeyImportFailed": "Import av API-nøkkel mislyktes", + "errorIdcStartUrlRequired": "Vennligst skriv inn din IDC start-URL" + }, + "kiroSocialOAuthModal": { + "title": "Koble {providerLabel} via {providerName}", + "errorStartAuthorization": "Kunne ikke starte autorisasjon", + "errorAuthorizationExpired": "Autorisasjonen har utløpt. Start påloggingsprosessen på nytt.", + "errorAuthorizationFailed": "Autorisasjon mislyktes", + "initializing": "Initialiserer...", + "settingUp": "Setter opp {providerName} autentisering", + "openIncognito": "Åpne denne lenken i et inkognitovindu", + "incognitoDescription": "Bruk et inkognito-/privatvindu for å unngå sesjonskonflikter med eksisterende kontoer.", + "copyLink": "Kopier lenke", + "verificationCode": "Bekreftelseskode", + "waiting": "Venter på autorisasjon...", + "cancel": "Avbryt", + "successTitle": "Koblet til med suksess!", + "successMessage": "Din {providerLabel}-konto via {providerName} har blitt koblet til.", + "done": "Ferdig", + "errorTitle": "Tilkobling Mislyktes", + "close": "Lukk" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorisasjon mislyktes", + "errorPopupBlocked": "Popup blokkert — tillat popups for dette nettstedet, eller lim inn tokenet manuelt nedenfor.", + "errorPopupClosed": "Autorisasjonsvinduet ble lukket før fullføring.", + "errorAccessTokenRequired": "Tilgangstoken er påkrevd.", + "errorImportFailed": "Importen mislyktes", + "title": "Koble Trae SOLO", + "authorizeDescription": "Autoriser via trae.ai i et popup-vindu. Popup-vinduet vil lukke seg selv når tokenet er importert.", + "authorizeImportant": "Viktig: du må være logget inn på trae.ai i denne nettleseren først. Autoriseringssiden bekrefter bare en eksisterende økt — den kan ikke logge deg inn. Hvis du ser \"Innlogging Mislyktes\", klikk \"Åpne solo.trae.ai\", logg inn, og kom deretter tilbake hit.", + "waitingForAuthorization": "Venter på trae.ai…", + "authorizeWithBrowser": "Autoriser med nettleser", + "openSoloTrae": "Åpne solo.trae.ai", + "orPasteManually": "eller lim inn en token manuelt", + "manualInstructions": "Logg inn på solo.trae.ai, åpne DevTools → Nettverk, send en hvilken som helst chatmelding, og kopier JWT fra Authorization: Cloud-IDE-JWT {tokenPlaceholder} forespørselshodet. JWT-livssyklus er ~14 dager. Valgfri identitetsfelt kommer fra common_params i samme forespørselstekst.", + "accessTokenLabel": "Tilgangstoken (Cloud-IDE-JWT)", + "webId": "Web-ID", + "optional": "valgfri", + "bizUserId": "Biz Bruker-ID", + "userUniqueId": "Bruker Unik ID", + "scope": "Omfang", + "tenant": "Leietaker", + "region": "Region", + "importing": "Importerer…", + "importToken": "Importer Token", + "cancel": "Avbryt" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuerer...", + "complete": "Fullført", + "defaultLabel": "Distribuer Proxies" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "avviklet", + "risk": "risiko", + "close": "Lukk", + "model": "Modell", + "key": "Nøkkel", + "defaultKey": "standard", + "clearConversation": "Tøm samtale", + "clear": "Tøm", + "tabs": { + "test": "Test", + "logs": "Logger" + }, + "loadingLogs": "Laster inn logger…", + "failedToLoadLogs": "Kunne ikke laste inn logger", + "noLogsYet": "Ingen logger ennå", + "noLogsDescription": "Send en testmelding fra Test-fanen — logger for denne leverandøren vil vises her.", + "openFullLogs": "Åpne fullstendige loggsider", + "live": "Live", + "tailingLast": "viser de siste {count}", + "refreshNow": "Oppdater nå", + "refresh": "Oppdater", + "unknownRequester": "ukjent forespørsel", + "fields": { + "timestamp": "Tidsstempel", + "status": "Status", + "duration": "Varighet", + "model": "Modell", + "requestedModel": "Forespurt modell", + "provider": "Leverandør", + "requester": "Forespørsel", + "tokens": "Tokens" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy loggdetaljer", + "event": "Proxy-hendelse", + "close": "Lukk proxy detaljmodalen", + "time": "Tid", + "latency": "Forsinkelse", + "clientIp": "Klient-IP", + "proxy": "Proxy", + "direct": "Direkte", + "type": "Type", + "level": "Nivå", + "provider": "Leverandør", + "tlsFingerprint": "TLS Fingeravtrykk", + "directNative": "Direkte", + "targetUrl": "Mål-URL", + "error": "Feil", + "configuration": "Proxykonfigurasjon" + }, + "requestTimeline": { + "title": "Forespørselstidslinje", + "modes": { + "follow": "Følg", + "followDescription": "Aksen ruller til venstre, NOW-linjen forblir på 75%", + "now": "Nå", + "nowDescription": "Hopp til nåværende tid, NÅ-linjen tilbakestilles til sentrum", + "pan": "Pan", + "panDescription": "Dra for å utforske, bakgrunnen er fryst" + }, + "reset": "Tilbakestill", + "started": "Startet", + "ended": "Avsluttet", + "duration": "Varighet", + "status": "Status", + "provider": "Leverandør", + "tokens": "Tokens", + "active": "Aktiv", + "other": "Annet", + "tenMinutes": "10min", + "hour": "time", + "day": "dag", + "unknownModel": "ukjent", + "pending": "ventende" + }, + "metadata": { + "compressionTitle": "Komprimering", + "compressionDescription": "Konfigurer innstillinger for kontekstkomprimering for å redusere tokenbruk og kostnader.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy-endepunkter for din AI-infrastruktur", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Overvåk LLM-anrop + feilsøk HTTPS-trafikken til enhver applikasjon" + }, + "conductor": { + "title": "Conductor — CLI-agent flåte", + "subtitle": "OmniConductor hub: løpere, oppgavekø og råd, live", + "runners": "Løpere", + "tasks": "Oppgaver", + "colName": "Navn", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Oppgave", + "colMode": "Modus", + "colRunner": "Løper", + "colSummary": "Sammendrag", + "online": "på nett", + "offline": "frakoblet", + "draining": "tømming", + "hubOffline": "Kondusenthub offline eller ikke konfigurert (CONDUCTOR_HUB_URL) — viser ingenting i stedet for utdaterte data.", + "noRunners": "Ingen løpere registrert", + "noTasks": "Ingen oppgaver ennå", + "detailTitle": "Oppgave detaljer", + "prompt": "Ledetekst", + "branch": "Gren", + "fetchHint": "Hent resultatet med: git fetch origin {branch}", + "council": "Råd", + "candidates": "Kandidater", + "cancel": "Avbryt oppgave", + "cancelConfirmTitle": "Avbryt denne oppgaven?", + "cancelConfirmMessage": "Huben vil avbryte kjøringen på runneren. Dette kan ikke angres.", + "cancelFailed": "Huben avslo kanselleringen", + "close": "Lukk", + "error": "Feil", + "faroTitle": "Faro — flåte talsperson", + "faroSubtitle": "Chat og stemme, forankret i virkelige flåtehendelser. Destruktive kommandoer ber alltid om bekreftelse.", + "faroEmpty": "Spør om flåten — f.eks. \"hvordan er flåten?\"", + "faroPending": "Faro ber om bekreftelse", + "faroPlaceholder": "snakk med Faro…", + "faroSend": "send", + "faroOffline": "Faro (talsmann) er offline", + "yes": "Ja", + "no": "Nei", + "pushToTalk": "Hold for å snakke", + "speakAnswers": "snakk svar", + "voiceModels": "Stemme modeller (leverandør/modell av denne OmniRoute)", + "voiceIdle": "snakk", + "voiceListening": "lytter…", + "voiceThinking": "tenker…", + "voiceSpeaking": "snakker…", + "sttFailed": "Transkripsjon mislyktes (sjekk STT-modellen/leverandøren)", + "ttsFailed": "Tale syntese mislyktes (sjekk TTS-modellen/leverandøren)", + "micDenied": "Mikrofon utilgjengelig eller tillatelse nektet" + }, + "cliproxyProviderExposure": { + "title": "Leverandør Eksponering", + "description": "Eksponer CLIProxyAPI-modeller som et rutemål under cliproxyapi/-prefikset.", + "label": "Eksponer som cliproxyapi/...", + "hint": "Når aktivert, vises oppdagede modeller i leverandørvalg på tvers av OmniRoute.", + "updateFailed": "Feilet å oppdatere (HTTP {status})", + "networkError": "Nettverksfeil — kunne ikke oppdatere leverandørens eksponeringsinnstilling" + } } - diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 68a7f1679b..e2f2409ed3 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -172,6 +172,18 @@ "unselectAll": "Alisin ang pagkakapili", "visibleModels": "nakikita", "selectAllConfirm": "Idagdag ang {count} na modelo sa combo na ito?", + "testSelectedProviders": "Mga Tagapagbigay ng Pagsubok", + "testingSelectedProviders": "Sinusubukan {done}/{total}...", + "noProvidersSelectedToTest": "Mangyaring suriin ang hindi bababa sa isang provider sa ibaba muna", + "noModelsToTestForProviders": "Walang mga modelo na masusubukan para sa mga napiling tagapagbigay", + "testSelectedProvidersResults": "{ok} ng {total} mga modelo na gumagana", + "selectWorkingModels": "Magdagdag ng nagtatrabaho", + "unselectWorkingModels": "Hindi napipili ang nagtatrabaho", + "noWorkingModelsToSelect": "Walang natitirang gumaganang modelo upang idagdag", + "providerTestHint": "Tip: suriin ang isang provider → Subukan → Idagdag ang gumagana. I-click muli upang alisin ang pagpili.", + "selectAllProviders": "Suriin ang lahat ng mga provider", + "clearProviderSelection": "Huwag i-check ang mga provider", + "providersSelectedCount": "{count} mga tagapagbigay na sinuri", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Sukat", + "toggleNoAuthProvider": "I-toggle ang no-auth provider", + "loadingModels": "Naglo-load ng mga modelo…", + "selectAModel": "Pumili ng modelo", + "degraded": "Nabawasan", + "zeroConfigBannerTitle": "Nagtatakbo sa zero-config mode", + "zeroConfigBannerBody": "Ang OmniRoute ay awtomatikong bumuo ng mga secure na susi ng encryption sa unang paglulunsad. Sila ay naka-imbak sa {dataDir}. Walang kinakailangang aksyon — ang iyong data ay naka-encrypt at ligtas. Upang gumamit ng mga pasadyang susi, idagdag ang JWT_SECRET at STORAGE_ENCRYPTION_KEY sa file na iyon.", + "batchRelativeTimeIn": "sa {value}", + "batchRelativeTimeAgo": "{value} nakaraan", + "batchDetailsTitle": "Mga Detalye ng Batch", + "batchProgress": "Pag-unlad", + "batchCompletedCount": "{count} natapos", + "batchFailedCount": "{count} nabigo", + "batchPendingCount": "{count} nakabinbin", + "batchTimeline": "Timeline", + "batchTimelineInProgress": "Nasa Progreso", + "batchTimelineFinalizing": "Pinal na Pagsasaayos", + "batchTimelineCompleted": "Natapos", + "batchTimelineFailed": "Nabigo", + "batchTimelineExpires": "Mag-e-expire", + "batchTimelineExpired": "Nawalang Bisa", + "batchTimelineCancelling": "Nagsasagawa ng Kanselasyon", + "batchTimelineCancelled": "Nakansela", + "batchTokenUsage": "Paggamit ng Token", + "batchMetadata": "Metadata", + "batchFileContents": "Nilalaman ng File", + "batchFileUsedByCount": "Ginagamit ng {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "I-preview", + "batchFilePreviewTruncated": "Ipinapakita ang unang {shown} linya ({total} kabuuang linya)", + "batchFileDownloadFull": "I-download ang Buong File" }, "disabled": "Naka-disable", "featureFlagOmnirouteEmergencyFallbackDescription": "I-route ang mga request na naubusan ng budget sa emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separator", "discovery": "Pagtuklas", "discoverySubtitle": "I-scan ang mga provider para sa libreng access", + "conductor": "Konduktor", + "conductorSubtitle": "CLI-agent fleet", "resilienceConnections": "Katatagan ng Koneksyon", "resilienceConnectionsSubtitle": "Cooldown, breaker, katayuan ng lockout", "settingsModalityBridge": "Modality Bridge", - "settingsModalityBridgeSubtitle": "Fallback ng imahe/audio → teksto para sa mga modelong teksto lamang" + "settingsModalityBridgeSubtitle": "Fallback ng imahe/audio → teksto para sa mga modelong teksto lamang", + "commandPalette": { + "title": "Command Palette", + "searchPlaceholder": "Maghanap ng mga pahina, setting, tool...", + "clearSearch": "I-clear ang paghahanap", + "noResults": "Walang resulta", + "navigate": "navigahin", + "open": "buksan", + "close": "isara" + }, + "noResults": "Walang resulta" }, "webhooks": { "title": "Mga Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Bigo ang Pag-update ng mga Setting", "sync.token.created": "Nalikha ang Sync Token", "sync.token.revoked": "Binawi ang Sync Token" - } + }, + "mcpMetricCalls24h": "Tawag (24h)", + "mcpMetricSuccessRate": "Rate ng Tagumpay", + "mcpMetricAvgDuration": "Karaniwang tagal", + "mcpMetricTopTool": "Nangungunang Kasangkapan" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Available ang isang bagong bersyon. I-click para mag-update.", "updateStarted": "Nagsimula ang pag-update...", "reloadingPageAutomatically": "Awtomatikong nire-reload ang page...", - "providerTopology": "Topology ng Provider" + "providerTopology": "Topology ng Provider", + "downloadDmg": "I-download ang DMG (macOS)", + "downloadDmgDescription": "Isang bagong bersyon ng OmniRoute desktop app ang available. Mangyaring i-download at i-install ang macOS DMG installer upang mag-update (kasalukuyan: v{version}).", + "downloadExe": "I-download ang EXE (Windows)", + "downloadExeDescription": "Isang bagong bersyon ng OmniRoute desktop app ang available. Mangyaring i-download at i-install ang Windows EXE installer upang mag-update (kasalukuyan: v{version}).", + "downloadAppImage": "I-download ang AppImage (Linux)", + "downloadAppImageDescription": "Isang bagong bersyon ng OmniRoute desktop app ang available. Mangyaring i-download ang Linux AppImage package upang mag-update (kasalukuyan: v{version}).", + "downloadUpdate": "I-download ang Update", + "downloadUpdateDescription": "Isang bagong bersyon ng OmniRoute desktop app ang available. Mangyaring i-download ang naaangkop na format ng app para sa iyong sistema upang mag-update (kasalukuyan: v{version}).", + "updateQueued": "Naka-queue na update sa v{version}.", + "updateDockerRebuilding": "Nire-rebuild ang Docker image sa background.", + "updateWaitingRestart": "Naghihintay para sa OmniRoute na mag-restart gamit ang bagong bersyon.", + "updateInstalling": "Nag-iinstall ng v{version}.", + "updateRunning": "Ang OmniRoute ay tumatakbo na sa v{version}.", + "updateCompleted": "Na-update ang OmniRoute sa v{version}.", + "updateDockerStillRebuilding": "Ang Docker image ay patuloy na nire-rebuild para sa v{version}.", + "updateInstallingBackground": "Nag-iinstall ng v{version} sa background.", + "updateWaitingVersion": "Naghihintay para bumalik ang OmniRoute sa v{version}.", + "updateDockerStillInProgress": "Patuloy pa ang Docker rebuild.", + "updateRestarting": "Nasa proseso ng pag-restart ang serbisyo. Naghihintay para bumalik online ang OmniRoute...", + "updateTimeout": "Nagsimula ang pag-update, ngunit ang v{version} ay hindi naging available bago ang timeout. I-refresh ang pahina o tingnan ang mga log ng server.", + "updateTimedOut": "Nawalan ng oras ang pag-update sa v{version}.", + "updateStartFailed": "Nabigong simulan ang pag-update.", + "noResponseStream": "Walang natanggap na tugon na daloy.", + "updateComplete": "Tapos na ang pag-update!", + "updateFailed": "Nabigo ang pag-update.", + "updateNetworkError": "Error sa Network — nawala ang koneksyon habang nag-a-update.", + "stepInstallPackage": "I-install ang Package", + "stepRebuildNativeModules": "I-rebuild ang Mga Katutubong Module", + "stepRestartService": "I-restart ang Serbisyo", + "stepComplete": "Kumpleto", + "stepError": "Error", + "updateCompleteTitle": "Kumpletong Pag-update!", + "updateFailedTitle": "Nabigong I-update", + "updatingTitle": "Nag-a-update ng OmniRoute...", + "reloadNotice": "Magsasagawa ng awtomatikong pag-reload ang pahina sa loob ng ilang segundo.", + "retryNotice": "Pakisubukan muli o i-update nang manu-mano sa pamamagitan ng CLI.", + "restartNotice": "Huwag isara ang pahinang ito. Awtomatikong magre-restart ang sistema.", + "reloadNow": "I-reload Ngayon", + "closeUpdate": "Isara", + "retryUpdate": "Subukan Muli", + "updateAvailableTitle": "Available na Update: v{version}{desktop}", + "desktopAppLabel": "(Desktop App)", + "checkingForUpdates": "Nagsusuri para sa mga update...", + "versionAvailableForDownload": "Available na ang bersyon v{version} para sa pag-download.", + "downloadingUpdate": "Nagda-download ng update... {percent}% kumpleto.", + "updateDownloaded": "Na-download nang matagumpay ang update! I-click ang Restart & Install upang ilapat.", + "autoUpdateFailed": "Nabigo ang auto-update: {reason}.", + "unknownUpdateError": "Hindi kilalang error", + "versionAvailableDesktop": "Ang bersyon v{version} ay available para sa desktop app.", + "manualUpdateRequired": "Kinakailangan ang manu-manong pag-update para sa ganitong uri ng pag-install.", + "restartAndInstall": "I-restart at I-install", + "checkForUpdate": "Suriin ang Update", + "manualUpdate": "Manwal na Pag-update", + "directDownloadHint": "O i-download ang kaukulang format ng installer nang direkta:", + "releaseNotes": "Mga Tala ng Paglabas", + "readMore": "Magbasa Pa Nang Higit", + "noAuthLabel": "Walang Awtorisasyon" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Nahinuha mula sa mga na-persist na call log sa paligid ng request na ito", "routeRecommendations": "Mga Rekomendasyon", "routeLimitations": "Mga Limitasyon", - "routeNoKnownLimitations": "Walang alam na mga limitasyon para sa paliwanag na ito." + "routeNoKnownLimitations": "Walang alam na mga limitasyon para sa paliwanag na ito.", + "searchAnalyticsLoading": "Naglo-load ng search analytics…", + "searchAnalyticsNoData": "Walang magagamit na datos sa paghahanap pa.", + "searchAnalyticsNoDataDescription": "Lilitaw ang mga kahilingan sa paghahanap dito pagkatapos ng unang paghahanap gamit ang /v1/search.", + "searchAnalyticsToday": "{count} ngayon", + "searchAnalyticsCachedRequests": "{count} na naka-cache na mga kahilingan", + "searchAnalyticsApiCosts": "mga gastos sa API ng paghahanap", + "searchAnalyticsErrors": "{count} mga error", + "searchAnalyticsNoErrors": "Walang mga error", + "searchAnalyticsProviderBreakdown": "Pagsusuri ng Tagapagbigay", + "searchAnalyticsQueries": "mga query", + "searchAnalyticsEmptyDescription": "Gamitin ang POST /v1/search upang simulan ang pag-route ng mga web search.", + "searchAnalyticsFreeTier": "Magagamit ang libreng tier: Serper (2,500/buwan), Brave (2,000/buwan), Exa (1,000/buwan), Tavily (1,000/buwan) — kabuuang 6,500+ libreng paghahanap/buwan na may awtomatikong failover.", + "autoRoutingNoDataAvailable": "Walang available na auto-routing analytics. Gumawa ng mga kahilingan gamit ang auto/ prefix upang makita ang mga sukatan.", + "defaultVariantLabel": "Default", + "freeTierAvailable": "Available ang libreng tier" }, "apiManager": { "title": "Mga API Key", @@ -2348,7 +2478,9 @@ "providerCount": "{count} na provider", "imageToTextBridgeAvailable": "Maaaring ilarawan ng Modality Bridge ang mga imahe para sa mga text-only na modelo ngayon. Ang inline playground ay magiging available kapag naipatupad ang /api/v1/images/understanding.", "imageToTextBridgeCta": "I-configure ang Image→Text na tulay sa mga setting ng Modality Bridge", - "sttBridgeCta": "I-configure ang Speech→Text na tulay sa mga setting ng Modality Bridge" + "sttBridgeCta": "I-configure ang Speech→Text na tulay sa mga setting ng Modality Bridge", + "existingConnection": "Umiiral na koneksyon", + "openrouterSttDescription": "Ang mga modelo ng speech-to-text ng OpenRouter ay gumagamit ng iyong nakatakdang koneksyon sa OpenRouter. Walang hiwalay na kredensyal ang kinakailangan." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Idikit sa:", "copilotReloadInstruction": "Pagkatapos ay i-reload ang VS Code at i-set ang API key sa input prompt.", "wireApiChatCompletions": "Mga Pagkumpleto ng Chat (/chat/pagkumpleto)", - "wireApiResponses": "Responses API (/mga tugon)" + "wireApiResponses": "Responses API (/mga tugon)", + "cliproxyapiActionFailed": "Nabigong aksyon", + "cliproxyapiActionSucceeded": "Matagumpay ang aksyon", + "cliproxyapiCheckUpdates": "Suriin ang Mga Update", + "cliproxyapiDescription": "Fallback ng upstream proxy (Batay sa Go na OAuth)", + "cliproxyapiHealth": "Kalusugan", + "cliproxyapiHealthy": "Malusog", + "cliproxyapiInstall": "I-install", + "cliproxyapiNotInstalledValue": "Hindi naka-install", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Nabigong humiling", + "cliproxyapiRestart": "I-restart", + "cliproxyapiStart": "Simulan", + "cliproxyapiStatusError": "Error", + "cliproxyapiStatusInstalled": "Naka-install", + "cliproxyapiStatusNotInstalled": "Hindi Naka-install", + "cliproxyapiStatusRunning": "Nagtatakbo", + "cliproxyapiStatusStopped": "Itinigil", + "cliproxyapiStop": "Itigil", + "cliproxyapiUnhealthy": "Hindi Malusog", + "cliproxyapiUnknown": "Hindi Kilala", + "cliproxyapiUpdate": "I-update", + "cliproxyapiUpdateAvailable": "Available na Update: v{current} → v{latest}", + "cliproxyapiVersion": "Bersyon" }, "combos": { "title": "Mga combo", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Tanging umusad sa pagkaubos ng quota", + "fallbackOnlyOnQuotaExhaustionShort": "quota-only fallback", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Ang mode pack at weighting ay nananatili rito; ang runtime state ng breaker ay nananatili sa page ng Health.", "emailVisibilityHint": "Ang mga email ng account dito ay sumusunod sa global privacy toggle.", "emailVisibilityTooltip": "Gamitin ang icon ng mata upang ipakita o itago ang mga email ng account globally sa mga combo, provider, at screen ng quota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Hakbang-hakbang (Provider → Model)", + "builderModeGlobal": "Paghahanap ng Pandaigdigang Modelo (Pasadyang Kumbinasyon)", + "builderGlobalSearchPlaceholder": "Maghanap ng mga modelo sa lahat ng mga provider (hal. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Idagdag ang lahat", + "builderGlobalShortcuts": "Mga Shortcut:", + "builderGlobalNoResults": "Walang model na natagpuan para sa \"{query}\".", + "builderGlobalProviderLabel": "Tagapagbigay:", + "builderGlobalAccountCount": "{count, plural, one {# account} other {# accounts}}", + "builderGlobalAdded": "Idinagdag", + "builderGlobalAdd": "Magdagdag", "manualModel": "Manwal na modelo", "manualModelInvalid": "Maglagay ng modelo bilang provider/model.", "manualModelUnknownProvider": "Hindi kilalang prefix ng provider.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "K availability ng Sesyon", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Naka-off ang stickiness", "kimiPresetTitle": "Preset ng Kimi Coding", "kimiPresetDescription": "Kimi K3 bilang pangunahing modelo (Moonshot API), na may awtomatikong fallback sa iyong mga koneksyon sa Kimi Code (kimi-coding, kimi-web) kapag naka-configure.", - "kimiPresetCta": "Magdagdag ng preset" + "kimiPresetCta": "Magdagdag ng preset", + "intelligentComboCount": "{count, plural, one {# matalin na kumbinasyon} other {# matalin na kumbinasyon}}", + "providersInScope": "{count, plural, one {# tagapagbigay sa saklaw} other {# mga tagapagbigay sa saklaw}}", + "savingModePack": "Nagsasave ng {pack}…", + "errorTitle": "Nabigong i-load ang mga combo", + "errorDescription": "Hindi namin ma-load ang combo data sa ngayon. Suriin ang iyong koneksyon at subukan muli.", + "errorId": "Error ID: {id}", + "errorRetry": "Subukan Muli", + "comboLabel": "Kumbinasyon" }, "costs": { "title": "Mga gastos", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Username", "obsidianPassword": "Password", - "obsidianTailscaleHint": "Gamitin ang iyong Tailscale IP sa halip na localhost kung kumokonekta mula sa mobile. Ang parehong device ay dapat nasa parehong Tailscale network." + "obsidianTailscaleHint": "Gamitin ang iyong Tailscale IP sa halip na localhost kung kumokonekta mula sa mobile. Ang parehong device ay dapat nasa parehong Tailscale network.", + "cloudSyncNotConfigured": "Hindi naka-configure ang cloud sync sa instance na ito.", + "notionConnect": "Ikonekta", + "notionConnectFailed": "Nabigong kumonekta", + "notionConnected": "Nakakonekta", + "notionConnectionFailed": "Nabigong kumonekta", + "notionDescription": "Maghanap, magbasa, mag-query, at sumulat sa Notion sa pamamagitan ng routed AI models", + "notionDisconnect": "Idiskonekta", + "notionDisconnectFailed": "Nabigong idiskonekta", + "notionEnterToken": "Pakisok ang isang Notion integration token", + "notionIntegrationHelp": "Gumawa ng Panloob na Pagsasama sa", + "notionIntegrationToken": "Notion Internal Integration Token", + "notionNotConnected": "Hindi nakakonekta", + "notionTokenConfigured": "Naka-configure ang token. Ang mga tool ng Notion ay available sa pamamagitan ng MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Modelo", "noRemoteProviders": "Walang mga provider na may na-configure na API key", "selectProviderModel": "Pumili ng modelo", + "customBaseUrlLabel": "Pasadyang base URL (opsyonal)", + "customModelIdLabel": "Custom model ID (opsyonal)", + "customEndpointHelp": "Gumamit ng OpenAI-compatible na /embeddings endpoint. Pinapayagan ang mga lokal na endpoint; naka-block ang mga cloud metadata target.", + "customEndpointSave": "Mag-apply ng pasadyang endpoint", + "customEndpointInvalid": "Ilagay ang parehong wastong HTTP(S) base URL at isang model ID, o iwanang walang laman ang parehong mga patlang.", + "customEndpointSaveFailed": "Hindi ma-save ang custom embedding endpoint.", "staticEnabledLabel": "Paganahin ang Static Potion", "staticEnabledDesc": "I-download at gamitin ang potion-base-8M na modelo nang lokal", "transformersEnabledLabel": "Paganahin ang Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Naglilinis...", "cleanNow": "Linisin ngayon", "cleanupSuccess": "{count} point(s) ang naalis", - "cleanupFailed": "Nabigo ang paglilinis" + "cleanupFailed": "Nabigo ang paglilinis", + "hostLabel": "Host", + "collectionLabel": "Koleksyon" }, "rerank": { "enableLabel": "Paganahin ang Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-tier fallback diagram", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "I-set up ang mga libreng provider", + "description": "Opsyonal na paganahin ang mga napiling provider na walang pag-signup. Suriin ang paunawa at site ng bawat provider bago magpatuloy; ang availability at rate limits ay kontrolado ng mga third party.", + "loading": "Naglo-load ng mga libreng provider...", + "loadFailed": "Hindi ma-load ang mga libreng provider.", + "alreadyConfigured": "Lahat ng karapat-dapat na libreng tagapagbigay ay naka-configure na.", + "reviewProviderSite": "Suriin ang site ng provider at mga tuntunin", + "confirmation": "Sinuri ko ang mga third-party na tagapagbigay na ito at nais kong lumikha ng OmniRoute ng mga napiling koneksyon.", + "setupSelected": "I-set up ang napiling mga provider", + "settingUp": "Naghahanda...", + "setupFailed": "Hindi maitaguyod ang napiling mga provider. Walang nabago sa umiiral.", + "retryFailed": "Subukan muli ang mga nabigong tagapagbigay", + "orUseApiKey": "o kumonekta gamit ang isang API key", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "nilikha", + "skipped": "naka-configure na", + "failed": "nabigo" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Kinakailangan. URL base ng Provider API.", "iconUrlLabel": "URL ng Icon", "iconUrlHint": "Opsyonal. URL ng larawan na ipinapakita bilang icon ng provider na ito.", + "iconUrlInvalid": "Hindi wastong URL ng icon. Gumamit ng http(s):// o data:image/*;base64 na URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Kasalukuyan na ang sesyon", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Ilapat ang auth", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "I-paste ang API key…", "zedSaving": "Inise-save…", "zedImportAction": "I-import", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "I-enable ang awtomatikong pag-renew ng session ng Cursor", + "cursorAgentNudgeBody": "I-install ang cursor-agent para sa awtomatikong pag-renew ng sesyon — kung wala ito, ang mga koneksyon ng Cursor ay nangangailangan ng pana-panahong manu-manong muling pagkonekta halos bawat 24 na oras.", + "cursorAgentNudgeDismiss": "Isara", "zedManualImportFailed": "Nabigo ang manwal na pag-import", "zedManualImportSuccess": "Na-import ang {provider} token mula sa Zed", "grokImportTitle": "I-import ang Grok Build Auth", @@ -5878,7 +6066,6 @@ "friendliai": "Libreng tier para sa serverless inference — walang kinakailangang credit card", "gemini": "Libre magpakailanman: 1,500 req/araw para sa Gemini 2.5 Flash — walang credit card, kumuha ng key sa aistudio.google.com", "gigachat": "Ikonekta ang GigaChat (Sber) gamit ang isang API key.", - "github-models": "Gumawa ng GitHub PAT na may 'models: read' na scope sa github.com/settings/tokens", "gitlab": "GitLab personal access token para sa pampublikong Code Suggestions API. Mag-configure ng self-hosted na base URL kapag hindi gumagamit ng gitlab.com.", "gitlawb-gmi": "Kumuha ng iyong API key mula sa Gitlawb Opengateway dashboard.", "gitlawb": "Kumuha ng iyong API key mula sa Gitlawb Opengateway dashboard.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Ikonekta ang Kimi Coding gamit ang umiiral na OAuth flow.", "kiro": "Libreng tier: 50 credits/buwan (~25K–100K tokens). ⚠️ Ipinagbabawal ng Kiro ToS ang paggamit ng third-party proxy/harness.", "codex": "Ikonekta ang OpenAI Codex gamit ang umiiral na OAuth flow.", - "qwen": "Ikonekta ang Qwen Code gamit ang umiiral na OAuth flow." + "qwen": "Ikonekta ang Qwen Code gamit ang umiiral na OAuth flow.", + "github-models": "Gumawa ng GitHub PAT na may 'models: read' na scope sa github.com/settings/tokens" }, "passthroughModelsDescription": "Tumatanggap ang {provider} ng mga provider-native na model ID. Mag-import mula sa /models o magdagdag ng mga custom na ID para sa pagruruta.", "bedrockModelsDescription": "Ang mga modelo ng Amazon Bedrock ay saklaw ng rehiyon ng AWS. Mag-import mula sa /models o magdagdag ng mga Bedrock model ID na pinagana sa napiling rehiyon.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Kapag naubos na ang lahat ng nakatakdang koneksyon (quota, kredito, o pag-expire), pansamantalang gamitin ang keyless tier ng provider na ito. Patayin upang laktawan ang provider na ito sa halip na magpadala ng mga hindi nagpapakilalang kahilingan — inirerekomenda kapag tinanggihan ng keyless tier ang mga ito (401).", "anonymousFallbackEnabled": "Naka-enable ang anonymous fallback para sa {provider}", "anonymousFallbackDisabled": "Naka-disable ang anonymous fallback para sa {provider} — ang mga nauubos na koneksyon ay laktawan ang provider na ito", - "anonymousFallbackUpdateFailed": "Nabigong i-update ang anonymous fallback setting" + "anonymousFallbackUpdateFailed": "Nabigong i-update ang anonymous fallback setting", + "batchDeleteFailed": "Nabigo ang batch delete", + "batchDeleteNetworkError": "Error sa network habang nagbubura ng batch", + "batchUpdateFailed": "Nabigo ang batch update", + "batchUpdateNetworkError": "Error sa network habang nag-a-update ng batch", + "categoryAudio": "Audio", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Maghanap", + "categoryWebCookie": "Web Cookie", + "claudeExtraUsageBlockingDisabled": "Naka-disable ang blocking ng extra-usage ng Claude (pinapayagan ang extra usage)", + "claudeExtraUsageBlockingEnabled": "Naka-enable ang pag-block ng sobrang paggamit ng Claude (ang sobrang paggamit ay ma-block)", + "claudeRoutingPreferenceDisabled": "Hindi na pinipili ng mga unprefixed na modelo ng Claude ang Claude Code", + "claudeRoutingPreferenceEnabled": "Ang mga unprefixed na modelo ng Claude ay mas pinipili ang Claude Code", + "clearMediaFilter": "I-clear", + "cliproxyRoutingDisabled": "Ang mga kahilingan ay gumagamit na ng katutubong OmniRoute (direkta)", + "cliproxyRoutingEnabled": "Ang mga kahilingan ay ngayon dumadaan sa CLIProxyAPI (mas malalim na emulasyon)", + "codexLimitPolicyUpdated": "Na-update ang patakaran sa limitasyon ng Codex", + "codexServiceModeUpdated": "Na-update ang mode ng serbisyo ng Codex", + "codexServiceTierActive": "Ang Codex {tier} service tier ay aktibo", + "codexTierFastLabel": "Mabilis", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Nabigong ilapat ang Command Code na awtorisasyon", + "commandCodeApplyingApproval": "Naaprubahan ng browser, inaaplay…", + "commandCodeApplyingKey": "Nag-aaplay ng susi na aprubado ng browser…", + "commandCodeApprovalInstructions": "Buksan ang auth URL, aprubahan ang access, pagkatapos ay i-paste ang ibinalik na key/JSON/URL sa ibaba…", + "commandCodeAuthExpired": "Nawalan ng bisa ang Command Code auth", + "commandCodeConnected": "Naka-konekta ang Command Code", + "commandCodeConnectionAdded": "Nagdagdag ng Command Code na koneksyon", + "commandCodeLinkExpired": "Nawalan ng bisa ang link ng Command Code", + "commandCodeOpeningStudio": "Binubuksan ang Command Code Studio…", + "commandCodePopupBlocked": "Naka-block ang popup. Mangyaring payagan ang mga popup at subukang muli ang Command Code Connect.", + "commandCodeStartFailed": "Nabigong simulan ang Command Code auth", + "connectionDeleted": "Nabura ang koneksyon", + "connectionFallback": "koneksyon", + "coolingConnectionsDescription": "Ang mga koneksyong ito ay nagbalik ng 429 (rate-limit) sa kanilang huling kahilingan. Ang OmniRoute ay laktawan ang mga ito hanggang sa mag-expire ang timer — walang kinakailangang manu-manong pag-disable.", + "coolingConnectionsTitle": "Kasalukuyang nagpapalamig ({count})", + "failedDeleteAlias": "Nabigong tanggalin ang alias", + "failedDeleteConnection": "Nabigong tanggalin ang koneksyon", + "failedDistributeProxies": "Nabigong ipamahagi ang mga proxy.", + "failedSaveModelEndpointSettings": "Nabigong i-save ang mga setting ng model endpoint", + "failedUpdateClaudeExtraUsagePolicy": "Nabigong i-update ang patakaran sa labis na paggamit ng Claude", + "failedUpdateClaudeRoutingPreference": "Nabigong i-update ang kagustuhan sa pag-routing ng Claude Code", + "failedUpdateCliproxyRouting": "Nabigong i-update ang routing ng CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Nabigo ang pag-update ng patakaran sa limitasyon ng Codex", + "failedUpdateCodexServiceMode": "Nabigong i-update ang mode ng serbisyo ng Codex", + "filterByMedia": "Media", + "freeBadge": "Libre", + "kimiCodeApiKeyLabel": "Kimi Code API Key", + "modelTestFailed": "Nabigo ang pagsubok sa modelo", + "modelTestNetworkError": "Error sa Network sa Pagsusuri ng Modelo", + "networkError": "Error sa Network", + "networkErrorDeletingAlias": "Error sa network habang binubura ang alias", + "networkErrorSettingAlias": "Error sa network sa pag-set ng alias", + "noProvidersMatch": "Walang mga provider na tumutugma sa iyong paghahanap.", + "noSavedProxies": "Walang natagpuang naka-save na proxy. Magdagdag ng mga proxy sa Mga Setting → Proxy muna.", + "pageLoadErrorDescription": "Hindi namin ma-load ang provider data sa ngayon. Suriin ang iyong koneksyon at subukang muli.", + "pageLoadErrorId": "Error ID: {id}", + "pageLoadErrorRetry": "Subukan Muli", + "pageLoadErrorTitle": "Nabigong i-load ang mga provider", + "playgroundTitle": "Palaruan", + "providerDetailConnectionFlexActive": "Ang Codex flex service tier ay aktibo para sa koneksyong ito", + "providerDetailConnectionPriorityActive": "Ang tier ng priority service ng Codex ay aktibo para sa koneksyong ito", + "providerDetailGlobalFlexActive": "Aktibo ang Global Codex flex service tier", + "providerDetailGlobalPriorityActive": "Aktibo ang global codex priority service tier", + "proxiesDistributed": "Ipinamigay ang {assigned} proxy assignment(s) sa {tagLabel}{total} koneksyon(s).", + "rerankEndpoint": "I-re-ranggo", + "savedModelEndpointSettings": "Naka-save na mga setting ng endpoint ng modelo", + "searchByModelAria": "Maghanap ayon sa modelo", + "selectSupportedEndpoint": "Pumili ng hindi bababa sa isang sinusuportahang endpoint", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Mga setting", @@ -6460,7 +6719,24 @@ "loadFailed": "Nabigong i-load ang listahan ng subscription", "toggleFailed": "Nabigong i-toggle ang switch", "refreshFailed": "Nabigong i-refresh", - "deleteFailed": "Nabigong tanggalin" + "deleteFailed": "Nabigong tanggalin", + "add": "Magdagdag", + "cancel": "Kanselahin", + "configure": "I-configure", + "copyEndpoint": "Kopyahin ang Endpoint", + "coreEndpointHint": "Pangunahing Endpoint Na Pahiwatig", + "coreNodesHint": "Pahiwatig ng Core Nodes", + "create": "Lumikha", + "deleteConfirm": "Kumpirmahin ang Tanggalin", + "empty": "Walang laman", + "globalModeDescription": "Paglalarawan ng Pandaigdigang Mode", + "localCoreHint": "Local Core Hint", + "nodeSummary": "Buod ng Node", + "providerRequired": "Kinakailangan ang Tagapagbigay", + "providerRouting": "Provider Routing", + "refresh": "I-refresh", + "refreshInterval": "Oras ng Pag-refresh", + "ruleModeDescription": "Paglalarawan ng Mode ng Batas" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Magpatakbo ng awtomatikong vision-to-text fallback bago i-route ang mga request ng imahe sa mga text-only na modelo.", "visionBridgeEnabledLabel": "Naka-enable", "visionBridgeEnabledDesc": "I-toggle ang pre-call bridge na nagpapalit sa mga bahagi ng imahe ng na-extract na text.", + "visionBridgeRerouteTextOnlyLabel": "I-reoute ang mga text-only na modelo", + "visionBridgeRerouteTextOnlyDesc": "Ipadala ang kumpletong kahilingan, kasama ang mga larawan, sa bridge model kapag ang napiling modelo ay walang input na larawan.", "visionBridgeModel": "Modelo ng Tulay", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Anumang OmniRoute model ID na sumusuporta sa vision ay maaaring gamitin dito.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Walang manage scope ang API key.", "BYPASS_PREFIX_NOT_ALLOWED": "Isa o higit pang mga prefix ang nagta-target sa mga spawn-capable na ruta at hindi maaaring i-bypass.", "GENERIC": "Hindi ma-update ang mga setting ng authz." - } + }, + "remove": "Alisin" }, "resilienceBaseCooldownLabel": "Base cooldown", "scopeLabel": "Saklaw", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Sinusubukan ang audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) na na-transcribe ng {model}", "modalityBridgeAudioTestNoop": "Hindi na-activate ang Audio Bridge (maaaring sinusuportahan ng target ang audio, walang nakakonektang STT provider, o naka-disable ang bridge)", - "modalityBridgeAudioTestError": "Nabigo ang pagsubok sa audio: {message}" + "modalityBridgeAudioTestError": "Nabigo ang pagsubok sa audio: {message}", + "modelRoutingDescriptionPlaceholder": "I-route ang mga modelo ng Opus sa frontier combo", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Codes", + "cliproxyapiFallbackDescription": "Cliproxyapi Fallback Deskripsyon", + "cliproxyapiHealthLabel": "Cliproxyapi Kalusugan Label", + "cliproxyapiImportFailed": "Nabigong I-import ang Cliproxyapi", + "cliproxyapiImportResult": "Cliproxyapi Import Result", + "cliproxyapiInvalidUrl": "Cliproxyapi Hindi Wasto ang URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Lifecycle Paunawa Pagkatapos", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Lifecycle Notice Bago", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Lifecycle Notice Link", + "cliproxyapiPortLabel": "Cliproxyapi Port Label", + "cliproxyapiStatusLabel": "Cliproxyapi Katayuan Label", + "cliproxyapiVersionLabel": "Cliproxyapi Bersyon Label", + "collection": "Koleksyon", + "errorPage": { + "description": "Hindi namin ma-load ang mga setting sa ngayon. Pakisubukan muli sa loob ng ilang segundo.", + "errorId": "Error ID: {id}", + "retry": "Subukan Muli", + "title": "Nabigong i-load ang mga setting" + }, + "host": "Host", + "notInstalled": "Hindi naka-install", + "oneproxyActions": "Oneproxy Mga Aksyon", + "oneproxyActive": "Isang Proxy Aktibo", + "oneproxyAnonymity": "Oneproxy Anonymity", + "oneproxyCountry": "Oneproxy Bansa", + "oneproxyDelete": "Oneproxy Tanggalin", + "oneproxyEmpty": "Oneproxy Walang Nilalaman", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latency", + "oneproxyProtocol": "Oneproxy Protocol", + "oneproxyQuality": "Oneproxy Kalidad", + "oneproxySyncFailed": "Nabigo ang pag-sync: {error}", + "oneproxySyncSuccess": "Naka-sync na {total} proxies ({added} bago, {updated} na-update)", + "proxyDocumentationSocks5DescAfter": "Dokumentasyon ng Proxy Socks5 Pagkatapos", + "proxyFreePoolAddProxy": "Proxy Free Pool Magdagdag ng Proxy", + "proxyFreePoolAdding": "Pagdaragdag ng Proxy Free Pool", + "proxyFreePoolSelectProxy": "Pumili ng Proxy Mula sa Libreng Pool", + "proxyStatusActive": "Aktibong Katayuan ng Proxy", + "proxyStatusInactive": "Proxy Status Hindi Aktibo", + "routingAddEntry": "Magdagdag ng entry", + "settingSaveFailed": "Nabigong I-save ang Setting", + "settingSaved": "Naka-save ang Setting", + "skillsmpApiKeyHintAfter": ". Limitasyon ng Rate: {limit} na kahilingan/araw.", + "skillsmpApiKeyHintBefore": "Kunin ang iyong API key mula sa", + "syncFailed": "Nabigong i-sync", + "unhealthy": "Hindi Malusog", + "oneproxyDescription": "Kunin at i-rotate ang mga libreng validated proxies mula sa 1proxy community platform", + "oneproxySyncing": "Nagsi-sync...", + "oneproxySyncNow": "I-sync Ngayon", + "oneproxyClearAll": "I-clear Lahat", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "I-clear ang lahat ng 1proxy proxies?", + "memorySkillsSkillsmpDescription": "Kumonekta sa SkillsMP upang matuklasan at mag-install ng mga kasanayan mula sa marketplace.", + "memorySkillsActiveProviderDescription": "Pumili kung aling provider ang ginagamit ng Skills page para sa paghahanap at pag-install.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", + "memorySkillsSkillsmpProviderDescription": "Naka-authenticate na pamilihan (gumagamit ng iyong SkillsMP API key).", + "memorySkillsSkillsshProviderTitle": "skills.sh Direktoryo", + "memorySkillsSkillsshProviderDescription": "Tagapagbigay ng pampublikong direktoryo (walang kinakailangang API key).", + "routingCcBridgeCatalogName": "Anthropic-compatible CC bridge", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Katutubong Claude provider na may mga token na ibinibigay ng OAuth.", + "routingCcBridgeName": "Claude-Code Tulay", + "routingCcBridgeDescription": "I-relay ang mga endpoint gamit ang mga API key (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Pasadyang tagapagbigay.", + "routingUnknownOpKind": "Hindi kilalang uri ng op: {kind}", + "routingInvalidJson": "Di Wasto ang JSON: {error}", + "routingConfigMustBeObject": "Ang config ay dapat isang JSON na bagay", + "routingEnabledMustBeBoolean": "dapat ay totoo o mali ang `enabled`", + "routingPipelineMustBeArray": "`pipeline` ay dapat isang array ng mga ops", + "routingPipelineTooLong": "Hindi maaaring lumampas sa 50 ops ang pipeline", + "routingOpMissingKind": "Op #{index}: nawawala o hindi wastong `kind`", + "routingOpUnknownKind": "Op #{index}: hindi kilalang uri \"{kind}\"", + "routingJsonEditorHide": "Itago ang JSON editor", + "routingJsonEditorImportExport": "I-import / i-export ang JSON", + "routingJsonEditorLabel": "JSON (i-edit at ilapat, o i-paste upang i-import)", + "routingApplyJson": "Ilapat ang JSON", + "routingTransformsFootnote": "Lahat ng transform ops ay idempotent sa muling pagpapatakbo. Ang mga pagbabago ay magkakabisa kaagad sa susunod na kahilingan.", + "cliproxyapiUnknown": "Hindi Kilala", + "cliproxyapiVersion": "Bersyon", + "cliproxyapiHealth": "Kalusugan", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Koleksyon" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Default", + "off": "Patay", + "lite": "Lite", + "standard": "Pamantayan", + "aggressive": "Mapanlikha", + "ultra": "Ultra", + "responsesToolOutput": "Output ng tool ng mga Tugon" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Tumatakbo nang huli sa stack (pagkatapos linisin ng RTK/Caveman ang text, kino-convert ng OmniGlyph ang natitira sa mga imahe) at tumatakbo rin nang standalone sa pamamagitan ng omniglyph mode. Ito ay isang preview at nananatiling naka-off by default hanggang sa makumpleto ang end-to-end na pagpapatunay.", "saved": "Nai-save.", "saveFailed": "Hindi mai-save.", - "enableAria": "I-enable ang OmniGlyph engine" + "enableAria": "I-enable ang OmniGlyph engine", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Mga Naka-embed na Serbisyo", @@ -9127,7 +9500,49 @@ "unableToLoad": "Hindi ma-load ang mga sukatan ng system", "product": "produkto", "resources": "Mga mapagkukunan", - "company": "kumpanya" + "company": "kumpanya", + "tokenHealthTooltips": { + "allHealthy": "Lahat ng token ay malusog", + "needsAttention": "Kailangan ng atensyon ang ilang token", + "refreshFailures": "Nakita ang mga pagkabigo sa pag-refresh ng token", + "unknown": "Hindi alam ang katayuan ng kalusugan" + }, + "systemMonitor": { + "metricsAriaLabel": "Mga Sukat ng Sistema", + "memory": "Memory", + "memoryShort": "mem", + "uptime": "Uptime", + "ariaLabel": "Pagsubaybay sa Sistema", + "title": "Tagasubaybay ng Sistema", + "version": "Bersyon", + "connections": "Mga Koneksyon", + "circuitBreakers": "Mga Circuit Breaker", + "open": "{count} bukas", + "memoryUsage": "Paggamit ng Memorya" + }, + "never": "Hindi kailanman", + "justNow": "Katatapos lang", + "minutesAgo": "{count}m na ang nakalipas", + "hoursAgo": "{count}h nakaraan", + "tokens": "Mga Token", + "costs": "Mga Gastos", + "autoRefresh": "Awtomatikong Pag-refresh ({seconds}s)", + "toggleAutoRefresh": "I-toggle ang auto refresh", + "activeRequests": "Mga Aktibong Kahilingan", + "totalRequests": "Kabuuang Kahilingan", + "totalInputTokens": "Kabuuang Input Tokens", + "model": "Modelo", + "provider": "Tagapagbigay", + "requests": "Mga Kahilingan", + "lastUsed": "Huling Ginamit", + "inputTokens": "Mga Input Token", + "totalTokens": "Kabuuang Token", + "inputCost": "Gastos sa Input", + "outputCost": "Gastos sa Output", + "noUsageData": "Walang naitalang paggamit pa. Gumawa ng ilang mga kahilingan upang makita ang data dito.", + "account": "Konto", + "accountLabel": "Account {id}", + "noAccountUsage": "Walang naitalang paggamit na partikular sa account. Gumawa ng mga kahilingan gamit ang mga OAuth account upang makita ang data dito." }, "auth": { "welcome": "Maligayang pagdating", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "I-reset sa pamamagitan ng App Data", + "resetViaAppDataDescription": "Tanggalin ang settings file mula sa app data directory upang i-reset ang iyong password:", + "quitDesktopApp": "Ganap na isara ang OmniRoute desktop app", + "navigateToAppDataDirectory": "Pumunta sa direktoryo ng data ng app:", + "checkSystemAppDataFolder": "(Suriin ang folder ng data ng app ng iyong sistema)", + "relaunchDesktopFreshSetup": "I-relaunch ang OmniRoute desktop app — magsisimula ito ng bagong setup", + "alternativeSetPasswordTitle": "Alternatibo: Magtakda ng Bagong Password", + "alternativeSetPasswordDescription": "Mag-set ng bagong paunang password sa pamamagitan ng server environment file:", + "openServerEnvFilePrefix": "Buksan", + "relaunchDesktopApp": "I-relaunch ang OmniRoute desktop app", + "codexLinkInvalidOrExpired": "Ang link na ito ay hindi wasto o nag-expire na.", + "codexValidationServerError": "Hindi maabot ang server upang i-validate ang link na ito.", + "codexSaveConnectionError": "Hindi ma-save ang koneksyon. Maaaring nag-expire na ang link.", + "codexDeviceLoginDisabled": "Naka-disable ang device code login para sa OpenAI account na ito. I-enable ito sa mga setting ng seguridad ng ChatGPT (o tanungin ang iyong workspace admin).", + "codexAuthorizationTimedOut": "Nawalan ng bisa ang awtorisasyon. I-click ang Magsimula muli upang subukan muli.", + "authenticationCancelled": "Nakansela ang pagpapatotoo.", + "unexpectedAuthenticationError": "Hindi inaasahang error sa panahon ng pagpapatotoo. Pakisubukang muli.", + "connectOpenAiCodexTitle": "Ikonekta ang OpenAI Codex", + "codexConnectDescription": "Pahintulutan ang isang ChatGPT account upang tapusin ang pag-set up ng koneksyong ito.", + "validatingCodexLink": "Ninvalidate ang link…", + "codexGenerateCodeDescription": "I-click ang nasa ibaba upang makabuo ng isang one-time na code, pagkatapos ay mag-sign in sa OpenAI.", + "startCodexFlow": "Simulan", + "requestingOpenAiCode": "Humihiling ng code mula sa OpenAI…", + "codexVerificationInstructions": "1. Buksan ang pahina ng beripikasyon ng OpenAI at 2. ilagay ang code na ito. Ang pahinang ito ay nag-a-update nang awtomatiko kapag ikaw ay nagbigay ng pahintulot.", + "yourCode": "Ang iyong code", + "openVerificationPage": "Buksan ang pahina ng beripikasyon", + "copyUrlShort": "Kopyahin ang URL", + "savingConnection": "Nagsasagawa ng koneksyon…", + "codexConnected": "Nakakonekta!", + "codexConnectionRegistered": "Naka-rehistro na ang Codex account. Maaari mong isara ang tab na ito.", + "tryAgain": "Subukan muli", + "traeAuthorizationSuccess": "Trae awtorisasyon ✓", + "traeAuthorizationFailed": "Nabigong awtorisasyon ng Trae", + "closeAuthorizationWindow": "Maaari mong isara ang bintanang ito.", + "returnToDashboard": "Bumalik sa dashboard.", + "resetViaAppData": "I-reset sa pamamagitan ng App Data", + "deleteSettingsToReset": "Tanggalin ang settings file mula sa app data directory upang i-reset ang iyong password:", + "quitAppCompletely": "Ganap na isara ang OmniRoute desktop app", + "navigateToAppData": "Pumunta sa direktoryo ng data ng app", + "checkAppDataFolder": "Suriin ang folder ng data ng app ng iyong sistema", + "deleteSettingsJson": "Tanggalin", + "relaunchAppFresh": "I-relaunch ang OmniRoute desktop app — magsisimula ito ng bagong setup", + "alternativeSetPassword": "Alternatibo: Magtakda ng Bagong Password", + "setNewPasswordViaEnv": "Itakda ang isang bagong paunang password sa pamamagitan ng server environment file:", + "openServerEnv": "Buksan", + "inDataDirectory": "sa direktoryo ng data", + "addOrUpdate": "Magdagdag o mag-update", + "deleteAndRelaunch": "Tanggalin", + "settingsJson": "settings.json", + "fromDataDir": "mula sa direktoryo ng data", + "relaunchApp": "I-relaunch ang OmniRoute desktop app" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Handa nang Pasimplehin ang Iyong AI Infrastructure?", "ctaDescription": "Sumali sa mga developer na nag-streamline ng kanilang mga pagsasama ng AI sa OmniRoute. Open source at malayang magsimula.", "startFree": "Magsimula nang Libre", - "readDocumentation": "Basahin ang Dokumentasyon" + "readDocumentation": "Basahin ang Dokumentasyon", + "company": "Kumpanya", + "pricing": "Pagpepresyo", + "apiReference": "Sangguniang API", + "helpCenter": "Sentro ng Tulong", + "about": "Tungkol Sa", + "blog": "Blog", + "contact": "Makipag-ugnayan", + "terms": "Mga Tuntunin", + "privacy": "Pribadong impormasyon", + "license": "Lisensya", + "footerDescription": "Ang pinagsamang interface para sa modernong AI infrastructure. Ligtas, nakikita, at scalable.", + "communityDiscussions": "Mga Talakayan ng Komunidad" }, "docs": { "title": "Dokumentasyon", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Magrehistro at pamahalaan ang mga ahente sa pamamagitan ng ACP registry para sa inter-agent na komunikasyon at pagbabahagi ng tool.", "protocolAcpStep1": "Mag-navigate sa Dashboard → Mga Ahente upang tingnan ang mga nakarehistrong ahente ng ACP.", "protocolAcpStep2": "Magrehistro ng mga bagong ahente na may mga kakayahan at pagsasaayos ng endpoint.", - "protocolAcpStep3": "Gumamit ng CLI Tools para i-configure ang mga channel ng komunikasyon ng ahente." + "protocolAcpStep3": "Gumamit ng CLI Tools para i-configure ang mga channel ng komunikasyon ng ahente.", + "metadataTitleTemplate": "%s — OmniRoute Docs", + "metadataDefaultTitle": "OmniRoute Dokumentasyon", + "metadataDescription": "Komprehensibong dokumentasyon para sa OmniRoute AI gateway — setup, API, compression, deployment, at iba pa.", + "layoutNavTitle": "OmniRoute Docs", + "layoutHomeLink": "Tahanan ng Docs", + "layoutDashboardLink": "← Bumalik sa Dashboard", + "homeTitle": "OmniRoute Dokumentasyon", + "homeMetadataDescription": "Lahat ng kailangan mo para sa pag-route, compression, at pag-scale ng iyong AI — mga gabay sa setup, API reference, compression, deployment, at iba pa.", + "homeTwitterDescription": "Komprehensibong dokumentasyon para sa OmniRoute AI gateway", + "homeDescription": "Lahat ng kailangan mo upang i-route, i-compress, at i-scale ang iyong AI", + "homeSearchHint": "Pindutin ang Ctrl K upang maghanap sa mga dokumento", + "featuredQuickStartTitle": "Mabilis na Pagsisimula", + "featuredQuickStartDescription": "Patakbuhin ang OmniRoute sa loob ng 3 minuto", + "featuredAutoComboTitle": "Auto-Combo Gabay", + "featuredAutoComboDescription": "Hayaan ang OmniRoute na pumili ng pinakamahusay na AI para sa iyo", + "featuredProvidersTitle": "Gabay ng mga Tagapagbigay", + "featuredProvidersDescription": "Ikonekta ang mga tagapagbigay ng AI sa loob ng ilang minuto", + "nonTechUsersTitle": "Para sa Mga Hindi Teknikal na Gumagamit", + "nonTechUsersSubtitle": "Magsimula nang mabilis — walang kinakailangang teknikal na kaalaman", + "techUsersTitle": "Para sa mga Tech User", + "techUsersSubtitle": "Malalim na pagsisid sa arkitektura, APIs, at mga panloob", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interactive API explorer — subukan ang OmniRoute endpoints nang live na may real-time na mga tugon", + "apiExplorerTitle": "API Explorer", + "apiExplorerDescription": "Subukan ang mga endpoint ng OmniRoute nang live. Pumili ng isang endpoint, i-configure ang iyong kahilingan, at tingnan ang tugon sa real time.", + "apiExplorerSseStarted": "Nagsimula ang SSE stream — tingnan ang terminal/devtools para sa real-time na output.", + "apiExplorerError": "Error: {message}", + "apiExplorerAuth": "auth", + "apiExplorerResponseLabel": "Tugon", + "apiExplorerSelectEndpoint": "Pumili ng isang endpoint na susuriin", + "apiExplorerChooseApi": "Pumili ng isang API mula sa sidebar upang makita ang mga detalye at subukan ito nang live", + "feedbackThanks": "Salamat sa iyong puna!", + "feedbackQuestion": "Nakatulong ba ang pahinang ito?", + "pageMetadataTitle": "{title} — OmniRoute Docs", + "pageMetadataDescription": "Dokumentasyon ng OmniRoute: {title}", + "breadcrumb": "Tinapay na Pangkagat", + "apiReferenceTable": { + "parameters": "Mga Parameter", + "name": "Pangalan", + "type": "I-type", + "description": "Paglalarawan", + "returns": "Nagbabalik", + "typePrefix": "Uri:" + } }, "legal": { "privacyPolicy": "Patakaran sa Privacy", @@ -9957,7 +10479,42 @@ "successMessage": "Ang iyong {providerName} account ay konektado.", "done": "Tapos na", "error": "Nabigo ang koneksyon", - "tryAgain": "Subukan muli" + "tryAgain": "Subukan muli", + "errorSessionIncomplete": "Hindi kumpleto ang OAuth session (kulang ang redirect URI o code verifier). I-restart ang koneksyon at subukan muli.", + "errorExchangeFailed": "Nabigong palitan", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Ang default na Google OAuth credentials ay gumagana lamang sa localhost. Para sa remote na paggamit, i-configure ang iyong sariling OAuth credentials sa pamamagitan ng mga environment variable: ANTIGRAVITY_OAUTH_CLIENT_ID at ANTIGRAVITY_OAUTH_CLIENT_SECRET. Tingnan ang seksyon ng README na 'OAuth on a Remote Server'.", + "errorSaveFailed": "Nabigong i-save", + "errorAuthorizationFailed": "Nabigong awtorisasyon", + "errorAuthorizationTimeout": "Oras ng pag-apruba na lumipas", + "errorRequestFailed": "Nabigong humiling", + "errorCallbackServerFailed": "Nabigong simulan ang callback server", + "errorBrowserUnavailable": "Hindi available ang Browser OAuth para sa provider na ito sa kasalukuyang kapaligiran. Gamitin ang suportadong paraan ng awtorisasyon sa halip.", + "errorStateMismatch": "Hindi nagtutugma ang estado ng OAuth. I-restart ang koneksyon at subukang muli.", + "errorImportAccessToken": "Nabigong i-import ang access token", + "errorSessionNotInitialized": "Hindi na-initialize ang OAuth session. I-restart ang daloy ng koneksyon at subukan muli.", + "errorNoAuthorizationCode": "Walang natagpuang authorization code. I-paste ang callback URL o ang Authentication Code.", + "tabDeviceCode": "Device Code", + "tabBrowserLogin": "Pag-login sa Browser", + "tabImportAuthJson": "I-import ang auth.json", + "tabPasteApiKey": "I-paste ang API Key", + "windsurfPasteDescription": "Sa Windsurf / VS Code IDE, patakbuhin ang utos na \"Windsurf: Provide Auth Token\" mula sa command palette (o i-click ang Jupyter na \"Get Windsurf Authentication Token\" na button), pagkatapos ay kopyahin ang ipinakitang token at i-paste ito sa ibaba. Ang pag-open ng windsurf.com/show-auth-token nang direkta ay nagpapakita lamang ng isang pahina ng \"Redirecting\" — ang IDE ang dapat mag-umpisa ng daloy.", + "grokAuthJsonDescription": "I-paste ang KABUUANG nilalaman ng ~/.grok/auth.json (hindi lang ang JWT \"key\" field). Ang isang bare JWT ay walang refresh_token, kaya't namamatay ang koneksyon pagkatapos ng expiry (#7610). Mas mainam ang nakalaang Import auth.json modal kapag available.", + "devinDesktopPasteDescription": "I-paste ang umiiral na Devin API key mula sa isang na-authenticate na Devin session. Ang availability ng key export at mga hakbang ay nag-iiba batay sa bersyon ng Devin at account.", + "devinPasteDescription": "Ibigay ang iyong WINDSURF_API_KEY (nakuha sa pamamagitan ng `devin auth login`, o sa pamamagitan ng Windsurf IDE na \"Windsurf: Provide Auth Token\" na utos).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Key / Token", + "saving": "Nagsasave…", + "saveConnection": "I-save ang Koneksyon", + "gheDescription": "Ilagay ang base URL ng iyong GitHub Enterprise instance (hal. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL ng GitHub Enterprise", + "gheUrlRequired": "Kinakailangan ang URL ng GitHub Enterprise", + "gitlabDuoSetupTitle": "Pag-setup ng GitLab Duo OAuth", + "gitlabDuoSetupMessage": "Hindi naka-configure ang GitLab Duo OAuth. Magrehistro ng isang OAuth application sa {applicationsUrl} na may redirect URI na {redirectUri} at mga scope na \"{scopes}\", pagkatapos ay itakda ang {clientIdEnv} (at opsyonal na {clientSecretEnv}) at i-restart.", + "gitlabDuoSetupDescription": "Matapos mairehistro ang aplikasyon at ma-set ang mga env vars sa instance na ito ng OmniRoute, i-click ang Magpatuloy upang simulan ang OAuth login.", + "continue": "Magpatuloy" }, "cursorAuthModal": { "title": "Ikonekta ang Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Mag-load pa", - "loadingMore": "Naglo-load pa..." + "loadingMore": "Naglo-load pa...", + "correlationId": "ID ng Ugnayan", + "group": { + "showAllRows": "Ipakita ang lahat ng hilera", + "showLatestPerCorrelation": "Ipakita ang pinakabago ayon sa correlation ID", + "grouped": "Naka-grupo" + }, + "running": "nagtatakbo", + "interval": { + "decrease": "Bawasan ang agwat", + "title": "Auto-refresh na agwat sa segundo", + "increase": "Dagdagan ang agwat" + }, + "status": { + "inProgress": "Sa proseso", + "recoveredByRetry": "Nakuha muli sa pamamagitan ng muling pagsubok", + "goToParent": "Pumunta sa parent request", + "healedTitle": "Nabigo, naibalik pagkatapos ng {count} subok", + "healed": "gumaling", + "failedTitle": "Lahat ng {count} pagtatangkang nabigo", + "failed": "nabigo", + "pinnedTitle": "Napiling modelo sa pamamagitan ng context-cache session pinning", + "pinned": "na-pin{\" \"}" + }, + "attempts": "mga pagtatangkang", + "detail": { + "collapse": "I-collapse ang {title}", + "expand": "Palawakin ang {title}", + "copyTitle": "Kopyahin ang {title}", + "copied": "Nakopya!", + "copy": "Kopyahin", + "autoscrollOn": "Autoscroll: naka-on", + "autoscrollOff": "Autoscroll: patay", + "payload": { + "clientRawRequest": "Kliyentong Hilaw na Kahilingan", + "clientRequest": "Hiling ng Kliyente", + "openaiRequest": "OpenAI Hiling", + "providerRequest": "Hiling ng Tagapagbigay", + "providerResponse": "Tugon ng Provider", + "clientResponse": "Tugon ng Kliyente", + "pipelineError": "Error sa Pipeline" + }, + "payloadMissing": "Ang detalyadong payload artifact ay hindi na available para sa log entry na ito.", + "payloadCorrupt": "Hindi ma-parse ang detalyadong payload artifact.", + "notAvailable": "N/A", + "semanticCache": "Semantic (OmniRoute)", + "upstreamCache": "Upstream (Provider)", + "ariaLabel": "Detalyeng log ng kahilingan", + "completed": "Natapos", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "Nagbalik ang OmniRoute ng {status} kahit na ang provider ay nagbalik ng {provider}", + "previousRequest": "Nakaraang kahilingan", + "nextRequest": "Susunod na kahilingan", + "close": "Isara ang detalye ng modal", + "startedAt": "Nagsimula Sa", + "endedAt": "Nagtapos Sa", + "duration": "Tagal", + "model": "Modelo", + "provider": "Tagapagbigay", + "account": "Konto", + "input": "Input", + "totalIn": "Kabuuang Pasok: {value}", + "cacheRead": "Cache Basahin: {value}", + "cacheWrite": "Cache Isusulat: {value}", + "compressed": "Naka-compress: {from} → {to} ({percent}% na-save)", + "output": "I-output", + "totalOut": "Kabuuang Labas: {value}", + "reasoning": "Rason: {value}", + "requestedModel": "Hiniling na Modelo", + "requestProtocol": "Req Protocol", + "cacheSource": "Cache Pinagmulan", + "modelPinning": "Pagpapa-pin ng Modelo", + "activeModelPinning": "Aktibo — modelo na napili sa pamamagitan ng session pinning", + "rotated": "Naka-ikot: {initial} -> {final}", + "apiKey": "API Key", + "noApiKey": "Walang API key", + "combo": "Kumbinasyon", + "error": "Error", + "unblockAll": "I-unblock ang lahat", + "cleared": "Nalinaw", + "unblock": "I-unblock", + "relatedRequests": "Kaugnay na Kahilingan ({count})", + "current": "kasalukuyan", + "detailStatus": "Detalye ng Katayuan", + "loadingDetails": "Naglo-load ng mga detalye ng kahilingan...", + "providerEventStream": "Provider Event Stream", + "clientEventStream": "Kaganapan ng Stream ng Kliyente", + "eventStream": "Daloy ng Kaganapan", + "responsePayloadLegacy": "Response Payload (Legacy)", + "requestPayloadLegacy": "Request Payload (Legacy)", + "noPayload": "Walang payload data na magagamit para sa log entry na ito.", + "correlationId": "ID ng Ugnayan", + "correlationIdValue": "Correlation ID: {id}", + "detailedPayloadInfo": "I-enable ang detalyadong pag-log muna kung nais mo ang apat na yugto ng view ng client/provider payload para sa mga bagong kahilingan." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "Na-disable ang {provider}", "providerAdded": "idagdag ang {provider}", "add": "Magdagdag", - "manualApiKey": "Gumamit ng manual na API key" + "manualApiKey": "Gumamit ng manual na API key", + "createDahlTokenFailed": "Nabigong lumikha ng Dahl token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "I-configure ang proxy", + "providerProxyTitleConfigured": "Naka-configure ang Proxy: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-restricted — suriin ang mga tuntunin", "caution": "Mag-ingat — mga sugnay sa personal na paggamit / proxy", "ok": "Pangkalahatang permissive" - } + }, + "allProviders": "Lahat ng provider", + "noApiKeyRequired": "Walang kinakailangang API key" }, "providerHealthAutopilot": { "title": "Autopilot sa Kalusugan ng Provider", @@ -12390,7 +13047,11 @@ "on": "ON", "off": "OFF", "availableProviders": "Mga available na provider ({count})", - "noProviderOverrides": "Walang mga override — lahat ng aktibong provider ay lalahok gamit ang kanilang mga default na modelo" + "noProviderOverrides": "Walang mga override — lahat ng aktibong provider ay lalahok gamit ang kanilang mga default na modelo", + "resetFailed": "Nabigong i-reset", + "resetSuccess": "I-reset ang config sa mga default", + "running": "Nagtatakbo...", + "testFailed": "Nabigo ang pagsubok" }, "kimiSponsorBanner": { "foundingFriendTitle": "Ang Kimi (Moonshot AI) ang founding Open Source Friend ng OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Hindi sinusuportahan ng provider ang vision para sa kahilingang ito ng larawan", "capabilityFilter.toolsMismatch": "Hindi sinusuportahan ng provider ang pagtawag sa tool", "capabilityFilter.structuredOutputMismatch": "Hindi sinusuportahan ng provider ang nakabalangkas na output", - "capabilityFilter.contextWindowMismatch": "Lumampas ang kahilingan sa konteksto ng tagapagbigay" + "capabilityFilter.contextWindowMismatch": "Lumampas ang kahilingan sa konteksto ng tagapagbigay", + "publicSystem": { + "notFound": { + "title": "Hindi matagpuan ang pahina", + "description": "Ang pahinang hinahanap mo ay hindi umiiral o inilipat na.", + "dashboardAriaLabel": "Bumalik sa dashboard", + "statusAriaLabel": "Buksan ang pahina ng katayuan ng sistema", + "systemStatus": "Katayuan ng Sistema" + }, + "error": { + "title": "Panloob na Error sa Server", + "description": "May nangyaring mali habang pinoproseso ang iyong kahilingan. Naabisuhan na ang aming koponan at nagtatrabaho na sa isang solusyon.", + "errorId": "Error ID: {id}", + "detailsAriaLabel": "Mga detalye ng error", + "retryAriaLabel": "Subukang i-load muli ang pahina", + "tryAgain": "Subukan Muli", + "dashboardAriaLabel": "Bumalik sa dashboard", + "statusAriaLabel": "Buksan ang katayuan ng sistema", + "systemStatus": "Katayuan ng Sistema" + }, + "globalError": { + "title": "May nangyaring mali", + "description": "Isang hindi inaasahang error ang nangyari. Ito ay naitala at ang aming koponan ay magsasagawa ng imbestigasyon.", + "detailsAriaLabel": "Mga detalye ng error", + "retryAriaLabel": "Subukang i-load muli ang pahina", + "tryAgain": "Subukan Muli", + "statusAriaLabel": "Buksan ang katayuan ng sistema", + "systemStatus": "Katayuan ng Sistema" + }, + "offline": { + "title": "Isyu sa Koneksyon", + "description": "Hindi makakonekta ang OmniRoute sa network sa ngayon. Suriin ang iyong internet, VPN, o mga setting ng proxy.", + "connectionRestored": "Naibalik ang koneksyon", + "offlineModeDetected": "Nakatagpo ng offline mode", + "retryConnection": "Subukan Muli ang Koneksyon", + "openStatusPage": "Buksan ang Status Page" + }, + "maintenance": { + "title": "Nakatakdang Pagpapanatili", + "description": "Ang ilang serbisyo ay pansamantalang hindi magagamit habang isinasagawa ang pagpapanatili. Karaniwang nananatiling online ang pangunahing routing, ngunit maaaring bumaba ang mga tampok sa pamamahala.", + "suggestion1": "Subukan muli pagkatapos ng ilang minuto.", + "suggestion2": "Suriin ang kasalukuyang mga tagapagpahiwatig ng kalusugan at katayuan ng tagapagbigay bago subukang muli.", + "systemStatus": "Tingnan ang Katayuan ng Sistema", + "healthDashboard": "Buksan ang Health Dashboard" + }, + "status": { + "title": "Katayuan ng Sistema", + "description": "Buhay na operational snapshot para sa mga pangunahing serbisyo ng OmniRoute.", + "loadingHealth": "Naglo-load ng mga health metrics...", + "failedToLoad": "Nabigong i-load ang kalusugan ng sistema.", + "unableToReachHealth": "Hindi maabot ang health endpoint. Suriin ang koneksyon at subukang muli.", + "healthCheckFailed": "Nabigong Suri ng Kalusugan", + "openConnectivityHelp": "Buksan ang Tulong sa Connectivity", + "maintenanceInfo": "Impormasyon sa Pagpapanatili", + "service": "Serbisyo", + "unknown": "hindi kilala", + "notAvailable": "n/a", + "providersTracked": "Mga Tagapagbigay na Nasusubaybayan", + "circuitBreakerState": "Estado ng Circuit Breaker ng Provider", + "lastUpdate": "Huling pag-update: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Masamang Kahilingan", + "description": "Ang request payload ay hindi wasto o hindi kumpleto.", + "suggestion1": "Suriin ang mga kinakailangang field at format ng payload bago subukang muli.", + "suggestion2": "Kung gumagamit ka ng API, i-validate ang JSON schema nang lokal.", + "suggestion3": "Kung patuloy itong nangyayari, buksan ang kahilingan sa Translator Playground upang suriin ang payload.", + "primaryAction": "Buksan ang Dokumentasyon", + "secondaryAction": "Buksan ang Tagasalin" + }, + "401": { + "title": "Walang Awtorisasyon", + "description": "Kinakailangan ang pagpapatotoo upang ma-access ang mapagkukunang ito.", + "suggestion1": "Mag-sign in muli at subukang muli ang operasyon.", + "suggestion2": "Para sa mga tawag sa API, tiyakin na ang Bearer token ay naroroon at wasto.", + "suggestion3": "Kung ang token ay kamakailan lamang na-rotate, i-update ang iyong client credentials.", + "primaryAction": "Pumunta sa Pag-login", + "secondaryAction": "Pamahalaan ang mga API Key" + }, + "403": { + "title": "Bawal", + "description": "Naiintindihan ang iyong kahilingan, ngunit tinanggihan ang access ayon sa patakaran.", + "suggestion1": "Suriin ang mga patakaran sa IP allowlist/blocklist sa mga setting.", + "suggestion2": "Tiyakin ang mga patakaran ng modelo at badyet na nakatalaga sa iyong API key.", + "suggestion3": "Humiling sa isang administrator na bigyan ng kinakailangang saklaw ng pahintulot.", + "primaryAction": "Buksan ang Tulong sa Access", + "secondaryAction": "Buksan ang Mga Setting ng Seguridad" + }, + "408": { + "title": "Nawalang Oras ng Kahilingan", + "description": "Hindi natanggap ng server ang kumpletong kahilingan sa tamang oras.", + "suggestion1": "Subukan muli ang kahilingan gamit ang mas maliit na payload.", + "suggestion2": "Suriin ang katatagan ng iyong network at latency ng VPN/proxy.", + "suggestion3": "Para sa mahahabang operasyon, i-enable ang streaming o hatiin ang request.", + "primaryAction": "Buksan ang Endpoint Guide", + "secondaryAction": "Suriin ang Katayuan ng Network" + }, + "429": { + "title": "Sobrang Dami ng Mga Kahilingan", + "description": "Lumampas ang mga limitasyon sa rate para sa kliyenteng ito, susi, o tagapagbigay.", + "suggestion1": "Maghintay para sa cooldown at subukang muli pagkatapos ng inirekomendang agwat.", + "suggestion2": "Lumipat sa isang combo na may fallback providers.", + "suggestion3": "I-tune ang mga profile ng resilience/rate-limit ng provider sa mga setting.", + "primaryAction": "Buksan ang Mga Setting ng Resilience", + "secondaryAction": "Buksan ang Combos" + }, + "500": { + "title": "Panloob na Error sa Server", + "description": "Isang hindi inaasahang error sa server ang nangyari habang pinoproseso ang iyong kahilingan.", + "suggestion1": "Subukan muli sa loob ng ilang segundo.", + "suggestion2": "Suriin ang health telemetry at mga server log para sa mga magkakaugnay na request ID.", + "suggestion3": "Kung patuloy, iulat ang isyu kasama ang timestamp at konteksto ng kahilingan.", + "primaryAction": "Buksan ang Health Dashboard", + "secondaryAction": "Buksan ang Mga Log" + }, + "502": { + "title": "Masamang Gateway", + "description": "Ang upstream provider o gateway integration ay nagbalik ng hindi wastong tugon.", + "suggestion1": "Subukan muli gamit ang ibang provider o aktibong combo route.", + "suggestion2": "Suriin ang mga kredensyal ng provider at pagkakaroon ng modelo.", + "suggestion3": "Suriin ang output ng tagasalin kung kasangkot ang conversion ng format.", + "primaryAction": "Buksan ang Mga Tagapagbigay", + "secondaryAction": "Buksan ang Tagasalin" + }, + "503": { + "title": "Serbisyo Hindi Magagamit", + "description": "Ang serbisyo ay pansamantalang hindi magagamit dahil sa pagpapanatili o nabawasan na mga dependency.", + "suggestion1": "Maghintay ng sandali at subukan muli.", + "suggestion2": "Suriin ang mga abiso sa pagpapanatili at katayuan ng sistema.", + "suggestion3": "Gumamit ng fallback providers kung ang iyong workflow ay sensitibo sa latency.", + "primaryAction": "Mga Detalye ng Pagpapanatili", + "secondaryAction": "Katayuan ng Sistema" + } + } + }, + "kiroAuthModal": { + "title": "Ikonekta ang {providerLabel}", + "chooseMethod": "Pumili ng iyong paraan ng pagpapatotoo:", + "builderId": "AWS Builder ID", + "builderDescription": "Inirerekomenda para sa karamihan ng mga gumagamit. Mag-sign in gamit ang AWS account na naka-link sa {providerLabel}.", + "organization": "Ang Iyong Organisasyon (AWS IAM Identity Center)", + "organizationDescription": "Gamitin ang start URL ng SSO ng iyong kumpanya (halimbawa: {url}).", + "googleAccount": "Google Account", + "googleDescription": "Mag-login gamit ang iyong Google account.", + "githubAccount": "GitHub Account", + "githubDescription": "Mag-login gamit ang iyong GitHub account.", + "importToken": "Mag-import ng Token", + "importDescription": "I-paste ang isang refresh token na na-export mula sa {providerLabel}.", + "apiKey": "API Key", + "apiKeyDescription": "I-paste ang isang pangmatagalang {providerLabel} / CodeWhisperer API key. Ito ay naka-imbak bilang bearer credential na walang refresh token; ang pagtuklas ng profile ay best-effort.", + "idcStartUrl": "IDC Simulan na URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL ng AWS IAM Identity Center ng iyong organisasyon", + "awsRegion": "AWS Rehiyon", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS rehiyon para sa iyong Identity Center (default: us-east-1)", + "continue": "Magpatuloy", + "back": "Bumalik", + "autoDetecting": "Awtomatikong tinutukoy ang token...", + "readingCredentials": "Binabasa ang {providerLabel} na kredensyal mula sa AWS SSO cache", + "tokenNotDetected": "Hindi na-auto-detect ang {providerLabel} token. Mangyaring i-paste ang iyong refresh token nang manu-mano.", + "refreshToken": "I-refresh ang Token", + "tokenPlaceholder": "Awtomatikong pupunan ang token...", + "importing": "Nag-iimport...", + "apiKeyPlaceholder": "I-paste ang iyong {providerLabel} API key...", + "apiKeyStoredDescription": "Naka-imbak na naka-encrypt bilang isang pangmatagalang bearer credential. Walang refresh flow.", + "apiKeyRegionDescription": "AWS rehiyon para sa susi (default: us-east-1)", + "validating": "Ninvalidate...", + "validateAndSaveApiKey": "I-validate at I-save ang API Key", + "errorAutoDetect": "Hindi ma-auto-detect ang token", + "errorAutoDetectFailed": "Nabigong ma-auto-detect ang token", + "errorRefreshTokenRequired": "Pakisok ang isang refresh token", + "errorImportFailed": "Nabigong i-import", + "errorApiKeyRequired": "Pakisok ang isang Kiro API key", + "errorApiKeyImportFailed": "Nabigong i-import ang API key", + "errorIdcStartUrlRequired": "Pakisok ang iyong IDC start URL" + }, + "kiroSocialOAuthModal": { + "title": "Ikonekta ang {providerLabel} sa pamamagitan ng {providerName}", + "errorStartAuthorization": "Nabigong simulan ang awtorisasyon", + "errorAuthorizationExpired": "Nawalan ng bisa ang awtorisasyon. Magsimula muli sa proseso ng pag-login.", + "errorAuthorizationFailed": "Nabigong awtorisasyon", + "initializing": "Nagsisimula...", + "settingUp": "Nagsasaayos ng {providerName} na pagpapatotoo", + "openIncognito": "Buksan ang link na ito sa isang Incognito na bintana", + "incognitoDescription": "Gumamit ng Incognito/Private na bintana upang maiwasan ang mga salungatan sa sesyon sa mga umiiral na account.", + "copyLink": "Kopyahin ang link", + "verificationCode": "Kodigo ng Beripikasyon", + "waiting": "Naghihintay para sa awtorisasyon...", + "cancel": "Kanselahin", + "successTitle": "Matagumpay na Nakakonekta!", + "successMessage": "Ang iyong {providerLabel} account sa pamamagitan ng {providerName} ay nakakonekta na.", + "done": "Tapos", + "errorTitle": "Nabigong Kumonekta", + "close": "Isara" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Nabigong awtorisasyon", + "errorPopupBlocked": "Naka-block ang popup — payagan ang mga popup para sa site na ito, o i-paste ang token nang manu-mano sa ibaba.", + "errorPopupClosed": "Isinara ang authorization window bago makumpleto.", + "errorAccessTokenRequired": "Kinakailangan ang access token.", + "errorImportFailed": "Nabigong i-import", + "title": "Ikonekta ang Trae SOLO", + "authorizeDescription": "Pahintulutan sa pamamagitan ng trae.ai sa isang popup. Isasara ng popup ang sarili nito kapag na-import na ang token.", + "authorizeImportant": "Mahalaga: kailangan mong naka-log in sa trae.ai sa browser na ito muna. Ang pahina ng pag-authorize ay nagkukumpirma lamang ng umiiral na sesyon — hindi ka nito ma-log in. Kung makita mo ang \"Nabigong Mag-log In\", i-click ang \"Buksan ang solo.trae.ai\", mag-log in, pagkatapos ay bumalik dito.", + "waitingForAuthorization": "Naghihintay para sa trae.ai…", + "authorizeWithBrowser": "Pahintulutan gamit ang Browser", + "openSoloTrae": "Buksan ang solo.trae.ai", + "orPasteManually": "o i-paste ang token nang manu-mano", + "manualInstructions": "Mag-sign in sa solo.trae.ai, buksan ang DevTools → Network, magpadala ng anumang mensahe sa chat, at kopyahin ang JWT mula sa Authorization: Cloud-IDE-JWT {tokenPlaceholder} na request header. Ang buhay ng JWT ay ~14 na araw. Ang mga opsyonal na identity fields ay nagmumula sa common_params sa parehong request body.", + "accessTokenLabel": "Access Token (Cloud-IDE-JWT)", + "webId": "Web ID", + "optional": "opsyonal", + "bizUserId": "ID ng Biz User", + "userUniqueId": "Natatanging ID ng Gumagamit", + "scope": "Saklaw", + "tenant": "Utenant", + "region": "Rehiyon", + "importing": "Nag-iimport…", + "importToken": "Mag-import ng Token", + "cancel": "Kanselahin" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Namamahagi...", + "complete": "Kumpleto", + "defaultLabel": "Ipamahagi ang mga Proxy" + } + }, + "providerTest": { + "dialogLabel": "Subukan ang {provider}", + "deprecated": "nawawalang halaga", + "risk": "panganib", + "close": "Isara", + "model": "Modelo", + "key": "Susi", + "defaultKey": "default", + "clearConversation": "I-clear ang pag-uusap", + "clear": "I-clear", + "tabs": { + "test": "Subok", + "logs": "Mga Log" + }, + "loadingLogs": "Naglo-load ng mga log…", + "failedToLoadLogs": "Nabigong i-load ang mga log", + "noLogsYet": "Wala pang mga log", + "noLogsDescription": "Magpadala ng test message mula sa Test tab — ang mga log para sa provider na ito ay lilitaw dito.", + "openFullLogs": "Buksan ang buong pahina ng mga log", + "live": "Buhay", + "tailingLast": "tinatail ang huli {count}", + "refreshNow": "I-refresh ngayon", + "refresh": "I-refresh", + "unknownRequester": "hindi kilalang humihiling", + "fields": { + "timestamp": "Tatak ng Oras", + "status": "Katayuan", + "duration": "Tagal", + "model": "Modelo", + "requestedModel": "Hiniling na modelo", + "provider": "Tagapagbigay", + "requester": "Humihiling", + "tokens": "Mga Token" + } + }, + "proxyLog": { + "detailAriaLabel": "Detalyeng log ng proxy", + "event": "Proxy Kaganapan", + "close": "Isara ang proxy detail modal", + "time": "Oras", + "latency": "Pagkaantala", + "clientIp": "Client IP", + "proxy": "Proxy", + "direct": "Direkta", + "type": "I-type", + "level": "Antas", + "provider": "Tagapagbigay", + "tlsFingerprint": "TLS Fingerprint", + "directNative": "Direkta", + "targetUrl": "Target URL", + "error": "Error", + "configuration": "Konfigurasyon ng Proxy" + }, + "requestTimeline": { + "title": "Kronolohiya ng Kahilingan", + "modes": { + "follow": "Sundan", + "followDescription": "Ang axis ay nag-scroll pakaliwa, ang NOW line ay nananatili sa 75%", + "now": "Ngayon", + "nowDescription": "Tumalon sa kasalukuyang oras, ang NOW na linya ay nag-reset sa gitna", + "pan": "Pansit", + "panDescription": "I-drag upang galugarin, ang background ay nagyelo" + }, + "reset": "I-reset", + "started": "Nagsimula", + "ended": "Natapos", + "duration": "Tagal", + "status": "Katayuan", + "provider": "Tagapagbigay", + "tokens": "Mga Token", + "active": "Aktibo", + "other": "Iba", + "tenMinutes": "10min", + "hour": "oras", + "day": "araw", + "unknownModel": "hindi kilala", + "pending": "naghihintay" + }, + "metadata": { + "compressionTitle": "Pagsisikip", + "compressionDescription": "I-configure ang mga setting ng compression ng konteksto upang mabawasan ang paggamit ng token at mga gastos.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy endpoints para sa iyong AI infrastructure", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "I-monitor ang mga tawag sa LLM + i-debug ang HTTPS na trapiko ng anumang aplikasyon" + }, + "conductor": { + "title": "Conductor — CLI-agent fleet", + "subtitle": "OmniConductor hub: mga runner, pila ng gawain at mga konseho, live", + "runners": "Mga Tumakbo", + "tasks": "Mga Gawain", + "colName": "Pangalan", + "colClis": "CLIs", + "colStatus": "Katayuan", + "colTask": "Gawain", + "colMode": "Mode", + "colRunner": "Runner", + "colSummary": "Buod", + "online": "online", + "offline": "offline", + "draining": "nawawalan ng laman", + "hubOffline": "Naka-offline ang conductor hub o hindi naka-configure (CONDUCTOR_HUB_URL) — walang ipinapakita kundi luma na data.", + "noRunners": "Walang nakarehistrong runner", + "noTasks": "Wala pang mga gawain", + "detailTitle": "Detalye ng Gawain", + "prompt": "Utos", + "branch": "Sangay", + "fetchHint": "Kunin ang resulta gamit ang: git fetch origin {branch}", + "council": "Konseho", + "candidates": "Mga Kandidato", + "cancel": "Kanselahin ang gawain", + "cancelConfirmTitle": "I-cancel ang gawaing ito?", + "cancelConfirmMessage": "Ang hub ay ititigil ang pagpapatupad sa runner. Ito ay hindi maibabalik.", + "cancelFailed": "Tinanggihan ng hub ang pagkansela", + "close": "Isara", + "error": "Error", + "faroTitle": "Faro — tagapagsalita ng fleet", + "faroSubtitle": "Chat at boses, nakabatay sa mga totoong kaganapan ng fleet. Ang mga nakasisirang utos ay palaging humihingi ng kumpirmasyon.", + "faroEmpty": "Tanungin ang tungkol sa fleet — hal. \"kamusta ang fleet?\"", + "faroPending": "Nagtatanong si Faro para sa kumpirmasyon", + "faroPlaceholder": "kausapin si Faro…", + "faroSend": "magpadala", + "faroOffline": "Si Faro (tagapagsalita) ay offline", + "yes": "Oo", + "no": "Hindi", + "pushToTalk": "Hawakan upang makipag-usap", + "speakAnswers": "magsalita ng mga sagot", + "voiceModels": "Mga modelo ng boses (tagapagbigay/modelo ng OmniRoute na ito)", + "voiceIdle": "magsalita", + "voiceListening": "nakikinig…", + "voiceThinking": "nag-iisip…", + "voiceSpeaking": "nagsasalita…", + "sttFailed": "Nabigo ang transcription (suriin ang modelo/tagapagbigay ng STT)", + "ttsFailed": "Nabigo ang pagsasalin ng pagsasalita (suriin ang TTS modelo/tagapagbigay)", + "micDenied": "Hindi magagamit ang mikropono o tinanggihan ang pahintulot" + }, + "cliproxyProviderExposure": { + "title": "Provider Exposure", + "description": "I-expose ang mga modelo ng CLIProxyAPI bilang isang routing target sa ilalim ng cliproxyapi/ prefix.", + "label": "I-expose bilang cliproxyapi/...", + "hint": "Kapag naka-enable, ang mga natuklasang modelo ay lilitaw sa mga provider select sa buong OmniRoute.", + "updateFailed": "Nabigong i-update (HTTP {status})", + "networkError": "Error sa Network — hindi ma-update ang setting ng provider exposure" + } } - diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 7e1a9b8a62..8bc5e539e9 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -172,6 +172,18 @@ "unselectAll": "Odznacz wszystko", "visibleModels": "widoczne", "selectAllConfirm": "Dodać {count} modeli do tej kombinacji?", + "testSelectedProviders": "Dostawcy testów", + "testingSelectedProviders": "Testowanie {done}/{total}...", + "noProvidersSelectedToTest": "Sprawdź najpierw przynajmniej jednego dostawcę poniżej", + "noModelsToTestForProviders": "Brak modeli do przetestowania dla wybranych dostawców", + "testSelectedProvidersResults": "{ok} z {total} modeli działa.", + "selectWorkingModels": "Dodaj działający", + "unselectWorkingModels": "Odznacz pracujący", + "noWorkingModelsToSelect": "Brak dostępnych modeli do dodania", + "providerTestHint": "Wskazówka: sprawdź dostawcę → Test → Dodaj działający. Kliknij ponownie, aby odznaczyć.", + "selectAllProviders": "Sprawdź wszystkich dostawców", + "clearProviderSelection": "Odznacz dostawców", + "providersSelectedCount": "Sprawdzono {count} dostawców", "errorOccurred": "Wystąpił błąd", "comboDeleted": "Usunięto combo", "hide": "Ukryj", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Anulować to zadanie wsadowe? Trwające żądania zostaną zatrzymane.", "batchActionCancelError": "Nie udało się anulować zadania wsadowego. Spróbuj ponownie.", "batchActionRetryError": "Nie udało się ponowić nieudanych żądań. Spróbuj ponownie.", - "batchConceptRetentionNote": "Pliki wyników i błędów są przechowywane przez 30 dni (Anthropic: 29 dni)" + "batchConceptRetentionNote": "Pliki wyników i błędów są przechowywane przez 30 dni (Anthropic: 29 dni)", + "batchFilesSizeColumn": "Rozmiar", + "toggleNoAuthProvider": "Przełącz dostawcę bez uwierzytelnienia", + "loadingModels": "Ładowanie modeli…", + "selectAModel": "Wybierz model", + "degraded": "Degradacja", + "zeroConfigBannerTitle": "Uruchamianie w trybie zero-config", + "zeroConfigBannerBody": "OmniRoute automatycznie wygenerował bezpieczne klucze szyfrowania przy pierwszym uruchomieniu. Zostały one zapisane w {dataDir}. Nie są wymagane żadne działania — Twoje dane są zaszyfrowane i bezpieczne. Aby użyć niestandardowych kluczy, dodaj JWT_SECRET i STORAGE_ENCRYPTION_KEY do tego pliku.", + "batchRelativeTimeIn": "w {value}", + "batchRelativeTimeAgo": "{value} temu", + "batchDetailsTitle": "Szczegóły wsadu", + "batchProgress": "Postęp", + "batchCompletedCount": "{count} zakończone", + "batchFailedCount": "{count} niepowodzeń", + "batchPendingCount": "{count} oczekujące", + "batchTimeline": "Oś Czasu", + "batchTimelineInProgress": "W Trakcie", + "batchTimelineFinalizing": "Finalizowanie", + "batchTimelineCompleted": "Zakończono", + "batchTimelineFailed": "Niepowodzenie", + "batchTimelineExpires": "Wygasa", + "batchTimelineExpired": "Wygasło", + "batchTimelineCancelling": "Anulowanie", + "batchTimelineCancelled": "Anulowane", + "batchTokenUsage": "Użycie Tokena", + "batchMetadata": "Metadane", + "batchFileContents": "Zawartość pliku", + "batchFileUsedByCount": "Używane przez {count, plural, one {# partię} other {# partii}}", + "batchFilePreview": "Podgląd", + "batchFilePreviewTruncated": "Wyświetlanie pierwszych {shown} linii ({total} łącznie linii)", + "batchFileDownloadFull": "Pobierz Pełny Plik" }, "disabled": "Wyłączone", "featureFlagOmnirouteEmergencyFallbackDescription": "Kierowanie żądań z wyczerpanym budżetem do awaryjnego, bezpłatnego fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separator", "discovery": "Discovery", "discoverySubtitle": "Skanowanie providers w celu wyszukania darmowego dostępu", + "conductor": "Konduktor", + "conductorSubtitle": "Flota agenta CLI", "resilienceConnections": "Odporność Połączenia", "resilienceConnectionsSubtitle": "Cooldown, wyłącznik, stan blokady", "settingsModalityBridge": "Mostek Modalności", - "settingsModalityBridgeSubtitle": "Fallback obrazu/audio → tekst dla modeli tylko tekstowych" + "settingsModalityBridgeSubtitle": "Fallback obrazu/audio → tekst dla modeli tylko tekstowych", + "commandPalette": { + "title": "Paleta poleceń", + "searchPlaceholder": "Szukaj stron, ustawień, narzędzi...", + "clearSearch": "Wyczyść wyszukiwanie", + "noResults": "Brak wyników", + "navigate": "nawigować", + "open": "otwórz", + "close": "zamknij" + }, + "noResults": "Brak wyników" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Aktualizacja ustawień nie powiodła się", "sync.token.created": "Utworzono token synchronizacji", "sync.token.revoked": "Cofnięto token synchronizacji" - } + }, + "mcpMetricCalls24h": "Połączenia (24h)", + "mcpMetricSuccessRate": "Wskaźnik sukcesu", + "mcpMetricAvgDuration": "Średni czas trwania", + "mcpMetricTopTool": "Najlepsze narzędzie" }, "themesPage": { "title": "Motywy", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Dostępna jest nowa wersja. Kliknij, aby zaktualizować.", "updateStarted": "Rozpoczęto aktualizację...", "reloadingPageAutomatically": "Automatyczne przeładowywanie strony...", - "providerTopology": "Topologia Provider" + "providerTopology": "Topologia Provider", + "downloadDmg": "Pobierz DMG (macOS)", + "downloadDmgDescription": "Dostępna jest nowa wersja aplikacji desktopowej OmniRoute. Proszę pobrać i zainstalować instalator DMG dla macOS, aby zaktualizować (aktualna: v{version}).", + "downloadExe": "Pobierz EXE (Windows)", + "downloadExeDescription": "Dostępna jest nowa wersja aplikacji desktopowej OmniRoute. Proszę pobrać i zainstalować instalator EXE dla systemu Windows, aby zaktualizować (aktualna: v{version}).", + "downloadAppImage": "Pobierz AppImage (Linux)", + "downloadAppImageDescription": "Dostępna jest nowa wersja aplikacji desktopowej OmniRoute. Proszę pobrać pakiet Linux AppImage, aby zaktualizować (aktualna: v{version}).", + "downloadUpdate": "Pobierz aktualizację", + "downloadUpdateDescription": "Dostępna jest nowa wersja aplikacji desktopowej OmniRoute. Proszę pobrać odpowiedni format aplikacji dla swojego systemu, aby zaktualizować (aktualna: v{version}).", + "updateQueued": "Zaktualizowano do v{version}.", + "updateDockerRebuilding": "Obraz Dockera jest odbudowywany w tle.", + "updateWaitingRestart": "Czekam na ponowne uruchomienie OmniRoute z nową wersją.", + "updateInstalling": "Instalowanie v{version}.", + "updateRunning": "OmniRoute działa teraz w wersji v{version}.", + "updateCompleted": "OmniRoute zaktualizowany do wersji {version}.", + "updateDockerStillRebuilding": "Obraz Dockera wciąż się odbudowuje dla v{version}.", + "updateInstallingBackground": "Instalowanie v{version} w tle.", + "updateWaitingVersion": "Czekam na powrót OmniRoute w wersji v{version}.", + "updateDockerStillInProgress": "Rebuild Dockera jest wciąż w toku.", + "updateRestarting": "Trwa ponowne uruchamianie usługi. Czekam na ponowne uruchomienie OmniRoute...", + "updateTimeout": "Aktualizacja rozpoczęta, ale v{version} nie stała się dostępna przed upływem czasu. Odśwież stronę lub sprawdź logi serwera.", + "updateTimedOut": "Aktualizacja do v{version} przekroczyła czas oczekiwania.", + "updateStartFailed": "Nie udało się rozpocząć aktualizacji.", + "noResponseStream": "Nie otrzymano strumienia odpowiedzi.", + "updateComplete": "Aktualizacja zakończona!", + "updateFailed": "Aktualizacja nie powiodła się.", + "updateNetworkError": "Błąd sieci — połączenie utracone podczas aktualizacji.", + "stepInstallPackage": "Zainstaluj Pakiet", + "stepRebuildNativeModules": "Przebuduj moduły natywne", + "stepRestartService": "Uruchom ponownie usługę", + "stepComplete": "Zakończone", + "stepError": "Błąd", + "updateCompleteTitle": "Aktualizacja zakończona!", + "updateFailedTitle": "Aktualizacja nie powiodła się", + "updatingTitle": "Aktualizowanie OmniRoute...", + "reloadNotice": "Strona zostanie automatycznie przeładowana za kilka sekund.", + "retryNotice": "Proszę spróbować ponownie lub zaktualizować ręcznie za pomocą CLI.", + "restartNotice": "Nie zamykaj tej strony. System zrestartuje się automatycznie.", + "reloadNow": "Przeładuj Teraz", + "closeUpdate": "Zamknij", + "retryUpdate": "Spróbuj ponownie", + "updateAvailableTitle": "Dostępna aktualizacja: v{version}{desktop}", + "desktopAppLabel": "(Aplikacja Desktopowa)", + "checkingForUpdates": "Sprawdzanie aktualizacji...", + "versionAvailableForDownload": "Wersja v{version} jest dostępna do pobrania.", + "downloadingUpdate": "Pobieranie aktualizacji... {percent}% zakończone.", + "updateDownloaded": "Aktualizacja została pomyślnie pobrana! Kliknij Uruchom ponownie i zainstaluj, aby zastosować.", + "autoUpdateFailed": "Automatyczna aktualizacja nie powiodła się: {reason}.", + "unknownUpdateError": "Nieznany błąd", + "versionAvailableDesktop": "Wersja v{version} jest dostępna dla aplikacji desktopowej.", + "manualUpdateRequired": "Wymagana ręczna aktualizacja dla tego typu instalacji.", + "restartAndInstall": "Uruchom ponownie i zainstaluj", + "checkForUpdate": "Sprawdź aktualizacje", + "manualUpdate": "Ręczna aktualizacja", + "directDownloadHint": "Lub pobierz odpowiedni format instalatora bezpośrednio:", + "releaseNotes": "Notatki Wydania", + "readMore": "Czytaj więcej", + "noAuthLabel": "Brak autoryzacji" }, "analytics": { "title": "Analityka", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Wywnioskowano z zapisanych logów wywołań powiązanych z tym żądaniem", "routeRecommendations": "Rekomendacje", "routeLimitations": "Ograniczenia", - "routeNoKnownLimitations": "Brak znanych ograniczeń dla tego wyjaśnienia." + "routeNoKnownLimitations": "Brak znanych ograniczeń dla tego wyjaśnienia.", + "searchAnalyticsLoading": "Ładowanie analityki wyszukiwania…", + "searchAnalyticsNoData": "Brak dostępnych danych wyszukiwania.", + "searchAnalyticsNoDataDescription": "Zapytania wyszukiwania pojawią się tutaj po pierwszym wyszukiwaniu za pomocą /v1/search.", + "searchAnalyticsToday": "{count} dzisiaj", + "searchAnalyticsCachedRequests": "{count} zbuforowanych żądań", + "searchAnalyticsApiCosts": "koszty API wyszukiwania", + "searchAnalyticsErrors": "{count} błędów", + "searchAnalyticsNoErrors": "Brak błędów", + "searchAnalyticsProviderBreakdown": "Podział Dostawców", + "searchAnalyticsQueries": "zapytania", + "searchAnalyticsEmptyDescription": "Użyj POST /v1/search, aby rozpocząć kierowanie wyszukiwań w sieci.", + "searchAnalyticsFreeTier": "Dostępny darmowy poziom: Serper (2 500/mies.), Brave (2 000/mies.), Exa (1 000/mies.), Tavily (1 000/mies.) — łącznie 6 500+ darmowych wyszukiwań/miesiąc z automatycznym przełączaniem awaryjnym.", + "autoRoutingNoDataAvailable": "Brak dostępnych analiz automatycznego routingu. Wykonaj zapytania z użyciem prefiksu auto/ aby zobaczyć metryki.", + "defaultVariantLabel": "Domyślny", + "freeTierAvailable": "Dostępny darmowy poziom" }, "apiManager": { "title": "Klucze API", @@ -2124,7 +2254,7 @@ "savePermissions": "Zapisz uprawnienia", "endpointRestrictions": "Dozwolone endpoints", "allEndpointsAllowed": "Ten klucz ma dostęp do wszystkich endpoints API.", - "endpointsRestricted": "Ograniczono do {count, plural, one {# endpointu} other {# endpointów}}.", + "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "Automatyczne dopasowywanie", "autoResolveDesc": "Automatycznie dopasowuj niejednoznaczne nazwy models do natywnego provider dla tego klucza API.", "streamDefaultMode": "Domyślna kompatybilność strumieniowania", @@ -2348,7 +2478,9 @@ "providerCount": "{count} dostawców", "imageToTextBridgeAvailable": "Modality Bridge może teraz opisywać obrazy dla modeli tylko tekstowych. Inline playground będzie dostępny, gdy /api/v1/images/understanding zostanie wdrożony.", "imageToTextBridgeCta": "Skonfiguruj most Obraz→Tekst w ustawieniach Mostu Modalności", - "sttBridgeCta": "Skonfiguruj most Speech→Text w ustawieniach Modality Bridge" + "sttBridgeCta": "Skonfiguruj most Speech→Text w ustawieniach Modality Bridge", + "existingConnection": "Istniejące połączenie", + "openrouterSttDescription": "Modele rozpoznawania mowy OpenRouter korzystają z Twojego skonfigurowanego połączenia OpenRouter. Nie są wymagane osobne poświadczenia." }, "search": { "searchQuery": "Zapytanie wyszukiwania", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Wklej do:", "copilotReloadInstruction": "Następnie uruchom ponownie VS Code i ustaw klucz API w polu wprowadzania.", "wireApiChatCompletions": "Chat Completions (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Akcja nie powiodła się", + "cliproxyapiActionSucceeded": "Akcja zakończona sukcesem", + "cliproxyapiCheckUpdates": "Sprawdź aktualizacje", + "cliproxyapiDescription": "Zapasowy proxy upstream (OAuth oparty na Go)", + "cliproxyapiHealth": "Zdrowie", + "cliproxyapiHealthy": "Zdrowy", + "cliproxyapiInstall": "Zainstaluj", + "cliproxyapiNotInstalledValue": "Nie zainstalowano", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Żądanie nie powiodło się", + "cliproxyapiRestart": "Uruchom ponownie", + "cliproxyapiStart": "Start", + "cliproxyapiStatusError": "Błąd", + "cliproxyapiStatusInstalled": "Zainstalowane", + "cliproxyapiStatusNotInstalled": "Nie zainstalowano", + "cliproxyapiStatusRunning": "Uruchamianie", + "cliproxyapiStatusStopped": "Zatrzymano", + "cliproxyapiStop": "Zatrzymaj", + "cliproxyapiUnhealthy": "Niezdrowy", + "cliproxyapiUnknown": "Nieznany", + "cliproxyapiUpdate": "Aktualizuj", + "cliproxyapiUpdateAvailable": "Dostępna aktualizacja: v{current} → v{latest}", + "cliproxyapiVersion": "Wersja" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "Brak cen", "pricingAvailableShort": "wycenione", "pricingMissingShort": "brak ceny", + "fallbackOnlyOnQuotaExhaustion": "Tylko postęp w przypadku wyczerpania limitu", + "fallbackOnlyOnQuotaExhaustionShort": "tylko awaryjny limit", "warningRoundRobinSingleModel": "Round-robin jest najbardziej użyteczny z co najmniej 2 models.", "warningCostOptimizedPartialPricing": "Tylko {priced} z {total} models ma określone ceny. Routing może być tylko częściowo świadomy kosztów.", "warningCostOptimizedNoPricing": "Nie znaleziono danych o cenach dla tego combo. Routing cost-optimized może działać w nieoczekiwany sposób.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Mode pack i ważenie pozostają tutaj; stan wykonawczy circuit breaker pozostaje na stronie Health.", "emailVisibilityHint": "Adresy e-mail kont w tym miejscu podlegają globalnemu przełącznikowi prywatności.", "emailVisibilityTooltip": "Użyj ikony oka, aby globalnie pokazać lub ukryć adresy e-mail kont na ekranach combos, providers i quota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Krok po kroku (Dostawca → Model)", + "builderModeGlobal": "Globalne wyszukiwanie modelu (Niestandardowa kombinacja)", + "builderGlobalSearchPlaceholder": "Szukaj modeli we wszystkich dostawcach (np. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Dodaj wszystko", + "builderGlobalShortcuts": "Skróty:", + "builderGlobalNoResults": "Nie znaleziono modelu dla \"{query}\".", + "builderGlobalProviderLabel": "Dostawca:", + "builderGlobalAccountCount": "{count, plural, one {# konto} other {# kont}}", + "builderGlobalAdded": "Dodano", + "builderGlobalAdd": "Dodaj", "manualModel": "Ręczny model", "manualModelInvalid": "Wprowadź model w formacie provider/model.", "manualModelUnknownProvider": "Nieznany prefiks provider.", @@ -3324,6 +3481,7 @@ "weightStability": "Stabilność", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Dostępność Sesji", "reviewIntelligentTitle": "Konfiguracja inteligentnego routingu", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness wyłączone", "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 jako główny model (Moonshot API), z automatycznym przełączaniem awaryjnym na połączenia Kimi Code (kimi-coding, kimi-web), jeśli są skonfigurowane.", - "kimiPresetCta": "Dodaj preset" + "kimiPresetCta": "Dodaj preset", + "intelligentComboCount": "{count, plural, one {# inteligentny zestaw} other {# inteligentne zestawy}}", + "providersInScope": "{count, plural, one {# dostawca w zasięgu} other {# dostawców w zasięgu}}", + "savingModePack": "Zapisywanie {pack}…", + "errorTitle": "Nie udało się załadować kombinacji", + "errorDescription": "Nie mogliśmy teraz załadować danych combo. Sprawdź swoje połączenie i spróbuj ponownie.", + "errorId": "Identyfikator błędu: {id}", + "errorRetry": "Spróbuj ponownie", + "comboLabel": "Kombinacja" }, "costs": { "title": "Koszty", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "Adres URL WebDAV", "obsidianUsername": "Nazwa użytkownika", "obsidianPassword": "Hasło", - "obsidianTailscaleHint": "Użyj swojego adresu IP Tailscale zamiast localhost, jeśli łączysz się z urządzenia mobilnego. Oba urządzenia muszą znajdować się w tej samej sieci Tailscale." + "obsidianTailscaleHint": "Użyj swojego adresu IP Tailscale zamiast localhost, jeśli łączysz się z urządzenia mobilnego. Oba urządzenia muszą znajdować się w tej samej sieci Tailscale.", + "cloudSyncNotConfigured": "Synchronizacja w chmurze nie jest skonfigurowana w tej instancji.", + "notionConnect": "Połącz", + "notionConnectFailed": "Nie udało się połączyć", + "notionConnected": "Połączono", + "notionConnectionFailed": "Połączenie nie powiodło się", + "notionDescription": "Szukaj, czytaj, zapytuj i pisz do Notion za pomocą kierowanych modeli AI", + "notionDisconnect": "Rozłącz", + "notionDisconnectFailed": "Nie udało się rozłączyć", + "notionEnterToken": "Proszę wprowadzić token integracji Notion", + "notionIntegrationHelp": "Utwórz integrację wewnętrzną w", + "notionIntegrationToken": "Token Integracji Wewnętrznej Notion", + "notionNotConnected": "Nie połączono", + "notionTokenConfigured": "Token skonfigurowany. Narzędzia Notion są dostępne przez MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Provider / Model", "noRemoteProviders": "Brak providers ze skonfigurowanym kluczem API", "selectProviderModel": "Wybierz model", + "customBaseUrlLabel": "Niestandardowy adres URL podstawowy (opcjonalnie)", + "customModelIdLabel": "Identyfikator modelu niestandardowego (opcjonalnie)", + "customEndpointHelp": "Użyj punktu końcowego /embeddings zgodnego z OpenAI. Lokalne punkty końcowe są dozwolone; cele metadanych w chmurze są zablokowane.", + "customEndpointSave": "Zastosuj niestandardowy punkt końcowy", + "customEndpointInvalid": "Wprowadź zarówno prawidłowy adres URL bazowy HTTP(S), jak i identyfikator modelu, lub pozostaw oba pola puste.", + "customEndpointSaveFailed": "Nie udało się zapisać niestandardowego punktu końcowego osadzania.", "staticEnabledLabel": "Włącz Static Potion", "staticEnabledDesc": "Pobierz i używaj model potion-base-8M lokalnie", "transformersEnabledLabel": "Włącz Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Czyszczenie...", "cleanNow": "Wyczyść teraz", "cleanupSuccess": "Usunięto {count} punkt(ów)", - "cleanupFailed": "Czyszczenie nie powiodło się" + "cleanupFailed": "Czyszczenie nie powiodło się", + "hostLabel": "Host", + "collectionLabel": "Kolekcja" }, "rerank": { "enableLabel": "Włącz Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Schemat fallback 3-poziomowego OmniRoute", "apiKeyMgmt": "Zarządzanie kluczami API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Skonfiguruj darmowych dostawców", + "description": "Opcjonalnie włącz wybrane dostawców bez rejestracji. Przejrzyj powiadomienia i stronę każdego dostawcy przed kontynuowaniem; dostępność i limity szybkości są kontrolowane przez osoby trzecie.", + "loading": "Ładowanie darmowych dostawców...", + "loadFailed": "Nie można załadować darmowych dostawców.", + "alreadyConfigured": "Wszyscy kwalifikujący się dostawcy bezpłatni są już skonfigurowani.", + "reviewProviderSite": "Przejrzyj stronę dostawcy i warunki", + "confirmation": "Przejrzałem tych dostawców zewnętrznych i chcę, aby OmniRoute utworzył wybrane połączenia.", + "setupSelected": "Skonfiguruj wybrane dostawców", + "settingUp": "Konfigurowanie...", + "setupFailed": "Nie można było skonfigurować wybranych dostawców. Nic istniejącego nie zostało zmienione.", + "retryFailed": "Ponów próby dla nieudanych dostawców", + "orUseApiKey": "lub połącz się za pomocą klucza API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "utworzono", + "skipped": "już skonfigurowane", + "failed": "niepowodzenie" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Wymagane. Bazowy URL API provider.", "iconUrlLabel": "URL ikony", "iconUrlHint": "Opcjonalnie. URL obrazu wyświetlany jako ikona tego provider.", + "iconUrlInvalid": "Nieprawidłowy adres URL ikony. Użyj adresu http(s):// lub data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Pomyślnie odświeżono token", "tokenRefreshFailed": "Odświeżenie token nie powiodło się", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sesja już jest aktualna", "applyCodexAuthLocal": "Zastosuj autoryzację", "exportCodexAuthFile": "Eksportuj autoryzację", "applyClaudeAuthLocal": "Zastosuj autoryzację", @@ -5679,7 +5867,7 @@ "zedImportHint": "Wskazówka importu Zed", "zedImportNetworkError": "Błąd sieci przy imporcie Zed", "zedImportNone": "Brak importu Zed", - "zedImportSuccess": "Import Zed zakończony sukcesem", + "zedImportSuccess": "Imported {credentials} credential(s) from Zed for {providers} provider(s)", "zedImporting": "Importowanie Zed", "zedNoCredentials": "Nie znaleziono danych uwierzytelniających Zed w pęku kluczy", "zedUnsupportedCredentials": "Znaleziono {count} danych uwierzytelniających w pęku kluczy, ale żadne nie pasowały do obsługiwanych dostawców", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Wklej klucz API…", "zedSaving": "Zapisywanie…", "zedImportAction": "Importuj", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Włącz automatyczne odnawianie sesji kursora", + "cursorAgentNudgeBody": "Zainstaluj cursor-agent do automatycznego odnawiania sesji — bez niego połączenia Cursor wymagają okresowego ręcznego ponowienia co około 24 godziny.", + "cursorAgentNudgeDismiss": "Odrzuć", "zedManualImportFailed": "Ręczny import nie powiódł się", "zedManualImportSuccess": "Zaimportowano token {provider} z Zed", "grokImportTitle": "Importuj autoryzację Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Bezpłatny pakiet do wnioskowania bezserwerowego — karta kredytowa nie jest wymagana", "gemini": "Darmowe na zawsze: 1500 zapytań/dzień dla Gemini 2.5 Flash — bez karty kredytowej, pobierz klucz na aistudio.google.com", "gigachat": "Połącz z GigaChat (Sber) za pomocą klucza API.", - "github-models": "Utwórz token GitHub PAT z zakresem 'models: read' na github.com/settings/tokens", "gitlab": "Osobisty token dostępu GitLab dla publicznego API Code Suggestions. Skonfiguruj bazowy adres URL dla instancji self-hosted, jeśli nie korzystasz z gitlab.com.", "gitlawb-gmi": "Pobierz swój klucz API z panelu Gitlawb Opengateway.", "gitlawb": "Pobierz swój klucz API z panelu Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Połącz Kimi Coding za pomocą istniejącego przepływu OAuth.", "kiro": "Darmowy plan: 50 kredytów/miesiąc (~25K–100K tokenów). ⚠️ ToS Kiro zabrania korzystania z zewnętrznych proxy/harness.", "codex": "Połącz OpenAI Codex za pomocą istniejącego przepływu OAuth.", - "qwen": "Połącz Qwen Code za pomocą istniejącego przepływu OAuth." + "qwen": "Połącz Qwen Code za pomocą istniejącego przepływu OAuth.", + "github-models": "Utwórz token GitHub PAT z zakresem 'models: read' na github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} akceptuje natywne ID models dla provider. Zaimportuj z /models lub dodaj własne ID do routing.", "bedrockModelsDescription": "Models Amazon Bedrock są ograniczone do regionu AWS. Zaimportuj z /models lub dodaj Bedrock ID models włączone w wybranym regionie.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Gdy wszystkie skonfigurowane połączenia są wyczerpane (kwota, kredyty lub wygaśnięcie), tymczasowo użyj bezkluczowego poziomu tego dostawcy. Wyłącz, aby pominąć tego dostawcę zamiast wysyłać anonimowe żądania — zalecane, gdy bezkluczowy poziom je odrzuca (401).", "anonymousFallbackEnabled": "Anonimowe przełączanie włączone dla {provider}", "anonymousFallbackDisabled": "Anonimowe zapasowe wyłączone dla {provider} — wyczerpane połączenia pominą tego dostawcę", - "anonymousFallbackUpdateFailed": "Nie udało się zaktualizować ustawienia domyślnego dla anonimowych użytkowników" + "anonymousFallbackUpdateFailed": "Nie udało się zaktualizować ustawienia domyślnego dla anonimowych użytkowników", + "batchDeleteFailed": "Usunięcie wsadowe nie powiodło się", + "batchDeleteNetworkError": "Błąd sieciowy podczas masowego usuwania", + "batchUpdateFailed": "Aktualizacja wsadowa nie powiodła się", + "batchUpdateNetworkError": "Błąd sieciowy podczas aktualizacji wsadowej", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agent Chmurowy", + "categoryIde": "IDE", + "categoryLocal": "Lokalny", + "categorySearch": "Szukaj", + "categoryWebCookie": "Ciasteczko internetowe", + "claudeExtraUsageBlockingDisabled": "Blokada nadmiernego użycia Claude wyłączona (nadmierne użycie jest dozwolone)", + "claudeExtraUsageBlockingEnabled": "Blokowanie nadmiernego użycia Claude włączone (nadmierne użycie będzie zablokowane)", + "claudeRoutingPreferenceDisabled": "Modele Claude bez prefiksu już nie preferują Claude Code", + "claudeRoutingPreferenceEnabled": "Modele Claude bez prefiksu teraz preferują Claude Code", + "clearMediaFilter": "Wyczyść", + "cliproxyRoutingDisabled": "Żądania teraz używają natywnego OmniRoute (bezpośrednio)", + "cliproxyRoutingEnabled": "Żądania teraz przechodzą przez CLIProxyAPI (głębsza emulacja)", + "codexLimitPolicyUpdated": "Polityka limitu Codex została zaktualizowana", + "codexServiceModeUpdated": "Tryb usługi Codex zaktualizowany", + "codexServiceTierActive": "Usługa Codex {tier} jest aktywna", + "codexTierFastLabel": "Szybki", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Nie udało się zastosować kodu autoryzacji polecenia", + "commandCodeApplyingApproval": "Przeglądarka zatwierdzona, stosuję…", + "commandCodeApplyingKey": "Zastosowywanie klucza zatwierdzonego przez przeglądarkę…", + "commandCodeApprovalInstructions": "Otwórz adres URL autoryzacji, zatwierdź dostęp, a następnie wklej zwrócony klucz/JSON/URL poniżej…", + "commandCodeAuthExpired": "Kod polecenia auth wygasł", + "commandCodeConnected": "Kod polecenia połączony", + "commandCodeConnectionAdded": "Dodano połączenie kodu polecenia", + "commandCodeLinkExpired": "Link do kodu polecenia wygasł", + "commandCodeOpeningStudio": "Otwieranie Command Code Studio…", + "commandCodePopupBlocked": "Popup zablokowany. Proszę zezwolić na wyskakujące okna i spróbować ponownie połączyć kod polecenia.", + "commandCodeStartFailed": "Nie udało się uruchomić polecenia Code auth", + "connectionDeleted": "Połączenie usunięte", + "connectionFallback": "połączenie", + "coolingConnectionsDescription": "Te połączenia zwróciły 429 (limit szybkości) w swoim ostatnim żądaniu. OmniRoute pominie je, aż timer wygaśnie — nie jest wymagana ręczna dezaktywacja.", + "coolingConnectionsTitle": "Obecnie chłodzenie ({count})", + "failedDeleteAlias": "Nie udało się usunąć aliasu", + "failedDeleteConnection": "Nie udało się usunąć połączenia", + "failedDistributeProxies": "Nie udało się rozdystrybuować proxy.", + "failedSaveModelEndpointSettings": "Nie udało się zapisać ustawień punktu końcowego modelu", + "failedUpdateClaudeExtraUsagePolicy": "Nie udało się zaktualizować polityki dodatkowego użycia Claude'a", + "failedUpdateClaudeRoutingPreference": "Nie udało się zaktualizować preferencji routingu Claude Code", + "failedUpdateCliproxyRouting": "Nie udało się zaktualizować routingu CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Nie udało się zaktualizować polityki limitu Codex", + "failedUpdateCodexServiceMode": "Nie udało się zaktualizować trybu usługi Codex", + "filterByMedia": "Media", + "freeBadge": "Darmowy", + "kimiCodeApiKeyLabel": "Klucz API Kimi Code", + "modelTestFailed": "Test modelu nie powiódł się", + "modelTestNetworkError": "Błąd sieciowy podczas testowania modelu", + "networkError": "Błąd sieciowy", + "networkErrorDeletingAlias": "Błąd sieciowy podczas usuwania aliasu", + "networkErrorSettingAlias": "Błąd sieciowy podczas ustawiania aliasu", + "noProvidersMatch": "Brak dostawców pasujących do Twojego wyszukiwania.", + "noSavedProxies": "Nie znaleziono zapisanych serwerów proxy. Najpierw dodaj serwery proxy w Ustawieniach → Proxy.", + "pageLoadErrorDescription": "Nie mogliśmy teraz załadować danych dostawcy. Sprawdź swoje połączenie i spróbuj ponownie.", + "pageLoadErrorId": "Identyfikator błędu: {id}", + "pageLoadErrorRetry": "Spróbuj ponownie", + "pageLoadErrorTitle": "Nie udało się załadować dostawców", + "playgroundTitle": "Plac Zabaw", + "providerDetailConnectionFlexActive": "Warstwa usługi Codex flex jest aktywna dla tego połączenia", + "providerDetailConnectionPriorityActive": "Warstwa usługi priorytetowej Codex jest aktywna dla tego połączenia", + "providerDetailGlobalFlexActive": "Aktywny jest globalny poziom usługi Codex flex", + "providerDetailGlobalPriorityActive": "Global Codex priorytetowa usługa jest aktywna", + "proxiesDistributed": "Rozdzielono {assigned} przypisanie(a) proxy wśród {tagLabel}{total} połączeń.", + "rerankEndpoint": "Przyporządkuj ponownie", + "savedModelEndpointSettings": "Ustawienia punktu końcowego zapisanego modelu", + "searchByModelAria": "Szukaj według modelu", + "selectSupportedEndpoint": "Wybierz przynajmniej jeden obsługiwany punkt końcowy", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Ustawienia", @@ -6460,7 +6719,24 @@ "loadFailed": "Nie udało się załadować listy subskrypcji", "toggleFailed": "Nie udało się przełączyć przełącznika", "refreshFailed": "Nie udało się odświeżyć", - "deleteFailed": "Nie udało się usunąć" + "deleteFailed": "Nie udało się usunąć", + "add": "Dodaj", + "cancel": "Anuluj", + "configure": "Konfiguruj", + "copyEndpoint": "Skopiuj Punkt Końcowy", + "coreEndpointHint": "Wskazówka dotycząca punktu końcowego rdzenia", + "coreNodesHint": "Wskazówka dotycząca węzłów rdzeniowych", + "create": "Utwórz", + "deleteConfirm": "Potwierdzenie usunięcia", + "empty": "Pusty", + "globalModeDescription": "Opis trybu globalnego", + "localCoreHint": "Lokalna Wskazówka Rdzenia", + "nodeSummary": "Podsumowanie Węzła", + "providerRequired": "Wymagany dostawca", + "providerRouting": "Routing Dostawcy", + "refresh": "Odśwież", + "refreshInterval": "Interwał Odświeżania", + "ruleModeDescription": "Opis trybu reguły" }, "bulkHealthcheck": "Zbiorczy Healthcheck", "bulkHealthcheckDesc": "Testowanie wszystkich skonfigurowanych proxy pod kątem docelowego URL w celu znalezienia działających.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Uruchom automatyczny fallback vision-to-text przed przekierowaniem żądań obrazów do wyłącznie tekstowych models.", "visionBridgeEnabledLabel": "Włączone", "visionBridgeEnabledDesc": "Przełącz mostek przed połączeniem, który zastępuje części obrazu wyodrębnionym tekstem.", + "visionBridgeRerouteTextOnlyLabel": "Przekieruj modele tylko tekstowe", + "visionBridgeRerouteTextOnlyDesc": "Wyślij pełne żądanie, w tym obrazy, do modelu mostu, gdy wybrany model nie ma wejścia obrazu.", "visionBridgeModel": "Bridge model", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Można tu użyć dowolnego ID model OmniRoute obsługującego vision.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Klucz API nie posiada zakresu manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Jeden lub więcej prefiksów wskazuje na trasy z możliwością uruchamiania procesów (spawn) i nie mogą być one ominięte.", "GENERIC": "Nie udało się zaktualizować ustawień autoryzacji." - } + }, + "remove": "Usuń" }, "resilienceBaseCooldownLabel": "Bazowy cooldown", "scopeLabel": "Zakres", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testowanie dźwięku…", "modalityBridgeAudioTestOk": "Most Audio OK — {count} klip(y) przetłumaczone przez {model}", "modalityBridgeAudioTestNoop": "Mostek audio nie został aktywowany (docelowy może obsługiwać audio, żaden dostawca STT nie jest podłączony lub mostek jest wyłączony)", - "modalityBridgeAudioTestError": "Test audio nie powiódł się: {message}" + "modalityBridgeAudioTestError": "Test audio nie powiódł się: {message}", + "modelRoutingDescriptionPlaceholder": "Przypisz modele Opus do kombinacji frontier", + "cliproxyapiFallbackCodes": "Kody zapasowe Cliproxyapi", + "cliproxyapiFallbackDescription": "Opis zapasowy Cliproxyapi", + "cliproxyapiHealthLabel": "Etykieta Stanu Cliproxyapi", + "cliproxyapiImportFailed": "Importowanie Cliproxyapi nie powiodło się", + "cliproxyapiImportResult": "Wynik importu Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi Nieprawidłowy adres URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Powiadomienie o Cyklu Życia Po", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Powiadomienie o Cyklu Życia Przed", + "cliproxyapiLifecycleNoticeLink": "Link Powiadomienia o Cyklu Życia Cliproxyapi", + "cliproxyapiPortLabel": "Etykieta Portu Cliproxyapi", + "cliproxyapiStatusLabel": "Etykieta Statusu Cliproxyapi", + "cliproxyapiVersionLabel": "Etykieta Wersji Cliproxyapi", + "collection": "Kolekcja", + "errorPage": { + "description": "Nie mogliśmy załadować ustawień w tej chwili. Proszę spróbować ponownie za kilka sekund.", + "errorId": "Identyfikator błędu: {id}", + "retry": "Spróbuj ponownie", + "title": "Nie udało się załadować ustawień" + }, + "host": "Host", + "notInstalled": "Nie zainstalowano", + "oneproxyActions": "Akcje Oneproxy", + "oneproxyActive": "Oneproxy Aktywny", + "oneproxyAnonymity": "JednoProxy Anonimowość", + "oneproxyCountry": "Kraj Oneproxy", + "oneproxyDelete": "Oneproxy Usuń", + "oneproxyEmpty": "Oneproxy Pusty", + "oneproxyHost": "Host Oneproxy", + "oneproxyLatency": "Opóźnienie Oneproxy", + "oneproxyProtocol": "Protokół Oneproxy", + "oneproxyQuality": "Jakość Oneproxy", + "oneproxySyncFailed": "Synchronizacja nie powiodła się: {error}", + "oneproxySyncSuccess": "Zsynchronizowano {total} proxy ({added} nowe, {updated} zaktualizowane)", + "proxyDocumentationSocks5DescAfter": "Dokumentacja Proxy Socks5 Opis Po", + "proxyFreePoolAddProxy": "Dodaj Proxy z Darmowej Puli", + "proxyFreePoolAdding": "Dodawanie Proxy Free Pool", + "proxyFreePoolSelectProxy": "Wybierz Proxy z Darmowej Puli", + "proxyStatusActive": "Status Proxy Aktywny", + "proxyStatusInactive": "Status Proxy Nieaktywny", + "routingAddEntry": "Dodaj wpis", + "settingSaveFailed": "Zapis ustawień nie powiódł się", + "settingSaved": "Ustawienia Zapisane", + "skillsmpApiKeyHintAfter": "Limit żądań: {limit} żądań/dzień.", + "skillsmpApiKeyHintBefore": "Pobierz swój klucz API z", + "syncFailed": "Synchronizacja nie powiodła się", + "unhealthy": "Niezdrowy", + "oneproxyDescription": "Pobierz i obróć darmowe zweryfikowane proxy z platformy społecznościowej 1proxy", + "oneproxySyncing": "Synchronizowanie...", + "oneproxySyncNow": "Synchronizuj Teraz", + "oneproxyClearAll": "Wyczyść wszystko", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Czy usunąć wszystkie 1proxy proxy?", + "memorySkillsSkillsmpDescription": "Połącz się z SkillsMP, aby odkrywać i instalować umiejętności z rynku.", + "memorySkillsActiveProviderDescription": "Wybierz, którego dostawcę strona Umiejętności używa do wyszukiwania i instalacji.", + "memorySkillsSkillsmpProviderTitle": "Marketplace SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Uwierzytelniony rynek (używa Twojego klucza API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Katalog skills.sh", + "memorySkillsSkillsshProviderDescription": "Dostawca katalogu publicznego (nie wymagana klucz API).", + "routingCcBridgeCatalogName": "Mostek CC zgodny z Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Natty dostawca Claude z tokenami wydanymi przez OAuth.", + "routingCcBridgeName": "Mostek Claude-Code", + "routingCcBridgeDescription": "Punkty końcowe Relay używające kluczy API (kompatybilne z anthropic-cc-*).", + "routingCustomProviderDescription": "Niestandardowy dostawca.", + "routingUnknownOpKind": "Nieznany rodzaj operacji: {kind}", + "routingInvalidJson": "Nieprawidłowy JSON: {error}", + "routingConfigMustBeObject": "Konfiguracja musi być obiektem JSON", + "routingEnabledMustBeBoolean": "`enabled` musi być prawdą lub fałszem", + "routingPipelineMustBeArray": "`pipeline` musi być tablicą operacji", + "routingPipelineTooLong": "Pipeline nie może przekraczać 50 operacji", + "routingOpMissingKind": "Op #{index}: brakujący lub nieprawidłowy `kind`", + "routingOpUnknownKind": "Op #{index}: nieznany typ \"{kind}\"", + "routingJsonEditorHide": "Ukryj edytor JSON", + "routingJsonEditorImportExport": "Importuj / eksportuj JSON", + "routingJsonEditorLabel": "JSON (edytuj i zastosuj lub wklej, aby zaimportować)", + "routingApplyJson": "Zastosuj JSON", + "routingTransformsFootnote": "Wszystkie operacje transformacji są idempotentne przy ponownym uruchomieniu. Zmiany wchodzą w życie natychmiast przy następnym żądaniu.", + "cliproxyapiUnknown": "Nieznany", + "cliproxyapiVersion": "Wersja", + "cliproxyapiHealth": "Zdrowie", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Kolekcja" }, "contextRtk": { "title": "Silnik RTK", @@ -8016,6 +8379,15 @@ "full": "Pełny", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Domyślny", + "off": "Wyłączone", + "lite": "Lite", + "standard": "Standardowy", + "aggressive": "Agresywny", + "ultra": "Ultra", + "responsesToolOutput": "Wynik narzędzia odpowiedzi" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Uruchamia się jako ostatni w stosie (po tym, jak RTK/Caveman oczyści tekst, a OmniGlyph skonwertuje resztę na obrazy), a także działa samodzielnie w trybie omniglyph. To jest wersja zapoznawcza i pozostaje domyślnie wyłączona do czasu zakończenia pełnej walidacji.", "saved": "Zapisano.", "saveFailed": "Nie można zapisać.", - "enableAria": "Włącz silnik OmniGlyph" + "enableAria": "Włącz silnik OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Usługi wbudowane", @@ -9127,7 +9500,49 @@ "unableToLoad": "Nie można załadować metryk systemowych", "product": "Produkt", "resources": "Zasoby", - "company": "Firma" + "company": "Firma", + "tokenHealthTooltips": { + "allHealthy": "Wszystkie tokeny są zdrowe", + "needsAttention": "Niektóre tokeny wymagają uwagi", + "refreshFailures": "Wykryto błędy odświeżania tokenów", + "unknown": "Stan zdrowia nieznany" + }, + "systemMonitor": { + "metricsAriaLabel": "Metryki systemowe", + "memory": "Pamięć", + "memoryShort": "mem", + "uptime": "Czas działania", + "ariaLabel": "Monitorowanie systemu", + "title": "Monitor Systemu", + "version": "Wersja", + "connections": "Połączenia", + "circuitBreakers": "Wyłączniki nadprądowe", + "open": "{count} otwarty", + "memoryUsage": "Użycie pamięci" + }, + "never": "Nigdy", + "justNow": "Właśnie teraz", + "minutesAgo": "{count}m temu", + "hoursAgo": "{count}h temu", + "tokens": "Tokeny", + "costs": "Koszty", + "autoRefresh": "Automatyczne Odświeżanie ({seconds}s)", + "toggleAutoRefresh": "Przełącz automatyczne odświeżanie", + "activeRequests": "Aktywne Żądania", + "totalRequests": "Łączna liczba żądań", + "totalInputTokens": "Łączna liczba tokenów wejściowych", + "model": "Model", + "provider": "Dostawca", + "requests": "Żądania", + "lastUsed": "Ostatnio używane", + "inputTokens": "Tokeny Wejściowe", + "totalTokens": "Łączna liczba tokenów", + "inputCost": "Koszt wejściowy", + "outputCost": "Koszt wyjścia", + "noUsageData": "Nie zarejestrowano jeszcze żadnego użycia. Wykonaj kilka żądań, aby zobaczyć dane tutaj.", + "account": "Konto", + "accountLabel": "Konto {id}", + "noAccountUsage": "Nie zarejestrowano jeszcze użycia specyficznego dla konta. Wykonaj żądania za pomocą kont OAuth, aby zobaczyć dane tutaj." }, "auth": { "welcome": "Witamy", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Niezgodna wersja Node.js", "nodeIncompatibleDesc": "Uruchomiono Node.js {version}, która wykracza poza wspieraną politykę bezpiecznego środowiska uruchomieniowego OmniRoute. Użyj załatanej wersji Node.js 20.x lub 22.x LTS.", "nodeIncompatibleFixLabel": "Rozwiązanie: zainstaluj załataną wersję Node.js 22 LTS", - "nodeIncompatibleHint": "OmniRoute wymaga Node.js 22.22.2+ (22.x LTS) lub 24.0.0+ (24.x LTS). Zalecany jest Node 24 LTS." + "nodeIncompatibleHint": "OmniRoute wymaga Node.js 22.22.2+ (22.x LTS) lub 24.0.0+ (24.x LTS). Zalecany jest Node 24 LTS.", + "resetViaAppDataTitle": "Resetuj przez dane aplikacji", + "resetViaAppDataDescription": "Usuń plik ustawień z katalogu danych aplikacji, aby zresetować swoje hasło:", + "quitDesktopApp": "Zamknij aplikację OmniRoute na komputerze całkowicie", + "navigateToAppDataDirectory": "Przejdź do katalogu danych aplikacji:", + "checkSystemAppDataFolder": "(Sprawdź folder danych aplikacji systemowych)", + "relaunchDesktopFreshSetup": "Uruchom ponownie aplikację desktopową OmniRoute — rozpocznie nową konfigurację", + "alternativeSetPasswordTitle": "Alternatywa: Ustaw nowe hasło", + "alternativeSetPasswordDescription": "Ustaw nowe początkowe hasło za pomocą pliku środowiskowego serwera:", + "openServerEnvFilePrefix": "Otwórz", + "relaunchDesktopApp": "Uruchom ponownie aplikację desktopową OmniRoute", + "codexLinkInvalidOrExpired": "Ten link jest nieprawidłowy lub wygasł.", + "codexValidationServerError": "Nie można było połączyć się z serwerem, aby zweryfikować ten link.", + "codexSaveConnectionError": "Nie można zapisać połączenia. Link mógł wygasnąć.", + "codexDeviceLoginDisabled": "Logowanie za pomocą kodu urządzenia jest wyłączone dla tego konta OpenAI. Włącz je w ustawieniach bezpieczeństwa ChatGPT (lub zapytaj swojego administratora przestrzeni roboczej).", + "codexAuthorizationTimedOut": "Czas autoryzacji wygasł. Kliknij Rozpocznij ponownie, aby spróbować jeszcze raz.", + "authenticationCancelled": "Autoryzacja została anulowana.", + "unexpectedAuthenticationError": "Nieoczekiwany błąd podczas uwierzytelniania. Proszę spróbować ponownie.", + "connectOpenAiCodexTitle": "Połącz OpenAI Codex", + "codexConnectDescription": "Autoryzuj konto ChatGPT, aby zakończyć konfigurację tego połączenia.", + "validatingCodexLink": "Weryfikowanie linku…", + "codexGenerateCodeDescription": "Kliknij poniżej, aby wygenerować jednorazowy kod, a następnie zaloguj się do OpenAI.", + "startCodexFlow": "Rozpocznij", + "requestingOpenAiCode": "Żądanie kodu od OpenAI…", + "codexVerificationInstructions": "1. Otwórz stronę weryfikacji OpenAI i 2. wprowadź ten kod. Ta strona aktualizuje się automatycznie po autoryzacji.", + "yourCode": "Twój kod", + "openVerificationPage": "Otwórz stronę weryfikacji", + "copyUrlShort": "Kopiuj URL", + "savingConnection": "Zapisywanie połączenia…", + "codexConnected": "Połączono!", + "codexConnectionRegistered": "Konto Codex zostało zarejestrowane. Możesz zamknąć tę kartę.", + "tryAgain": "Spróbuj ponownie", + "traeAuthorizationSuccess": "Autoryzacja Trae ✓", + "traeAuthorizationFailed": "Autoryzacja Trae nie powiodła się", + "closeAuthorizationWindow": "Możesz zamknąć to okno.", + "returnToDashboard": "Wróć do pulpitu nawigacyjnego.", + "resetViaAppData": "Resetuj przez dane aplikacji", + "deleteSettingsToReset": "Usuń plik ustawień z katalogu danych aplikacji, aby zresetować swoje hasło:", + "quitAppCompletely": "Zamknij aplikację OmniRoute na komputerze całkowicie", + "navigateToAppData": "Przejdź do katalogu danych aplikacji", + "checkAppDataFolder": "Sprawdź folder danych aplikacji systemowej", + "deleteSettingsJson": "Usuń", + "relaunchAppFresh": "Uruchom ponownie aplikację desktopową OmniRoute — rozpocznie nową konfigurację", + "alternativeSetPassword": "Alternatywa: Ustaw nowe hasło", + "setNewPasswordViaEnv": "Ustaw nowe początkowe hasło za pomocą pliku środowiskowego serwera:", + "openServerEnv": "Otwórz", + "inDataDirectory": "w katalogu danych", + "addOrUpdate": "Dodaj lub zaktualizuj", + "deleteAndRelaunch": "Usuń", + "settingsJson": "settings.json", + "fromDataDir": "z katalogu danych", + "relaunchApp": "Uruchom ponownie aplikację desktopową OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Chcesz uprościć swoją infrastrukturę AI?", "ctaDescription": "Dołącz do programistów, którzy usprawniają swoje integracje AI za pomocą OmniRoute. Open source i za darmo na start.", "startFree": "Rozpocznij za darmo", - "readDocumentation": "Przeczytaj dokumentację" + "readDocumentation": "Przeczytaj dokumentację", + "company": "Firma", + "pricing": "Cennik", + "apiReference": "Dokumentacja API", + "helpCenter": "Centrum Pomocy", + "about": "O programie", + "blog": "Blog", + "contact": "Kontakt", + "terms": "Warunki", + "privacy": "Prywatność", + "license": "Licencja", + "footerDescription": "Zunifikowany interfejs dla nowoczesnej infrastruktury AI. Bezpieczny, obserwowalny i skalowalny.", + "communityDiscussions": "Dyskusje Społecznościowe" }, "docs": { "title": "Dokumentacja", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Rejestracja i zarządzanie agentami za pośrednictwem rejestru ACP w celu komunikacji między agentami i udostępniania narzędzi.", "protocolAcpStep1": "Przejdź do Dashboard → Agenci, aby wyświetlić zarejestrowanych agentów ACP.", "protocolAcpStep2": "Zarejestruj nowych agentów z możliwościami i konfiguracją endpoint.", - "protocolAcpStep3": "Użyj narzędzi CLI do konfiguracji kanałów komunikacji agentów." + "protocolAcpStep3": "Użyj narzędzi CLI do konfiguracji kanałów komunikacji agentów.", + "metadataTitleTemplate": "%s — Dokumentacja OmniRoute", + "metadataDefaultTitle": "Dokumentacja OmniRoute", + "metadataDescription": "Kompleksowa dokumentacja dla bramy OmniRoute AI — konfiguracja, API, kompresja, wdrożenie i inne.", + "layoutNavTitle": "Dokumentacja OmniRoute", + "layoutHomeLink": "Strona główna dokumentacji", + "layoutDashboardLink": "← Powrót do Pulpitu", + "homeTitle": "Dokumentacja OmniRoute", + "homeMetadataDescription": "Wszystko, czego potrzebujesz, aby kierować, kompresować i skalować swoją sztuczną inteligencję — przewodniki konfiguracyjne, dokumentacja API, kompresja, wdrożenie i inne.", + "homeTwitterDescription": "Kompleksowa dokumentacja dla bramy OmniRoute AI", + "homeDescription": "Wszystko, czego potrzebujesz, aby kierować, kompresować i skalować swoją AI", + "homeSearchHint": "Naciśnij Ctrl K, aby przeszukać dokumentację", + "featuredQuickStartTitle": "Szybki Start", + "featuredQuickStartDescription": "Uruchom OmniRoute w 3 minuty", + "featuredAutoComboTitle": "Auto-Combo Przewodnik", + "featuredAutoComboDescription": "Niech OmniRoute wybierze najlepszą sztuczną inteligencję dla Ciebie", + "featuredProvidersTitle": "Przewodnik dla dostawców", + "featuredProvidersDescription": "Połącz dostawców AI w kilka minut", + "nonTechUsersTitle": "Dla Użytkowników Nietechnicznych", + "nonTechUsersSubtitle": "Rozpocznij szybko — nie potrzebujesz wiedzy technicznej", + "techUsersTitle": "Dla Użytkowników Technicznych", + "techUsersSubtitle": "Dogłębna analiza architektury, interfejsów API i wewnętrznych mechanizmów", + "apiExplorerMetadataTitle": "Eksplorator API — Dokumentacja OmniRoute", + "apiExplorerMetadataDescription": "Interaktywny eksplorator API — wypróbuj końcówki OmniRoute na żywo z odpowiedziami w czasie rzeczywistym", + "apiExplorerTitle": "Eksplorator API", + "apiExplorerDescription": "Wypróbuj punkty końcowe OmniRoute na żywo. Wybierz punkt końcowy, skonfiguruj swoje żądanie i zobacz odpowiedź w czasie rzeczywistym.", + "apiExplorerSseStarted": "Rozpoczęto strumień SSE — sprawdź terminal/narzędzia deweloperskie, aby uzyskać dane wyjściowe w czasie rzeczywistym.", + "apiExplorerError": "Błąd: {message}", + "apiExplorerAuth": "autoryzacja", + "apiExplorerResponseLabel": "Odpowiedź", + "apiExplorerSelectEndpoint": "Wybierz punkt końcowy do zbadania", + "apiExplorerChooseApi": "Wybierz API z paska bocznego, aby zobaczyć szczegóły i wypróbować je na żywo", + "feedbackThanks": "Dziękujemy za Twoją opinię!", + "feedbackQuestion": "Czy ta strona była pomocna?", + "pageMetadataTitle": "{title} — Dokumentacja OmniRoute", + "pageMetadataDescription": "Dokumentacja OmniRoute: {title}", + "breadcrumb": "Okruszki chleba", + "apiReferenceTable": { + "parameters": "Parametry", + "name": "Nazwa", + "type": "Typ", + "description": "Opis", + "returns": "Zwraca", + "typePrefix": "Typ:" + } }, "legal": { "privacyPolicy": "Polityka prywatności", @@ -9957,7 +10479,42 @@ "successMessage": "Konto {providerName} zostało połączone.", "done": "Gotowe", "error": "Połączenie nie powiodło się", - "tryAgain": "Spróbuj ponownie" + "tryAgain": "Spróbuj ponownie", + "errorSessionIncomplete": "Sesja OAuth jest niekompletna (brakuje URI przekierowania lub weryfikatora kodu). Uruchom ponownie połączenie i spróbuj ponownie.", + "errorExchangeFailed": "Wymiana nie powiodła się", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Domyślne poświadczenia Google OAuth działają tylko na localhost. Aby używać zdalnie, skonfiguruj własne poświadczenia OAuth za pomocą zmiennych środowiskowych: ANTIGRAVITY_OAUTH_CLIENT_ID i ANTIGRAVITY_OAUTH_CLIENT_SECRET. Zobacz sekcję README 'OAuth na zdalnym serwerze'.", + "errorSaveFailed": "Zapis nie powiódł się", + "errorAuthorizationFailed": "Autoryzacja nie powiodła się", + "errorAuthorizationTimeout": "Czas oczekiwania na autoryzację", + "errorRequestFailed": "Żądanie nie powiodło się", + "errorCallbackServerFailed": "Nie udało się uruchomić serwera zwrotnego", + "errorBrowserUnavailable": "OAuth przeglądarki jest niedostępny dla tego dostawcy w bieżącym środowisku. Użyj zamiast tego obsługiwanej metody uwierzytelniania.", + "errorStateMismatch": "Niezgodność stanu OAuth. Uruchom ponownie połączenie i spróbuj ponownie.", + "errorImportAccessToken": "Nie udało się zaimportować tokenu dostępu", + "errorSessionNotInitialized": "Sesja OAuth nie została zainicjowana. Uruchom ponownie proces połączenia i spróbuj ponownie.", + "errorNoAuthorizationCode": "Nie znaleziono kodu autoryzacji. Wklej adres URL zwrotny lub kod autoryzacji.", + "tabDeviceCode": "Kod Urządzenia", + "tabBrowserLogin": "Logowanie w przeglądarce", + "tabImportAuthJson": "Importuj auth.json", + "tabPasteApiKey": "Wklej klucz API", + "windsurfPasteDescription": "W Windsurf / IDE VS Code uruchom polecenie \"Windsurf: Provide Auth Token\" z palety poleceń (lub kliknij przycisk Jupyter \"Get Windsurf Authentication Token\"), a następnie skopiuj wyświetlony token i wklej go poniżej. Bezpośrednie otwarcie windsurf.com/show-auth-token pokazuje tylko stronę \"Redirecting\" — IDE musi zainicjować ten proces.", + "grokAuthJsonDescription": "Wklej pełną zawartość ~/.grok/auth.json (nie tylko pole \"key\" JWT). Nagie JWT nie ma refresh_token, więc po wygaśnięciu połączenie umiera (#7610). Preferuj dedykowany modal Importuj auth.json, gdy jest dostępny.", + "devinDesktopPasteDescription": "Wklej istniejący klucz API Devin z uwierzytelnionej sesji Devin. Dostępność eksportu klucza i kroki różnią się w zależności od wersji Devin i konta.", + "devinPasteDescription": "Podaj swój WINDSURF_API_KEY (uzyskany za pomocą `devin auth login` lub za pomocą polecenia \"Windsurf: Provide Auth Token\" w IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Klucz API / Token", + "saving": "Zapisywanie…", + "saveConnection": "Zapisz Połączenie", + "gheDescription": "Wprowadź podstawowy adres URL swojej instancji GitHub Enterprise (np. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "Wymagany jest adres URL GitHub Enterprise", + "gitlabDuoSetupTitle": "Konfiguracja OAuth Duo w GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth nie jest skonfigurowany. Zarejestruj aplikację OAuth pod adresem {applicationsUrl} z URI przekierowania {redirectUri} i zakresami \"{scopes}\", a następnie ustaw {clientIdEnv} (opcjonalnie {clientSecretEnv}) i uruchom ponownie.", + "gitlabDuoSetupDescription": "Po zarejestrowaniu aplikacji i ustawieniu zmiennych środowiskowych w tej instancji OmniRoute, kliknij Kontynuuj, aby rozpocząć logowanie OAuth.", + "continue": "Kontynuuj" }, "cursorAuthModal": { "title": "Połącz Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "Brak logów pasujących do obecnych filtrów.", "callLogsInfo": "Logi wywołań są również zapisywane jako pliki JSON w {dataDir} i rotowane na podstawie {retentionDays} oraz {maxEntries}.", "loadMore": "Załaduj więcej", - "loadingMore": "Ładowanie więcej..." + "loadingMore": "Ładowanie więcej...", + "correlationId": "Identyfikator korelacji", + "group": { + "showAllRows": "Pokaż wszystkie wiersze", + "showLatestPerCorrelation": "Pokaż najnowsze według ID korelacji", + "grouped": "Grupowane" + }, + "running": "uruchamianie", + "interval": { + "decrease": "Zmniejsz interwał", + "title": "Interwał automatycznego odświeżania w sekundach", + "increase": "Zwiększ interwał" + }, + "status": { + "inProgress": "W trakcie", + "recoveredByRetry": "Odzyskano przez ponowne próby", + "goToParent": "Przejdź do żądania nadrzędnego", + "healedTitle": "Niepowodzenie, odzyskano po {count} próbach", + "healed": "uzdrowiony", + "failedTitle": "Wszystkie {count} próby nie powiodły się", + "failed": "niepowodzenie", + "pinnedTitle": "Model wybrany za pomocą przypinania sesji pamięci podręcznej kontekstu", + "pinned": "przypięty" + }, + "attempts": "próby", + "detail": { + "collapse": "Zwiń {title}", + "expand": "Rozwiń {title}", + "copyTitle": "Kopiuj {title}", + "copied": "Skopiowano!", + "copy": "Kopiuj", + "autoscrollOn": "Autoscroll: włączone", + "autoscrollOff": "Autoscroll: wyłączone", + "payload": { + "clientRawRequest": "Surowe Żądanie Klienta", + "clientRequest": "Żądanie Klienta", + "openaiRequest": "Żądanie OpenAI", + "providerRequest": "Prośba dostawcy", + "providerResponse": "Odpowiedź dostawcy", + "clientResponse": "Odpowiedź Klienta", + "pipelineError": "Błąd potoku" + }, + "payloadMissing": "Szczegółowy ładunek artefaktu nie jest już dostępny dla tego wpisu dziennika.", + "payloadCorrupt": "Szczegółowy ładunek artefaktu nie mógł zostać sparsowany.", + "notAvailable": "N/D", + "semanticCache": "Semantyczny (OmniRoute)", + "upstreamCache": "Upstream (Dostawca)", + "ariaLabel": "Szczegóły logu żądania", + "completed": "Zakończono", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute zwrócił {status}, mimo że dostawca zwrócił {provider}", + "previousRequest": "Poprzednie żądanie", + "nextRequest": "Następne żądanie", + "close": "Zamknij modal szczegółów", + "startedAt": "Rozpoczęto o", + "endedAt": "Zakończono o", + "duration": "Czas trwania", + "model": "Model", + "provider": "Dostawca", + "account": "Konto", + "input": "Wejście", + "totalIn": "Łącznie: {value}", + "cacheRead": "Odczyt z pamięci podręcznej: {value}", + "cacheWrite": "Zapis do pamięci podręcznej: {value}", + "compressed": "Skompresowane: {from} → {to} ({percent}% oszczędzone)", + "output": "Wyjście", + "totalOut": "Całkowity Wydatki: {value}", + "reasoning": "Rozumowanie: {value}", + "requestedModel": "Żądany model", + "requestProtocol": "Protokół Req", + "cacheSource": "Źródło pamięci podręcznej", + "modelPinning": "Przypinanie Modelu", + "activeModelPinning": "Aktywny — model wybrany za pomocą przypinania sesji", + "rotated": "Obrócone: {initial} -> {final}", + "apiKey": "Klucz API", + "noApiKey": "Brak klucza API", + "combo": "Kombinacja", + "error": "Błąd", + "unblockAll": "Odblokuj wszystko", + "cleared": "Wyczyszczono", + "unblock": "Odblokuj", + "relatedRequests": "Powiązane Żądania ({count})", + "current": "aktualny", + "detailStatus": "Szczegóły Statusu", + "loadingDetails": "Ładowanie szczegółów żądania...", + "providerEventStream": "Strumień Zdarzeń Dostawcy", + "clientEventStream": "Strumień Zdarzeń Klienta", + "eventStream": "Strumień Zdarzeń", + "responsePayloadLegacy": "Payload Odpowiedzi (Legacy)", + "requestPayloadLegacy": "Payload Żądania (Legacy)", + "noPayload": "Brak danych ładunku dostępnych dla tego wpisu dziennika.", + "correlationId": "Identyfikator korelacji", + "correlationIdValue": "Identyfikator korelacji: {id}", + "detailedPayloadInfo": "Najpierw włącz szczegółowe logowanie, jeśli chcesz uzyskać widok ładunku klienta/dostawcy w czterech etapach dla nowych żądań." + } }, "proxyLogger": { "filterAll": "Wszystkie", @@ -11703,7 +12354,11 @@ "providerDisabled": "Wyłączono {provider}", "providerAdded": "{provider} dodany", "add": "Dodaj", - "manualApiKey": "Użyj ręcznego klucza API" + "manualApiKey": "Użyj ręcznego klucza API", + "createDahlTokenFailed": "Nie udało się utworzyć tokena Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Skonfiguruj proxy", + "providerProxyTitleConfigured": "Proxy skonfigurowany: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Ograniczone przez regulamin — przejrzyj warunki", "caution": "Uwaga — klauzule dotyczące użytku osobistego / proxy", "ok": "Ogólnie zezwalające" - } + }, + "allProviders": "Wszyscy dostawcy", + "noApiKeyRequired": "Nie jest wymagany klucz API" }, "providerHealthAutopilot": { "title": "Autopilot kondycji dostawców", @@ -12390,7 +13047,11 @@ "on": "WŁ.", "off": "WYŁ.", "availableProviders": "Dostępni dostawcy ({count})", - "noProviderOverrides": "Brak nadpisań — wszyscy aktywni dostawcy będą uczestniczyć ze swoimi domyślnymi modelami" + "noProviderOverrides": "Brak nadpisań — wszyscy aktywni dostawcy będą uczestniczyć ze swoimi domyślnymi modelami", + "resetFailed": "Reset nie powiódł się", + "resetSuccess": "Resetowanie konfiguracji do ustawień domyślnych", + "running": "Uruchamianie...", + "testFailed": "Test nie powiódł się" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) to założycielski przyjaciel open source OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Dostawca nie obsługuje wizji dla tego żądania obrazu", "capabilityFilter.toolsMismatch": "Dostawca nie obsługuje wywoływania narzędzi", "capabilityFilter.structuredOutputMismatch": "Dostawca nie obsługuje strukturalnego wyjścia", - "capabilityFilter.contextWindowMismatch": "Żądanie przekracza okno kontekstu dostawcy" + "capabilityFilter.contextWindowMismatch": "Żądanie przekracza okno kontekstu dostawcy", + "publicSystem": { + "notFound": { + "title": "Nie znaleziono strony", + "description": "Strona, której szukasz, nie istnieje lub została przeniesiona.", + "dashboardAriaLabel": "Powrót do pulpitu nawigacyjnego", + "statusAriaLabel": "Otwórz stronę statusu systemu", + "systemStatus": "Stan systemu" + }, + "error": { + "title": "Błąd wewnętrzny serwera", + "description": "Coś poszło nie tak podczas przetwarzania Twojej prośby. Nasz zespół został powiadomiony i pracuje nad rozwiązaniem.", + "errorId": "Identyfikator błędu: {id}", + "detailsAriaLabel": "Szczegóły błędu", + "retryAriaLabel": "Spróbuj ponownie załadować stronę", + "tryAgain": "Spróbuj ponownie", + "dashboardAriaLabel": "Powrót do pulpitu nawigacyjnego", + "statusAriaLabel": "Otwórz status systemu", + "systemStatus": "Stan systemu" + }, + "globalError": { + "title": "Coś poszło nie tak", + "description": "Wystąpił nieoczekiwany błąd. Został on zapisany, a nasz zespół przeprowadzi dochodzenie.", + "detailsAriaLabel": "Szczegóły błędu", + "retryAriaLabel": "Spróbuj ponownie załadować stronę", + "tryAgain": "Spróbuj ponownie", + "statusAriaLabel": "Otwórz status systemu", + "systemStatus": "Stan systemu" + }, + "offline": { + "title": "Problem z łącznością", + "description": "OmniRoute nie może teraz połączyć się z siecią. Sprawdź swoje ustawienia internetu, VPN lub proxy.", + "connectionRestored": "Połączenie przywrócone", + "offlineModeDetected": "Wykryto tryb offline", + "retryConnection": "Ponów połączenie", + "openStatusPage": "Otwórz stronę statusu" + }, + "maintenance": { + "title": "Zaplanowana konserwacja", + "description": "Niektóre usługi są tymczasowo niedostępne podczas trwania konserwacji. Podstawowe routowanie zazwyczaj pozostaje online, ale funkcje zarządzania mogą być ograniczone.", + "suggestion1": "Spróbuj ponownie za kilka minut.", + "suggestion2": "Sprawdź aktualne wskaźniki zdrowia i status dostawcy przed ponownym próbą.", + "systemStatus": "Wyświetl status systemu", + "healthDashboard": "Otwórz Panel Zdrowia" + }, + "status": { + "title": "Stan systemu", + "description": "Na żywo operacyjny zrzut dla usług rdzeniowych OmniRoute.", + "loadingHealth": "Ładowanie metryk zdrowia...", + "failedToLoad": "Nie udało się załadować stanu systemu.", + "unableToReachHealth": "Nie można osiągnąć punktu końcowego zdrowia. Sprawdź łączność i spróbuj ponownie.", + "healthCheckFailed": "Sprawdzenie stanu nie powiodło się", + "openConnectivityHelp": "Pomoc w zakresie otwartej łączności", + "maintenanceInfo": "Informacje o konserwacji", + "service": "Usługa", + "unknown": "nieznany", + "notAvailable": "n/a", + "providersTracked": "Śledzeni dostawcy", + "circuitBreakerState": "Stan Wyłącznika Obwodu Dostawcy", + "lastUpdate": "Ostatnia aktualizacja: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Złe Żądanie", + "description": "Payload żądania jest nieprawidłowy lub niekompletny.", + "suggestion1": "Sprawdź wymagane pola i format ładunku przed ponownym próbą.", + "suggestion2": "Jeśli używasz API, zweryfikuj lokalnie schemat JSON.", + "suggestion3": "Jeśli to się będzie powtarzać, otwórz żądanie w Translator Playground, aby sprawdzić ładunek.", + "primaryAction": "Otwórz dokumentację", + "secondaryAction": "Otwórz Tłumacza" + }, + "401": { + "title": "Nieautoryzowany", + "description": "Wymagana jest autoryzacja, aby uzyskać dostęp do tego zasobu.", + "suggestion1": "Zaloguj się ponownie i spróbuj wykonać operację.", + "suggestion2": "Dla wywołań API potwierdź, że token Bearer jest obecny i ważny.", + "suggestion3": "Jeśli token został niedawno obrócony, zaktualizuj swoje dane uwierzytelniające klienta.", + "primaryAction": "Przejdź do logowania", + "secondaryAction": "Zarządzaj kluczami API" + }, + "403": { + "title": "Zabronione", + "description": "Twoje żądanie zostało zrozumiane, ale dostęp jest zabroniony przez politykę.", + "suggestion1": "Sprawdź zasady listy dozwolonych/zablokowanych adresów IP w ustawieniach.", + "suggestion2": "Zweryfikuj model i polityki budżetowe przypisane do twojego klucza API.", + "suggestion3": "Poproś administratora o przyznanie wymaganego zakresu uprawnień.", + "primaryAction": "Pomoc w zakresie dostępu otwartego", + "secondaryAction": "Otwórz Ustawienia Zabezpieczeń" + }, + "408": { + "title": "Przekroczono limit czasu żądania", + "description": "Serwer nie otrzymał pełnego żądania na czas.", + "suggestion1": "Spróbuj ponownie wysłać żądanie z mniejszym ładunkiem.", + "suggestion2": "Sprawdź stabilność swojej sieci oraz opóźnienie VPN/proxy.", + "suggestion3": "Dla długich operacji włącz strumieniowanie lub podziel żądanie.", + "primaryAction": "Otwórz Przewodnik po Punktach Końcowych", + "secondaryAction": "Sprawdź status sieci" + }, + "429": { + "title": "Zbyt Wiele Żądań", + "description": "Przekroczono limity oceny dla tego klienta, klucza lub dostawcy.", + "suggestion1": "Poczekaj na czas odnowienia i spróbuj ponownie po sugerowanym interwale.", + "suggestion2": "Przełącz na kombinację z dostawcami zapasowymi.", + "suggestion3": "Dostosuj profile odporności/dostosowywania limitów w ustawieniach.", + "primaryAction": "Otwórz Ustawienia Odporności", + "secondaryAction": "Otwórz Kombinacje" + }, + "500": { + "title": "Wewnętrzny błąd serwera", + "description": "Wystąpił nieoczekiwany błąd po stronie serwera podczas przetwarzania Twojego żądania.", + "suggestion1": "Spróbuj ponownie za kilka sekund.", + "suggestion2": "Sprawdź telemetrię zdrowia i logi serwera pod kątem skorelowanych identyfikatorów żądań.", + "suggestion3": "Jeśli problem się powtarza, zgłoś go z czasem i kontekstem żądania.", + "primaryAction": "Otwórz Panel Zdrowia", + "secondaryAction": "Otwórz dzienniki" + }, + "502": { + "title": "Zły brama", + "description": "Dostawca upstream lub integracja bramy zwróciła nieprawidłową odpowiedź.", + "suggestion1": "Spróbuj ponownie z innym dostawcą lub aktywną trasą kombinacyjną.", + "suggestion2": "Sprawdź dane uwierzytelniające dostawcy i dostępność modelu.", + "suggestion3": "Sprawdź wynik tłumaczenia, jeśli zaangażowana jest konwersja formatu.", + "primaryAction": "Otwórz Dostawców", + "secondaryAction": "Otwórz Tłumacza" + }, + "503": { + "title": "Usługa niedostępna", + "description": "Usługa jest tymczasowo niedostępna z powodu konserwacji lub obniżonej wydajności zależności.", + "suggestion1": "Poczekaj chwilę i spróbuj ponownie.", + "suggestion2": "Sprawdź ogłoszenia o konserwacji i status systemu.", + "suggestion3": "Użyj dostawców zapasowych, jeśli Twój przepływ pracy jest wrażliwy na opóźnienia.", + "primaryAction": "Szczegóły konserwacji", + "secondaryAction": "Stan systemu" + } + } + }, + "kiroAuthModal": { + "title": "Połącz {providerLabel}", + "chooseMethod": "Wybierz swoją metodę uwierzytelniania:", + "builderId": "AWS Builder ID", + "builderDescription": "Zalecane dla większości użytkowników. Zaloguj się za pomocą konta AWS powiązanego z {providerLabel}.", + "organization": "Twoja organizacja (AWS IAM Identity Center)", + "organizationDescription": "Użyj swojego adresu URL startowego SSO firmy (przykład: {url}).", + "googleAccount": "Konto Google", + "googleDescription": "Zaloguj się za pomocą swojego konta Google.", + "githubAccount": "Konto GitHub", + "githubDescription": "Zaloguj się za pomocą swojego konta GitHub.", + "importToken": "Importuj Token", + "importDescription": "Wklej token odświeżania wyeksportowany z {providerLabel}.", + "apiKey": "Klucz API", + "apiKeyDescription": "Wklej długoterminowy klucz API {providerLabel} / CodeWhisperer. Jest on przechowywany jako poświadczenie typu bearer bez tokena odświeżającego; odkrywanie profilu odbywa się na zasadzie najlepszych starań.", + "idcStartUrl": "URL początkowy IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL Twojego organizacji AWS IAM Identity Center", + "awsRegion": "Region AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Region AWS dla Twojego Centrum Tożsamości (domyślnie: us-east-1)", + "continue": "Kontynuuj", + "back": "Wstecz", + "autoDetecting": "Automatyczne wykrywanie tokena...", + "readingCredentials": "Odczytywanie poświadczeń {providerLabel} z pamięci podręcznej AWS SSO", + "tokenNotDetected": "Token {providerLabel} nie został automatycznie wykryty. Proszę wkleić swój token odświeżający ręcznie.", + "refreshToken": "Odśwież Token", + "tokenPlaceholder": "Token zostanie automatycznie wypełniony...", + "importing": "Importowanie...", + "apiKeyPlaceholder": "Wklej swój klucz API {providerLabel}...", + "apiKeyStoredDescription": "Przechowywane zaszyfrowane jako długoterminowe poświadczenie nosiciela. Nie ma przepływu odświeżania.", + "apiKeyRegionDescription": "Region AWS dla klucza (domyślnie: us-east-1)", + "validating": "Walidacja...", + "validateAndSaveApiKey": "Zatwierdź i Zapisz Klucz API", + "errorAutoDetect": "Nie można automatycznie wykryć tokena", + "errorAutoDetectFailed": "Nie udało się automatycznie wykryć tokena", + "errorRefreshTokenRequired": "Proszę wprowadzić token odświeżania", + "errorImportFailed": "Import nie powiódł się", + "errorApiKeyRequired": "Proszę wprowadzić klucz API Kiro", + "errorApiKeyImportFailed": "Importowanie klucza API nie powiodło się", + "errorIdcStartUrlRequired": "Proszę wprowadzić swój adres URL początkowego IDC" + }, + "kiroSocialOAuthModal": { + "title": "Połącz {providerLabel} za pomocą {providerName}", + "errorStartAuthorization": "Nie udało się rozpocząć autoryzacji", + "errorAuthorizationExpired": "Autoryzacja wygasła. Rozpocznij ponownie proces logowania.", + "errorAuthorizationFailed": "Autoryzacja nie powiodła się", + "initializing": "Inicjowanie...", + "settingUp": "Konfigurowanie uwierzytelniania {providerName}", + "openIncognito": "Otwórz ten link w oknie incognito", + "incognitoDescription": "Użyj okna incognito/prywatnego, aby uniknąć konfliktów sesji z istniejącymi kontami.", + "copyLink": "Skopiuj link", + "verificationCode": "Kod weryfikacyjny", + "waiting": "Oczekiwanie na autoryzację...", + "cancel": "Anuluj", + "successTitle": "Połączono pomyślnie!", + "successMessage": "Twoje konto {providerLabel} za pośrednictwem {providerName} zostało połączone.", + "done": "Zrobione", + "errorTitle": "Połączenie nie powiodło się", + "close": "Zamknij" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autoryzacja nie powiodła się", + "errorPopupBlocked": "Popup zablokowany — zezwól na wyskakujące okna dla tej strony lub wklej token ręcznie poniżej.", + "errorPopupClosed": "Okno autoryzacji zostało zamknięte przed zakończeniem.", + "errorAccessTokenRequired": "Wymagany jest token dostępu.", + "errorImportFailed": "Import nie powiódł się", + "title": "Połącz Trae SOLO", + "authorizeDescription": "Autoryzuj przez trae.ai w oknie popup. Okno popup zamknie się samo po zaimportowaniu tokena.", + "authorizeImportant": "Ważne: musisz być zalogowany na trae.ai w tej przeglądarce. Strona autoryzacji tylko potwierdza istniejącą sesję — nie może cię zalogować. Jeśli widzisz \"Logowanie nie powiodło się\", kliknij \"Otwórz solo.trae.ai\", zaloguj się, a następnie wróć tutaj.", + "waitingForAuthorization": "Czekam na trae.ai…", + "authorizeWithBrowser": "Autoryzuj za pomocą przeglądarki", + "openSoloTrae": "Otwórz solo.trae.ai", + "orPasteManually": "lub wklej token ręcznie", + "manualInstructions": "Zaloguj się do solo.trae.ai, otwórz DevTools → Sieć, wyślij dowolną wiadomość czatu i skopiuj JWT z nagłówka żądania Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Czas życia JWT wynosi ~14 dni. Opcjonalne pola tożsamości pochodzą z common_params w tym samym ciele żądania.", + "accessTokenLabel": "Token Dostępu (Cloud-IDE-JWT)", + "webId": "Identyfikator sieciowy", + "optional": "opcjonalny", + "bizUserId": "ID Użytkownika Biz", + "userUniqueId": "Identyfikator Użytkownika", + "scope": "Zakres", + "tenant": "Najemca", + "region": "Region", + "importing": "Importowanie…", + "importToken": "Importuj Token", + "cancel": "Anuluj" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Rozsyłanie...", + "complete": "Zakończone", + "defaultLabel": "Rozdziel Proksy" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "przestarzały", + "risk": "ryzyko", + "close": "Zamknij", + "model": "Model", + "key": "Klucz", + "defaultKey": "domyślny", + "clearConversation": "Wyczyść rozmowę", + "clear": "Wyczyść", + "tabs": { + "test": "Test", + "logs": "Dzienniki" + }, + "loadingLogs": "Ładowanie dzienników…", + "failedToLoadLogs": "Nie udało się załadować dzienników", + "noLogsYet": "Brak logów jeszcze", + "noLogsDescription": "Wyślij wiadomość testową z zakładki Test — logi dla tego dostawcy pojawią się tutaj.", + "openFullLogs": "Otwórz pełną stronę dzienników", + "live": "Na żywo", + "tailingLast": "śledzenie ostatnich {count}", + "refreshNow": "Odśwież teraz", + "refresh": "Odśwież", + "unknownRequester": "nieznany wnioskodawca", + "fields": { + "timestamp": "Znacznik Czasu", + "status": "Status", + "duration": "Czas trwania", + "model": "Model", + "requestedModel": "Żądany model", + "provider": "Dostawca", + "requester": "Zleceniodawca", + "tokens": "Tokeny" + } + }, + "proxyLog": { + "detailAriaLabel": "Szczegóły logów proxy", + "event": "Zdarzenie Proxy", + "close": "Zamknij modal szczegółów proxy", + "time": "Czas", + "latency": "Opóźnienie", + "clientIp": "Adres IP klienta", + "proxy": "Proxy", + "direct": "Bezpośredni", + "type": "Typ", + "level": "Poziom", + "provider": "Dostawca", + "tlsFingerprint": "Odcisk TLS", + "directNative": "Bezpośredni", + "targetUrl": "Adres URL docelowy", + "error": "Błąd", + "configuration": "Konfiguracja Proxya" + }, + "requestTimeline": { + "title": "Oś Czasu Żądania", + "modes": { + "follow": "Śledź", + "followDescription": "Oś przewija się w lewo, linia NOW pozostaje na 75%", + "now": "Teraz", + "nowDescription": "Przejdź do bieżącego czasu, linia NOW resetuje się do środka", + "pan": "Patelnia", + "panDescription": "Przeciągnij, aby eksplorować, tło jest zamrożone" + }, + "reset": "Resetuj", + "started": "Rozpoczęto", + "ended": "Zakończono", + "duration": "Czas trwania", + "status": "Status", + "provider": "Dostawca", + "tokens": "Tokeny", + "active": "Aktywny", + "other": "Inne", + "tenMinutes": "10min", + "hour": "godzina", + "day": "dzień", + "unknownModel": "nieznany", + "pending": "oczekujące" + }, + "metadata": { + "compressionTitle": "Kompresja", + "compressionDescription": "Skonfiguruj ustawienia kompresji kontekstu, aby zmniejszyć zużycie tokenów i koszty.", + "relayTitle": "OmniRoute — Proxies Relay", + "relayDescription": "Bezserwerowe punkty końcowe proxy relay dla Twojej infrastruktury AI", + "trafficInspectorTitle": "Inspektor Ruchu — OmniRoute", + "trafficInspectorDescription": "Monitor wywołania LLM + debuguj ruch HTTPS dowolnej aplikacji" + }, + "conductor": { + "title": "Conductor — flota agentów CLI", + "subtitle": "OmniConductor hub: biegacze, kolejka zadań i rady, na żywo", + "runners": "Biegacze", + "tasks": "Zadania", + "colName": "Nazwa", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Zadanie", + "colMode": "Tryb", + "colRunner": "Biegacz", + "colSummary": "Podsumowanie", + "online": "online", + "offline": "offline", + "draining": "odwodnienie", + "hubOffline": "Hub konduktora offline lub nie skonfigurowany (CONDUCTOR_HUB_URL) — nie wyświetla nic poza przestarzałymi danymi.", + "noRunners": "Brak zarejestrowanych biegaczy", + "noTasks": "Brak zadań jeszcze", + "detailTitle": "Szczegóły zadania", + "prompt": "Podpowiedź", + "branch": "Gałąź", + "fetchHint": "Pobierz wynik za pomocą: git fetch origin {branch}", + "council": "Rada", + "candidates": "Kandydaci", + "cancel": "Anuluj zadanie", + "cancelConfirmTitle": "Anulować to zadanie?", + "cancelConfirmMessage": "Hub przerwie wykonanie na runnerze. Tego nie można cofnąć.", + "cancelFailed": "Hub odrzucił anulowanie", + "close": "Zamknij", + "error": "Błąd", + "faroTitle": "Faro — rzecznik floty", + "faroSubtitle": "Czat i głos, zakotwiczone w rzeczywistych wydarzeniach floty. Destrukcyjne polecenia zawsze wymagają potwierdzenia.", + "faroEmpty": "Zapytaj o flotę — np. \"jak się ma flota?\"", + "faroPending": "Faro prosi o potwierdzenie", + "faroPlaceholder": "porozmawiaj z Faro…", + "faroSend": "wyślij", + "faroOffline": "Faro (rzecznik) jest offline", + "yes": "Tak", + "no": "Nie", + "pushToTalk": "Przytrzymaj, aby rozmawiać", + "speakAnswers": "mów odpowiedzi", + "voiceModels": "Modele głosowe (dostawca/model tego OmniRoute)", + "voiceIdle": "rozmawiać", + "voiceListening": "słuchanie…", + "voiceThinking": "myślenie…", + "voiceSpeaking": "mówiąc…", + "sttFailed": "Transkrypcja nie powiodła się (sprawdź model/dostawcę STT)", + "ttsFailed": "Nie udało się zsyntetyzować mowy (sprawdź model/dostawcę TTS)", + "micDenied": "Mikrofon niedostępny lub odmowa dostępu" + }, + "cliproxyProviderExposure": { + "title": "Ekspozycja Dostawcy", + "description": "Eksponuj modele CLIProxyAPI jako cel routingu pod prefiksem cliproxyapi/.", + "label": "Expose as cliproxyapi/...", + "hint": "Gdy jest włączone, odkryte modele pojawiają się w wyborach dostawcy w całym OmniRoute.", + "updateFailed": "Nie udało się zaktualizować (HTTP {status})", + "networkError": "Błąd sieci — nie można zaktualizować ustawienia ekspozycji dostawcy" + } } - diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 239696ee74..7aa69f138f 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -172,6 +172,18 @@ "unselectAll": "Desmarcar tudo", "visibleModels": "visíveis", "selectAllConfirm": "Adicionar {count} modelos a este combo?", + "testSelectedProviders": "Testes de provedores", + "testingSelectedProviders": "Testando {done}/{total}...", + "noProvidersSelectedToTest": "Marque pelo menos um provedor abaixo primeiro", + "noModelsToTestForProviders": "Nenhum modelo para testar para os provedores selecionados", + "testSelectedProvidersResults": "{ok} de {total} modelos funcionando", + "selectWorkingModels": "Adicionar em funcionamento", + "unselectWorkingModels": "Desmarcar trabalhando", + "noWorkingModelsToSelect": "Nenhum modelo de trabalho restante para adicionar", + "providerTestHint": "Dica: verifique um provedor → Testar → Adicionar funcionando. Clique novamente para desmarcar.", + "selectAllProviders": "Verifique todos os provedores", + "clearProviderSelection": "Desmarcar provedores", + "providersSelectedCount": "{count} provedores verificados", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -418,7 +430,7 @@ "cloudBenefitAccess": "Cloud Benefit Access", "maxRetries": "Max Retries", "queueTimeout": "Queue Timeout", - "queueDepth": "__MISSING__:Queue Depth", + "queueDepth": "Profundidade da Fila", "addProvider": "Add Provider", "realtime": "Realtime", "totalTranslations": "Total Translations", @@ -933,40 +945,40 @@ "batchActionCancelError": "Falha ao cancelar o batch. Tente novamente.", "batchActionRetryError": "Falha ao refazer requisições com falha. Tente novamente.", "batchConceptRetentionNote": "Arquivos de resultado e erro ficam retidos por 30 dias (Anthropic: 29 dias)", - "batchFilesSizeColumn": "__MISSING__:Size", - "toggleNoAuthProvider": "__MISSING__:Toggle no-auth provider", - "loadingModels": "__MISSING__:Loading models…", - "selectAModel": "__MISSING__:Select a model", - "degraded": "__MISSING__:Degraded", - "zeroConfigBannerTitle": "__MISSING__:Running in zero-config mode", - "zeroConfigBannerBody": "__MISSING__:OmniRoute auto-generated secure encryption keys on first launch. They are persisted to {dataDir}. No action is required — your data is encrypted and safe. To use custom keys, add JWT_SECRET and STORAGE_ENCRYPTION_KEY to that file.", - "batchRelativeTimeIn": "__MISSING__:in {value}", - "batchRelativeTimeAgo": "__MISSING__:{value} ago", - "batchDetailsTitle": "__MISSING__:Batch Details", - "batchProgress": "__MISSING__:Progress", - "batchCompletedCount": "__MISSING__:{count} completed", - "batchFailedCount": "__MISSING__:{count} failed", - "batchPendingCount": "__MISSING__:{count} pending", - "batchTimeline": "__MISSING__:Timeline", - "batchTimelineInProgress": "__MISSING__:In Progress", - "batchTimelineFinalizing": "__MISSING__:Finalizing", - "batchTimelineCompleted": "__MISSING__:Completed", - "batchTimelineFailed": "__MISSING__:Failed", - "batchTimelineExpires": "__MISSING__:Expires", - "batchTimelineExpired": "__MISSING__:Expired", - "batchTimelineCancelling": "__MISSING__:Cancelling", - "batchTimelineCancelled": "__MISSING__:Cancelled", - "batchTokenUsage": "__MISSING__:Token Usage", - "batchMetadata": "__MISSING__:Metadata", - "batchFileContents": "__MISSING__:File Contents", - "batchFileUsedByCount": "__MISSING__:Used by {count, plural, one {# batch} other {# batches}}", - "batchFilePreview": "__MISSING__:Preview", - "batchFilePreviewTruncated": "__MISSING__:Showing first {shown} lines ({total} total lines)", - "batchFileDownloadFull": "__MISSING__:Download Full File" + "batchFilesSizeColumn": "Tamanho", + "toggleNoAuthProvider": "Alternar provedor sem autenticação", + "loadingModels": "Carregando modelos…", + "selectAModel": "Selecione um modelo", + "degraded": "Degradado", + "zeroConfigBannerTitle": "Executando em modo zero-config", + "zeroConfigBannerBody": "OmniRoute gerou automaticamente chaves de criptografia seguras na primeira execução. Elas são persistidas em {dataDir}. Nenhuma ação é necessária — seus dados estão criptografados e seguros. Para usar chaves personalizadas, adicione JWT_SECRET e STORAGE_ENCRYPTION_KEY a esse arquivo.", + "batchRelativeTimeIn": "em {value}", + "batchRelativeTimeAgo": "há {value}", + "batchDetailsTitle": "Detalhes do Lote", + "batchProgress": "Progresso", + "batchCompletedCount": "{count} concluído", + "batchFailedCount": "{count} falhou", + "batchPendingCount": "{count} pendente", + "batchTimeline": "Linha do Tempo", + "batchTimelineInProgress": "Em Andamento", + "batchTimelineFinalizing": "Finalizando", + "batchTimelineCompleted": "Concluído", + "batchTimelineFailed": "Falhou", + "batchTimelineExpires": "Expira", + "batchTimelineExpired": "Expirado", + "batchTimelineCancelling": "Cancelando", + "batchTimelineCancelled": "Cancelado", + "batchTokenUsage": "Uso de Token", + "batchMetadata": "Metadados", + "batchFileContents": "Conteúdo do Arquivo", + "batchFileUsedByCount": "Usado por {count, plural, one {# lote} other {# lotes}}", + "batchFilePreview": "Prévia", + "batchFilePreviewTruncated": "Mostrando as primeiras {shown} linhas ({total} linhas no total)", + "batchFileDownloadFull": "Baixar Arquivo Completo" }, "disabled": "Desabilitado", - "featureFlagOmnirouteEmergencyFallbackDescription": "__MISSING__:Route budget-exhausted requests to the emergency free fallback provider/model.", - "featureFlagArenaEloSyncEnabledDescription": "__MISSING__:Enable periodic Arena AI leaderboard ELO sync for model intelligence rankings.", + "featureFlagOmnirouteEmergencyFallbackDescription": "Roteie solicitações com orçamento esgotado para o provedor/modelo de fallback gratuito de emergência.", + "featureFlagArenaEloSyncEnabledDescription": "Ativar a sincronização periódica do ELO do leaderboard da Arena AI para classificações de inteligência do modelo.", "featureFlagExposeCcDiscoveryAliasesDescription": "Divulgar ids espelho claude/<provider>/<model> em /v1/models para que a descoberta de modelos do gateway Claude Code liste modelos não-Claude. Atenção: duplica as entradas do catálogo para todos os clientes quando ativado globalmente.", "sidebar": { "home": "Início", @@ -1111,7 +1123,7 @@ "aiFeaturesSection": "AI Features", "mcp": "MCP", "a2a": "A2A", - "plugins": "__MISSING__:Plugins", + "plugins": "Plugins", "apiEndpoints": "API Endpoints", "batchFiles": "Files", "analyticsEvals": "Evals", @@ -1120,10 +1132,10 @@ "analyticsComboHealth": "Combo Health", "analyticsCompression": "Compression", "costsBudget": "Budget", - "costsFreeTiers": "__MISSING__:Free-Tier Budget", - "costsFreeTiersSubtitle": "__MISSING__:Monthly free-token allowances", - "freeProviderRankings": "__MISSING__:Free Provider Rankings", - "freeProviderRankingsSubtitle": "__MISSING__:Best free providers ranked by model ELO scores", + "costsFreeTiers": "Orçamento do Plano Gratuito", + "costsFreeTiersSubtitle": "Limites mensais de tokens gratuitos", + "freeProviderRankings": "Classificações de Provedores Gratuitas", + "freeProviderRankingsSubtitle": "Melhores provedores gratuitos classificados por pontuações ELO do modelo", "radar": "Catálogo Radar", "radarSubtitle": "Catálogo de modelos gratuitos enriquecido pela comunidade", "costsQuotaShare": "Compartilhamento de Cota", @@ -1143,7 +1155,7 @@ "settingsAuthz": "Autorização", "settingsRouting": "Routing", "settingsResilience": "Resilience", - "modelLockout": "__MISSING__:Model Lockout", + "modelLockout": "Bloqueio de Modelo", "settingsAdvanced": "Advanced", "omniProxySection": "OmniProxy", "quotaTracker": "Provider Quota", @@ -1192,8 +1204,8 @@ "analyticsCompressionSubtitle": "Estatísticas de economia de tokens", "analyticsSearchSubtitle": "Analytics das ferramentas de busca", "analyticsEvalsSubtitle": "Resultados das suites de avaliação", - "providerStats": "__MISSING__:Provider Stats", - "providerStatsSubtitle": "__MISSING__:Latency and performance metrics", + "providerStats": "Estatísticas do Provedor", + "providerStatsSubtitle": "Métricas de latência e desempenho", "logsSubtitle": "Logs da aplicação", "logsProxySubtitle": "Logs de tráfego do proxy", "consoleLogsSubtitle": "Saída do console", @@ -1213,7 +1225,7 @@ "agentSkillsSubtitle": "Registro de skills A2A", "mcpSubtitle": "Controles do servidor MCP", "a2aSubtitle": "Servidor do protocolo A2A", - "pluginsSubtitle": "__MISSING__:Plugin marketplace & installs", + "pluginsSubtitle": "Marketplace de plugins e instalações", "mediaSubtitle": "Arquivos de mídia em cache", "batchFilesSubtitle": "Arquivos de entrada/saída de batch", "settingsSubtitle": "Todas as configurações", @@ -1251,16 +1263,16 @@ "cliAgentsSubtitle": "Agentes autônomos com CLI", "acpAgents": "ACP Agents", "acpAgentsSubtitle": "CLIs spawnadas pelo OmniRoute", - "skipToContent": "__MISSING__:Skip to content", + "skipToContent": "Pular para o conteúdo", "mainNavigation": "Navegação principal", - "unpinSection": "__MISSING__:Unpin section", - "pinSectionOpen": "__MISSING__:Pin section open", - "reloadPage": "__MISSING__:Reload Page", - "dragReorderSection": "__MISSING__:Drag to reorder section", - "dragReorderItem": "__MISSING__:Drag to reorder", - "cannotHide": "__MISSING__:This item cannot be hidden", - "alwaysVisible": "__MISSING__:Always visible", - "groupSeparatorLabel": "__MISSING__:Separator", + "unpinSection": "Desafixar seção", + "pinSectionOpen": "Fixar seção aberta", + "reloadPage": "Recarregar Página", + "dragReorderSection": "Arraste para reorganizar a seção", + "dragReorderItem": "Arraste para reordenar", + "cannotHide": "Este item não pode ser ocultado", + "alwaysVisible": "Sempre visível", + "groupSeparatorLabel": "Separador", "discovery": "Descoberta", "discoverySubtitle": "Buscar acesso gratuito em provedores", "conductor": "Conductor", @@ -1270,14 +1282,15 @@ "settingsModalityBridge": "Ponte de Modalidade", "settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto", "commandPalette": { - "title": "__MISSING__:Command palette", - "searchPlaceholder": "__MISSING__:Search pages, settings, tools...", - "clearSearch": "__MISSING__:Clear search", - "noResults": "__MISSING__:No results", - "navigate": "__MISSING__:navigate", - "open": "__MISSING__:open", - "close": "__MISSING__:close" - } + "title": "Paleta de Comandos", + "searchPlaceholder": "Pesquisar páginas, configurações, ferramentas...", + "clearSearch": "Limpar pesquisa", + "noResults": "Sem resultados", + "navigate": "navegar", + "open": "abrir", + "close": "fechar" + }, + "noResults": "Nenhum resultado" }, "webhooks": { "title": "Webhooks", @@ -1519,10 +1532,10 @@ "sync.token.created": "Token de Sincronização Criado", "sync.token.revoked": "Token de Sincronização Revogado" }, - "mcpMetricCalls24h": "__MISSING__:Calls (24h)", - "mcpMetricSuccessRate": "__MISSING__:Success rate", - "mcpMetricAvgDuration": "__MISSING__:Avg duration", - "mcpMetricTopTool": "__MISSING__:Top tool" + "mcpMetricCalls24h": "Chamadas (24h)", + "mcpMetricSuccessRate": "Taxa de sucesso", + "mcpMetricAvgDuration": "Duração média", + "mcpMetricTopTool": "Ferramenta principal" }, "themesPage": { "title": "Themes", @@ -1782,63 +1795,63 @@ "updateStarted": "Atualização iniciada...", "reloadingPageAutomatically": "Recarregando a página automaticamente...", "providerTopology": "Topologia do provedor", - "downloadDmg": "__MISSING__:Download DMG (macOS)", - "downloadDmgDescription": "__MISSING__:A new version of the OmniRoute desktop app is available. Please download and install the macOS DMG installer to update (current: v{version}).", - "downloadExe": "__MISSING__:Download EXE (Windows)", - "downloadExeDescription": "__MISSING__:A new version of the OmniRoute desktop app is available. Please download and install the Windows EXE installer to update (current: v{version}).", - "downloadAppImage": "__MISSING__:Download AppImage (Linux)", - "downloadAppImageDescription": "__MISSING__:A new version of the OmniRoute desktop app is available. Please download the Linux AppImage package to update (current: v{version}).", - "downloadUpdate": "__MISSING__:Download Update", - "downloadUpdateDescription": "__MISSING__:A new version of the OmniRoute desktop app is available. Please download the respective app format for your system to update (current: v{version}).", - "updateQueued": "__MISSING__:Queued update to v{version}.", - "updateDockerRebuilding": "__MISSING__:Docker image is rebuilding in the background.", - "updateWaitingRestart": "__MISSING__:Waiting for OmniRoute to restart with the new version.", - "updateInstalling": "__MISSING__:Installing v{version}.", - "updateRunning": "__MISSING__:OmniRoute is now running v{version}.", - "updateCompleted": "__MISSING__:OmniRoute updated to v{version}.", - "updateDockerStillRebuilding": "__MISSING__:Docker image is still rebuilding for v{version}.", - "updateInstallingBackground": "__MISSING__:Installing v{version} in the background.", - "updateWaitingVersion": "__MISSING__:Waiting for OmniRoute to come back on v{version}.", - "updateDockerStillInProgress": "__MISSING__:Docker rebuild is still in progress.", - "updateRestarting": "__MISSING__:Service restart in progress. Waiting for OmniRoute to come back online...", - "updateTimeout": "__MISSING__:Update started, but v{version} did not become available before timeout. Refresh the page or check server logs.", - "updateTimedOut": "__MISSING__:Update to v{version} timed out.", - "updateStartFailed": "__MISSING__:Failed to start update.", - "noResponseStream": "__MISSING__:No response stream received.", - "updateComplete": "__MISSING__:Update complete!", - "updateFailed": "__MISSING__:Update failed.", - "updateNetworkError": "__MISSING__:Network error — connection lost during update.", - "stepInstallPackage": "__MISSING__:Install Package", - "stepRebuildNativeModules": "__MISSING__:Rebuild Native Modules", - "stepRestartService": "__MISSING__:Restart Service", - "stepComplete": "__MISSING__:Complete", - "stepError": "__MISSING__:Error", - "updateCompleteTitle": "__MISSING__:Update Complete!", - "updateFailedTitle": "__MISSING__:Update Failed", - "updatingTitle": "__MISSING__:Updating OmniRoute...", - "reloadNotice": "__MISSING__:The page will reload automatically in a few seconds.", - "retryNotice": "__MISSING__:Please try again or update manually via the CLI.", - "restartNotice": "__MISSING__:Do not close this page. The system will restart automatically.", - "reloadNow": "__MISSING__:Reload Now", - "closeUpdate": "__MISSING__:Close", - "retryUpdate": "__MISSING__:Retry", - "updateAvailableTitle": "__MISSING__:Update Available: v{version}{desktop}", - "desktopAppLabel": "__MISSING__:(Desktop App)", - "checkingForUpdates": "__MISSING__:Checking for updates...", - "versionAvailableForDownload": "__MISSING__:Version v{version} is available for download.", - "downloadingUpdate": "__MISSING__:Downloading update... {percent}% complete.", - "updateDownloaded": "__MISSING__:Update downloaded successfully! Click Restart & Install to apply.", - "autoUpdateFailed": "__MISSING__:Auto-update failed: {reason}.", - "unknownUpdateError": "__MISSING__:Unknown error", - "versionAvailableDesktop": "__MISSING__:Version v{version} is available for the desktop app.", - "manualUpdateRequired": "__MISSING__:Manual update required for this installation type.", - "restartAndInstall": "__MISSING__:Restart & Install", - "checkForUpdate": "__MISSING__:Check for Update", - "manualUpdate": "__MISSING__:Manual Update", - "directDownloadHint": "__MISSING__:Or download the respective installer format directly:", - "releaseNotes": "__MISSING__:Release Notes", - "readMore": "__MISSING__:Read More", - "noAuthLabel": "__MISSING__:No Auth" + "downloadDmg": "Baixar DMG (macOS)", + "downloadDmgDescription": "Uma nova versão do aplicativo de desktop OmniRoute está disponível. Por favor, baixe e instale o instalador DMG para macOS para atualizar (atual: v{version}).", + "downloadExe": "Baixar EXE (Windows)", + "downloadExeDescription": "Uma nova versão do aplicativo desktop OmniRoute está disponível. Por favor, baixe e instale o instalador EXE para Windows para atualizar (atual: v{version}).", + "downloadAppImage": "Baixar AppImage (Linux)", + "downloadAppImageDescription": "Uma nova versão do aplicativo de desktop OmniRoute está disponível. Por favor, baixe o pacote AppImage para Linux para atualizar (atual: v{version}).", + "downloadUpdate": "Baixar Atualização", + "downloadUpdateDescription": "Uma nova versão do aplicativo de desktop OmniRoute está disponível. Por favor, baixe o formato de aplicativo respectivo para o seu sistema para atualizar (atual: v{version}).", + "updateQueued": "Atualização na fila para v{version}.", + "updateDockerRebuilding": "A imagem do Docker está sendo reconstruída em segundo plano.", + "updateWaitingRestart": "Aguardando o OmniRoute reiniciar com a nova versão.", + "updateInstalling": "Instalando v{version}.", + "updateRunning": "OmniRoute agora está rodando a v{version}.", + "updateCompleted": "OmniRoute atualizado para v{version}.", + "updateDockerStillRebuilding": "A imagem do Docker ainda está sendo reconstruída para v{version}.", + "updateInstallingBackground": "Instalando v{version} em segundo plano.", + "updateWaitingVersion": "Aguardando o OmniRoute voltar na v{version}.", + "updateDockerStillInProgress": "A reconstrução do Docker ainda está em andamento.", + "updateRestarting": "Reinício do serviço em andamento. Aguardando o OmniRoute voltar online...", + "updateTimeout": "A atualização foi iniciada, mas v{version} não ficou disponível antes do tempo limite. Atualize a página ou verifique os logs do servidor.", + "updateTimedOut": "A atualização para v{version} excedeu o tempo limite.", + "updateStartFailed": "Falha ao iniciar a atualização.", + "noResponseStream": "Nenhum fluxo de resposta recebido.", + "updateComplete": "Atualização concluída!", + "updateFailed": "Atualização falhou.", + "updateNetworkError": "Erro de rede — conexão perdida durante a atualização.", + "stepInstallPackage": "Instalar Pacote", + "stepRebuildNativeModules": "Reconstruir Módulos Nativos", + "stepRestartService": "Reiniciar Serviço", + "stepComplete": "Completo", + "stepError": "Erro", + "updateCompleteTitle": "Atualização Completa!", + "updateFailedTitle": "Atualização Falhou", + "updatingTitle": "Atualizando o OmniRoute...", + "reloadNotice": "A página será recarregada automaticamente em alguns segundos.", + "retryNotice": "Por favor, tente novamente ou atualize manualmente via CLI.", + "restartNotice": "Não feche esta página. O sistema será reiniciado automaticamente.", + "reloadNow": "Recarregar Agora", + "closeUpdate": "Fechar", + "retryUpdate": "Tentar Novamente", + "updateAvailableTitle": "Atualização Disponível: v{version}{desktop}", + "desktopAppLabel": "(App de Desktop)", + "checkingForUpdates": "Verificando atualizações...", + "versionAvailableForDownload": "A versão v{version} está disponível para download.", + "downloadingUpdate": "Baixando atualização... {percent}% completo.", + "updateDownloaded": "Atualização baixada com sucesso! Clique em Reiniciar e Instalar para aplicar.", + "autoUpdateFailed": "Atualização automática falhou: {reason}.", + "unknownUpdateError": "Erro desconhecido", + "versionAvailableDesktop": "A versão v{version} está disponível para o aplicativo de desktop.", + "manualUpdateRequired": "Atualização manual necessária para este tipo de instalação.", + "restartAndInstall": "Reiniciar e Instalar", + "checkForUpdate": "Verificar Atualização", + "manualUpdate": "Atualização Manual", + "directDownloadHint": "Ou baixe o formato do instalador respectivo diretamente:", + "releaseNotes": "Notas de Lançamento", + "readMore": "Leia Mais", + "noAuthLabel": "Sem Autenticação" }, "analytics": { "title": "Análises", @@ -2162,20 +2175,21 @@ "routeRecommendations": "Recomendações", "routeLimitations": "Limitações", "routeNoKnownLimitations": "Nenhuma limitação conhecida para esta explicação.", - "searchAnalyticsLoading": "__MISSING__:Loading search analytics…", - "searchAnalyticsNoData": "__MISSING__:No search data available yet.", - "searchAnalyticsNoDataDescription": "__MISSING__:Search requests will appear here after the first search via /v1/search.", - "searchAnalyticsToday": "__MISSING__:{count} today", - "searchAnalyticsCachedRequests": "__MISSING__:{count} cached requests", - "searchAnalyticsApiCosts": "__MISSING__:search API costs", - "searchAnalyticsErrors": "__MISSING__:{count} errors", - "searchAnalyticsNoErrors": "__MISSING__:No errors", - "searchAnalyticsProviderBreakdown": "__MISSING__:Provider Breakdown", - "searchAnalyticsQueries": "__MISSING__:queries", - "searchAnalyticsEmptyDescription": "__MISSING__:Use POST /v1/search to start routing web searches.", - "searchAnalyticsFreeTier": "__MISSING__:Free tier available: Serper (2,500/mo), Brave (2,000/mo), Exa (1,000/mo), Tavily (1,000/mo) — total 6,500+ free searches/month with automatic failover.", - "autoRoutingNoDataAvailable": "__MISSING__:No auto-routing analytics available. Make requests using the auto/ prefix to see metrics.", - "defaultVariantLabel": "__MISSING__:Default" + "searchAnalyticsLoading": "Carregando análises de busca…", + "searchAnalyticsNoData": "Nenhum dado de pesquisa disponível ainda.", + "searchAnalyticsNoDataDescription": "As solicitações de pesquisa aparecerão aqui após a primeira pesquisa via /v1/search.", + "searchAnalyticsToday": "{count} hoje", + "searchAnalyticsCachedRequests": "{count} requisições em cache", + "searchAnalyticsApiCosts": "custos da API de pesquisa", + "searchAnalyticsErrors": "{count} erros", + "searchAnalyticsNoErrors": "Sem erros", + "searchAnalyticsProviderBreakdown": "Análise de Fornecedores", + "searchAnalyticsQueries": "consultas", + "searchAnalyticsEmptyDescription": "Use POST /v1/search para começar a direcionar pesquisas na web.", + "searchAnalyticsFreeTier": "Nível gratuito disponível: Serper (2.500/mês), Brave (2.000/mês), Exa (1.000/mês), Tavily (1.000/mês) — total de 6.500+ pesquisas gratuitas/mês com failover automático.", + "autoRoutingNoDataAvailable": "Nenhuma análise de roteamento automático disponível. Faça solicitações usando o prefixo auto/ para ver métricas.", + "defaultVariantLabel": "Padrão", + "freeTierAvailable": "Camada gratuita disponível" }, "apiManager": { "title": "Chaves de API", @@ -2243,11 +2257,11 @@ "endpointsRestricted": "Restrito a {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "Auto-Resolve", "autoResolveDesc": "Resolve automaticamente nomes ambíguos de modelo para o provedor nativo desta API key.", - "streamDefaultMode": "__MISSING__:Stream Default Compatibility", - "streamDefaultModeDesc": "__MISSING__:Controls omitted `stream` flags for this key. JSON mode returns non-streaming responses unless the client explicitly requests SSE.", - "streamDefaultLegacy": "__MISSING__:Legacy", - "streamDefaultJson": "__MISSING__:JSON Compatible", - "streamDefaultBadge": "__MISSING__:JSON stream default", + "streamDefaultMode": "Compatibilidade Padrão de Stream", + "streamDefaultModeDesc": "Controles omitiram as flags `stream` para esta chave. O modo JSON retorna respostas não streaming, a menos que o cliente solicite explicitamente SSE.", + "streamDefaultLegacy": "Legado", + "streamDefaultJson": "Compatível com JSON", + "streamDefaultBadge": "Fluxo JSON padrão", "keyActive": "Chave Ativa", "keyActiveDesc": "Ativa ou desativa esta API key. Chaves desativadas são bloqueadas com 403.", "accessSchedule": "Horário de Acesso", @@ -2295,7 +2309,7 @@ "devicesCount": "{count, plural, one {# dispositivo} other {# dispositivos}}", "devicesTooltip": "{count, plural, one {# dispositivo distinto (IP/User-Agent) visto com esta chave (últimos 30 min)} other {# dispositivos distintos (IP/User-Agent) vistos com esta chave (últimos 30 min)}}", "lastUsedOn": "Último: {date}", - "viewCostsFor": "__MISSING__:View costs for {name}", + "viewCostsFor": "Ver custos para {name}", "editPermissions": "Editar permissões", "deleteKey": "Excluir chave", "regenerateKey": "Chave regenerada", @@ -2347,8 +2361,8 @@ "shownOf": "{shown} de {total} exibidas", "emptyFilterTitle": "Nenhuma chave corresponde aos filtros", "emptyFilterClear": "Limpar filtros", - "disableNonPublicModels": "__MISSING__:Disable Non-Public Models", - "disableNonPublicModelsDesc": "__MISSING__:Reject requests for models that are not discovered or not marked as public in the provider catalog", + "disableNonPublicModels": "Desativar Modelos Não Públicos", + "disableNonPublicModelsDesc": "Rejeitar solicitações para modelos que não foram descobertos ou não estão marcados como públicos no catálogo do provedor", "normalKeysSection": "Chaves normais", "quotaKeysSection": "Chaves de cota", "bypassProviderQuota": "Ignorar cortes de cota do provedor", @@ -2464,7 +2478,9 @@ "providerCount": "{count} provedores", "imageToTextBridgeAvailable": "A Ponte de Modalidade agora pode descrever imagens para modelos somente de texto. O playground inline estará disponível quando /api/v1/images/understanding for implementado.", "imageToTextBridgeCta": "Configure a ponte Imagem→Texto nas configurações da Ponte de Modalidade", - "sttBridgeCta": "Configure a ponte de Fala→Texto nas configurações da Ponte de Modalidade" + "sttBridgeCta": "Configure a ponte de Fala→Texto nas configurações da Ponte de Modalidade", + "existingConnection": "Conexão existente", + "openrouterSttDescription": "Os modelos de reconhecimento de fala do OpenRouter usam sua conexão OpenRouter configurada. Nenhuma credencial separada é necessária." }, "search": { "searchQuery": "Search Query", @@ -2545,8 +2561,8 @@ "freeQuota": "Cota gratuita/mês", "scrapeUrl": "URL para extrair", "scrapeUrlPlaceholder": "https://exemplo.com", - "scrapeUrlRequired": "__MISSING__:URL is required", - "scrapeUrlInvalid": "__MISSING__:Invalid URL — it must start with http:// or https://", + "scrapeUrlRequired": "A URL é obrigatória", + "scrapeUrlInvalid": "URL inválido — deve começar com http:// ou https://", "scrapeExtract": "Extrair", "scrapeExtracting": "Extraindo…", "scrapeFullPage": "Página completa", @@ -2560,8 +2576,8 @@ "scrapeMetadata": "Metadados", "scrapeProvider": "Provedor", "scrapeSize": "Tamanho", - "scrapeEmptyState": "__MISSING__:Enter a URL to extract its content", - "scrapeProvidersAvailable": "__MISSING__:Available providers: Firecrawl, Jina Reader, Tavily.", + "scrapeEmptyState": "Insira uma URL para extrair seu conteúdo", + "scrapeProvidersAvailable": "Provedores disponíveis: Firecrawl, Jina Reader, Tavily.", "compareRun": "Comparar", "compareRunning": "Comparando…", "autoProvider": "Auto (mais barato)", @@ -2660,7 +2676,7 @@ "configureEndpoint": "Configurar Endpoint", "instructions": "Instruções", "modelMapping": "Mapeamento de Modelos", - "reasoningEffort": "__MISSING__:Reasoning effort for {model}", + "reasoningEffort": "Esforço de raciocínio para {model}", "effortNone": "Nenhum", "effortLow": "Baixo", "effortMedium": "Médio", @@ -2728,14 +2744,14 @@ "saveMappings": "Salvar Mapeamentos", "mappingsSaved": "Mapeamentos salvos!", "failedSaveMappings": "Falha ao salvar mapeamentos", - "reasoningEffortDefault": "__MISSING__:Default", - "reasoningEffortHint": "__MISSING__:Default preserves the reasoning effort sent by the agent", + "reasoningEffortDefault": "Padrão", + "reasoningEffortHint": "O padrão preserva o esforço de raciocínio enviado pelo agente", "reasoningEffortTier": { - "none": "__MISSING__:None", - "low": "__MISSING__:Low", - "medium": "__MISSING__:Medium", - "high": "__MISSING__:High", - "xhigh": "__MISSING__:XHigh" + "none": "Nenhum", + "low": "Baixo", + "medium": "Médio", + "high": "Alto", + "xhigh": "XHigh" }, "howItWorks": "Como funciona:", "antigravityHowWorksDesc": "O Antigravity envia requisições para o endpoint do Google. O MITM intercepta e redireciona para o OmniRoute.", @@ -3101,29 +3117,29 @@ "copilotReloadInstruction": "Em seguida, recarregue o VS Code e defina a chave de API no prompt de entrada.", "wireApiChatCompletions": "Conclusões de bate-papo (/chat/completions)", "wireApiResponses": "API de respostas (/respostas)", - "cliproxyapiActionFailed": "__MISSING__:Action failed", - "cliproxyapiActionSucceeded": "__MISSING__:Action succeeded", - "cliproxyapiCheckUpdates": "__MISSING__:Check Updates", - "cliproxyapiDescription": "__MISSING__:Upstream proxy fallback (Go-based OAuth)", - "cliproxyapiHealth": "__MISSING__:Health", - "cliproxyapiHealthy": "__MISSING__:Healthy", - "cliproxyapiInstall": "__MISSING__:Install", - "cliproxyapiNotInstalledValue": "__MISSING__:Not installed", - "cliproxyapiPort": "__MISSING__:Port", - "cliproxyapiRequestFailed": "__MISSING__:Request failed", - "cliproxyapiRestart": "__MISSING__:Restart", - "cliproxyapiStart": "__MISSING__:Start", - "cliproxyapiStatusError": "__MISSING__:Error", - "cliproxyapiStatusInstalled": "__MISSING__:Installed", - "cliproxyapiStatusNotInstalled": "__MISSING__:Not Installed", - "cliproxyapiStatusRunning": "__MISSING__:Running", - "cliproxyapiStatusStopped": "__MISSING__:Stopped", - "cliproxyapiStop": "__MISSING__:Stop", - "cliproxyapiUnhealthy": "__MISSING__:Unhealthy", - "cliproxyapiUnknown": "__MISSING__:Unknown", - "cliproxyapiUpdate": "__MISSING__:Update", - "cliproxyapiUpdateAvailable": "__MISSING__:Update available: v{current} → v{latest}", - "cliproxyapiVersion": "__MISSING__:Version" + "cliproxyapiActionFailed": "Ação falhou", + "cliproxyapiActionSucceeded": "Ação bem-sucedida", + "cliproxyapiCheckUpdates": "Verificar Atualizações", + "cliproxyapiDescription": "Fallback de proxy upstream (OAuth baseado em Go)", + "cliproxyapiHealth": "Saúde", + "cliproxyapiHealthy": "Saudável", + "cliproxyapiInstall": "Instalar", + "cliproxyapiNotInstalledValue": "Não instalado", + "cliproxyapiPort": "Porta", + "cliproxyapiRequestFailed": "Solicitação falhou", + "cliproxyapiRestart": "Reiniciar", + "cliproxyapiStart": "Iniciar", + "cliproxyapiStatusError": "Erro", + "cliproxyapiStatusInstalled": "Instalado", + "cliproxyapiStatusNotInstalled": "Não Instalado", + "cliproxyapiStatusRunning": "Executando", + "cliproxyapiStatusStopped": "Parado", + "cliproxyapiStop": "Parar", + "cliproxyapiUnhealthy": "Não saudável", + "cliproxyapiUnknown": "Desconhecido", + "cliproxyapiUpdate": "Atualizar", + "cliproxyapiUpdateAvailable": "Atualização disponível: v{current} → v{latest}", + "cliproxyapiVersion": "Versão" }, "combos": { "title": "Combos", @@ -3151,8 +3167,8 @@ "leastLatency": "Menor Latência", "comboName": "Nome do Combo", "comboNamePlaceholder": "meu-combo", - "comboDescription": "__MISSING__:Description", - "comboDescriptionPlaceholder": "__MISSING__:Optional note describing this combo", + "comboDescription": "Descrição", + "comboDescriptionPlaceholder": "Nota opcional descrevendo esta combinação", "deleteConfirm": "Excluir este combo?", "noCombosYet": "Nenhum combo ainda", "comboCreated": "Combo criado com sucesso", @@ -3193,8 +3209,8 @@ "resetAwareDesc": "Equilibra a cota restante com redefinições de 5h e semanais e, em seguida, faz um round-robin de pontuações semelhantes", "strictRandom": "Aleatório Estrito", "strictRandomDesc": "Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar", - "fusion": "__MISSING__:Fusion", - "fusionDesc": "__MISSING__:Fans the prompt to every panel model in parallel, then a judge model synthesizes one final answer", + "fusion": "Fusão", + "fusionDesc": "Os fãs enviam o prompt para cada modelo de painel em paralelo, então um modelo juiz sintetiza uma resposta final.", "fusionJudgeModel": "Modelo julgador", "fusionJudgeModelHelp": "Modelo que sintetiza as respostas do painel em uma resposta final única. Deixe vazio para usar o primeiro modelo do painel.", "fusionMinPanel": "Painel mínimo", @@ -3375,6 +3391,8 @@ "pricingMissing": "Sem preço", "pricingAvailableShort": "com-preço", "pricingMissingShort": "sem-preço", + "fallbackOnlyOnQuotaExhaustion": "Somente avance na exaustão da cota", + "fallbackOnlyOnQuotaExhaustionShort": "fallback apenas de cota", "warningRoundRobinSingleModel": "Round-robin é mais útil com pelo menos 2 modelos.", "warningCostOptimizedPartialPricing": "Apenas {priced} de {total} modelos têm preço. O roteamento pode ficar parcialmente orientado a custo.", "warningCostOptimizedNoPricing": "Não há dados de preço para este combo. Custo-otimizado pode rotear de forma inesperada.", @@ -3409,16 +3427,16 @@ "routingInputsHint": "Pacote de modo e ponderação ficam aqui; o estado em tempo real do disjuntor fica na página de Saúde.", "emailVisibilityHint": "Os emails da conta aqui seguem a opção de privacidade global.", "emailVisibilityTooltip": "Use o ícone de olho para revelar ou ocultar os emails da conta globalmente nas telas de combos, provedores e cotas.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Passo a passo (Provedor → Modelo)", + "builderModeGlobal": "Pesquisa de modelo global (Combo personalizado)", + "builderGlobalSearchPlaceholder": "Pesquise modelos em todos os provedores (por exemplo, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Adicionar tudo", + "builderGlobalShortcuts": "Atalhos:", + "builderGlobalNoResults": "Nenhum modelo encontrado para \"{query}\".", + "builderGlobalProviderLabel": "Provedor:", + "builderGlobalAccountCount": "{count, plural, one {# conta} other {# contas}}", + "builderGlobalAdded": "Adicionado", + "builderGlobalAdd": "Adicionar", "manualModel": "Modelo manual", "manualModelInvalid": "Insira um modelo como provedor/modelo.", "manualModelUnknownProvider": "Prefixo de provedor desconhecido.", @@ -3463,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilidade da Sessão", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3687,13 +3706,14 @@ "kimiPresetTitle": "Preset Kimi Coding", "kimiPresetDescription": "Kimi K3 como modelo primário (Moonshot API), com fallback automático para suas conexões Kimi Code (kimi-coding, kimi-web) quando configuradas.", "kimiPresetCta": "Adicionar preset", - "intelligentComboCount": "__MISSING__:{count, plural, one {# intelligent combo} other {# intelligent combos}}", - "providersInScope": "__MISSING__:{count, plural, one {# provider in scope} other {# providers in scope}}", - "savingModePack": "__MISSING__:Saving {pack}…", - "errorTitle": "__MISSING__:Failed to load combos", - "errorDescription": "__MISSING__:We could not load combo data right now. Check your connection and try again.", - "errorId": "__MISSING__:Error ID: {id}", - "errorRetry": "__MISSING__:Try Again" + "intelligentComboCount": "{count, plural, one {# combo inteligente} other {# combos inteligentes}}", + "providersInScope": "{count, plural, one {# provedor em escopo} other {# provedores em escopo}}", + "savingModePack": "Salvando {pack}…", + "errorTitle": "Falha ao carregar combos", + "errorDescription": "Não conseguimos carregar os dados do combo no momento. Verifique sua conexão e tente novamente.", + "errorId": "ID de Erro: {id}", + "errorRetry": "Tente Novamente", + "comboLabel": "Combo" }, "costs": { "title": "Custos", @@ -4083,19 +4103,19 @@ "obsidianUsername": "Nome de usuário", "obsidianPassword": "Senha", "obsidianTailscaleHint": "Use seu IP do Tailscale em vez de localhost ao conectar pelo celular. Ambos os dispositivos devem estar na mesma rede Tailscale.", - "cloudSyncNotConfigured": "__MISSING__:Cloud sync is not configured on this instance.", - "notionConnect": "__MISSING__:Connect", - "notionConnectFailed": "__MISSING__:Failed to connect", - "notionConnected": "__MISSING__:Connected", - "notionConnectionFailed": "__MISSING__:Connection failed", - "notionDescription": "__MISSING__:Search, read, query, and write to Notion through routed AI models", - "notionDisconnect": "__MISSING__:Disconnect", - "notionDisconnectFailed": "__MISSING__:Failed to disconnect", - "notionEnterToken": "__MISSING__:Please enter a Notion integration token", - "notionIntegrationHelp": "__MISSING__:Create an Internal Integration at", - "notionIntegrationToken": "__MISSING__:Notion Internal Integration Token", - "notionNotConnected": "__MISSING__:Not connected", - "notionTokenConfigured": "__MISSING__:Token configured. Notion tools are available via MCP." + "cloudSyncNotConfigured": "A sincronização em nuvem não está configurada nesta instância.", + "notionConnect": "Conectar", + "notionConnectFailed": "Falha ao conectar", + "notionConnected": "Conectado", + "notionConnectionFailed": "Conexão falhou", + "notionDescription": "Pesquise, leia, consulte e escreva no Notion através de modelos de IA roteados", + "notionDisconnect": "Desconectar", + "notionDisconnectFailed": "Falha ao desconectar", + "notionEnterToken": "Por favor, insira um token de integração do Notion", + "notionIntegrationHelp": "Crie uma Integração Interna em", + "notionIntegrationToken": "Token de Integração Interna do Notion", + "notionNotConnected": "Desconectado", + "notionTokenConfigured": "Token configurado. As ferramentas do Notion estão disponíveis via MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4423,7 +4443,9 @@ "cleaning": "Limpando...", "cleanNow": "Limpar agora", "cleanupSuccess": "{count} ponto(s) removido(s)", - "cleanupFailed": "Falha ao executar limpeza" + "cleanupFailed": "Falha ao executar limpeza", + "hostLabel": "Hospedeiro", + "collectionLabel": "Coleção" }, "rerank": { "enableLabel": "Habilitar Rerank", @@ -4792,9 +4814,9 @@ "limit": "Limit", "status": "Status", "resourceType": "Tipo de Recurso", - "totalEntries": "{count} eventos no total", + "totalEntries": "Total Entries", "tab": "Tab", - "auditModalSubtitle": "Ator: {actor} • Alvo: {target}", + "auditModalSubtitle": "Event details and metadata", "close": "Fechar", "runningRequests": "Requisições em Execução", "runningRequestsDesc": "Requisições ainda em voo entre provedores e contas, com previews sanitizados dos payloads.", @@ -4824,14 +4846,14 @@ "export": "Export", "exporting": "Exporting...", "exportFailed": "Export failed", - "cleanHistoryButton": "__MISSING__:Clean history", - "cleanHistoryTitle": "__MISSING__:Clean log history?", - "cleanHistoryMessage": "__MISSING__:This permanently clears all request log rows, legacy detail rows, and local artifact files under DATA_DIR/call_logs. The live page will refresh after cleanup.", - "cleanHistoryConfirm": "__MISSING__:Clean history", - "cleanHistoryCancel": "__MISSING__:Cancel", - "cleanHistorySuccess": "__MISSING__:Cleaned {deleted} log entries, {deletedArtifacts} artifacts, and {deletedDetailedLogs} legacy detail rows.", - "cleanHistoryEmpty": "__MISSING__:No request log history was found.", - "cleanHistoryFailed": "__MISSING__:Failed to clean log history.", + "cleanHistoryButton": "Limpar histórico", + "cleanHistoryTitle": "Limpar histórico de logs?", + "cleanHistoryMessage": "Isso limpa permanentemente todas as linhas de log de requisições, linhas de detalhes legados e arquivos de artefatos locais em DATA_DIR/call_logs. A página ao vivo será atualizada após a limpeza.", + "cleanHistoryConfirm": "Limpar histórico", + "cleanHistoryCancel": "Cancelar", + "cleanHistorySuccess": "Limpa {deleted} entradas de log, {deletedArtifacts} artefatos e {deletedDetailedLogs} linhas de detalhes legadas.", + "cleanHistoryEmpty": "Nenhum histórico de log de requisições foi encontrado.", + "cleanHistoryFailed": "Falha ao limpar o histórico de logs.", "timeRange": "Time Range", "lastNHours": "Last {hours}", "defaultRange": "default", @@ -4859,7 +4881,7 @@ }, "onboarding": { "welcome": "Bem-vindo", - "tiers": "__MISSING__:Tiers", + "tiers": "Camadas", "security": "Segurança", "test": "Teste", "ready": "Pronto!", @@ -4942,7 +4964,7 @@ }, "providers": { "title": "Provedores", - "Account Deactivated": "__MISSING__:Account Deactivated", + "Account Deactivated": "Conta Desativada", "allProviders": "Todos os provedores", "audioProviders": "Provedores de áudio", "showFreeOnly": "Somente grátis", @@ -4969,31 +4991,31 @@ "importFromFileImport": "Importar {count} provedores", "importFromFileResult": "{success} provedores importados ({failed} falharam)", "adaptaTutorial": { - "title": "__MISSING__:How to connect Adapta Web", - "introPrefix": "__MISSING__:Adapta authenticates through Clerk. The token", - "introSuffix": "__MISSING__:is a long-lived JWT that lets OmniRoute refresh sessions automatically.", - "or": "__MISSING__:or", - "step1Title": "__MISSING__:Open Adapta chat", - "step1DescPrefix": "__MISSING__:Open", - "step1DescSuffix": "__MISSING__:and sign in with your Gold or Business account.", - "step2Title": "__MISSING__:Open DevTools", - "step2DescPrefix": "__MISSING__:Press", - "step2DescSuffix": "__MISSING__:to open Developer Tools.", - "step3Title": "__MISSING__:Go to Application → Cookies", - "step3DescPrefix": "__MISSING__:In the", - "step3DescMiddle": "__MISSING__:expand", - "step3DescSuffix": "__MISSING__:and click", - "step4Title": "__MISSING__:Copy the cookie value for", - "step4DescPrefix": "__MISSING__:Find the cookie named", - "step4DescMiddle": "__MISSING__:in the list. Click it and copy the content from the", - "step4DescSuffix": "__MISSING__:column. It starts with", - "step5Title": "__MISSING__:Paste it here and save", - "step5DescPrefix": "__MISSING__:Click", - "step5DescMiddle": "__MISSING__:paste the", - "step5DescSuffix": "__MISSING__:value into the API Key field, then save. OmniRoute will refresh the session automatically.", - "tipLabel": "__MISSING__:Tip:", - "tipPrefix": "__MISSING__:The", - "tipSuffix": "__MISSING__:cookie is long-lived, usually for months. You only need to renew it if you sign out or Adapta invalidates the session." + "title": "Como conectar o Adapta Web", + "introPrefix": "Adapta autentica através do Clerk. O token", + "introSuffix": "é um JWT de longa duração que permite ao OmniRoute atualizar sessões automaticamente.", + "or": "ou", + "step1Title": "Abra o chat Adapta", + "step1DescPrefix": "Abrir", + "step1DescSuffix": "e faça login com sua conta Gold ou Business.", + "step2Title": "Abrir DevTools", + "step2DescPrefix": "Pressione", + "step2DescSuffix": "para abrir as Ferramentas de Desenvolvedor.", + "step3Title": "Vá para Aplicativo → Cookies", + "step3DescPrefix": "No", + "step3DescMiddle": "expandir", + "step3DescSuffix": "e clique", + "step4Title": "Copie o valor do cookie para", + "step4DescPrefix": "Encontre o cookie chamado", + "step4DescMiddle": "na lista. Clique nele e copie o conteúdo do", + "step4DescSuffix": "coluna. Começa com", + "step5Title": "Cole aqui e salve", + "step5DescPrefix": "Clique", + "step5DescMiddle": "cole o", + "step5DescSuffix": "valor no campo da Chave da API e, em seguida, salve. O OmniRoute atualizará a sessão automaticamente.", + "tipLabel": "Dica:", + "tipPrefix": "O", + "tipSuffix": "o cookie é de longa duração, geralmente por meses. Você só precisa renová-lo se sair ou se o Adapta invalidar a sessão." }, "editProvider": "Editar Provedor", "deleteProvider": "Excluir Provedor", @@ -5031,30 +5053,30 @@ "testAllFree": "Testar todas as conexões gratuitas", "testAllApiKey": "Testar todas as conexões por chave de API", "testAllCompatible": "Testar todas as conexões compatíveis", - "testAllModels": "__MISSING__:Test all models", - "testAllModelsConfirm": "__MISSING__:Test all visible models? Failed models will be hidden if auto-hide is enabled.", - "testingAllModels": "__MISSING__:Testing {done}/{total}...", - "testAllResults": "__MISSING__:{ok} of {total} models working", - "noModelsToTest": "__MISSING__:No models match the current filter", - "showAllModels": "__MISSING__:All", + "testAllModels": "Teste todos os modelos", + "testAllModelsConfirm": "Testar todos os modelos visíveis? Modelos com falha serão ocultados se a ocultação automática estiver ativada.", + "testingAllModels": "Testando {done}/{total}...", + "testAllResults": "{ok} de {total} modelos funcionando", + "noModelsToTest": "Nenhum modelo corresponde ao filtro atual", + "showAllModels": "Todos", "showVisibleOnly": "Somente visíveis", "freeFilterAll": "Todos", "freeFilterFreeOnly": "Somente gratuitos", "freeFilterPaidOnly": "Somente pagos", - "sortFreeFirst": "__MISSING__:Free first", + "sortFreeFirst": "Grátis primeiro", "showHiddenOnly": "Somente ocultos", "filterByVisibility": "Filtrar por visibilidade", - "autoHideFailed": "__MISSING__:Auto-hide failed models", - "autoHideFailedHint": "__MISSING__:When enabled, Test all hides non-transient failures from public catalogs such as /v1/models. Single-model tests never auto-hide.", + "autoHideFailed": "Ocultar automaticamente modelos com falha", + "autoHideFailedHint": "Quando ativado, Test all oculta falhas não transitórias dos catálogos públicos, como /v1/models. Testes de modelo único nunca ocultam automaticamente.", "connected": "{count} Conectado(s)", "errorCount": "{count} Erro ({code})", "errorCountNoCode": "{count} Erro", - "testAllCompleted": "__MISSING__:Tested {total} models: {ok} OK, {failed} failed", - "modelAutoHidden": "__MISSING__:Model {model} auto-hidden (test failed)", + "testAllCompleted": "Testados {total} modelos: {ok} OK, {failed} falhou", + "modelAutoHidden": "Modelo {model} oculto automaticamente (teste falhou)", "filterAll": "Todos", "filterVisible": "Somente visíveis", "filterHidden": "Somente ocultos", - "modelsHiddenCount": "__MISSING__:{count} hidden", + "modelsHiddenCount": "{count} oculto", "warningCount": "{count} Aviso", "noConnections": "Sem conexões", "expiredBadge": "Expired", @@ -5142,6 +5164,7 @@ "baseUrlHint": "Obrigatório. URL base da API do provedor.", "iconUrlLabel": "URL do ícone", "iconUrlHint": "Opcional. URL da imagem exibida como ícone deste provedor.", + "iconUrlInvalid": "URL do ícone inválido. Use um URL http(s):// ou data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5167,17 +5190,17 @@ "batchUpdateNone": "Nenhuma conexão foi atualizada (podem não existir mais)", "batchRetestLimit": "Reteste até {max} conexões por vez", "noConnectionsToTest": "Nenhuma conexão correspondente para testar", - "batchDeleteConfirmTitle": "__MISSING__:Delete connections", - "batchDeleteConfirmButton": "__MISSING__:Delete", + "batchDeleteConfirmTitle": "Excluir conexões", + "batchDeleteConfirmButton": "Excluir", "filterActive": "Ativo", "filterError": "Erro", "filterBanned": "Banido", "filterCreditsExhausted": "Créditos esgotados", "accountSearchPlaceholder": "Search accounts…", - "noFilteredConnections": "__MISSING__:No connections match the current filter.", + "noFilteredConnections": "Nenhuma conexão corresponde ao filtro atual.", "failedSetAlias": "Falha ao definir alias", - "setAliasSuccess": "__MISSING__:Alias {alias} set", - "deleteAliasSuccess": "__MISSING__:Alias {alias} deleted", + "setAliasSuccess": "Alias {alias} definido", + "deleteAliasSuccess": "Alias {alias} excluído", "failedSaveConnection": "Falha ao salvar conexão", "failedSaveConnectionRetry": "Falha ao salvar conexão. Tente novamente.", "failedRetestConnection": "Falha ao retestar conexão", @@ -5214,8 +5237,8 @@ "fetchingModels": "Buscando modelos disponíveis...", "failedFetchModels": "Falha ao buscar modelos", "noFreeModelsFound": "Nenhum modelo gratuito encontrado para este provedor — nada importado.", - "fetchModelsSuccess": "__MISSING__:Found {count} new models", - "fetchModelsFailed": "__MISSING__:Could not auto-fetch models (you can retry from settings)", + "fetchModelsSuccess": "Encontrados {count} novos modelos", + "fetchModelsFailed": "Não foi possível buscar os modelos automaticamente (você pode tentar novamente nas configurações)", "noModelsFound": "Nenhum modelo encontrado", "importFailed": "Falha na importação", "noNewModelsAdded": "Nenhum novo modelo foi adicionado.", @@ -5224,8 +5247,8 @@ "importingModelsTitle": "Importando Modelos", "copyModel": "Copiar modelo", "filterModels": "Filtrar modelos...", - "testAllRateLimited": "__MISSING__:Rate limit reached, stopped early", - "hideFailedAuto": "__MISSING__:Auto-hide failed models", + "testAllRateLimited": "Limite de taxa atingido, interrompido mais cedo", + "hideFailedAuto": "Ocultar automaticamente modelos com falha", "selectAllModels": "Selecionar todos", "hideAllModels": "Ocultar todos", "modelsActive": "ativos", @@ -5240,9 +5263,9 @@ "quotaVisibilityUpdateFailed": "Não foi possível atualizar a visibilidade em Cotas dos Provedores", "enableRateLimitProtection": "Clique para habilitar proteção de limite de taxa", "disableRateLimitProtection": "Clique para desabilitar proteção de limite de taxa", - "testAllProgress": "__MISSING__:Tested {done}/{total}", - "testAllFailedHidden": "__MISSING__:{count} failed models hidden", - "testAllDone": "__MISSING__:All models tested", + "testAllProgress": "Testado {done}/{total}", + "testAllFailedHidden": "{count} modelos falhados ocultos", + "testAllDone": "Todos os modelos testados", "productionKey": "Chave de Produção", "enterNewApiKey": "Insira a nova chave API", "codexApplyModalTitle": "Inscreva-se no Codex Local", @@ -5322,8 +5345,8 @@ "errorTypeNetworkError": "Erro de rede", "errorTypeTestUnsupported": "Teste não suportado", "errorTypeUpstreamError": "Erro upstream", - "errorTypeCreditsExhausted": "__MISSING__:No credits", - "errorTypeBanned": "__MISSING__:403 Banned", + "errorTypeCreditsExhausted": "Sem créditos", + "errorTypeBanned": "403 Banido", "proxySourceGlobal": "Global", "proxySourceProvider": "Provedor", "proxySourceKey": "Chave", @@ -5366,17 +5389,17 @@ "compatProtocolOpenAI": "OpenAI Chat Completions", "compatProtocolOpenAIResponses": "OpenAI Responses API", "compatProtocolClaude": "Anthropic Messages", - "targetFormatLabel": "__MISSING__:Target Format", - "targetFormatHint": "__MISSING__:Override the upstream wire format. Use 'Anthropic Messages' to route OpenAI-compatible providers (e.g. opencode-go) through the /v1/messages endpoint.", - "targetFormatAuto": "__MISSING__:Default (auto)", - "targetFormatGemini": "__MISSING__:Gemini", - "targetFormatAntigravity": "__MISSING__:Antigravity", + "targetFormatLabel": "Formato Alvo", + "targetFormatHint": "Substitua o formato de wire upstream. Use 'Mensagens Anthropic' para direcionar provedores compatíveis com OpenAI (por exemplo, opencode-go) através do endpoint /v1/messages.", + "targetFormatAuto": "Padrão (automático)", + "targetFormatGemini": "Gêmeos", + "targetFormatAntigravity": "Antigravidade", "contextWindowOverrideLabel": "Substituição de Janela de Contexto", "contextWindowOverridePlaceholder": "ex.: 131072", "contextWindowOverrideHint": "Define manualmente a janela de contexto real (tokens) deste modelo quando o provedor a reporta incorretamente. Tem prioridade sobre os valores detectados automaticamente/do catálogo e evita que o roteamento de combo descarte o modelo.", "contextWindowOverrideInvalid": "A substituição de janela de contexto deve ser um número inteiro positivo de tokens", - "visionCapableLabel": "__MISSING__:Vision capable", - "visionCapableHint": "__MISSING__:Manually flag this model as vision-capable when the provider's discovery metadata doesn't report an image input modality (common for self-hosted/local backends).", + "visionCapableLabel": "Visão capaz", + "visionCapableHint": "Marque manualmente este modelo como capaz de visão quando os metadados de descoberta do provedor não reportarem uma modalidade de entrada de imagem (comum para backends auto-hospedados/local).", "compatParamFiltersLabel": "Filtros de parâmetros", "compatBlockedParamsHint": "Parâmetros bloqueados (removidos das requisições)", "compatAllowedParamsHint": "Parâmetros permitidos (readicionados após o bloqueio)", @@ -5473,13 +5496,13 @@ "editCompatibleTitle": "Editar Compatível {type}", "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.", "apiKeyForCheck": "Chave de API (para verificação)", - "testModelIdLabel": "__MISSING__:Model ID (optional)", - "testModelIdPlaceholder": "__MISSING__:e.g. my-model-id", - "testModelIdHint": "__MISSING__:If the provider lacks a /models endpoint, enter a model ID to validate via /chat/completions instead.", + "testModelIdLabel": "ID do Modelo (opcional)", + "testModelIdPlaceholder": "ex.: meu-id-do-modelo", + "testModelIdHint": "Se o provedor não tiver um endpoint /models, insira um ID de modelo para validar via /chat/completions em vez disso.", "compatibleProdPlaceholder": "{type} Compatível (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessão já está atualizada", "applyCodexAuthLocal": "Aplicar auth", "exportCodexAuthFile": "Exportar auth", "applyClaudeAuthLocal": "Aplicar autenticação", @@ -5560,19 +5583,19 @@ "codexAuthApplyFailed": "Falha ao aplicar o auth.json do Codex localmente", "codexAuthExported": "auth.json do Codex exportado", "codexAuthExportFailed": "Falha ao exportar o auth.json do Codex", - "codexCliGuideButton": "__MISSING__:Codex CLI Guide", - "codexCliGuideTitle": "__MISSING__:Codex CLI Guide", - "codexCliGuideLoading": "__MISSING__:Loading guide...", - "codexCliGuideLoadFailed": "__MISSING__:Could not load the guide.", - "codexExternalLinkButton": "__MISSING__:External Codex link", - "codexExternalLinkModalTitle": "__MISSING__:External Codex link", - "codexExternalLinkModalDescription": "__MISSING__:Share this single-use link with the person who will authenticate the Codex account. They open it in their own browser, complete the OpenAI login, and the connection is registered here. The link expires in 15 minutes.", - "codexExternalLinkGenerating": "__MISSING__:Generating link...", - "codexExternalLinkWaiting": "__MISSING__:Waiting for browser authentication. This window refreshes automatically.", - "codexExternalLinkCreateFailed": "__MISSING__:Failed to generate the link.", - "codexExternalLinkNetworkError": "__MISSING__:Could not contact the server.", - "codexExternalLinkConnected": "__MISSING__:Codex account connected through the external link.", - "codexExternalLinkExpired": "__MISSING__:The link expired before completion.", + "codexCliGuideButton": "Guia do Codex CLI", + "codexCliGuideTitle": "Guia do Codex CLI", + "codexCliGuideLoading": "Carregando guia...", + "codexCliGuideLoadFailed": "Não foi possível carregar o guia.", + "codexExternalLinkButton": "Link Externo do Codex", + "codexExternalLinkModalTitle": "Link Externo do Codex", + "codexExternalLinkModalDescription": "Compartilhe este link de uso único com a pessoa que irá autenticar a conta Codex. Ela deve abri-lo em seu próprio navegador, completar o login da OpenAI e a conexão será registrada aqui. O link expira em 15 minutos.", + "codexExternalLinkGenerating": "Gerando link...", + "codexExternalLinkWaiting": "Aguardando autenticação do navegador. Esta janela atualiza automaticamente.", + "codexExternalLinkCreateFailed": "Falha ao gerar o link.", + "codexExternalLinkNetworkError": "Não foi possível contatar o servidor.", + "codexExternalLinkConnected": "Conta Codex conectada através do link externo.", + "codexExternalLinkExpired": "O link expirou antes da conclusão.", "importCodexAuth": "Importar autenticação", "codexImportModalTitle": "Importar autenticação do Codex", "codexImportTabSingle": "Solteiro", @@ -5642,7 +5665,7 @@ "audioProvidersHeading": "Provedores de Áudio", "cloudAgentProviders": "Provedores de agentes em nuvem", "audioShortLabel": "Áudio", - "azureOpenAiBaseUrlHint": "Obrigatório: cole o endpoint do seu recurso Azure OpenAI. O OmniRoute adicionará /openai/deployments/'{model}'/chat/completions?api-version=....", + "azureOpenAiBaseUrlHint": "Azure Open Ai Base Url Hint", "bailianBaseUrlHint": "Opcional: URL base customizada para o provedor bailian-coding-plan.", "claudeWebCookieHint": "Open claude.ai → DevTools → Application → Cookies → claude.ai, copy the 'sessionKey' value. Also need cf_clearance, __cf_bm, _cfuvid for Cloudflare.", "claudeWebCookiePlaceholder": "sessionKey=sk-ant-...", @@ -5653,8 +5676,8 @@ "grokWebCookieHint": "Cole o cookie sso do grok.com. Um valor completo `sso=...` também funciona.", "blockClaudeExtraUsageDescription": "Quando habilitado, o OmniRoute marca esta conta do Claude Code como indisponível assim que a API de usage reporta `extra_usage.queued`, para que o fallback troque para outra conta antes de continuar com cobranças extras pay-as-you-go.", "blockClaudeExtraUsageLabel": "Bloquear Claude Extra Usage", - "disableCoolingDescription": "__MISSING__:Skip the transient cooldown so this connection stays eligible even after recoverable errors (terminal states like banned/expired still apply).", - "disableCoolingLabel": "__MISSING__:Disable cooldown for this connection", + "disableCoolingDescription": "Ignore o tempo de espera transitório para que esta conexão permaneça elegível mesmo após erros recuperáveis (estados terminais como banido/expirado ainda se aplicam).", + "disableCoolingLabel": "Desativar o tempo de espera para esta conexão", "bulkPasteAdded": "{count, plural, one {1 chave adicionada} other {# chaves adicionadas}}", "bulkPasteDuplicatesIgnored": "{count, plural, one {1 duplicata ignorada} other {# duplicatas ignoradas}}", "bulkPasteHint": "Cole uma chave de API por linha. Linhas vazias são ignoradas e chaves duplicadas são puladas.", @@ -5684,7 +5707,7 @@ "compatUpstreamHeaderNamePlaceholder": "Authentication", "compatUpstreamHeaderValuePlaceholder": "•••", "compatible": "Compatible", - "configuredCount": "{configured} de {total} configurados", + "configuredCount": "Configured Count", "consoleApiKeyOracleHint": "Obrigatório para consulta de cota. Não compartilhe.", "consoleApiKeyOracleLabel": "Chave de API do Console (Oracle)", "consoleApiKeyOraclePlaceholder": "Chave de API do Console Alibaba", @@ -5709,9 +5732,9 @@ "excludedModelsHint": "Padrões wildcard separados por vírgula. Esta conexão será ignorada para modelos correspondentes.", "excludedModelsLabel": "Modelos Excluídos", "excludedModelsPlaceholder": "gpt-5*, claude-opus-*, gemini-*-pro*", - "expirationBannerExpired": "{count} conexão(ões) de provedor expirada(s)", + "expirationBannerExpired": "Expiration Banner Expired", "expirationBannerExpiredDesc": "Ação imediata necessária. Conexões expiradas falharão permanentemente.", - "expirationBannerExpiringSoon": "{count} conexão(ões) de provedor expirando em breve", + "expirationBannerExpiringSoon": "Expiration Banner Expiring Soon", "expirationBannerExpiringSoonDesc": "Revise e renove as conexões prestes a expirar para evitar interrupções.", "extraApiKeyMasked": "Chave {index}: {prefix}••••{suffix}", "extraApiKeysHint": "Rotação round-robin — opcional", @@ -5743,8 +5766,8 @@ "embeddingRerankProviders": "Incorporações e reclassificação", "imagesShortLabel": "Imagens", "llmProviders": "Provedores LLM", - "localProviderApiKeyOptionalHint": "Opcional. Deixe em branco se o endpoint {provider} não exigir autenticação.", - "localProviderBaseUrlHint": "Obrigatório: cole a URL base OpenAI-compatible /v1 do seu {provider} (padrão: {baseUrl}). URLs locais/privadas exigem OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true para validação no dashboard.", + "localProviderApiKeyOptionalHint": "Local Provider Api Key Optional Hint", + "localProviderBaseUrlHint": "Local Provider Base Url Hint", "localProviders": "Local / Self-Hosted", "maxConcurrentWholeNumberError": "Max concurrent deve ser um número inteiro maior ou igual a 0.", "m365TierLabel": "Nível do Copilot", @@ -5771,17 +5794,17 @@ "personalAccessTokenLabel": "Personal Access Token", "qoderPatHint": "Fluxo suportado: PAT via qodercli. OAuth pelo navegador continua experimental.", "qoderPatPlaceholder": "Cole seu Personal Access Token do Qoder", - "rateLimitOverridesSection": "__MISSING__:Rate Limit Overrides", - "rateLimitOverridesMaxConcurrentHint": "__MISSING__:Max concurrent requests override for this connection. Overrides the account-level cap.", - "rateLimitOverridesMaxConcurrentLabel": "__MISSING__:Max Concurrent (Rate Limit)", - "rateLimitOverridesMinTimeHint": "__MISSING__:Minimum time (ms) between requests. Overrides the default rate limiter delay.", - "rateLimitOverridesMinTimeLabel": "__MISSING__:Min Interval (ms)", - "rateLimitOverridesRpmHint": "__MISSING__:Max requests per minute for this connection. Overrides the provider default.", - "rateLimitOverridesRpmLabel": "__MISSING__:RPM (Requests/min)", - "rateLimitOverridesTpdHint": "__MISSING__:Max tokens per day for this connection. Overrides the provider default.", - "rateLimitOverridesTpdLabel": "__MISSING__:TPD (Tokens/day)", - "rateLimitOverridesTpmHint": "__MISSING__:Max tokens per minute for this connection. Overrides the provider default.", - "rateLimitOverridesTpmLabel": "__MISSING__:TPM (Tokens/min)", + "rateLimitOverridesSection": "Substituições de Limite de Taxa", + "rateLimitOverridesMaxConcurrentHint": "Sobrescrição do máximo de requisições concorrentes para esta conexão. Sobrescreve o limite de nível de conta.", + "rateLimitOverridesMaxConcurrentLabel": "Máximo Concorrente (Limite de Taxa)", + "rateLimitOverridesMinTimeHint": "Tempo mínimo (ms) entre solicitações. Substitui o atraso padrão do limitador de taxa.", + "rateLimitOverridesMinTimeLabel": "Min Intervalo (ms)", + "rateLimitOverridesRpmHint": "Máximo de requisições por minuto para esta conexão. Substitui o padrão do provedor.", + "rateLimitOverridesRpmLabel": "RPM (Requisições/min)", + "rateLimitOverridesTpdHint": "Máximo de tokens por dia para esta conexão. Substitui o padrão do provedor.", + "rateLimitOverridesTpdLabel": "TPD (Tokens/dia)", + "rateLimitOverridesTpmHint": "Máximo de tokens por minuto para esta conexão. Substitui o padrão do provedor.", + "rateLimitOverridesTpmLabel": "TPM (Tokens/min)", "refreshOauthTokenTitle": "Atualizar token OAuth manualmente", "regionHint": "ex.: us-central1 ou europe-west4. Modelos partner usam a região global automaticamente.", "regionLabel": "Região", @@ -5817,10 +5840,10 @@ "toggleOffShort": "OFF", "toggleOnShort": "ON", "tokenExpiredBadge": "Expirado", - "tokenExpiredTitle": "Token expirado: {date}", - "tokenExpiresSoonTitle": "Token expira em {minutes}m", + "tokenExpiredTitle": "Token Expired Title", + "tokenExpiresSoonTitle": "Token Expires Soon Title", "tokenShort": "Token", - "totalKeysRotating": "{count} chaves no total — rotacionando em round-robin a cada request.", + "totalKeysRotating": "{count, plural, one {1 key rotating} other {# keys rotating}}", "unhideModel": "Unhide Model", "upstreamProxyProviders": "Proxy Upstream", "validationModelIdHint": "Usado como fallback se a listagem de modelos não estiver disponível.", @@ -5844,7 +5867,7 @@ "zedImportHint": "Importar credenciais do Zed IDE", "zedImportNetworkError": "Erro de rede ao tentar importar do Zed.", "zedImportNone": "Nenhuma credencial OAuth suportada encontrada no Zed IDE.", - "zedImportSuccess": "Importadas {count} credencial(is) do Zed IDE ({providers}).", + "zedImportSuccess": "Importadas {credentials} credencial(is) do Zed IDE ({providers}).", "zedImporting": "Importando...", "zedNoCredentials": "Nenhuma credencial do Zed encontrada no keychain", "zedUnsupportedCredentials": "{count} credencial(is) encontrada(s) no keychain, mas nenhuma correspondeu a provedores suportados", @@ -5853,9 +5876,9 @@ "zedPasteApiKey": "Colar chave de API…", "zedSaving": "Salvando…", "zedImportAction": "Importar", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Ativar renovação automática da sessão do Cursor", + "cursorAgentNudgeBody": "Instale o cursor-agent para renovação automática de sessão — sem ele, as conexões do Cursor precisam de reconexão manual periódica a cada 24 horas.", + "cursorAgentNudgeDismiss": "Dispensar", "zedManualImportFailed": "Falha na importação manual", "zedManualImportSuccess": "Token do {provider} importado do Zed", "grokImportTitle": "Importar Autenticação do Grok Build", @@ -6043,7 +6066,6 @@ "friendliai": "Nível gratuito para inferência serverless — sem necessidade de cartão de crédito", "gemini": "Gratuito para sempre: 1.500 solicitações/dia para o Gemini 2.5 Flash — sem cartão de crédito, obtenha a chave em aistudio.google.com", "gigachat": "Conecte o GigaChat (Sber) com uma chave de API.", - "github-models": "Crie um PAT do GitHub com o escopo 'models: read' em github.com/settings/tokens", "gitlab": "Token de acesso pessoal do GitLab para a API pública de Code Suggestions. Configure uma URL base self-hosted quando não estiver usando gitlab.com.", "gitlawb-gmi": "Obtenha sua chave de API no dashboard do Gitlawb Opengateway.", "gitlawb": "Obtenha sua chave de API no dashboard do Gitlawb Opengateway.", @@ -6182,7 +6204,8 @@ "kimi-coding": "Conecte o Kimi Coding com o fluxo OAuth existente.", "kiro": "Nível gratuito: 50 créditos/mês (~25K–100K tokens). ⚠️ Os Termos de Serviço do Kiro proíbem o uso de proxy/harness de terceiros.", "codex": "Conecte o OpenAI Codex com o fluxo OAuth existente.", - "qwen": "Conecte o Qwen Code com o fluxo OAuth existente." + "qwen": "Conecte o Qwen Code com o fluxo OAuth existente.", + "github-models": "Crie um PAT do GitHub com o escopo 'models: read' em github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} aceita IDs de modelo nativos do provedor. Importe de /models ou adicione IDs personalizados para roteamento.", "bedrockModelsDescription": "Os modelos Amazon Bedrock têm escopo definido por região da AWS. Importe de /models ou adicione IDs de modelo Bedrock habilitados na região selecionada.", @@ -6213,18 +6236,18 @@ "webSessionCredentialValidationFailed": "Falha na validação da credencial da sessão. Faça login novamente, copie uma nova credencial e tente novamente.", "checkCookie": "Verifique o cookie", "checkWebToken": "Verifique o token", - "huggingchatLabel": "__MISSING__:HuggingChat (Free)", - "huggingchatDesc": "__MISSING__:Free LLM chat via huggingface.co/chat", - "poeWebLabel": "__MISSING__:Poe Web", - "poeWebDesc": "__MISSING__:Multi-model chat via poe.com", - "veniceWebLabel": "__MISSING__:Venice Web", - "veniceWebDesc": "__MISSING__:Privacy-focused AI chat", - "v0VercelWebLabel": "__MISSING__:v0 Vercel Web", - "v0VercelWebDesc": "__MISSING__:AI code generation via v0.dev", - "kimiWebLabel": "__MISSING__:Kimi Web", - "kimiWebDesc": "__MISSING__:Moonshot AI consumer chat via www.kimi.com (international, Connect-RPC API)", - "doubaoWebLabel": "__MISSING__:Doubao Web", - "doubaoWebDesc": "__MISSING__:ByteDance AI chat via doubao.com", + "huggingchatLabel": "HuggingChat (Gratuito)", + "huggingchatDesc": "Chat LLM gratuito via huggingface.co/chat", + "poeWebLabel": "Poe Web", + "poeWebDesc": "Chat multimodal via poe.com", + "veniceWebLabel": "Venice Web", + "veniceWebDesc": "Chat de IA focado em privacidade", + "v0VercelWebLabel": "v0 Vercel Web", + "v0VercelWebDesc": "Geração de código de IA via v0.dev", + "kimiWebLabel": "Kimi Web", + "kimiWebDesc": "Chat do consumidor Moonshot AI via www.kimi.com (internacional, API Connect-RPC)", + "doubaoWebLabel": "Doubao Web", + "doubaoWebDesc": "Chat AI da ByteDance via doubao.com", "overrideBaseUrlAdvanced": "Avançado: sobrescrever URL base", "overrideBaseUrlHint": "Avançado: aponta este provedor embutido para um endpoint personalizado. Deixe em branco para usar o padrão.", "apiProtocolLabel": "Protocolo da API", @@ -6242,76 +6265,76 @@ "anonymousFallbackEnabled": "Fallback anônimo ativado para {provider}", "anonymousFallbackDisabled": "Fallback anônimo desativado para {provider} — conexões esgotadas ignorarão este provedor", "anonymousFallbackUpdateFailed": "Falha ao atualizar a configuração de fallback anônimo", - "batchDeleteFailed": "__MISSING__:Batch delete failed", - "batchDeleteNetworkError": "__MISSING__:Network error during batch delete", - "batchUpdateFailed": "__MISSING__:Batch update failed", - "batchUpdateNetworkError": "__MISSING__:Network error during batch update", - "categoryAudio": "__MISSING__:Audio", - "categoryCloudAgent": "__MISSING__:Cloud Agent", - "categoryIde": "__MISSING__:IDE", - "categoryLocal": "__MISSING__:Local", - "categorySearch": "__MISSING__:Search", - "categoryWebCookie": "__MISSING__:Web Cookie", - "claudeExtraUsageBlockingDisabled": "__MISSING__:Claude extra-usage blocking disabled (extra usage is allowed)", - "claudeExtraUsageBlockingEnabled": "__MISSING__:Claude extra-usage blocking enabled (extra usage will be blocked)", - "claudeRoutingPreferenceDisabled": "__MISSING__:Unprefixed Claude models no longer prefer Claude Code", - "claudeRoutingPreferenceEnabled": "__MISSING__:Unprefixed Claude models now prefer Claude Code", - "clearMediaFilter": "__MISSING__:Clear", - "cliproxyRoutingDisabled": "__MISSING__:Requests now use native OmniRoute (direct)", - "cliproxyRoutingEnabled": "__MISSING__:Requests now route through CLIProxyAPI (deeper emulation)", - "codexLimitPolicyUpdated": "__MISSING__:Codex limit policy updated", - "codexServiceModeUpdated": "__MISSING__:Codex service mode updated", - "codexServiceTierActive": "__MISSING__:Codex {tier} service tier is active", - "codexTierFastLabel": "__MISSING__:Fast", - "codexTierFlexLabel": "__MISSING__:Flex", - "commandCodeApplyFailed": "__MISSING__:Failed to apply Command Code auth", - "commandCodeApplyingApproval": "__MISSING__:Browser approved, applying…", - "commandCodeApplyingKey": "__MISSING__:Applying browser-approved key…", - "commandCodeApprovalInstructions": "__MISSING__:Open the auth URL, approve access, then paste the returned key/JSON/URL below…", - "commandCodeAuthExpired": "__MISSING__:Command Code auth expired", - "commandCodeConnected": "__MISSING__:Command Code connected", - "commandCodeConnectionAdded": "__MISSING__:Command Code connection added", - "commandCodeLinkExpired": "__MISSING__:Command Code link expired", - "commandCodeOpeningStudio": "__MISSING__:Opening Command Code Studio…", - "commandCodePopupBlocked": "__MISSING__:Popup blocked. Please allow popups and try Command Code Connect again.", - "commandCodeStartFailed": "__MISSING__:Failed to start Command Code auth", - "connectionDeleted": "__MISSING__:Connection deleted", - "connectionFallback": "__MISSING__:connection", - "coolingConnectionsDescription": "__MISSING__:These connections returned a 429 (rate-limit) on their last request. OmniRoute will skip them until the timer expires — no manual disable required.", - "coolingConnectionsTitle": "__MISSING__:Currently cooling ({count})", - "failedDeleteAlias": "__MISSING__:Failed to delete alias", - "failedDeleteConnection": "__MISSING__:Failed to delete connection", - "failedDistributeProxies": "__MISSING__:Failed to distribute proxies.", - "failedSaveModelEndpointSettings": "__MISSING__:Failed to save model endpoint settings", - "failedUpdateClaudeExtraUsagePolicy": "__MISSING__:Failed to update Claude extra-usage policy", - "failedUpdateClaudeRoutingPreference": "__MISSING__:Failed to update Claude Code routing preference", - "failedUpdateCliproxyRouting": "__MISSING__:Failed to update CLIProxyAPI routing", - "failedUpdateCodexLimitPolicy": "__MISSING__:Failed to update Codex limit policy", - "failedUpdateCodexServiceMode": "__MISSING__:Failed to update Codex service mode", - "filterByMedia": "__MISSING__:Media", - "freeBadge": "__MISSING__:Free", - "kimiCodeApiKeyLabel": "__MISSING__:Kimi Code API Key", - "modelTestFailed": "__MISSING__:Model test failed", - "modelTestNetworkError": "__MISSING__:Network error testing model", - "networkError": "__MISSING__:Network error", - "networkErrorDeletingAlias": "__MISSING__:Network error deleting alias", - "networkErrorSettingAlias": "__MISSING__:Network error setting alias", - "noProvidersMatch": "__MISSING__:No providers match your search.", - "noSavedProxies": "__MISSING__:No saved proxies found. Add proxies in Settings → Proxy first.", - "pageLoadErrorDescription": "__MISSING__:We could not load provider data right now. Check your connection and try again.", - "pageLoadErrorId": "__MISSING__:Error ID: {id}", - "pageLoadErrorRetry": "__MISSING__:Try Again", - "pageLoadErrorTitle": "__MISSING__:Failed to load providers", - "playgroundTitle": "__MISSING__:Playground", - "providerDetailConnectionFlexActive": "__MISSING__:Codex flex service tier is active for this connection", - "providerDetailConnectionPriorityActive": "__MISSING__:Codex priority service tier is active for this connection", - "providerDetailGlobalFlexActive": "__MISSING__:Global Codex flex service tier is active", - "providerDetailGlobalPriorityActive": "__MISSING__:Global Codex priority service tier is active", - "proxiesDistributed": "__MISSING__:Distributed {assigned} proxy assignment(s) across {tagLabel}{total} connection(s).", - "rerankEndpoint": "__MISSING__:Rerank", - "savedModelEndpointSettings": "__MISSING__:Saved model endpoint settings", - "searchByModelAria": "__MISSING__:Search by model", - "selectSupportedEndpoint": "__MISSING__:Select at least one supported endpoint", + "batchDeleteFailed": "A exclusão em lote falhou", + "batchDeleteNetworkError": "Erro de rede durante a exclusão em lote", + "batchUpdateFailed": "Atualização em lote falhou", + "batchUpdateNetworkError": "Erro de rede durante a atualização em lote", + "categoryAudio": "Áudio", + "categoryCloudAgent": "Agente em Nuvem", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Pesquisar", + "categoryWebCookie": "Cookie da Web", + "claudeExtraUsageBlockingDisabled": "Bloqueio de uso extra do Claude desativado (uso extra é permitido)", + "claudeExtraUsageBlockingEnabled": "Bloqueio de uso extra do Claude ativado (o uso extra será bloqueado)", + "claudeRoutingPreferenceDisabled": "Modelos Claude sem prefixo não preferem mais Claude Code", + "claudeRoutingPreferenceEnabled": "Modelos Claude sem prefixo agora preferem Claude Code", + "clearMediaFilter": "Limpar", + "cliproxyRoutingDisabled": "As requisições agora usam o OmniRoute nativo (direto)", + "cliproxyRoutingEnabled": "As requisições agora são roteadas através do CLIProxyAPI (emulação mais profunda)", + "codexLimitPolicyUpdated": "Política de limite do Codex atualizada", + "codexServiceModeUpdated": "Modo de serviço do Codex atualizado", + "codexServiceTierActive": "O nível de serviço Codex {tier} está ativo", + "codexTierFastLabel": "Rápido", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Falha ao aplicar o código de comando auth", + "commandCodeApplyingApproval": "Navegador aprovado, aplicando…", + "commandCodeApplyingKey": "Aplicando a chave aprovada pelo navegador…", + "commandCodeApprovalInstructions": "Abra a URL de autenticação, aprove o acesso e cole a chave/JSON/URL retornada abaixo…", + "commandCodeAuthExpired": "Código de comando de autenticação expirado", + "commandCodeConnected": "Código do comando conectado", + "commandCodeConnectionAdded": "Conexão de Código de Comando adicionada", + "commandCodeLinkExpired": "O link do código do comando expirou", + "commandCodeOpeningStudio": "Abrindo o Command Code Studio…", + "commandCodePopupBlocked": "Popup bloqueado. Por favor, permita popups e tente o Command Code Connect novamente.", + "commandCodeStartFailed": "Falha ao iniciar o comando Code auth", + "connectionDeleted": "Conexão excluída", + "connectionFallback": "conexão", + "coolingConnectionsDescription": "Essas conexões retornaram um 429 (limite de taxa) na última solicitação. O OmniRoute as ignorará até que o temporizador expire — não é necessário desativação manual.", + "coolingConnectionsTitle": "Resfriando atualmente ({count})", + "failedDeleteAlias": "Falha ao excluir o alias", + "failedDeleteConnection": "Falha ao excluir a conexão", + "failedDistributeProxies": "Falha ao distribuir proxies.", + "failedSaveModelEndpointSettings": "Falha ao salvar as configurações do endpoint do modelo", + "failedUpdateClaudeExtraUsagePolicy": "Falha ao atualizar a política de uso extra do Claude", + "failedUpdateClaudeRoutingPreference": "Falha ao atualizar a preferência de roteamento do Claude Code", + "failedUpdateCliproxyRouting": "Falha ao atualizar o roteamento do CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Falha ao atualizar a política de limite do Codex", + "failedUpdateCodexServiceMode": "Falha ao atualizar o modo de serviço do Codex", + "filterByMedia": "Mídia", + "freeBadge": "Grátis", + "kimiCodeApiKeyLabel": "Chave da API Kimi Code", + "modelTestFailed": "Teste do modelo falhou", + "modelTestNetworkError": "Erro de rede ao testar o modelo", + "networkError": "Erro de rede", + "networkErrorDeletingAlias": "Erro de rede ao excluir o alias", + "networkErrorSettingAlias": "Erro de rede ao definir alias", + "noProvidersMatch": "Nenhum provedor corresponde à sua pesquisa.", + "noSavedProxies": "Nenhum proxy salvo encontrado. Adicione proxies em Configurações → Proxy primeiro.", + "pageLoadErrorDescription": "Não conseguimos carregar os dados do provedor no momento. Verifique sua conexão e tente novamente.", + "pageLoadErrorId": "ID de Erro: {id}", + "pageLoadErrorRetry": "Tente Novamente", + "pageLoadErrorTitle": "Falha ao carregar provedores", + "playgroundTitle": "Parque Infantil", + "providerDetailConnectionFlexActive": "O nível de serviço Codex flex está ativo para esta conexão", + "providerDetailConnectionPriorityActive": "O nível de serviço prioritário do Codex está ativo para esta conexão", + "providerDetailGlobalFlexActive": "O nível de serviço Global Codex flex está ativo", + "providerDetailGlobalPriorityActive": "O nível de serviço prioritário do Global Codex está ativo", + "proxiesDistributed": "Distribuído {assigned} atribuição(ões) de proxy em {tagLabel}{total} conexão(ões).", + "rerankEndpoint": "Reclassificar", + "savedModelEndpointSettings": "Configurações do endpoint do modelo salvo", + "searchByModelAria": "Pesquisar por modelo", + "selectSupportedEndpoint": "Selecione pelo menos um endpoint suportado", "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { @@ -6434,7 +6457,7 @@ "memoryDesc": "Memória conversacional persistente entre sessões", "memoryEnabled": "Ativar Memória", "memoryEnabledDesc": "Quando ativado, injetará o contexto passado relevante de forma dinâmica.", - "memoryTokenCostWarning": "__MISSING__:Heads up: with memory enabled, OmniRoute injects up to {tokens} tokens of retrieved context into every chat request — this increases token usage and cost. To skip injection for a specific request, send the \"x-omniroute-no-memory: true\" header.", + "memoryTokenCostWarning": "Atenção: com a memória ativada, o OmniRoute injeta até {tokens} tokens de contexto recuperado em cada solicitação de chat — isso aumenta o uso de tokens e o custo. Para pular a injeção para uma solicitação específica, envie o cabeçalho \"x-omniroute-no-memory: true\".", "maxTokens": "Tokens Máximos", "retentionDays": "Retenção", "recent": "Recente", @@ -6483,8 +6506,8 @@ "homeQuickStartDesc": "Mostrar o painel de início rápido na página inicial.", "homeProviderTopology": "Topologia dos provedores", "homeProviderTopologyDesc": "Mostrar a topologia dos provedores na página inicial.", - "accountEmailVisibility": "__MISSING__:Account email visibility", - "accountEmailVisibilityDesc": "__MISSING__:Show full account emails across providers, combos, logs, quota, and playground screens. Turn this off to mask them by default.", + "accountEmailVisibility": "Visibilidade do e-mail da conta", + "accountEmailVisibilityDesc": "Mostrar e-mails de conta completos entre provedores, combinações, logs, cota e telas de playground. Desative isso para ocultá-los por padrão.", "comboConfigMode": "Modo de configuração de combo", "comboConfigModeDesc": "Escolha como o diálogo de criação e edição de combo é organizado.", "comboConfigModeGuided": "Guiado", @@ -6531,17 +6554,17 @@ "autoDisableDescription": "Marca permanentemente conexões de provedor como desativadas quando retornam sinais terminais de banimento (ex.: HTTP 403 'verify your account'). Isso remove a conexão da rotação de combos.", "autoDisableThreshold": "Limite de banimento", "autoDisableThresholdDesc": "Quantidade de sinais consecutivos de banimento antes da desativação permanente.", - "customBannedSignals": "__MISSING__:Banned Keywords", - "customBannedSignalsDesc": "__MISSING__:Additional keywords that trigger permanent account ban detection. Built-in keywords always apply.", - "customBannedSignalsPlaceholder": "__MISSING__:e.g. api key revoked", - "noCustomBannedSignals": "__MISSING__:No custom keywords. Only built-in keywords are active.", + "customBannedSignals": "Palavras-Chave Proibidas", + "customBannedSignalsDesc": "Palavras-chave adicionais que acionam a detecção de banimento permanente da conta. Palavras-chave integradas sempre se aplicam.", + "customBannedSignalsPlaceholder": "chave da API revogada", + "noCustomBannedSignals": "Sem palavras-chave personalizadas. Apenas palavras-chave internas estão ativas.", "resilienceStructureTitle": "Estrutura de resiliência", "resilienceStructureDesc": "Esta página configura apenas o comportamento. O estado ao vivo de circuit breaker aparece na página Saúde. Controle de retry específico por combo e slot de round-robin continuam nas configurações de combos.", "enableThinking": "Ativar Raciocínio", "maxThinkingTokens": "Máximo de Tokens de Raciocínio", "enableProxy": "Ativar Proxy", - "perKeyProxyEnabled": "__MISSING__:Enable per-key proxy assignment", - "perKeyProxyEnabledDesc": "__MISSING__:When enabled, each provider connection can use its own proxy assignment", + "perKeyProxyEnabled": "Ativar atribuição de proxy por tecla", + "perKeyProxyEnabledDesc": "Quando habilitado, cada conexão de provedor pode usar sua própria atribuição de proxy", "proxyUrl": "URL do Proxy", "pricingRates": "Formato de Taxas de Preço", "currentPricing": "Visão Geral de Preços Atual", @@ -6697,23 +6720,23 @@ "toggleFailed": "Falha ao alternar o interruptor", "refreshFailed": "Falha ao atualizar", "deleteFailed": "Falha ao excluir", - "add": "__MISSING__:Add", - "cancel": "__MISSING__:Cancel", - "configure": "__MISSING__:Configure", - "copyEndpoint": "__MISSING__:Copy Endpoint", - "coreEndpointHint": "__MISSING__:Core Endpoint Hint", - "coreNodesHint": "__MISSING__:Core Nodes Hint", - "create": "__MISSING__:Create", - "deleteConfirm": "__MISSING__:Delete Confirm", - "empty": "__MISSING__:Empty", - "globalModeDescription": "__MISSING__:Global Mode Description", - "localCoreHint": "__MISSING__:Local Core Hint", - "nodeSummary": "__MISSING__:Node Summary", - "providerRequired": "__MISSING__:Provider Required", - "providerRouting": "__MISSING__:Provider Routing", - "refresh": "__MISSING__:Refresh", - "refreshInterval": "__MISSING__:Refresh Interval", - "ruleModeDescription": "__MISSING__:Rule Mode Description" + "add": "Adicionar", + "cancel": "Cancelar", + "configure": "Configurar", + "copyEndpoint": "Copiar Endpoint", + "coreEndpointHint": "Dica do Endpoint Principal", + "coreNodesHint": "Dica de Nós Principais", + "create": "Criar", + "deleteConfirm": "Excluir Confirmação", + "empty": "Vazio", + "globalModeDescription": "Descrição do Modo Global", + "localCoreHint": "Dica de Núcleo Local", + "nodeSummary": "Resumo do Nó", + "providerRequired": "Fornecedor Obrigatório", + "providerRouting": "Roteamento de Provedor", + "refresh": "Atualizar", + "refreshInterval": "Intervalo de Atualização", + "ruleModeDescription": "Descrição do Modo de Regra" }, "bulkHealthcheck": "Verificação de integridade em massa", "bulkHealthcheckDesc": "Teste todos os proxies configurados contra uma URL de destino para encontrar quais funcionam.", @@ -6745,11 +6768,11 @@ "vercelRelayTokenRequired": "Token obrigatório", "vercelRelayDeployFailed": "Falha no deploy", "vercelRelayTokenHint": "O token é usado apenas durante o deploy e nunca é armazenado.", - "denoRelayTokenRequired": "__MISSING__:Deno Deploy token is required", - "denoRelayOrgDomainRequired": "__MISSING__:Organization domain is required", - "denoRelayDeployFailed": "__MISSING__:Deno Deploy failed", - "denoRelayTokenHint": "__MISSING__:Organization token (prefix ddo_) from console.deno.com → Organization → Settings → Organization Tokens. Used once for deploy and never stored.", - "denoRelayOrgDomainHint": "__MISSING__:Your Deno Deploy organization's default domain (e.g. acme.deno.net). The relay will be reachable at https://..deno.net.", + "denoRelayTokenRequired": "Token do Deno Deploy é necessário", + "denoRelayOrgDomainRequired": "O domínio da organização é obrigatório", + "denoRelayDeployFailed": "Deno Deploy falhou", + "denoRelayTokenHint": "Token da organização (prefixo ddo_) de console.deno.com → Organização → Configurações → Tokens da Organização. Usado uma vez para implantação e nunca armazenado.", + "denoRelayOrgDomainHint": "O domínio padrão da sua organização no Deno Deploy (ex: acme.deno.net). O relay estará acessível em https://<app-name>.<org-slug>.deno.net.", "proxyFreePoolFilterProtocol": "Filtrar por protocolo", "proxyFreePoolProtocol": "Protocolo", "proxyFreePoolCountryPlaceholder": "País (ex.: US)", @@ -6781,7 +6804,7 @@ "proxyFreePoolSortQuality": "Qualidade", "proxyFreePoolSortLatency": "Latência", "proxyFreePoolSortRecent": "Mais recentes", - "proxyFreePoolListTotal": "{count} proxies no total", + "proxyFreePoolListTotal": "Listed", "proxyFreePoolLoadMore": "Carregar mais", "close": "Fechar", "cancel": "Cancelar", @@ -7065,7 +7088,7 @@ "systemStorage": "Sistema e Armazenamento", "allDataLocal": "Todos os dados armazenados localmente na sua máquina", "databasePath": "Caminho do Banco de Dados", - "export": "__MISSING__:Export", + "export": "Exportar", "exportDatabase": "Exportar Banco de Dados", "exportAll": "Exportar Tudo (.tar.gz)", "importDatabase": "Importar Banco de Dados", @@ -7181,11 +7204,11 @@ "adaptiveVolumeRoutingDesc": "Escala conexões dinamicamente com base no volume e pressão na taxa de transferência.", "lkgpToggleTitle": "Last Known Good Provider (LKGP)", "lkgpToggleDesc": "When enabled, the router remembers which provider last served a successful response and tries it first on subsequent requests.", - "echoRequestedModelTitle": "__MISSING__:Echo requested model name in responses", - "echoRequestedModelDesc": "__MISSING__:When enabled, the response `model` field echoes the alias or combo name the client requested instead of the upstream model name. Fixes strict clients (e.g. Claude Desktop) that reject a response whose model does not match the request.", - "webSearchRouteTitle": "__MISSING__:Web search routing", - "webSearchRouteDesc": "__MISSING__:When a request includes a native web_search tool, route the whole request to this model instead of the default — useful for providers that don't implement Anthropic's web_search server tool. Leave blank to disable.", - "webSearchRoutePlaceholder": "__MISSING__:e.g. openrouter,anthropic/claude-3.5-sonnet", + "echoRequestedModelTitle": "Eco nome do modelo solicitado nas respostas", + "echoRequestedModelDesc": "Quando ativado, o campo `model` da resposta ecoa o alias ou nome da combinação que o cliente solicitou em vez do nome do modelo upstream. Corrige clientes rigorosos (por exemplo, Claude Desktop) que rejeitam uma resposta cujo modelo não corresponde à solicitação.", + "webSearchRouteTitle": "Roteamento de pesquisa na web", + "webSearchRouteDesc": "Quando uma solicitação inclui uma ferramenta nativa web_search, roteie toda a solicitação para este modelo em vez do padrão — útil para provedores que não implementam a ferramenta de servidor web_search da Anthropic. Deixe em branco para desativar.", + "webSearchRoutePlaceholder": "e.g. openrouter,anthropic/claude-3.5-sonnet", "paidModelPatternWarning": "Este padrão corresponde apenas a modelos pagos — habilite modelos pagos ou ajuste o padrão.", "clearLkgpCache": "Clear LKGP Cache", "lkgpCacheCleared": "LKGP cache cleared successfully", @@ -7250,7 +7273,7 @@ "clearSyncedPricingSuccess": "Dados sincronizados de preços removidos", "clearSyncedPricingFailedWithReason": "Falha ao limpar dados sincronizados de preços: {reason}", "pricingSourceDefault": "Padrão", - "pricingSyncSuccess": "Preços sincronizados para {count} modelos", + "pricingSyncSuccess": "Pricing synced successfully", "enableSyncError": "Enable Sync Error", "syncEnabled": "Sincronização periódica ativada", "blacklist": "Blacklist", @@ -7274,16 +7297,16 @@ "compressionGuidanceHide": "Ocultar detalhes", "compressionGuidanceSafeDefault": "Padrão seguro", "compressionGuidanceCacheImpact": "Impacto no cache", - "tokenSaverTitle": "__MISSING__:Token Saver", - "tokenSaverSubtitle": "__MISSING__:Spend fewer tokens on every request.", - "tokenSaverToolOutput": "__MISSING__:Tool output", - "tokenSaverToolOutputDesc": "__MISSING__:Clean git, grep, ls, tree, and log output before it reaches the provider.", - "tokenSaverLlmOutput": "__MISSING__:LLM output", - "tokenSaverLlmOutputDesc": "__MISSING__:Inject terse response instructions without rewriting provider output.", - "tokenSaverInputCompression": "__MISSING__:Input compression", - "tokenSaverInputCompressionDesc": "__MISSING__:Rewrite eligible chat history while preserving code, URLs, and intent.", - "tokenSaverFineTunePrefix": "__MISSING__:Fine-tune each engine on", - "tokenSaverFineTuneSuffix": "__MISSING__:or combine engines per request on", + "tokenSaverTitle": "Economizador de Token", + "tokenSaverSubtitle": "Gaste menos tokens em cada solicitação.", + "tokenSaverToolOutput": "Saída da ferramenta", + "tokenSaverToolOutputDesc": "Limpar a saída do git, grep, ls, tree e log antes que chegue ao provedor.", + "tokenSaverLlmOutput": "Saída do LLM", + "tokenSaverLlmOutputDesc": "Injetar instruções de resposta concisas sem reescrever a saída do provedor.", + "tokenSaverInputCompression": "Compressão de Entrada", + "tokenSaverInputCompressionDesc": "Reescreva o histórico de chat elegível enquanto preserva código, URLs e intenção.", + "tokenSaverFineTunePrefix": "Ajuste fino de cada motor em", + "tokenSaverFineTuneSuffix": "ou combine engines por solicitação ativada", "compressionMode": "Compression Mode", "compressionModeOff": "Off", "compressionModeOffDesc": "No compression applied", @@ -7303,11 +7326,11 @@ "compressionUltraMinScore": "Minimum Score Threshold", "compressionUltraSlmFallback": "Fallback to Aggressive", "compressionUltraModelPath": "SLM Model Path", - "compressionUltraEngine": "__MISSING__:Ultra tier", - "compressionUltraEngineHeuristic": "__MISSING__:Heuristic (Tier-A, default)", - "compressionUltraEngineSlm": "__MISSING__:SLM (LLMLingua-2, opt-in)", - "compressionUltraSlmHint": "__MISSING__:SLM downloads a small ONNX model on first use (cold-start) and transparently falls back to the heuristic on timeout or if unavailable.", - "compressionUltraSlmPrewarm": "__MISSING__:Pre-warm SLM model on enable", + "compressionUltraEngine": "Ultra nível", + "compressionUltraEngineHeuristic": "Heurística (Tier-A, padrão)", + "compressionUltraEngineSlm": "SLM (LLMLingua-2, opt-in)", + "compressionUltraSlmHint": "O SLM baixa um pequeno modelo ONNX na primeira utilização (cold-start) e recorre de forma transparente à heurística em caso de timeout ou se estiver indisponível.", + "compressionUltraSlmPrewarm": "Pré-aquecer o modelo SLM ao habilitar", "compressionSummarizerEnabled": "Enable Summarizer", "compressionMaxTokensPerMessage": "Max Tokens Per Message", "compressionMinSavings": "Min Savings Threshold", @@ -7512,7 +7535,7 @@ "resilienceNo": "Não", "resilienceDefault": "Default", "storageDatabaseBackupRetention": "Retenção de backup de banco de dados", - "storageDatabaseBackups": "__MISSING__:Database backups", + "storageDatabaseBackups": "Backups de banco de dados", "storageBackupRetentionDescription": "Os backups automáticos do SQLite são armazenados em", "storageBackupRetentionHelp": "Configure quantos snapshots manter e, opcionalmente, exclua backups mais antigos que um número escolhido de dias.", "storageBackupCount": "{count} backups", @@ -7543,21 +7566,21 @@ "jsonImportFailed": "Falha ao importar JSON", "jsonImportError": "Erro durante a importação de JSON", "storagePurgeData": "Limpar dados", - "storagePurgeDataDesc": "__MISSING__:Immediately delete all records without applying retention checks. Use with caution.", - "storageRetentionCleanup": "__MISSING__:Retention Settings", - "storageRetentionCleanupDesc": "__MISSING__:Configure operational record retention and database backup cleanup.", - "retentionCallDays": "__MISSING__:Call {count}d", - "retentionAppDays": "__MISSING__:App {count}d", - "retentionRows": "__MISSING__:{count} rows", + "storagePurgeDataDesc": "Excluir imediatamente todos os registros sem aplicar verificações de retenção. Use com cautela.", + "storageRetentionCleanup": "Configurações de Retenção", + "storageRetentionCleanupDesc": "Configure a retenção de registros operacionais e a limpeza de backup do banco de dados.", + "retentionCallDays": "Chamar {count}d", + "retentionAppDays": "App {count}d", + "retentionRows": "{count} linhas", "retentionQuotaSnapshots": "Instantâneos de cota (dias)", - "retentionCompressionAnalytics": "__MISSING__:Compression Analytics (days)", + "retentionCompressionAnalytics": "Análise de Compressão (dias)", "retentionMcpAudit": "Auditoria MCP (dias)", "retentionA2aEvents": "Eventos A2A (dias)", "retentionCallLogs": "Registros de chamadas (dias)", "retentionUsageHistory": "Histórico de uso (dias)", "retentionMemoryEntries": "Entradas de memória (dias)", "retentionXpAuditLog": "Log de Auditoria de XP (dias)", - "saveRetentionSettings": "__MISSING__:Save retention settings", + "saveRetentionSettings": "Salvar configurações de retenção", "storageAutoVacuumMode": "Modo de vácuo automático", "storageScheduledVacuum": "Vácuo programado", "storageVacuumHour": "Hora de Vácuo (0-23)", @@ -7596,9 +7619,9 @@ "storageIntegrityOk": "✓ OK", "storageIntegrityError": "✗ Erro", "storageUsageTokenBuffer": "Buffer de token de uso", - "storageUsageTokenBufferDesc": "__MISSING__:Extra tokens added to reported usage to account for system prompt overhead.", - "storageUsageTokenBufferHint": "__MISSING__:Set to 0 to report raw provider token counts. Default: 2000.", - "storageUsageTokenBufferCurrent": "__MISSING__:Current: {value}", + "storageUsageTokenBufferDesc": "Tokens extras adicionados ao uso relatado para contabilizar a sobrecarga do prompt do sistema.", + "storageUsageTokenBufferHint": "Defina como 0 para relatar contagens de tokens de provedor brutos. Padrão: 2000.", + "storageUsageTokenBufferCurrent": "Atual: {value}", "redisLauncherTitle": "Redis local", "redisLauncherDesc": "Inicie com um clique um contêiner Redis 7 (Podman ou Docker) para cache de resposta, controle de cota e limitação de taxa.", "redisLauncherRefresh": "Atualizar", @@ -7612,11 +7635,11 @@ "redisLauncherHint": "Equivalente a executar `omniroute redis up`. O contêiner é chamado `omniroute-redis` e escuta em 127.0.0.1:6379.", "compressionSettingsAutoTriggerMode": "Modo de disparo automático", "compressionSettingsMcpDescriptionCompression": "Compressão de descrição MCP", - "mcpAccessibilityTitle": "__MISSING__:MCP accessibility output", + "mcpAccessibilityTitle": "Saída de acessibilidade do MCP", "compressionSettingsCavemanIntensity": "Intensidade do homem das cavernas", "compressionSettingsCavemanOutputMode": "Modo de saída do homem das cavernas", - "compressionSettingsOutputStyles": "__MISSING__:Output styles", - "compressionStylesTileTitle": "__MISSING__:Output styles", + "compressionSettingsOutputStyles": "Estilos de saída", + "compressionStylesTileTitle": "Estilos de saída", "compressionSettingsOutputIntensity": "Intensidade de saída", "compressionSettingsAutoClarityBypass": "Desvio de clareza automática", "compressionEffectivePipeline": "Pipeline efetivo:", @@ -7718,9 +7741,9 @@ "cliproxyapiUrl": "URL CLIProxyAPI", "cliproxyapiStatus": "Status CLIProxyAPI", "cliproxyapiNotDetected": "Não detectado", - "cliproxyapiImportAuthTitle": "__MISSING__:Import accounts from CLIProxyAPI", - "cliproxyapiImportAuthDesc": "__MISSING__:Import the OAuth accounts CLIProxyAPI already saved in ~/.cli-proxy-api/ as OmniRoute connections, so you don't have to log in to each account again. Supported account types (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) are imported; others are skipped.", - "cliproxyapiImportAuthButton": "__MISSING__:Import accounts", + "cliproxyapiImportAuthTitle": "Importar contas do CLIProxyAPI", + "cliproxyapiImportAuthDesc": "Importe as contas OAuth CLIProxyAPI já salvas em ~/.cli-proxy-api/ como conexões OmniRoute, para que você não precise fazer login em cada conta novamente. Tipos de conta suportados (Gemini, Codex, Claude, Antigravity, Qwen, Kimi) são importados; outros são ignorados.", + "cliproxyapiImportAuthButton": "Importar contas", "payloadRulesTitle": "Regras de carga útil", "payloadRulesDesc": "Configure mutações de carga útil de solicitação por modelo e protocolo. As alterações são persistidas nas configurações e recarregadas no runtime imediatamente após o salvamento.", "payloadRuleDefaultTitle": "padrão (default)", @@ -7762,14 +7785,14 @@ "modelCooldownsReactivateAll": "Reativar todos", "modelCooldownsReasonRemaining": "motivo: {reason} • restante: {remaining}", "modelCooldownsReactivate": "Reativar", - "responsesStateTitle": "__MISSING__:Responses State", - "responsesStateDesc": "__MISSING__:Control how OmniRoute forwards previous_response_id.", - "responsesStateModeLabel": "__MISSING__:previous_response_id handling", - "responsesStateModeAuto": "__MISSING__:Auto", - "responsesStateModeStrip": "__MISSING__:Strip", - "responsesStateModePreserve": "__MISSING__:Preserve", - "responsesStateHint": "__MISSING__:Auto strips previous_response_id unless a connection explicitly enables OpenAI Responses storage. Strip is safest for stateless clients such as VS Code Custom Endpoint; context then depends on the client sending full history.", - "responsesStateSaveError": "__MISSING__:Failed to update Responses state setting", + "responsesStateTitle": "Estado das Respostas", + "responsesStateDesc": "Controle como o OmniRoute encaminha previous_response_id.", + "responsesStateModeLabel": "manipulação de previous_response_id", + "responsesStateModeAuto": "Automático", + "responsesStateModeStrip": "Remover", + "responsesStateModePreserve": "Preservar", + "responsesStateHint": "O Auto remove o previous_response_id, a menos que uma conexão habilite explicitamente o armazenamento de Respostas OpenAI. O strip é mais seguro para clientes sem estado, como o Endpoint Personalizado do VS Code; o contexto então depende do cliente que envia todo o histórico.", + "responsesStateSaveError": "Falha ao atualizar a configuração do estado das Respostas", "codexFastTierTitle": "Camada rápida do Codex", "codexFastTierDesc": "Injete globalmente service_tier=priority para solicitações do OpenAI Codex.", "codexFastTierHint": "Quando habilitado, o OmniRoute adiciona service_tier=priority às solicitações de saída do Codex para conexões que ainda não especificam uma camada. O nível de prioridade requer uma chave de API OpenAI Enterprise ou o caminho ChatGPT-auth Codex; outros tipos de chave receberão um erro relacionado ao nível do OpenAI. As configurações por conexão na página do provedor Codex têm precedência.", @@ -7852,7 +7875,7 @@ "BYPASS_PREFIX_NOT_ALLOWED": "Um ou mais prefixos visam rotas capazes de spawn e não podem ser ignorados.", "GENERIC": "Falha ao atualizar as configurações de authz." }, - "remove": "__MISSING__:Remove" + "remove": "Remover" }, "resilienceBaseCooldownLabel": "Tempo de espera básico", "scopeLabel": "Escopo", @@ -7896,15 +7919,15 @@ "resilienceQuotaShareConcurrencyTitle": "Concorrência por conexão de cota compartilhada", "resilienceQuotaShareConcurrencyDesc": "Somente para combos de cota compartilhada: quando uma conexão define um limite de Concorrência Máxima, serializa as requisições concorrentes para essa conta de assinatura para que nunca seja inundada além do teto. Requisições excedentes esperam na fila em vez de receber um 429. O limite vem do campo Concorrência Máxima de cada conexão; este botão apenas habilita ou desabilita seu respeito.", "resilienceQuotaShareConcurrencyToggleDesc": "Somente combos de cota compartilhada; respeita o limite de Concorrência Máxima de cada conexão.", - "resilienceProviderCooldownTitle": "__MISSING__:Provider Cooldown", - "resilienceProviderCooldownScope": "__MISSING__:All combo requests", - "resilienceProviderCooldownTrigger": "__MISSING__:When a provider/connection fails", - "resilienceProviderCooldownEffect": "__MISSING__:Skips the failed provider for a cooldown period before retrying", - "resilienceProviderCooldownDesc": "__MISSING__:Prevents subsequent requests from re-walking the same failing providers. Cooldown scales exponentially with consecutive failures.", - "resilienceProviderCooldownEnabled": "__MISSING__:Enable global provider cooldown", - "resilienceProviderCooldownEnabledDesc": "__MISSING__:When enabled, failed providers are tracked globally and skipped for a cooldown period.", - "resilienceProviderCooldownMin": "__MISSING__:Minimum cooldown", - "resilienceProviderCooldownMax": "__MISSING__:Maximum cooldown", + "resilienceProviderCooldownTitle": "Tempo de Recarga do Provedor", + "resilienceProviderCooldownScope": "Todos os pedidos de combo", + "resilienceProviderCooldownTrigger": "Quando um provedor/conexão falha", + "resilienceProviderCooldownEffect": "Ignora o provedor com falha por um período de espera antes de tentar novamente", + "resilienceProviderCooldownDesc": "Impede solicitações subsequentes de reprocessar os mesmos provedores com falha. O tempo de espera aumenta exponencialmente com falhas consecutivas.", + "resilienceProviderCooldownEnabled": "Ativar o tempo de recarga global do provedor", + "resilienceProviderCooldownEnabledDesc": "Quando ativado, provedores com falha são rastreados globalmente e pulados por um período de espera.", + "resilienceProviderCooldownMin": "Tempo de recarga mínimo", + "resilienceProviderCooldownMax": "Tempo máximo de recarga", "forcedFingerprintTitle": "Sempre ativado para {provider} — necessário para a segurança da conta OAuth; não pode ser desativado.", "forcedFingerprintBadge": "Obrigatório", "sessionAffinityTitle": "Afinidade de sessão", @@ -7926,33 +7949,33 @@ "vercelRelayFreeTierNote": "Relays são endpoints de proxy leves implantados no plano gratuito da Vercel para contornar limitações de rede local/região.", "vercelRelayDeploying": "Implantando...", "vercelRelayDeploy": "Implantar", - "deployRelayButton": "__MISSING__:Deploy Relay", - "denoRelayButton": "__MISSING__:Deploy Deno Relay", - "denoRelayModalTitle": "__MISSING__:Deploy Deno Relay", - "denoRelayWarning": "__MISSING__:Warning: A Deno Deploy organization token is required. This token will only be used to create the relay app and will never be stored by OmniRoute.", - "denoRelayTokenLabel": "__MISSING__:Deno Deploy Organization Token", - "denoRelayOrgDomainLabel": "__MISSING__:Organization Domain", - "denoRelayProjectNameLabel": "__MISSING__:Deno App Name", - "denoRelayFreeTierNote": "__MISSING__:Deno Deploy v2 runs on a global edge network. Free tier: 1M requests & 100GiB outbound traffic per month, no per-request CPU limits, up to 20 active apps & 50 custom domains.", - "denoRelayDeploying": "__MISSING__:Deploying...", - "denoRelayDeploy": "__MISSING__:Deploy", - "cloudflareRelaySuccess": "__MISSING__:Cloudflare Relay deployed successfully", - "cloudflareRelayButton": "__MISSING__:Deploy Cloudflare Relay", - "cloudflareRelayModalTitle": "__MISSING__:Deploy Cloudflare Worker Relay", - "cloudflareRelayWarning": "__MISSING__:Deploys a Cloudflare Worker that proxies LLM requests through Cloudflare's edge network — masking the host IP behind dynamic Cloudflare addresses. The Worker enforces a one-time auth secret so the public workers.dev URL cannot be reused as an open relay.", - "cloudflareRelayTokenHowto": "__MISSING__:Create the API token under My Profile -> API Tokens -> Create Token -> Custom Token -> Account / Workers Scripts / Edit.", - "cloudflareRelayAccountIdLabel": "__MISSING__:Cloudflare Account ID", - "cloudflareRelayAccountIdHint": "__MISSING__:Found on the right side of the Cloudflare dashboard overview page.", - "cloudflareRelayApiTokenLabel": "__MISSING__:Cloudflare API Token", - "cloudflareRelayApiTokenHint": "__MISSING__:Requires 'Workers Scripts: Edit' permission. The token is used only at deploy time and is never stored.", - "cloudflareRelayProjectNameLabel": "__MISSING__:Worker Name", - "cloudflareRelayFreeTierNote": "__MISSING__:Free tier: 100,000 requests/day per Cloudflare account.", - "cloudflareRelayDeploying": "__MISSING__:Deploying...", - "cloudflareRelayDeploy": "__MISSING__:Deploy", - "cloudflareRelayCredsRequired": "__MISSING__:Account ID and API Token are required", - "cloudflareRelayDeployFailed": "__MISSING__:Deploy failed", - "modelLockout": "__MISSING__:Model Lockout", - "modelLockoutPageDescription": "__MISSING__:Configure which HTTP error codes trigger per-model lockout and control the cooldown behavior.", + "deployRelayButton": "Implantar Relay", + "denoRelayButton": "Implantar Deno Relay", + "denoRelayModalTitle": "Implantar Deno Relay", + "denoRelayWarning": "Aviso: Um token de organização do Deno Deploy é necessário. Este token será usado apenas para criar o aplicativo de relay e nunca será armazenado pelo OmniRoute.", + "denoRelayTokenLabel": "Token da Organização Deno Deploy", + "denoRelayOrgDomainLabel": "Domínio da Organização", + "denoRelayProjectNameLabel": "Nome do App Deno", + "denoRelayFreeTierNote": "Deno Deploy v2 é executado em uma rede de borda global. Camada gratuita: 1M de solicitações e 100GiB de tráfego de saída por mês, sem limites de CPU por solicitação, até 20 aplicativos ativos e 50 domínios personalizados.", + "denoRelayDeploying": "Implantando...", + "denoRelayDeploy": "Implantar", + "cloudflareRelaySuccess": "Cloudflare Relay implantado com sucesso", + "cloudflareRelayButton": "Implantar o Cloudflare Relay", + "cloudflareRelayModalTitle": "Implantar o Relay do Cloudflare Worker", + "cloudflareRelayWarning": "Implanta um Cloudflare Worker que proxy solicitações LLM através da rede de borda da Cloudflare — mascarando o IP do host por trás de endereços dinâmicos da Cloudflare. O Worker impõe um segredo de autenticação de uso único para que a URL pública workers.dev não possa ser reutilizada como um relay aberto.", + "cloudflareRelayTokenHowto": "Crie o token da API em Meu Perfil -> Tokens da API -> Criar Token -> Token Personalizado -> Conta / Scripts de Trabalhadores / Editar.", + "cloudflareRelayAccountIdLabel": "ID da Conta Cloudflare", + "cloudflareRelayAccountIdHint": "Encontrado no lado direito da página de visão geral do painel do Cloudflare.", + "cloudflareRelayApiTokenLabel": "Token da API do Cloudflare", + "cloudflareRelayApiTokenHint": "Requer permissão 'Scripts de Trabalhadores: Editar'. O token é usado apenas no momento da implantação e nunca é armazenado.", + "cloudflareRelayProjectNameLabel": "Nome do Trabalhador", + "cloudflareRelayFreeTierNote": "Camada gratuita: 100.000 solicitações/dia por conta do Cloudflare.", + "cloudflareRelayDeploying": "Implantando...", + "cloudflareRelayDeploy": "Implantar", + "cloudflareRelayCredsRequired": "ID da Conta e Token da API são obrigatórios", + "cloudflareRelayDeployFailed": "Implantação falhou", + "modelLockout": "Bloqueio de Modelo", + "modelLockoutPageDescription": "Configure quais códigos de erro HTTP acionam o bloqueio por modelo e controle o comportamento de resfriamento.", "modelLockoutLoadFailed": "Falha ao carregar configurações de bloqueio de modelo", "modelLockoutSaveFailed": "Falha ao salvar configurações de bloqueio de modelo", "modelLockoutLoading": "Carregando configurações de bloqueio de modelo...", @@ -7964,26 +7987,26 @@ "addErrorCode": "Adicionar código de erro...", "suggestions": "Sugestões:", "modelLockoutMaxCooldownHint": "≥ Cooldown Base — 3.600.000ms", - "modelLockoutEnabled": "__MISSING__:Enable Model Lockout", - "modelLockoutEnabledDescription": "__MISSING__:When enabled, models that fail with configured error codes are temporarily locked to prevent retry loops.", - "modelLockoutErrorCodes": "__MISSING__:Error Codes", - "modelLockoutErrorCodesDescription": "__MISSING__:HTTP status codes that trigger model lockout. Type a code and click Add, or select from suggestions.", - "modelLockoutBaseCooldown": "__MISSING__:Base Cooldown (ms)", - "modelLockoutBaseCooldownDescription": "__MISSING__:Initial cooldown duration in milliseconds before a model can be retried.", - "modelLockoutMaxCooldown": "__MISSING__:Max Cooldown (ms)", - "modelLockoutMaxCooldownDescription": "__MISSING__:Maximum cooldown duration in milliseconds. Prevents excessively long lockouts.", - "modelLockoutExponentialBackoff": "__MISSING__:Exponential Backoff", - "modelLockoutExponentialBackoffDescription": "__MISSING__:When enabled, each consecutive failure increases the cooldown duration exponentially.", - "modelLockoutMaxBackoffSteps": "__MISSING__:Max Backoff Steps", - "modelLockoutMaxBackoffStepsDescription": "__MISSING__:Maximum number of backoff steps before the cooldown stops growing. The Max Cooldown cap is reached first in most configurations, making this a safety ceiling for when Max Cooldown is raised.", + "modelLockoutEnabled": "Ativar Bloqueio de Modelo", + "modelLockoutEnabledDescription": "Quando ativado, modelos que falham com códigos de erro configurados são temporariamente bloqueados para evitar loops de tentativa.", + "modelLockoutErrorCodes": "Códigos de Erro", + "modelLockoutErrorCodesDescription": "Códigos de status HTTP que acionam o bloqueio do modelo. Digite um código e clique em Adicionar, ou selecione entre as sugestões.", + "modelLockoutBaseCooldown": "Tempo de Recarga Base (ms)", + "modelLockoutBaseCooldownDescription": "Duração inicial de cooldown em milissegundos antes que um modelo possa ser tentado novamente.", + "modelLockoutMaxCooldown": "Tempo Máximo de Recarga (ms)", + "modelLockoutMaxCooldownDescription": "Duração máxima de cooldown em milissegundos. Impede bloqueios excessivamente longos.", + "modelLockoutExponentialBackoff": "Retardo Exponencial", + "modelLockoutExponentialBackoffDescription": "Quando ativado, cada falha consecutiva aumenta a duração do tempo de espera exponencialmente.", + "modelLockoutMaxBackoffSteps": "Máximo de Passos de Retardo", + "modelLockoutMaxBackoffStepsDescription": "Número máximo de etapas de retrocesso antes que o tempo de espera pare de crescer. O limite máximo de tempo de espera é alcançado primeiro na maioria das configurações, tornando isso um teto de segurança para quando o tempo de espera máximo é aumentado.", "disableSessionStickiness": "Desabilitar fixação de sessão", "disableSessionStickinessDesc": "Combos round-robin e aleatórios alternam para uma conexão diferente a cada requisição, em vez de fixar toda a conversa em uma conexão pelo hash da primeira mensagem. Deixe desativado para preservar acertos de cache de prompt em conversas com múltiplos turnos. Sobrescritas por combo têm prioridade.", "promptCacheAffinity": "Prompt-cache locality routing", "promptCacheAffinityDesc": "Prefer the same provider account for matching prompt-cache keys while preserving health and quota failover.", - "credentialRedaction": "__MISSING__:Credential Redaction", - "credentialRedactionDesc": "__MISSING__:Redact API keys, tokens, and secrets from context sent to providers and from responses.", - "enableCredentialRedaction": "__MISSING__:Enable credential redaction", - "enableCredentialRedactionDesc": "__MISSING__:Scrubs API keys, tokens, private keys, and JWTs from messages, tool calls, and responses.", + "credentialRedaction": "Redação de Credenciais", + "credentialRedactionDesc": "Redija chaves de API, tokens e segredos do contexto enviado para provedores e das respostas.", + "enableCredentialRedaction": "Ativar a ocultação de credenciais", + "enableCredentialRedactionDesc": "Remove as chaves da API, tokens, chaves privadas e JWTs de mensagens, chamadas de ferramentas e respostas.", "pricingAutoSyncDisabled": "Sincronização automática desativada", "pricingAutoSyncEnabled": "Sincronização automática ativada", "modalityBridgeIntro": "Conecte conteúdo multimodal ao texto antes que ele chegue a modelos apenas de texto. A visão está ativa; o áudio chega com o AudioBridge; o vídeo está no roadmap.", @@ -8040,84 +8063,90 @@ "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clipe(s) transcrito(s) por {model}", "modalityBridgeAudioTestNoop": "O Audio Bridge não foi ativado (o destino pode suportar áudio, nenhum provedor de STT está conectado ou a ponte está desativada)", "modalityBridgeAudioTestError": "Teste de áudio falhou: {message}", - "modelRoutingDescriptionPlaceholder": "__MISSING__:Route Opus models to frontier combo", - "cliproxyapiFallbackCodes": "__MISSING__:Cliproxyapi Fallback Codes", - "cliproxyapiFallbackDescription": "__MISSING__:Cliproxyapi Fallback Description", - "cliproxyapiHealthLabel": "__MISSING__:Cliproxyapi Health Label", - "cliproxyapiImportFailed": "__MISSING__:Cliproxyapi Import Failed", - "cliproxyapiImportResult": "__MISSING__:Cliproxyapi Import Result", - "cliproxyapiInvalidUrl": "__MISSING__:Cliproxyapi Invalid URL", - "cliproxyapiLifecycleNoticeAfter": "__MISSING__:Cliproxyapi Lifecycle Notice After", - "cliproxyapiLifecycleNoticeBefore": "__MISSING__:Cliproxyapi Lifecycle Notice Before", - "cliproxyapiLifecycleNoticeLink": "__MISSING__:Cliproxyapi Lifecycle Notice Link", - "cliproxyapiPortLabel": "__MISSING__:Cliproxyapi Port Label", - "cliproxyapiStatusLabel": "__MISSING__:Cliproxyapi Status Label", - "cliproxyapiVersionLabel": "__MISSING__:Cliproxyapi Version Label", - "collection": "__MISSING__:Collection", + "modelRoutingDescriptionPlaceholder": "Roteie os modelos Opus para a combinação frontier", + "cliproxyapiFallbackCodes": "Códigos de Fallback do Cliproxyapi", + "cliproxyapiFallbackDescription": "Descrição de Fallback do Cliproxyapi", + "cliproxyapiHealthLabel": "Rótulo de Saúde do Cliproxyapi", + "cliproxyapiImportFailed": "Falha na Importação do Cliproxyapi", + "cliproxyapiImportResult": "Resultado da Importação do Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Inválido", + "cliproxyapiLifecycleNoticeAfter": "Aviso de Ciclo de Vida do Cliproxyapi Após", + "cliproxyapiLifecycleNoticeBefore": "Aviso de Ciclo de Vida do Cliproxyapi Antes", + "cliproxyapiLifecycleNoticeLink": "Link de Aviso de Ciclo de Vida do Cliproxyapi", + "cliproxyapiPortLabel": "Rótulo da Porta Cliproxyapi", + "cliproxyapiStatusLabel": "Rótulo de Status do Cliproxyapi", + "cliproxyapiVersionLabel": "Rótulo da Versão do Cliproxyapi", + "collection": "Coleção", "errorPage": { - "description": "__MISSING__:We could not load settings right now. Please retry in a few seconds.", - "errorId": "__MISSING__:Error ID: {id}", - "retry": "__MISSING__:Try Again", - "title": "__MISSING__:Failed to load settings" + "description": "Não conseguimos carregar as configurações no momento. Por favor, tente novamente em alguns segundos.", + "errorId": "ID de Erro: {id}", + "retry": "Tente Novamente", + "title": "Falha ao carregar as configurações" }, - "host": "__MISSING__:Host", - "notInstalled": "__MISSING__:Not installed", - "oneproxyActions": "__MISSING__:Oneproxy Actions", - "oneproxyActive": "__MISSING__:Oneproxy Active", - "oneproxyAnonymity": "__MISSING__:Oneproxy Anonymity", - "oneproxyCountry": "__MISSING__:Oneproxy Country", - "oneproxyDelete": "__MISSING__:Oneproxy Delete", - "oneproxyEmpty": "__MISSING__:Oneproxy Empty", - "oneproxyHost": "__MISSING__:Oneproxy Host", - "oneproxyLatency": "__MISSING__:Oneproxy Latency", - "oneproxyProtocol": "__MISSING__:Oneproxy Protocol", - "oneproxyQuality": "__MISSING__:Oneproxy Quality", - "oneproxySyncFailed": "__MISSING__:Sync failed: {error}", - "oneproxySyncSuccess": "__MISSING__:Synced {total} proxies ({added} new, {updated} updated)", - "proxyDocumentationSocks5DescAfter": "__MISSING__:Proxy Documentation Socks5 Desc After", - "proxyFreePoolAddProxy": "__MISSING__:Proxy Free Pool Add Proxy", - "proxyFreePoolAdding": "__MISSING__:Proxy Free Pool Adding", - "proxyFreePoolSelectProxy": "__MISSING__:Proxy Free Pool Select Proxy", - "proxyStatusActive": "__MISSING__:Proxy Status Active", - "proxyStatusInactive": "__MISSING__:Proxy Status Inactive", - "routingAddEntry": "__MISSING__:Add entry", - "settingSaveFailed": "__MISSING__:Setting Save Failed", - "settingSaved": "__MISSING__:Setting Saved", - "skillsmpApiKeyHintAfter": "__MISSING__:. Rate limit: {limit} requests/day.", - "skillsmpApiKeyHintBefore": "__MISSING__:Get your API key from", - "syncFailed": "__MISSING__:Sync failed", - "unhealthy": "__MISSING__:Unhealthy", - "oneproxyDescription": "__MISSING__:Fetch and rotate free validated proxies from the 1proxy community platform", - "oneproxySyncing": "__MISSING__:Syncing...", - "oneproxySyncNow": "__MISSING__:Sync Now", - "oneproxyClearAll": "__MISSING__:Clear All", + "host": "Hospedeiro", + "notInstalled": "Não instalado", + "oneproxyActions": "Ações Oneproxy", + "oneproxyActive": "Oneproxy Ativo", + "oneproxyAnonymity": "Anonymidade Oneproxy", + "oneproxyCountry": "Oneproxy País", + "oneproxyDelete": "Oneproxy Excluir", + "oneproxyEmpty": "Oneproxy Vazio", + "oneproxyHost": "Host Oneproxy", + "oneproxyLatency": "Latência do Oneproxy", + "oneproxyProtocol": "Protocolo Oneproxy", + "oneproxyQuality": "Qualidade Oneproxy", + "oneproxySyncFailed": "Falha na sincronização: {error}", + "oneproxySyncSuccess": "Sincronizados {total} proxies ({added} novos, {updated} atualizados)", + "proxyDocumentationSocks5DescAfter": "Documentação do Proxy Socks5 Desc Depois", + "proxyFreePoolAddProxy": "Adicionar Proxy ao Pool Sem Proxy", + "proxyFreePoolAdding": "Adicionando Pool de Proxy Gratuito", + "proxyFreePoolSelectProxy": "Selecionar Proxy do Pool Sem Proxy", + "proxyStatusActive": "Status do Proxy Ativo", + "proxyStatusInactive": "Status do Proxy Inativo", + "routingAddEntry": "Adicionar entrada", + "settingSaveFailed": "Falha ao Salvar Configuração", + "settingSaved": "Configuração Salva", + "skillsmpApiKeyHintAfter": ". Limite de taxa: {limit} solicitações/dia.", + "skillsmpApiKeyHintBefore": "Obtenha sua chave de API de", + "syncFailed": "A sincronização falhou", + "unhealthy": "Não saudável", + "oneproxyDescription": "Busque e gire proxies validados gratuitos da plataforma comunitária 1proxy", + "oneproxySyncing": "Sincronizando...", + "oneproxySyncNow": "Sincronizar Agora", + "oneproxyClearAll": "Limpar Tudo", "oneproxyGoogle": "Google", - "oneproxyClearAllConfirm": "__MISSING__:Clear all 1proxy proxies?", - "memorySkillsSkillsmpDescription": "__MISSING__:Connect to SkillsMP to discover and install skills from the marketplace.", - "memorySkillsActiveProviderDescription": "__MISSING__:Choose which provider the Skills page uses for search and install.", - "memorySkillsSkillsmpProviderTitle": "__MISSING__:SkillsMP Marketplace", - "memorySkillsSkillsmpProviderDescription": "__MISSING__:Authenticated marketplace (uses your SkillsMP API key).", - "memorySkillsSkillsshProviderTitle": "__MISSING__:skills.sh Directory", - "memorySkillsSkillsshProviderDescription": "__MISSING__:Public directory provider (no API key required).", - "routingCcBridgeCatalogName": "__MISSING__:Anthropic-compatible CC bridge", - "routingClaudeProviderName": "__MISSING__:Claude (OAuth)", - "routingClaudeProviderDescription": "__MISSING__:Native Claude provider with OAuth-issued tokens.", - "routingCcBridgeName": "__MISSING__:Claude-Code Bridge", - "routingCcBridgeDescription": "__MISSING__:Relay endpoints using API keys (anthropic-compatible-cc-*).", - "routingCustomProviderDescription": "__MISSING__:Custom provider.", - "routingUnknownOpKind": "__MISSING__:Unknown op kind: {kind}", - "routingInvalidJson": "__MISSING__:Invalid JSON: {error}", - "routingConfigMustBeObject": "__MISSING__:Config must be a JSON object", - "routingEnabledMustBeBoolean": "__MISSING__:`enabled` must be true or false", - "routingPipelineMustBeArray": "__MISSING__:`pipeline` must be an array of ops", - "routingPipelineTooLong": "__MISSING__:Pipeline cannot exceed 50 ops", - "routingOpMissingKind": "__MISSING__:Op #{index}: missing or invalid `kind`", - "routingOpUnknownKind": "__MISSING__:Op #{index}: unknown kind \"{kind}\"", - "routingJsonEditorHide": "__MISSING__:Hide JSON editor", - "routingJsonEditorImportExport": "__MISSING__:Import / export JSON", - "routingJsonEditorLabel": "__MISSING__:JSON (edit and apply, or paste to import)", - "routingApplyJson": "__MISSING__:Apply JSON", - "routingTransformsFootnote": "__MISSING__:All transform ops are idempotent on re-run. Changes take effect immediately on the next request." + "oneproxyClearAllConfirm": "Limpar todos os proxies 1proxy?", + "memorySkillsSkillsmpDescription": "Conecte-se ao SkillsMP para descobrir e instalar habilidades do marketplace.", + "memorySkillsActiveProviderDescription": "Escolha qual provedor a página de Habilidades usa para pesquisa e instalação.", + "memorySkillsSkillsmpProviderTitle": "Marketplace SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Marketplace autenticado (usa sua chave de API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Diretório skills.sh", + "memorySkillsSkillsshProviderDescription": "Provedor de diretório público (nenhuma chave de API necessária).", + "routingCcBridgeCatalogName": "Ponte CC compatível com Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Provedor nativo Claude com tokens emitidos pelo OAuth.", + "routingCcBridgeName": "Ponte Claude-Code", + "routingCcBridgeDescription": "Endpoints de relay usando chaves de API (compatível com anthropic-cc-*).", + "routingCustomProviderDescription": "Fornecedor personalizado.", + "routingUnknownOpKind": "Tipo de op desconhecido: {kind}", + "routingInvalidJson": "JSON inválido: {error}", + "routingConfigMustBeObject": "A configuração deve ser um objeto JSON", + "routingEnabledMustBeBoolean": "`enabled` deve ser verdadeiro ou falso", + "routingPipelineMustBeArray": "`pipeline` deve ser um array de ops", + "routingPipelineTooLong": "O pipeline não pode exceder 50 ops", + "routingOpMissingKind": "Op #{index}: `kind` ausente ou inválido", + "routingOpUnknownKind": "Op #{index}: tipo desconhecido \"{kind}\"", + "routingJsonEditorHide": "Ocultar editor JSON", + "routingJsonEditorImportExport": "Importar / exportar JSON", + "routingJsonEditorLabel": "JSON (edite e aplique, ou cole para importar)", + "routingApplyJson": "Aplicar JSON", + "routingTransformsFootnote": "Todas as operações de transformação são idempotentes em reexecuções. As alterações entram em vigor imediatamente na próxima solicitação.", + "cliproxyapiUnknown": "Desconhecido", + "cliproxyapiVersion": "Versão", + "cliproxyapiHealth": "Saúde", + "cliproxyapiPort": "Porta", + "qdrantHost": "Host", + "qdrantCollection": "Coleção" }, "contextRtk": { "title": "Motor RTK", @@ -8169,20 +8198,20 @@ "tooltipDedup": "Quão agressivamente remover linhas repetidas.", "tooltipMaxChars": "Máximo de caracteres por bloco de saída.", "tooltipMaxLines": "Máximo de linhas a serem mantidas na saída do comando. O excesso é truncado.", - "learnDiscoverTitle": "__MISSING__:Learn & Discover filters", - "learnDiscoverDesc": "__MISSING__:Mine your captured command output (Raw Output retention must be on) to suggest new RTK filters. Suggestions only — you review and save them.", - "discoverHeading": "__MISSING__:Discover repeated noise", - "discoverButton": "__MISSING__:Scan samples", - "discoverScanning": "__MISSING__:Scanning…", - "discoverEmpty": "__MISSING__:No repeated noise found. Enable Raw Output retention and run a few commands first.", - "discoverSamples": "__MISSING__:{count} sample(s) scanned", - "discoverHits": "__MISSING__:{hits}× across samples", - "learnHeading": "__MISSING__:Learn a filter for a command", - "learnCommandPlaceholder": "__MISSING__:e.g. npm install", - "learnButton": "__MISSING__:Suggest filter", - "learnEmpty": "__MISSING__:No suggestion yet. Type a command you have run and scan.", - "learnSamplesUsed": "__MISSING__:Learned from {count} matching sample(s)", - "suggestionError": "__MISSING__:Could not load suggestions. Check management auth and try again.", + "learnDiscoverTitle": "Filtros de Aprendizado e Descoberta", + "learnDiscoverDesc": "Extraia a saída do comando capturado (a retenção de Saída Bruta deve estar ativada) para sugerir novos filtros RTK. Somente sugestões — você revisa e as salva.", + "discoverHeading": "Descubra ruído repetido", + "discoverButton": "Escanear amostras", + "discoverScanning": "Escaneando…", + "discoverEmpty": "Nenhum ruído repetido encontrado. Ative a retenção de Saída Bruta e execute alguns comandos primeiro.", + "discoverSamples": "{count} amostra(s) escaneada(s)", + "discoverHits": "{hits}× em amostras", + "learnHeading": "Aprenda um filtro para um comando", + "learnCommandPlaceholder": "e.g. npm install", + "learnButton": "Sugerir filtro", + "learnEmpty": "Nenhuma sugestão ainda. Digite um comando que você executou e escaneie.", + "learnSamplesUsed": "Aprendido com {count} amostra(s) correspondente(s)", + "suggestionError": "Não foi possível carregar as sugestões. Verifique a autenticação de gerenciamento e tente novamente.", "tomlImportTitle": "Importar filtros TOML do RTK", "tomlImportDesc": "Valide os filtros do esquema TOML v1 do RTK e instale-os globalmente. A instalação grava em DATA_DIR/rtk/filters.toml; arquivos existentes só são substituídos após confirmação explícita.", "tomlChooseFile": "Escolher um arquivo TOML", @@ -8352,13 +8381,13 @@ } }, "modeOptions": { - "default": "__MISSING__:Default", - "off": "__MISSING__:Off", - "lite": "__MISSING__:Lite", - "standard": "__MISSING__:Standard", - "aggressive": "__MISSING__:Aggressive", - "ultra": "__MISSING__:Ultra", - "responsesToolOutput": "__MISSING__:Responses tool output" + "default": "Padrão", + "off": "Desligado", + "lite": "Lite", + "standard": "Padrão", + "aggressive": "Agressivo", + "ultra": "Ultra", + "responsesToolOutput": "Saída da ferramenta de respostas" } }, "contextCombos": { @@ -8524,7 +8553,8 @@ "enableDescription": "Executa por último na pilha (depois que RTK/Caveman limpa o texto, o OmniGlyph converte o restante em imagens) e também roda de forma independente pelo modo omniglyph. Este é um preview e permanece desativado por padrão até que a validação de ponta a ponta seja concluída.", "saved": "Salvo.", "saveFailed": "Não foi possível salvar.", - "enableAria": "Ativar a engine OmniGlyph" + "enableAria": "Ativar a engine OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Serviços Embarcados", @@ -8965,10 +8995,10 @@ "conceptDiagramHubTooltip": "Hub intermediário usado pelo translator para converter entre formatos que não têm mapeamento direto.", "conceptDiagramSourceTooltip": "O formato de API que sua app fala (ex: SDK Anthropic = claude).", "conceptDiagramTargetTooltip": "O provider para onde a requisição será realmente enviada.", - "compressionEmptyHint": "__MISSING__:Fill in the input field on the Translate tab (Simple Controls or Raw JSON) to enable the preview.", - "compressionModeLabel": "__MISSING__:Compression mode", - "compressionPreviewButton": "__MISSING__:Preview Compression", - "compressionPreviewing": "__MISSING__:Previewing…", + "compressionEmptyHint": "Preencha o campo de entrada na aba Traduzir (Controles Simples ou JSON Bruto) para habilitar a pré-visualização.", + "compressionModeLabel": "Modo de compressão", + "compressionPreviewButton": "Pré-visualização da Compressão", + "compressionPreviewing": "Visualizando…", "compressionPreviewFailed": "Falha na pré-visualização da compressão", "tokens": "fichas", "pauseAutoRefresh": "Pausar atualização automática", @@ -9020,7 +9050,7 @@ "promptCache": "Cache de Prompt", "systemHealth": "Saúde do Sistema", "entries": "Entradas", - "activeCount": "{count, plural, one {# ativo} other {# ativos}}", + "activeCount": "{count} active", "openCircuitBreakersDetected": "Disjuntores abertos detectados", "hitRate": "Taxa de Acerto", "hitsMisses": "Acertos / Erros", @@ -9133,10 +9163,10 @@ "loadingQuotas": "Carregando...", "showMoreQuotas": "Mostrar mais {count}", "showLessQuotas": "Mostrar menos", - "hideQuotaRow": "__MISSING__:Hide this quota row", - "showQuotaRow": "__MISSING__:Show this quota row", - "hiddenQuotaRowsLabel": "__MISSING__:Hidden:", - "quotaVisibilityUpdateFailed": "__MISSING__:Failed to update quota visibility", + "hideQuotaRow": "Ocultar esta linha de cota", + "showQuotaRow": "Mostrar esta linha de cota", + "hiddenQuotaRowsLabel": "Oculto:", + "quotaVisibilityUpdateFailed": "Falha ao atualizar a visibilidade da cota", "account": "Conta", "modelQuotas": "Cotas de Modelo", "lastUsed": "Last Refreshed", @@ -9226,7 +9256,7 @@ "evalTargetHint": "Os padrões da suíte preservam o modelo configurado em cada caso de teste.", "suiteBuilderDeleted": "Suíte customizada removida", "suiteBuilderCaseCardHint": "Defina um prompt e uma asserção para esta checagem de regressão.", - "nextResetUtc": "Próximo reset (UTC): {value}", + "nextResetUtc": "Next reset (UTC)", "scorecardHint": "Últimas taxas de aprovação armazenadas para execuções e alvos recentes.", "suiteLatestRunsHint": "As execuções armazenadas continuam disponíveis após atualizar a página.", "saving": "Saving", @@ -9237,7 +9267,7 @@ "notifySelectDifferentCompareTarget": "Escolha um alvo de comparação diferente", "recentRunsHint": "O histórico sobrevive ao refresh e agora registra comparações combo-aware.", "evalCompareHint": "Comparação lado a lado opcional usando a mesma suíte.", - "suiteBuilderCaseInvalid": "O caso {index} está incompleto. Preencha nome, modelo, prompt e valor esperado.", + "suiteBuilderCaseInvalid": "This case has validation errors. Please fix before saving.", "historyEmpty": "Ainda não há execuções persistidas", "suiteBuilderUpdated": "Suíte customizada atualizada", "resetInterval": "Intervalo de reset", @@ -9251,7 +9281,7 @@ "runCompletedWithScore": "Execução concluída com {score}% de aprovação", "suiteBuilderCustomBadge": "Custom", "targetSuiteDefaults": "Padrões da suíte", - "suiteBuilderDeleteConfirm": "Excluir a suíte customizada \"{name}\"?", + "suiteBuilderDeleteConfirm": "Are you sure you want to delete this suite? This action cannot be undone.", "suiteBuilderNameLabel": "Nome da Suíte", "scorecardSuites": "Suites", "evalCompareTarget": "Compare Target", @@ -9292,7 +9322,7 @@ "suiteBuilderCreated": "Suíte customizada criada", "suiteLatestRuns": "Latest Runs", "suiteBuilderCaseExpectedLabel": "Expected Value", - "historyLatency": "{value}ms de latência média", + "historyLatency": "Latency", "suiteBuilderCaseTagsPlaceholder": "support, regression, billing", "targetTypeCombo": "Combo", "scorecardPassed": "Passed", @@ -9310,7 +9340,7 @@ "edit": "Edit", "monthly": "Mensal", "suiteBuilderCasesRequired": "Adicione pelo menos um caso antes de salvar", - "weeklyLimitSummary": "Limite semanal: {value}", + "weeklyLimitSummary": "Weekly budget limit summary", "suiteBuilderDescriptionLabel": "Descrição", "targetComparisonHint": "A mesma suíte foi executada contra múltiplos alvos.", "compareCompletedWithScore": "Comparação concluída. A execução principal terminou com {score}% de aprovação", @@ -9377,7 +9407,7 @@ "budgetColDailyLim": "Limite diário", "budgetColMonthlyLim": "Limite mensal", "budgetColUsedPct": "% usado", - "percentUsed": "__MISSING__:{pct}% used", + "percentUsed": "{pct}% usado", "budgetLoading": "Carregando…", "budgetNoKeysMatch": "Nenhuma chave corresponde aos filtros", "budgetLinearExtrapolation": "extrapolação linear", @@ -9472,47 +9502,47 @@ "resources": "Recursos", "company": "Empresa", "tokenHealthTooltips": { - "allHealthy": "__MISSING__:All tokens healthy", - "needsAttention": "__MISSING__:Some tokens need attention", - "refreshFailures": "__MISSING__:Token refresh failures detected", - "unknown": "__MISSING__:Health status unknown" + "allHealthy": "Todos os tokens saudáveis", + "needsAttention": "Alguns tokens precisam de atenção", + "refreshFailures": "Falhas na atualização do token detectadas", + "unknown": "Status de saúde desconhecido" }, "systemMonitor": { - "metricsAriaLabel": "__MISSING__:System metrics", - "memory": "__MISSING__:Memory", - "memoryShort": "__MISSING__:mem", - "uptime": "__MISSING__:Uptime", - "ariaLabel": "__MISSING__:System monitoring", - "title": "__MISSING__:System Monitor", - "version": "__MISSING__:Version", - "connections": "__MISSING__:Connections", - "circuitBreakers": "__MISSING__:Circuit Breakers", - "open": "__MISSING__:{count} open", - "memoryUsage": "__MISSING__:Memory usage" + "metricsAriaLabel": "Métricas do sistema", + "memory": "Memória", + "memoryShort": "mem", + "uptime": "Tempo de Atividade", + "ariaLabel": "Monitoramento do sistema", + "title": "Monitor do Sistema", + "version": "Versão", + "connections": "Conexões", + "circuitBreakers": "Disjuntores", + "open": "{count} aberto", + "memoryUsage": "Uso de memória" }, - "never": "__MISSING__:Never", - "justNow": "__MISSING__:Just now", - "minutesAgo": "__MISSING__:{count}m ago", - "hoursAgo": "__MISSING__:{count}h ago", - "tokens": "__MISSING__:Tokens", - "costs": "__MISSING__:Costs", - "autoRefresh": "__MISSING__:Auto Refresh ({seconds}s)", - "toggleAutoRefresh": "__MISSING__:Toggle auto refresh", - "activeRequests": "__MISSING__:Active Requests", - "totalRequests": "__MISSING__:Total Requests", - "totalInputTokens": "__MISSING__:Total Input Tokens", - "model": "__MISSING__:Model", - "provider": "__MISSING__:Provider", - "requests": "__MISSING__:Requests", - "lastUsed": "__MISSING__:Last Used", - "inputTokens": "__MISSING__:Input Tokens", - "totalTokens": "__MISSING__:Total Tokens", - "inputCost": "__MISSING__:Input Cost", - "outputCost": "__MISSING__:Output Cost", - "noUsageData": "__MISSING__:No usage recorded yet. Make some requests to see data here.", - "account": "__MISSING__:Account", - "accountLabel": "__MISSING__:Account {id}", - "noAccountUsage": "__MISSING__:No account-specific usage recorded yet. Make requests using OAuth accounts to see data here." + "never": "Nunca", + "justNow": "Agora mesmo", + "minutesAgo": "há {count}m", + "hoursAgo": "há {count}h", + "tokens": "Tokens", + "costs": "Custos", + "autoRefresh": "Atualização Automática ({seconds}s)", + "toggleAutoRefresh": "Ativar/desativar atualização automática", + "activeRequests": "Solicitações Ativas", + "totalRequests": "Total de Solicitações", + "totalInputTokens": "Total de Tokens de Entrada", + "model": "Modelo", + "provider": "Provedor", + "requests": "Solicitações", + "lastUsed": "Último Uso", + "inputTokens": "Tokens de Entrada", + "totalTokens": "Total de Tokens", + "inputCost": "Custo de Entrada", + "outputCost": "Custo de Saída", + "noUsageData": "Nenhum uso registrado ainda. Faça algumas solicitações para ver os dados aqui.", + "account": "Conta", + "accountLabel": "Conta {id}", + "noAccountUsage": "Nenhum uso específico da conta registrado ainda. Faça solicitações usando contas OAuth para ver os dados aqui." }, "auth": { "welcome": "Bem-vindo", @@ -9579,41 +9609,57 @@ "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", - "resetViaAppDataTitle": "__MISSING__:Reset via App Data", - "resetViaAppDataDescription": "__MISSING__:Delete the settings file from the app data directory to reset your password:", - "quitDesktopApp": "__MISSING__:Quit the OmniRoute desktop app completely", - "navigateToAppDataDirectory": "__MISSING__:Navigate to the app data directory:", - "checkSystemAppDataFolder": "__MISSING__:(Check your system app data folder)", - "relaunchDesktopFreshSetup": "__MISSING__:Relaunch the OmniRoute desktop app — it will start fresh setup", - "alternativeSetPasswordTitle": "__MISSING__:Alternative: Set New Password", - "alternativeSetPasswordDescription": "__MISSING__:Set a new initial password via the server environment file:", - "openServerEnvFilePrefix": "__MISSING__:Open", - "relaunchDesktopApp": "__MISSING__:Relaunch the OmniRoute desktop app", - "codexLinkInvalidOrExpired": "__MISSING__:This link is invalid or expired.", - "codexValidationServerError": "__MISSING__:Could not reach the server to validate this link.", - "codexSaveConnectionError": "__MISSING__:Could not save the connection. The link may have expired.", - "codexDeviceLoginDisabled": "__MISSING__:Device code login is disabled for this OpenAI account. Enable it in ChatGPT security settings (or ask your workspace admin).", - "codexAuthorizationTimedOut": "__MISSING__:Authorization timed out. Click Start again to retry.", - "authenticationCancelled": "__MISSING__:Authentication was cancelled.", - "unexpectedAuthenticationError": "__MISSING__:Unexpected error during authentication. Please try again.", - "connectOpenAiCodexTitle": "__MISSING__:Connect OpenAI Codex", - "codexConnectDescription": "__MISSING__:Authorize a ChatGPT account to finish setting up this connection.", - "validatingCodexLink": "__MISSING__:Validating link…", - "codexGenerateCodeDescription": "__MISSING__:Click below to generate a one-time code, then sign in to OpenAI.", - "startCodexFlow": "__MISSING__:Start", - "requestingOpenAiCode": "__MISSING__:Requesting code from OpenAI…", - "codexVerificationInstructions": "__MISSING__:1. Open the OpenAI verification page and 2. enter this code. This page updates automatically once you authorize.", - "yourCode": "__MISSING__:Your code", - "openVerificationPage": "__MISSING__:Open verification page", - "copyUrlShort": "__MISSING__:Copy URL", - "savingConnection": "__MISSING__:Saving connection…", - "codexConnected": "__MISSING__:Connected!", - "codexConnectionRegistered": "__MISSING__:The Codex account was registered. You can close this tab.", - "tryAgain": "__MISSING__:Try again", - "traeAuthorizationSuccess": "__MISSING__:Trae authorization ✓", - "traeAuthorizationFailed": "__MISSING__:Trae authorization failed", - "closeAuthorizationWindow": "__MISSING__:You can close this window.", - "returnToDashboard": "__MISSING__:Return to the dashboard." + "resetViaAppDataTitle": "Redefinir via Dados do App", + "resetViaAppDataDescription": "Exclua o arquivo de configurações do diretório de dados do aplicativo para redefinir sua senha:", + "quitDesktopApp": "Saia do aplicativo desktop OmniRoute completamente", + "navigateToAppDataDirectory": "Navegue até o diretório de dados do aplicativo:", + "checkSystemAppDataFolder": "(Verifique a pasta de dados do aplicativo do sistema)", + "relaunchDesktopFreshSetup": "Reinicie o aplicativo de desktop OmniRoute — ele iniciará uma nova configuração", + "alternativeSetPasswordTitle": "Alternativa: Definir Nova Senha", + "alternativeSetPasswordDescription": "Defina uma nova senha inicial através do arquivo de ambiente do servidor:", + "openServerEnvFilePrefix": "Abrir", + "relaunchDesktopApp": "Reinicie o aplicativo desktop OmniRoute", + "codexLinkInvalidOrExpired": "Este link é inválido ou expirou.", + "codexValidationServerError": "Não foi possível acessar o servidor para validar este link.", + "codexSaveConnectionError": "Não foi possível salvar a conexão. O link pode ter expirado.", + "codexDeviceLoginDisabled": "O login com código de dispositivo está desativado para esta conta OpenAI. Ative-o nas configurações de segurança do ChatGPT (ou peça ao administrador do seu espaço de trabalho).", + "codexAuthorizationTimedOut": "A autorização expirou. Clique em Iniciar novamente para tentar novamente.", + "authenticationCancelled": "A autenticação foi cancelada.", + "unexpectedAuthenticationError": "Erro inesperado durante a autenticação. Por favor, tente novamente.", + "connectOpenAiCodexTitle": "Conectar OpenAI Codex", + "codexConnectDescription": "Autorize uma conta ChatGPT para concluir a configuração desta conexão.", + "validatingCodexLink": "Validando link…", + "codexGenerateCodeDescription": "Clique abaixo para gerar um código de uso único e, em seguida, faça login no OpenAI.", + "startCodexFlow": "Iniciar", + "requestingOpenAiCode": "Solicitando código do OpenAI…", + "codexVerificationInstructions": "1. Abra a página de verificação da OpenAI e 2. insira este código. Esta página é atualizada automaticamente assim que você autoriza.", + "yourCode": "Seu código", + "openVerificationPage": "Abrir página de verificação", + "copyUrlShort": "Copiar URL", + "savingConnection": "Salvando conexão…", + "codexConnected": "Conectado!", + "codexConnectionRegistered": "A conta Codex foi registrada. Você pode fechar esta aba.", + "tryAgain": "Tente novamente", + "traeAuthorizationSuccess": "Trae autorização ✓", + "traeAuthorizationFailed": "Falha na autorização do Trae", + "closeAuthorizationWindow": "Você pode fechar esta janela.", + "returnToDashboard": "Voltar ao painel.", + "resetViaAppData": "Redefinir via Dados do App", + "deleteSettingsToReset": "Exclua o arquivo de configurações do diretório de dados do aplicativo para redefinir sua senha:", + "quitAppCompletely": "Saia do aplicativo de desktop OmniRoute completamente", + "navigateToAppData": "Navegue até o diretório de dados do aplicativo", + "checkAppDataFolder": "Verifique a pasta de dados do aplicativo do seu sistema", + "deleteSettingsJson": "Excluir", + "relaunchAppFresh": "Reinicie o aplicativo desktop OmniRoute — ele iniciará uma nova configuração", + "alternativeSetPassword": "Alternativa: Definir Nova Senha", + "setNewPasswordViaEnv": "Defina uma nova senha inicial através do arquivo de ambiente do servidor:", + "openServerEnv": "Abrir", + "inDataDirectory": "no diretório de dados", + "addOrUpdate": "Adicionar ou atualizar", + "deleteAndRelaunch": "Excluir", + "settingsJson": "settings.json", + "fromDataDir": "do diretório de dados", + "relaunchApp": "Reinicie o aplicativo de desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9696,18 +9742,18 @@ "ctaDescription": "Junte-se a desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Open source e grátis para começar.", "startFree": "Começar grátis", "readDocumentation": "Ler documentação", - "company": "__MISSING__:Company", - "pricing": "__MISSING__:Pricing", - "apiReference": "__MISSING__:API Reference", - "helpCenter": "__MISSING__:Help Center", - "about": "__MISSING__:About", - "blog": "__MISSING__:Blog", - "contact": "__MISSING__:Contact", - "terms": "__MISSING__:Terms", - "privacy": "__MISSING__:Privacy", - "license": "__MISSING__:License", - "footerDescription": "__MISSING__:The unified interface for modern AI infrastructure. Secure, observable, and scalable.", - "communityDiscussions": "__MISSING__:Community Discussions" + "company": "Empresa", + "pricing": "Preços", + "apiReference": "Referência da API", + "helpCenter": "Central de Ajuda", + "about": "Sobre", + "blog": "Blog", + "contact": "Contato", + "terms": "Termos", + "privacy": "Privacidade", + "license": "Licença", + "footerDescription": "A interface unificada para infraestrutura de IA moderna. Segura, observável e escalável.", + "communityDiscussions": "Discussões da Comunidade" }, "docs": { "title": "Documentação", @@ -9917,49 +9963,49 @@ "protocolAcpStep1": "Abra Painel -> Agents para verificar quais binários locais estão instalados e disponíveis como workers.", "protocolAcpStep2": "Use Painel -> CLI Tools quando você precisa de configuração de cliente em vez de spawn de worker.", "protocolAcpStep3": "Combine workers ACP com logs de auditoria e health para entender o que o OmniRoute iniciou e por quê.", - "metadataTitleTemplate": "__MISSING__:%s — OmniRoute Docs", - "metadataDefaultTitle": "__MISSING__:OmniRoute Documentation", - "metadataDescription": "__MISSING__:Comprehensive documentation for OmniRoute AI gateway — setup, API, compression, deployment, and more.", - "layoutNavTitle": "__MISSING__:OmniRoute Docs", - "layoutHomeLink": "__MISSING__:Docs Home", - "layoutDashboardLink": "__MISSING__:← Back to Dashboard", - "homeTitle": "__MISSING__:OmniRoute Documentation", - "homeMetadataDescription": "__MISSING__:Everything you need to route, compress, and scale your AI — setup guides, API reference, compression, deployment, and more.", - "homeTwitterDescription": "__MISSING__:Comprehensive docs for OmniRoute AI gateway", - "homeDescription": "__MISSING__:Everything you need to route, compress, and scale your AI", - "homeSearchHint": "__MISSING__:Press Ctrl K to search the docs", - "featuredQuickStartTitle": "__MISSING__:Quick Start", - "featuredQuickStartDescription": "__MISSING__:Get OmniRoute running in 3 minutes", - "featuredAutoComboTitle": "__MISSING__:Auto-Combo Guide", - "featuredAutoComboDescription": "__MISSING__:Let OmniRoute pick the best AI for you", - "featuredProvidersTitle": "__MISSING__:Providers Guide", - "featuredProvidersDescription": "__MISSING__:Connect AI providers in minutes", - "nonTechUsersTitle": "__MISSING__:For Non-Tech Users", - "nonTechUsersSubtitle": "__MISSING__:Get started quickly — no technical background needed", - "techUsersTitle": "__MISSING__:For Tech Users", - "techUsersSubtitle": "__MISSING__:Deep dive into architecture, APIs, and internals", - "apiExplorerMetadataTitle": "__MISSING__:API Explorer — OmniRoute Docs", - "apiExplorerMetadataDescription": "__MISSING__:Interactive API explorer — try OmniRoute endpoints live with real-time responses", - "apiExplorerTitle": "__MISSING__:API Explorer", - "apiExplorerDescription": "__MISSING__:Try OmniRoute endpoints live. Select an endpoint, configure your request, and see the response in real time.", - "apiExplorerSseStarted": "__MISSING__:SSE stream started — check the terminal/devtools for real-time output.", - "apiExplorerError": "__MISSING__:Error: {message}", - "apiExplorerAuth": "__MISSING__:auth", - "apiExplorerResponseLabel": "__MISSING__:Response", - "apiExplorerSelectEndpoint": "__MISSING__:Select an endpoint to explore", - "apiExplorerChooseApi": "__MISSING__:Choose an API from the sidebar to see details and try it live", - "feedbackThanks": "__MISSING__:Thanks for your feedback!", - "feedbackQuestion": "__MISSING__:Was this page helpful?", - "pageMetadataTitle": "__MISSING__:{title} — OmniRoute Docs", - "pageMetadataDescription": "__MISSING__:OmniRoute documentation: {title}", - "breadcrumb": "__MISSING__:Breadcrumb", + "metadataTitleTemplate": "%s — Documentação do OmniRoute", + "metadataDefaultTitle": "Documentação do OmniRoute", + "metadataDescription": "Documentação abrangente para o gateway OmniRoute AI — configuração, API, compressão, implantação e mais.", + "layoutNavTitle": "Documentação do OmniRoute", + "layoutHomeLink": "Início da Documentação", + "layoutDashboardLink": "← Voltar ao Painel", + "homeTitle": "Documentação do OmniRoute", + "homeMetadataDescription": "Tudo o que você precisa para roteirizar, comprimir e escalar sua IA — guias de configuração, referência da API, compressão, implantação e mais.", + "homeTwitterDescription": "Documentação abrangente para o gateway OmniRoute AI", + "homeDescription": "Tudo o que você precisa para roteirizar, comprimir e escalar sua IA", + "homeSearchHint": "Pressione Ctrl K para pesquisar a documentação", + "featuredQuickStartTitle": "Início Rápido", + "featuredQuickStartDescription": "Coloque o OmniRoute em funcionamento em 3 minutos", + "featuredAutoComboTitle": "Guia de Auto-Combo", + "featuredAutoComboDescription": "Deixe o OmniRoute escolher a melhor IA para você", + "featuredProvidersTitle": "Guia de Fornecedores", + "featuredProvidersDescription": "Conecte provedores de IA em minutos", + "nonTechUsersTitle": "Para Usuários Não Técnicos", + "nonTechUsersSubtitle": "Comece rapidamente — nenhum conhecimento técnico necessário", + "techUsersTitle": "Para Usuários de Tecnologia", + "techUsersSubtitle": "Mergulhe na arquitetura, APIs e internos", + "apiExplorerMetadataTitle": "Explorador de API — Documentação do OmniRoute", + "apiExplorerMetadataDescription": "Explorador de API interativo — experimente os endpoints do OmniRoute ao vivo com respostas em tempo real", + "apiExplorerTitle": "Explorador de API", + "apiExplorerDescription": "Experimente os endpoints do OmniRoute ao vivo. Selecione um endpoint, configure sua solicitação e veja a resposta em tempo real.", + "apiExplorerSseStarted": "Fluxo SSE iniciado — verifique o terminal/devtools para saída em tempo real.", + "apiExplorerError": "Erro: {message}", + "apiExplorerAuth": "autenticação", + "apiExplorerResponseLabel": "Resposta", + "apiExplorerSelectEndpoint": "Selecione um endpoint para explorar", + "apiExplorerChooseApi": "Escolha uma API na barra lateral para ver os detalhes e experimentá-la ao vivo", + "feedbackThanks": "Obrigado pelo seu feedback!", + "feedbackQuestion": "Esta página foi útil?", + "pageMetadataTitle": "{title} — Documentação do OmniRoute", + "pageMetadataDescription": "Documentação do OmniRoute: {title}", + "breadcrumb": "Caminho de Navegação", "apiReferenceTable": { - "parameters": "__MISSING__:Parameters", - "name": "__MISSING__:Name", - "type": "__MISSING__:Type", - "description": "__MISSING__:Description", - "returns": "__MISSING__:Returns", - "typePrefix": "__MISSING__:Type:" + "parameters": "Parâmetros", + "name": "Nome", + "type": "Tipo", + "description": "Descrição", + "returns": "Retornos", + "typePrefix": "Tipo:" } }, "legal": { @@ -10434,42 +10480,41 @@ "done": "Concluído", "error": "Falha na conexão", "tryAgain": "Tente novamente", - "errorSessionIncomplete": "__MISSING__:OAuth session is incomplete (missing redirect URI or code verifier). Restart the connection and try again.", - "errorExchangeFailed": "__MISSING__:Exchange failed", - "errorGoogleRedirectMismatch": "__MISSING__:redirect_uri_mismatch: The default Google OAuth credentials only work on localhost. For remote use, configure your own OAuth credentials via environment variables: ANTIGRAVITY_OAUTH_CLIENT_ID and ANTIGRAVITY_OAUTH_CLIENT_SECRET. See the README section 'OAuth on a Remote Server'.", - "errorSaveFailed": "__MISSING__:Save failed", - "errorAuthorizationFailed": "__MISSING__:Authorization failed", - "errorAuthorizationTimeout": "__MISSING__:Authorization timeout", - "errorRequestFailed": "__MISSING__:Request failed", - "errorCallbackServerFailed": "__MISSING__:Failed to start callback server", - "errorBrowserUnavailable": "__MISSING__:Browser OAuth is unavailable for this provider in the current environment. Use the supported auth method instead.", - "errorStateMismatch": "__MISSING__:OAuth state mismatch. Restart the connection and try again.", - "errorImportAccessToken": "__MISSING__:Failed to import access token", - "errorSessionNotInitialized": "__MISSING__:OAuth session not initialized. Restart the connection flow and try again.", - "errorNoAuthorizationCode": "__MISSING__:No authorization code found. Paste the callback URL or the Authentication Code.", - "tabDeviceCode": "__MISSING__:Device Code", - "tabBrowserLogin": "__MISSING__:Browser Login", - "tabImportAuthJson": "__MISSING__:Import auth.json", - "tabPasteApiKey": "__MISSING__:Paste API Key", - "windsurfPasteDescription": "__MISSING__:In the Windsurf / VS Code IDE, run the \"Windsurf: Provide Auth Token\" command from the command palette (or click the Jupyter \"Get Windsurf Authentication Token\" button), then copy the shown token and paste it below. Opening windsurf.com/show-auth-token directly only shows a \"Redirecting\" page — the IDE must initiate the flow.", - "grokAuthJsonDescription": "__MISSING__:Paste the FULL contents of ~/.grok/auth.json (not just the JWT \"key\" field). A bare JWT has no refresh_token, so the connection dies after expiry (#7610). Prefer the dedicated Import auth.json modal when available.", - "devinDesktopPasteDescription": "__MISSING__:Paste an existing Devin API key from an authenticated Devin session. Key export availability and steps vary by Devin version and account.", - "devinPasteDescription": "__MISSING__:Provide your WINDSURF_API_KEY (obtained via `devin auth login`, or via the Windsurf IDE \"Windsurf: Provide Auth Token\" command).", - "grokAuthJsonPlaceholder": "__MISSING__:{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", - "grokAuthJsonLabel": "__MISSING__:Grok Build auth.json", - "apiTokenPlaceholder": "__MISSING__:ws-...", - "apiKeyTokenLabel": "__MISSING__:API Key / Token", - "saving": "__MISSING__:Saving…", - "saveConnection": "__MISSING__:Save Connection", - "gheDescription": "__MISSING__:Enter the base URL of your GitHub Enterprise instance (e.g. https://ghe.yourcompany.com).", - "gheUrlPlaceholder": "__MISSING__:https://ghe.yourcompany.com", - "gheUrlLabel": "__MISSING__:GitHub Enterprise URL", - "gheUrlRequired": "__MISSING__:GitHub Enterprise URL is required", - "gitlabDuoSetupTitle": "__MISSING__:GitLab Duo OAuth setup", - "gitlabDuoSetupMessage": "__MISSING__:GitLab Duo OAuth is not configured. Register an OAuth application at {applicationsUrl} with redirect URI {redirectUri} and scopes \"{scopes}\", then set {clientIdEnv} (and optionally {clientSecretEnv}) and restart.", - "gitlabDuoSetupDescription": "__MISSING__:After the application is registered and the env vars are set on this OmniRoute instance, click Continue to start the OAuth login.", - "continue": "__MISSING__:Continue", - "googleOAuthWarning": "Acesso remoto + Google OAuth: as credenciais padrão aceitam apenas redirecionamentos para localhost. Após a autorização, seu navegador tentará abrir localhost — copie o URL completo e cole-o abaixo. Para uso totalmente remoto sem esta etapa manual, configure suas próprias credenciais OAuth." + "errorSessionIncomplete": "A sessão OAuth está incompleta (faltando URI de redirecionamento ou verificador de código). Reinicie a conexão e tente novamente.", + "errorExchangeFailed": "Troca falhou", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: As credenciais padrão do Google OAuth funcionam apenas no localhost. Para uso remoto, configure suas próprias credenciais OAuth através de variáveis de ambiente: ANTIGRAVITY_OAUTH_CLIENT_ID e ANTIGRAVITY_OAUTH_CLIENT_SECRET. Veja a seção README 'OAuth em um Servidor Remoto'.", + "errorSaveFailed": "Falha ao salvar", + "errorAuthorizationFailed": "Autorização falhou", + "errorAuthorizationTimeout": "Tempo limite de autorização", + "errorRequestFailed": "Solicitação falhou", + "errorCallbackServerFailed": "Falha ao iniciar o servidor de callback", + "errorBrowserUnavailable": "O OAuth do navegador não está disponível para este provedor no ambiente atual. Use o método de autenticação suportado em vez disso.", + "errorStateMismatch": "Desconexão de estado do OAuth. Reinicie a conexão e tente novamente.", + "errorImportAccessToken": "Falha ao importar o token de acesso", + "errorSessionNotInitialized": "Sessão OAuth não inicializada. Reinicie o fluxo de conexão e tente novamente.", + "errorNoAuthorizationCode": "Nenhum código de autorização encontrado. Cole a URL de callback ou o Código de Autenticação.", + "tabDeviceCode": "Código do Dispositivo", + "tabBrowserLogin": "Login no Navegador", + "tabImportAuthJson": "Importar auth.json", + "tabPasteApiKey": "Cole o API Key", + "windsurfPasteDescription": "No Windsurf / IDE do VS Code, execute o comando \"Windsurf: Provide Auth Token\" a partir da paleta de comandos (ou clique no botão \"Get Windsurf Authentication Token\" do Jupyter), em seguida copie o token exibido e cole-o abaixo. Abrir windsurf.com/show-auth-token diretamente apenas mostra uma página de \"Redirecionando\" — o IDE deve iniciar o fluxo.", + "grokAuthJsonDescription": "Cole o conteúdo COMPLETO de ~/.grok/auth.json (não apenas o campo \"key\" do JWT). Um JWT simples não possui refresh_token, então a conexão morre após a expiração (#7610). Prefira o modal dedicado de Importar auth.json quando disponível.", + "devinDesktopPasteDescription": "Cole uma chave de API Devin existente de uma sessão Devin autenticada. A disponibilidade de exportação da chave e os passos variam conforme a versão e a conta do Devin.", + "devinPasteDescription": "Forneça sua WINDSURF_API_KEY (obtida através do `devin auth login`, ou via o comando \"Windsurf: Provide Auth Token\" do Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Chave da API / Token", + "saving": "Salvando…", + "saveConnection": "Salvar Conexão", + "gheDescription": "Insira a URL base da sua instância do GitHub Enterprise (por exemplo, https://ghe.suaempresa.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL do GitHub Enterprise", + "gheUrlRequired": "A URL do GitHub Enterprise é obrigatória", + "gitlabDuoSetupTitle": "Configuração do OAuth Duo do GitLab", + "gitlabDuoSetupMessage": "O OAuth Duo do GitLab não está configurado. Registre um aplicativo OAuth em {applicationsUrl} com a URI de redirecionamento {redirectUri} e escopos \"{scopes}\", em seguida, defina {clientIdEnv} (e opcionalmente {clientSecretEnv}) e reinicie.", + "gitlabDuoSetupDescription": "Após o registro do aplicativo e a configuração das variáveis de ambiente nesta instância do OmniRoute, clique em Continuar para iniciar o login OAuth.", + "continue": "Continuar" }, "cursorAuthModal": { "title": "Conecte o Cursor IDE", @@ -10534,11 +10579,11 @@ "modalEditTitle": "Modal Edit Title", "labelName": "Label Name", "labelType": "Tipo", - "labelFamily": "__MISSING__:IP family", - "familyAuto": "__MISSING__:Auto (dual-stack)", - "familyIpv4": "__MISSING__:IPv4 only", - "familyIpv6": "__MISSING__:IPv6 only", - "familyHint": "__MISSING__:Egress address family. Auto keeps dual-stack; IPv4/IPv6 pin this proxy to that family (prevents a v4 leak under an IPv6-only proxy).", + "labelFamily": "Família IP", + "familyAuto": "Auto (dual-stack)", + "familyIpv4": "Apenas IPv4", + "familyIpv6": "Apenas IPv6", + "familyHint": "Família de endereços de saída. Auto mantém dual-stack; IPv4/IPv6 fixa este proxy naquela família (impede um vazamento v4 sob um proxy apenas IPv6).", "labelHost": "Anfitrião", "labelPort": "Porto", "labelUsername": "Nome de usuário", @@ -10985,101 +11030,101 @@ "noLogs": "No logs yet. Make some API calls to see them here.", "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", - "loadMore": "__MISSING__:Load More", - "loadingMore": "__MISSING__:Loading more...", - "correlationId": "__MISSING__:Correlation ID", + "loadMore": "Carregar Mais", + "loadingMore": "Carregando mais...", + "correlationId": "ID de Correlação", "group": { - "showAllRows": "__MISSING__:Show all rows", - "showLatestPerCorrelation": "__MISSING__:Show latest per correlation ID", - "grouped": "__MISSING__:Grouped" + "showAllRows": "Mostrar todas as linhas", + "showLatestPerCorrelation": "Mostrar o mais recente por ID de correlação", + "grouped": "Agrupado" }, - "running": "__MISSING__:running", + "running": "executando", "interval": { - "decrease": "__MISSING__:Decrease interval", - "title": "__MISSING__:Auto-refresh interval in seconds", - "increase": "__MISSING__:Increase interval" + "decrease": "Diminuir intervalo", + "title": "Intervalo de atualização automática em segundos", + "increase": "Aumentar intervalo" }, "status": { - "inProgress": "__MISSING__:In progress", - "recoveredByRetry": "__MISSING__:Recovered by retry", - "goToParent": "__MISSING__:Go to parent request", - "healedTitle": "__MISSING__:Failed, recovered after {count} retries", - "healed": "__MISSING__:healed", - "failedTitle": "__MISSING__:All {count} attempts failed", - "failed": "__MISSING__:failed", - "pinnedTitle": "__MISSING__:Model selected via context-cache session pinning", - "pinned": "__MISSING__:pinned" + "inProgress": "Em andamento", + "recoveredByRetry": "Recuperado por tentativa novamente", + "goToParent": "Ir para a solicitação pai", + "healedTitle": "Falhou, recuperado após {count} tentativas", + "healed": "curado", + "failedTitle": "Todas as {count} tentativas falharam", + "failed": "falhou", + "pinnedTitle": "Modelo selecionado via fixação de sessão do cache de contexto", + "pinned": "fixado" }, - "attempts": "__MISSING__:attempts", + "attempts": "tentativas", "detail": { - "collapse": "__MISSING__:Collapse {title}", - "expand": "__MISSING__:Expand {title}", - "copyTitle": "__MISSING__:Copy {title}", - "copied": "__MISSING__:Copied!", - "copy": "__MISSING__:Copy", - "autoscrollOn": "__MISSING__:Autoscroll: on", - "autoscrollOff": "__MISSING__:Autoscroll: off", + "collapse": "Recolher {title}", + "expand": "Expanda {title}", + "copyTitle": "Copiar {title}", + "copied": "Copiado!", + "copy": "Copiar", + "autoscrollOn": "Rolagem Automática: ativada", + "autoscrollOff": "Deslocamento Automático: desligado", "payload": { - "clientRawRequest": "__MISSING__:Client Raw Request", - "clientRequest": "__MISSING__:Client Request", - "openaiRequest": "__MISSING__:OpenAI Request", - "providerRequest": "__MISSING__:Provider Request", - "providerResponse": "__MISSING__:Provider Response", - "clientResponse": "__MISSING__:Client Response", - "pipelineError": "__MISSING__:Pipeline Error" + "clientRawRequest": "Solicitação Bruta do Cliente", + "clientRequest": "Solicitação do Cliente", + "openaiRequest": "Solicitação OpenAI", + "providerRequest": "Solicitação de Provedor", + "providerResponse": "Resposta do Provedor", + "clientResponse": "Resposta do Cliente", + "pipelineError": "Erro de Pipeline" }, - "payloadMissing": "__MISSING__:Detailed payload artifact is no longer available for this log entry.", - "payloadCorrupt": "__MISSING__:Detailed payload artifact could not be parsed.", - "notAvailable": "__MISSING__:N/A", - "semanticCache": "__MISSING__:Semantic (OmniRoute)", - "upstreamCache": "__MISSING__:Upstream (Provider)", - "ariaLabel": "__MISSING__:Request log detail", - "completed": "__MISSING__:Completed", - "upstreamStatus": "__MISSING__:Upstream: {status}", - "statusDiscrepancy": "__MISSING__:OmniRoute returned {status} even though provider returned {provider}", - "previousRequest": "__MISSING__:Previous request", - "nextRequest": "__MISSING__:Next request", - "close": "__MISSING__:Close detail modal", - "startedAt": "__MISSING__:Started At", - "endedAt": "__MISSING__:Ended At", - "duration": "__MISSING__:Duration", - "model": "__MISSING__:Model", - "provider": "__MISSING__:Provider", - "account": "__MISSING__:Account", - "input": "__MISSING__:Input", - "totalIn": "__MISSING__:Total In: {value}", - "cacheRead": "__MISSING__:Cache Read: {value}", - "cacheWrite": "__MISSING__:Cache Write: {value}", - "compressed": "__MISSING__:Compressed: {from} → {to} ({percent}% saved)", - "output": "__MISSING__:Output", - "totalOut": "__MISSING__:Total Out: {value}", - "reasoning": "__MISSING__:Reasoning: {value}", - "requestedModel": "__MISSING__:Requested Model", - "requestProtocol": "__MISSING__:Req Protocol", - "cacheSource": "__MISSING__:Cache Source", - "modelPinning": "__MISSING__:Model Pinning", - "activeModelPinning": "__MISSING__:Active — model selected via session pinning", - "rotated": "__MISSING__:Rotated: {initial} -> {final}", - "apiKey": "__MISSING__:API Key", - "noApiKey": "__MISSING__:No API key", - "combo": "__MISSING__:Combo", - "error": "__MISSING__:Error", - "unblockAll": "__MISSING__:Unblock all", - "cleared": "__MISSING__:Cleared", - "unblock": "__MISSING__:Unblock", - "relatedRequests": "__MISSING__:Related Requests ({count})", - "current": "__MISSING__:current", - "detailStatus": "__MISSING__:Detail Status", - "loadingDetails": "__MISSING__:Loading request details...", - "providerEventStream": "__MISSING__:Provider Event Stream", - "clientEventStream": "__MISSING__:Client Event Stream", - "eventStream": "__MISSING__:Event Stream", - "responsePayloadLegacy": "__MISSING__:Response Payload (Legacy)", - "requestPayloadLegacy": "__MISSING__:Request Payload (Legacy)", - "noPayload": "__MISSING__:No payload data available for this log entry.", - "correlationId": "__MISSING__:Correlation ID", - "correlationIdValue": "__MISSING__:Correlation ID: {id}", - "detailedPayloadInfo": "__MISSING__:Enable detailed logging first if you want the four-stage client/provider payload view for new requests." + "payloadMissing": "O artefato de carga detalhada não está mais disponível para esta entrada de log.", + "payloadCorrupt": "O artefato de carga detalhada não pôde ser analisado.", + "notAvailable": "N/A", + "semanticCache": "Semântico (OmniRoute)", + "upstreamCache": "Upstream (Fornecedor)", + "ariaLabel": "Detalhe do log de solicitação", + "completed": "Concluído", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute retornou {status} mesmo que o provedor tenha retornado {provider}", + "previousRequest": "Solicitação anterior", + "nextRequest": "Próximo pedido", + "close": "Fechar modal de detalhes", + "startedAt": "Iniciado Em", + "endedAt": "Encerrado Em", + "duration": "Duração", + "model": "Modelo", + "provider": "Provedor", + "account": "Conta", + "input": "Entrada", + "totalIn": "Total Entrada: {value}", + "cacheRead": "Leitura de Cache: {value}", + "cacheWrite": "Cache Write: {value}", + "compressed": "Compactado: {from} → {to} ({percent}% economizado)", + "output": "Saída", + "totalOut": "Total Saída: {value}", + "reasoning": "Raciocínio: {value}", + "requestedModel": "Modelo Solicitado", + "requestProtocol": "Protocolo Req", + "cacheSource": "Fonte de Cache", + "modelPinning": "Fixação de Modelo", + "activeModelPinning": "Ativo — modelo selecionado via fixação de sessão", + "rotated": "Rotacionado: {initial} -> {final}", + "apiKey": "Chave da API", + "noApiKey": "Sem chave de API", + "combo": "Combo", + "error": "Erro", + "unblockAll": "Desbloquear tudo", + "cleared": "Limpo", + "unblock": "Desbloquear", + "relatedRequests": "Solicitações Relacionadas ({count})", + "current": "atual", + "detailStatus": "Detalhe do Status", + "loadingDetails": "Carregando detalhes da solicitação...", + "providerEventStream": "Fluxo de Eventos do Provedor", + "clientEventStream": "Fluxo de Eventos do Cliente", + "eventStream": "Fluxo de Eventos", + "responsePayloadLegacy": "Payload de Resposta (Legado)", + "requestPayloadLegacy": "Payload de Solicitação (Legado)", + "noPayload": "Nenhum dado de payload disponível para esta entrada de log.", + "correlationId": "ID de Correlação", + "correlationIdValue": "ID de Correlação: {id}", + "detailedPayloadInfo": "Ative o registro detalhado primeiro se você quiser a visualização de carga útil de cliente/provedor em quatro etapas para novas solicitações." } }, "proxyLogger": { @@ -11095,7 +11140,7 @@ "colProvider": "Provider", "colTarget": "Target", "colLatency": "Latency", - "colClientIp": "__MISSING__:Client IP", + "colClientIp": "IP do Cliente", "colTime": "Time", "recording": "Recording", "paused": "Paused", @@ -11379,17 +11424,17 @@ "status": "Status", "enabled": "Enabled", "disabled": "Disabled", - "installedTab": "__MISSING__:Installed", - "marketplaceTab": "__MISSING__:Marketplace", - "marketplaceUrlLabel": "__MISSING__:Custom Marketplace URL", - "marketplaceUrlPlaceholder": "__MISSING__:Leave empty for official Omniroute registry", - "saveMarketplaceUrl": "__MISSING__:Save & Reload", - "marketplaceUrlSaved": "__MISSING__:Marketplace URL updated", - "marketplaceEmpty": "__MISSING__:No plugins found in marketplace.", + "installedTab": "Instalado", + "marketplaceTab": "Mercado", + "marketplaceUrlLabel": "URL do Marketplace Personalizado", + "marketplaceUrlPlaceholder": "Deixe em branco para o registro oficial do Omniroute", + "saveMarketplaceUrl": "Salvar e Recarregar", + "marketplaceUrlSaved": "URL do Marketplace atualizado", + "marketplaceEmpty": "Nenhum plugin encontrado no marketplace.", "marketplaceInstallComingSoon": "Instalações via marketplace em breve.", - "verified": "__MISSING__:Verified", - "install": "__MISSING__:Install", - "installedFromMarketplace": "__MISSING__:Plugin {name} installed!", + "verified": "Verificado", + "install": "Instalar", + "installedFromMarketplace": "Plugin {name} instalado!", "hooks": "Hooks" }, "quotaPlans": { @@ -11595,28 +11640,28 @@ "quickLinkProviders": "Configurar provedores", "quickLinkInspector": "Ver tráfego no Traffic Inspector", "unknownError": "Erro desconhecido", - "maintenanceTitle": "__MISSING__:Maintenance & Diagnostics", - "maintenanceSubtitle": "__MISSING__:Self-test the capture pipeline, undo leftover system state, and move your setup between machines.", - "orphanedStateWarning": "__MISSING__:A previous session left system state behind (DNS spoof, CA, or system proxy). Run Repair to clean it up.", - "diagnose": "__MISSING__:Diagnose", - "diagnosing": "__MISSING__:Diagnosing…", - "diagnoseHealthy": "__MISSING__:Capture pipeline is healthy.", - "diagnoseUnhealthy": "__MISSING__:Capture pipeline has problems:", - "repair": "__MISSING__:Repair", - "repairing": "__MISSING__:Repairing…", - "repairDone": "__MISSING__:Repaired: {items}", - "repairNothing": "__MISSING__:Nothing to repair — system state is clean.", - "removeCa": "__MISSING__:Remove CA", - "removeCaConfirm": "__MISSING__:Remove CA?", - "removeCaDone": "__MISSING__:MITM root CA removed from the OS trust store.", - "removing": "__MISSING__:Removing…", - "confirm": "__MISSING__:Confirm", - "exportConfig": "__MISSING__:Export config", - "exporting": "__MISSING__:Exporting…", - "importConfig": "__MISSING__:Import config", - "importing": "__MISSING__:Importing…", - "importInvalidJson": "__MISSING__:The selected file is not valid JSON.", - "importDone": "__MISSING__:Imported {bypass} bypass · {hosts} hosts · {agents} agents", + "maintenanceTitle": "Manutenção e Diagnósticos", + "maintenanceSubtitle": "Auto-teste o pipeline de captura, desfaça o estado do sistema restante e mova sua configuração entre máquinas.", + "orphanedStateWarning": "Uma sessão anterior deixou o estado do sistema para trás (spoof de DNS, CA ou proxy do sistema). Execute o Reparar para limpá-lo.", + "diagnose": "Diagnosticar", + "diagnosing": "Diagnosticando…", + "diagnoseHealthy": "O pipeline de captura está saudável.", + "diagnoseUnhealthy": "A pipeline de captura tem problemas:", + "repair": "Reparar", + "repairing": "Reparando…", + "repairDone": "Reparado: {items}", + "repairNothing": "Nada para reparar — o estado do sistema está limpo.", + "removeCa": "Remover CA", + "removeCaConfirm": "Remover CA?", + "removeCaDone": "CA raiz MITM removida do armazenamento de confiança do SO.", + "removing": "Removendo…", + "confirm": "Confirmar", + "exportConfig": "Exportar configuração", + "exporting": "Exportando…", + "importConfig": "Importar configuração", + "importing": "Importando…", + "importInvalidJson": "O arquivo selecionado não é um JSON válido.", + "importDone": "Importado {bypass} bypass · {hosts} hosts · {agents} agents", "save": "Salvar", "saving": "Salvando…", "cancel": "Cancelar", @@ -11705,8 +11750,8 @@ "httpProxyModeDesc": "Usar variável de ambiente HTTP_PROXY", "systemWideMode": "Sistema inteiro", "systemWideModeDesc": "Interceptar todo o tráfego do sistema (avançado)", - "tproxyMode": "__MISSING__:TPROXY Decrypt", - "tproxyModeUnavailable": "__MISSING__:TPROXY decrypt requires Linux + root + the native addon", + "tproxyMode": "TPROXY Descriptografar", + "tproxyModeUnavailable": "TPROXY decriptar requer Linux + root + o addon nativo", "filterBarTitle": "Filtros", "profileLlmOnly": "Apenas LLM", "profileCustom": "Personalizado", @@ -11763,7 +11808,7 @@ "httpProxyTitle": "Snippet de Proxy HTTP — porta {port}", "notRecording": "Sem gravação", "anyStatus": "Qualquer status", - "liveOnly": "__MISSING__:Live", + "liveOnly": "Ao Vivo", "viewingRecordedSession": "Visualizando sessão gravada", "backToLive": "Voltar ao live", "untitledSession": "Sessão sem nome", @@ -11847,7 +11892,7 @@ "comparison": { "title": "Entenda os 3 tipos de CLI no OmniRoute", "thisPage": "[Esta página ✓]", - "open": "__MISSING__:Open →", + "open": "Abrir →", "code": { "title": "Ferramenta de código", "desc": "Aponta para o Omni", @@ -11878,11 +11923,11 @@ "manualConfig": "Manual config", "installGuide": "Install guide", "endpointLabel": "Endpoint", - "baseUrlFull": "__MISSING__:Full Base URL", + "baseUrlFull": "URL Base Completa", "baseUrlPartial": "Base URL parcial", "refreshDetection": "Atualizar detecção", "alsoAcp": "também ACP", - "connectProviderHint": "__MISSING__:Connect a provider in Providers" + "connectProviderHint": "Conectar um provedor em Provedores" }, "detail": { "back": "Voltar", @@ -12217,25 +12262,25 @@ "regenerateError": "Falha ao regenerar skills." }, "freeProviderRankingsPage": { - "title": "__MISSING__:Free Provider Rankings", - "subtitle": "__MISSING__:Best free providers ranked by model ELO scores from Arena AI leaderboards", - "loading": "__MISSING__:Loading rankings...", - "errorLoading": "__MISSING__:Failed to load rankings", - "emptyState": "__MISSING__:No rankings available yet. Arena ELO data syncs on startup (daily) — check back shortly, or trigger a manual sync. Disable Arena ELO Sync in Feature Flags or set ARENA_ELO_SYNC_ENABLED=false to opt out.", - "bestModel": "__MISSING__:Best", - "allCategories": "__MISSING__:All Categories", - "categoryDefault": "__MISSING__:Default", - "categoryCoding": "__MISSING__:Coding", - "categoryReview": "__MISSING__:Review", - "categoryDocumentation": "__MISSING__:Documentation", - "categoryDebugging": "__MISSING__:Debugging", - "colRank": "__MISSING__:Rank", - "colProvider": "__MISSING__:Provider", - "colTopModel": "__MISSING__:Top Model", - "colScore": "__MISSING__:Score", - "colAvgScore": "__MISSING__:Avg Score", - "colModels": "__MISSING__:Models", - "colType": "__MISSING__:Type", + "title": "Classificações de Provedores Gratuitas", + "subtitle": "Melhores provedores gratuitos classificados por pontuações ELO de modelo das tabelas de classificação da Arena AI", + "loading": "Carregando classificações...", + "errorLoading": "Falha ao carregar classificações", + "emptyState": "Nenhum ranking disponível ainda. Os dados de ELO da Arena são sincronizados na inicialização (diariamente) — verifique novamente em breve ou acione uma sincronização manual. Desative a Sincronização de ELO da Arena nas Configurações de Recursos ou defina ARENA_ELO_SYNC_ENABLED=false para optar por não participar.", + "bestModel": "Melhor", + "allCategories": "Todas as Categorias", + "categoryDefault": "Padrão", + "categoryCoding": "Codificação", + "categoryReview": "Revisar", + "categoryDocumentation": "Documentação", + "categoryDebugging": "Depuração", + "colRank": "Classificação", + "colProvider": "Provedor", + "colTopModel": "Modelo Principal", + "colScore": "Pontuação", + "colAvgScore": "Pontuação Média", + "colModels": "Modelos", + "colType": "Tipo", "filterConfiguredOnly": "Somente configurados", "filterAvailableOnly": "Somente disponíveis", "filterAvailableOnlyHelp": "Ocultar provedores cujas conexões estão todas limitadas por taxa ou sem cota.", @@ -12243,13 +12288,13 @@ "configuredOnlyHint": "Mostrar apenas provedores com conexões ativas", "noConfiguredProviders": "Nenhum provedor configurado encontrado. Adicione uma conexão de provedor primeiro.", "colConfigured": "Status", - "typeAll": "__MISSING__:All Types", - "typeNoauth": "__MISSING__:No Signup", - "typeOauth": "__MISSING__:OAuth Login", - "typeApikey": "__MISSING__:API Key", - "sortTypeFirst": "__MISSING__:Easiest first", - "sortTypeFirstHelp": "__MISSING__:Group by signup effort (No Signup → OAuth Login → API Key), keeping quality order within each group", - "typeLegend": "__MISSING__:No Signup = zero setup · OAuth Login = sign in with your own account · API Key = bring your own key or that provider's free tier" + "typeAll": "Todos os Tipos", + "typeNoauth": "Sem Cadastro", + "typeOauth": "Login OAuth", + "typeApikey": "Chave da API", + "sortTypeFirst": "Mais fácil primeiro", + "sortTypeFirstHelp": "Agrupar por esforço de inscrição (Sem Inscrição → Login OAuth → Chave da API), mantendo a ordem de qualidade dentro de cada grupo", + "typeLegend": "Sem Cadastro = zero configuração · Login OAuth = faça login com sua própria conta · Chave API = traga sua própria chave ou o nível gratuito daquele provedor" }, "discovery": { "title": "Descoberta de provedores", @@ -12310,10 +12355,10 @@ "providerAdded": "{provider} adicionado", "add": "Adicionar", "manualApiKey": "Usar uma chave de API manual", - "createDahlTokenFailed": "__MISSING__:Failed to create Dahl token", - "providerProxy": "__MISSING__:Proxy", - "providerProxyConfigureHint": "__MISSING__:Configure proxy", - "providerProxyTitleConfigured": "__MISSING__:Proxy configured: {host}" + "createDahlTokenFailed": "Falha ao criar o token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configurar proxy", + "providerProxyTitleConfigured": "Proxy configurado: {host}" }, "gamification": { "leaderboardScopes": { @@ -12811,7 +12856,9 @@ "avoid": "Restrito pelos Termos de Serviço — revise os termos", "caution": "Cuidado — cláusulas de uso pessoal / proxy", "ok": "Geralmente permissivo" - } + }, + "allProviders": "Todos os provedores", + "noApiKeyRequired": "Nenhuma chave de API necessária" }, "providerHealthAutopilot": { "title": "Piloto Automático de Saúde do Provedor", @@ -13001,10 +13048,10 @@ "off": "DESLIGADO", "availableProviders": "Provedores disponíveis ({count})", "noProviderOverrides": "Nenhuma substituição — todos os provedores ativos participarão com seus modelos padrão", - "resetFailed": "__MISSING__:Reset failed", - "resetSuccess": "__MISSING__:Config reset to defaults", - "running": "__MISSING__:Running...", - "testFailed": "__MISSING__:Test failed" + "resetFailed": "Redefinição falhou", + "resetSuccess": "Configuração redefinida para os padrões", + "running": "Executando...", + "testFailed": "Teste falhou" }, "kimiSponsorBanner": { "foundingFriendTitle": "A Kimi (Moonshot AI) é a Amiga do Código Aberto fundadora do OmniRoute", @@ -13196,320 +13243,320 @@ "capabilityFilter.contextWindowMismatch": "A requisicao excede a janela de contexto do provedor", "publicSystem": { "notFound": { - "title": "__MISSING__:Page not found", - "description": "__MISSING__:The page you're looking for doesn't exist or has been moved.", - "dashboardAriaLabel": "__MISSING__:Return to dashboard", - "statusAriaLabel": "__MISSING__:Open system status page", - "systemStatus": "__MISSING__:System Status" + "title": "Página não encontrada", + "description": "A página que você está procurando não existe ou foi movida.", + "dashboardAriaLabel": "Retornar ao painel", + "statusAriaLabel": "Abrir página de status do sistema", + "systemStatus": "Status do Sistema" }, "error": { - "title": "__MISSING__:Internal Server Error", - "description": "__MISSING__:Something went wrong while processing your request. Our team has been notified and is working on a fix.", - "errorId": "__MISSING__:Error ID: {id}", - "detailsAriaLabel": "__MISSING__:Error details", - "retryAriaLabel": "__MISSING__:Retry loading the page", - "tryAgain": "__MISSING__:Try Again", - "dashboardAriaLabel": "__MISSING__:Return to dashboard", - "statusAriaLabel": "__MISSING__:Open system status", - "systemStatus": "__MISSING__:System Status" + "title": "Erro Interno do Servidor", + "description": "Algo deu errado ao processar sua solicitação. Nossa equipe foi notificada e está trabalhando em uma correção.", + "errorId": "ID de Erro: {id}", + "detailsAriaLabel": "Detalhes do erro", + "retryAriaLabel": "Tente recarregar a página", + "tryAgain": "Tente Novamente", + "dashboardAriaLabel": "Retornar ao painel", + "statusAriaLabel": "Abrir status do sistema", + "systemStatus": "Status do Sistema" }, "globalError": { - "title": "__MISSING__:Something went wrong", - "description": "__MISSING__:An unexpected error occurred. This has been logged and our team will investigate.", - "detailsAriaLabel": "__MISSING__:Error details", - "retryAriaLabel": "__MISSING__:Retry loading the page", - "tryAgain": "__MISSING__:Try Again", - "statusAriaLabel": "__MISSING__:Open system status", - "systemStatus": "__MISSING__:System Status" + "title": "Algo deu errado", + "description": "Ocorreu um erro inesperado. Isso foi registrado e nossa equipe irá investigar.", + "detailsAriaLabel": "Detalhes do erro", + "retryAriaLabel": "Tente carregar a página novamente", + "tryAgain": "Tente Novamente", + "statusAriaLabel": "Abrir status do sistema", + "systemStatus": "Status do Sistema" }, "offline": { - "title": "__MISSING__:Connectivity Issue", - "description": "__MISSING__:OmniRoute cannot reach the network right now. Check your internet, VPN, or proxy settings.", - "connectionRestored": "__MISSING__:Connection restored", - "offlineModeDetected": "__MISSING__:Offline mode detected", - "retryConnection": "__MISSING__:Retry Connection", - "openStatusPage": "__MISSING__:Open Status Page" + "title": "Problema de Conectividade", + "description": "OmniRoute não consegue acessar a rede no momento. Verifique suas configurações de internet, VPN ou proxy.", + "connectionRestored": "Conexão restaurada", + "offlineModeDetected": "Modo offline detectado", + "retryConnection": "Tentar Novamente a Conexão", + "openStatusPage": "Abrir Página de Status" }, "maintenance": { - "title": "__MISSING__:Scheduled Maintenance", - "description": "__MISSING__:Some services are temporarily unavailable while maintenance is in progress. Core routing usually remains online, but management features may be degraded.", - "suggestion1": "__MISSING__:Retry after a few minutes.", - "suggestion2": "__MISSING__:Check current health indicators and provider status before retrying.", - "systemStatus": "__MISSING__:View System Status", - "healthDashboard": "__MISSING__:Open Health Dashboard" + "title": "Manutenção Programada", + "description": "Alguns serviços estão temporariamente indisponíveis enquanto a manutenção está em andamento. O roteamento principal geralmente permanece online, mas os recursos de gerenciamento podem estar degradados.", + "suggestion1": "Tente novamente em alguns minutos.", + "suggestion2": "Verifique os indicadores de saúde atuais e o status do provedor antes de tentar novamente.", + "systemStatus": "Ver Status do Sistema", + "healthDashboard": "Abrir Painel de Saúde" }, "status": { - "title": "__MISSING__:System Status", - "description": "__MISSING__:Live operational snapshot for OmniRoute core services.", - "loadingHealth": "__MISSING__:Loading health metrics...", - "failedToLoad": "__MISSING__:Failed to load system health.", - "unableToReachHealth": "__MISSING__:Unable to reach health endpoint. Check connectivity and retry.", - "healthCheckFailed": "__MISSING__:Health Check Failed", - "openConnectivityHelp": "__MISSING__:Open Connectivity Help", - "maintenanceInfo": "__MISSING__:Maintenance Info", - "service": "__MISSING__:Service", - "unknown": "__MISSING__:unknown", - "notAvailable": "__MISSING__:n/a", - "providersTracked": "__MISSING__:Providers Tracked", - "circuitBreakerState": "__MISSING__:Provider Circuit Breaker State", - "lastUpdate": "__MISSING__:Last update: {timestamp}", - "uptimeMinutes": "__MISSING__:{minutes}m", - "uptimeHoursMinutes": "__MISSING__:{hours}h {minutes}m" + "title": "Status do Sistema", + "description": "Instantâneo operacional ao vivo para os serviços centrais do OmniRoute.", + "loadingHealth": "Carregando métricas de saúde...", + "failedToLoad": "Falha ao carregar a saúde do sistema.", + "unableToReachHealth": "Não foi possível acessar o endpoint de saúde. Verifique a conectividade e tente novamente.", + "healthCheckFailed": "Verificação de Saúde Falhou", + "openConnectivityHelp": "Ajuda de Conectividade Aberta", + "maintenanceInfo": "Informações de Manutenção", + "service": "Serviço", + "unknown": "desconhecido", + "notAvailable": "n/a", + "providersTracked": "Provedores Rastreados", + "circuitBreakerState": "Estado do Disjuntor do Provedor", + "lastUpdate": "Última atualização: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" }, "statusPages": { "400": { - "title": "__MISSING__:Bad Request", - "description": "__MISSING__:The request payload is invalid or incomplete.", - "suggestion1": "__MISSING__:Review required fields and payload format before retrying.", - "suggestion2": "__MISSING__:If you are using the API, validate the JSON schema locally.", - "suggestion3": "__MISSING__:If this keeps happening, open the request in Translator Playground to inspect the payload.", - "primaryAction": "__MISSING__:Open Documentation", - "secondaryAction": "__MISSING__:Open Translator" + "title": "Solicitação Inválida", + "description": "O payload da solicitação é inválido ou incompleto.", + "suggestion1": "Revise os campos obrigatórios e o formato do payload antes de tentar novamente.", + "suggestion2": "Se você estiver usando a API, valide o esquema JSON localmente.", + "suggestion3": "Se isso continuar acontecendo, abra a solicitação no Translator Playground para inspecionar a carga.", + "primaryAction": "Abrir Documentação", + "secondaryAction": "Abrir Tradutor" }, "401": { - "title": "__MISSING__:Unauthorized", - "description": "__MISSING__:Authentication is required to access this resource.", - "suggestion1": "__MISSING__:Sign in again and retry the operation.", - "suggestion2": "__MISSING__:For API calls, confirm the Bearer token is present and valid.", - "suggestion3": "__MISSING__:If the token was recently rotated, update your client credentials.", - "primaryAction": "__MISSING__:Go to Login", - "secondaryAction": "__MISSING__:Manage API Keys" + "title": "Não autorizado", + "description": "A autenticação é necessária para acessar este recurso.", + "suggestion1": "Faça login novamente e tente a operação.", + "suggestion2": "Para chamadas de API, confirme se o token Bearer está presente e é válido.", + "suggestion3": "Se o token foi recentemente rotacionado, atualize suas credenciais de cliente.", + "primaryAction": "Ir para Login", + "secondaryAction": "Gerenciar Chaves da API" }, "403": { - "title": "__MISSING__:Forbidden", - "description": "__MISSING__:Your request was understood, but access is denied by policy.", - "suggestion1": "__MISSING__:Check IP allowlist/blocklist rules in settings.", - "suggestion2": "__MISSING__:Verify model and budget policies assigned to your API key.", - "suggestion3": "__MISSING__:Ask an administrator to grant the required permission scope.", - "primaryAction": "__MISSING__:Open Access Help", - "secondaryAction": "__MISSING__:Open Security Settings" + "title": "Proibido", + "description": "Seu pedido foi compreendido, mas o acesso é negado pela política.", + "suggestion1": "Verifique as regras de lista de permissão/lista de bloqueio de IP nas configurações.", + "suggestion2": "Verifique as políticas de modelo e orçamento atribuídas à sua chave de API.", + "suggestion3": "Peça a um administrador para conceder o escopo de permissão necessário.", + "primaryAction": "Ajuda de Acesso Aberto", + "secondaryAction": "Abrir Configurações de Segurança" }, "408": { - "title": "__MISSING__:Request Timeout", - "description": "__MISSING__:The server did not receive a complete request in time.", - "suggestion1": "__MISSING__:Retry the request with a smaller payload.", - "suggestion2": "__MISSING__:Check your network stability and VPN/proxy latency.", - "suggestion3": "__MISSING__:For long operations, enable streaming or split the request.", - "primaryAction": "__MISSING__:Open Endpoint Guide", - "secondaryAction": "__MISSING__:Check Network Status" + "title": "Tempo Limite da Solicitação", + "description": "O servidor não recebeu uma solicitação completa a tempo.", + "suggestion1": "Tente a solicitação com um payload menor.", + "suggestion2": "Verifique a estabilidade da sua rede e a latência do VPN/proxy.", + "suggestion3": "Para operações longas, ative o streaming ou divida a solicitação.", + "primaryAction": "Abrir Guia de Endpoint", + "secondaryAction": "Verificar Status da Rede" }, "429": { - "title": "__MISSING__:Too Many Requests", - "description": "__MISSING__:Rate limits were exceeded for this client, key, or provider.", - "suggestion1": "__MISSING__:Wait for cooldown and retry after the suggested interval.", - "suggestion2": "__MISSING__:Switch to a combo with fallback providers.", - "suggestion3": "__MISSING__:Tune provider resilience/rate-limit profiles in settings.", - "primaryAction": "__MISSING__:Open Resilience Settings", - "secondaryAction": "__MISSING__:Open Combos" + "title": "Muitas Solicitações", + "description": "Os limites de taxa foram excedidos para este cliente, chave ou provedor.", + "suggestion1": "Aguarde o tempo de recarga e tente novamente após o intervalo sugerido.", + "suggestion2": "Mude para um combo com provedores de fallback.", + "suggestion3": "Ajuste os perfis de resiliência/límite de taxa do provedor nas configurações.", + "primaryAction": "Abrir Configurações de Resiliência", + "secondaryAction": "Abrir Combos" }, "500": { - "title": "__MISSING__:Internal Server Error", - "description": "__MISSING__:An unexpected server-side error occurred while processing your request.", - "suggestion1": "__MISSING__:Retry once in a few seconds.", - "suggestion2": "__MISSING__:Check health telemetry and server logs for correlated request IDs.", - "suggestion3": "__MISSING__:If persistent, report the issue with timestamp and request context.", - "primaryAction": "__MISSING__:Open Health Dashboard", - "secondaryAction": "__MISSING__:Open Logs" + "title": "Erro Interno do Servidor", + "description": "Ocorreu um erro inesperado do lado do servidor ao processar sua solicitação.", + "suggestion1": "Tente novamente em alguns segundos.", + "suggestion2": "Verifique a telemetria de saúde e os logs do servidor em busca de IDs de solicitação correlacionados.", + "suggestion3": "Se persistir, relate o problema com o carimbo de data/hora e o contexto da solicitação.", + "primaryAction": "Abrir Painel de Saúde", + "secondaryAction": "Abrir Logs" }, "502": { - "title": "__MISSING__:Bad Gateway", - "description": "__MISSING__:Upstream provider or gateway integration returned an invalid response.", - "suggestion1": "__MISSING__:Retry with another provider or active combo route.", - "suggestion2": "__MISSING__:Check provider credentials and model availability.", - "suggestion3": "__MISSING__:Inspect translator output if format conversion is involved.", - "primaryAction": "__MISSING__:Open Providers", - "secondaryAction": "__MISSING__:Open Translator" + "title": "Gateway Ruim", + "description": "O provedor upstream ou a integração do gateway retornou uma resposta inválida.", + "suggestion1": "Tente novamente com outro provedor ou rota de combo ativa.", + "suggestion2": "Verifique as credenciais do provedor e a disponibilidade do modelo.", + "suggestion3": "Inspecione a saída do tradutor se a conversão de formato estiver envolvida.", + "primaryAction": "Abrir Provedores", + "secondaryAction": "Abrir Tradutor" }, "503": { - "title": "__MISSING__:Service Unavailable", - "description": "__MISSING__:The service is temporarily unavailable due to maintenance or degraded dependencies.", - "suggestion1": "__MISSING__:Wait a moment and retry.", - "suggestion2": "__MISSING__:Check maintenance notices and system status.", - "suggestion3": "__MISSING__:Use fallback providers if your workflow is latency-sensitive.", - "primaryAction": "__MISSING__:Maintenance Details", - "secondaryAction": "__MISSING__:System Status" + "title": "Serviço Indisponível", + "description": "O serviço está temporariamente indisponível devido a manutenção ou dependências degradadas.", + "suggestion1": "Aguarde um momento e tente novamente.", + "suggestion2": "Verifique os avisos de manutenção e o status do sistema.", + "suggestion3": "Use provedores de fallback se seu fluxo de trabalho for sensível à latência.", + "primaryAction": "Detalhes da Manutenção", + "secondaryAction": "Status do Sistema" } } }, "kiroAuthModal": { - "title": "__MISSING__:Connect {providerLabel}", - "chooseMethod": "__MISSING__:Choose your authentication method:", - "builderId": "__MISSING__:AWS Builder ID", - "builderDescription": "__MISSING__:Recommended for most users. Sign in with the AWS account linked to {providerLabel}.", - "organization": "__MISSING__:Your Organization (AWS IAM Identity Center)", - "organizationDescription": "__MISSING__:Use your company SSO start URL (example: {url}).", - "googleAccount": "__MISSING__:Google Account", - "googleDescription": "__MISSING__:Login with your Google account.", - "githubAccount": "__MISSING__:GitHub Account", - "githubDescription": "__MISSING__:Login with your GitHub account.", - "importToken": "__MISSING__:Import Token", - "importDescription": "__MISSING__:Paste a refresh token exported from {providerLabel}.", - "apiKey": "__MISSING__:API Key", - "apiKeyDescription": "__MISSING__:Paste a long-lived {providerLabel} / CodeWhisperer API key. It is stored as a bearer credential with no refresh token; profile discovery is best-effort.", - "idcStartUrl": "__MISSING__:IDC Start URL", - "idcStartUrlPlaceholder": "__MISSING__:https://your-org.awsapps.com/start", - "idcStartUrlDescription": "__MISSING__:Your organization's AWS IAM Identity Center URL", - "awsRegion": "__MISSING__:AWS Region", - "regionPlaceholder": "__MISSING__:us-east-1", - "idcRegionDescription": "__MISSING__:AWS region for your Identity Center (default: us-east-1)", - "continue": "__MISSING__:Continue", - "back": "__MISSING__:Back", - "autoDetecting": "__MISSING__:Auto-detecting token...", - "readingCredentials": "__MISSING__:Reading {providerLabel} credentials from AWS SSO cache", - "tokenNotDetected": "__MISSING__:{providerLabel} token was not auto-detected. Please paste your refresh token manually.", - "refreshToken": "__MISSING__:Refresh Token", - "tokenPlaceholder": "__MISSING__:Token will be auto-filled...", - "importing": "__MISSING__:Importing...", - "apiKeyPlaceholder": "__MISSING__:Paste your {providerLabel} API key...", - "apiKeyStoredDescription": "__MISSING__:Stored encrypted as a long-lived bearer credential. There is no refresh flow.", - "apiKeyRegionDescription": "__MISSING__:AWS region for the key (default: us-east-1)", - "validating": "__MISSING__:Validating...", - "validateAndSaveApiKey": "__MISSING__:Validate and Save API Key", - "errorAutoDetect": "__MISSING__:Could not auto-detect token", - "errorAutoDetectFailed": "__MISSING__:Failed to auto-detect token", - "errorRefreshTokenRequired": "__MISSING__:Please enter a refresh token", - "errorImportFailed": "__MISSING__:Import failed", - "errorApiKeyRequired": "__MISSING__:Please enter a Kiro API key", - "errorApiKeyImportFailed": "__MISSING__:API key import failed", - "errorIdcStartUrlRequired": "__MISSING__:Please enter your IDC start URL" + "title": "Conectar {providerLabel}", + "chooseMethod": "Escolha seu método de autenticação:", + "builderId": "ID do Construtor AWS", + "builderDescription": "Recomendado para a maioria dos usuários. Faça login com a conta AWS vinculada a {providerLabel}.", + "organization": "Sua Organização (AWS IAM Identity Center)", + "organizationDescription": "Use a URL de início SSO da sua empresa (exemplo: {url}).", + "googleAccount": "Conta do Google", + "googleDescription": "Faça login com sua conta do Google.", + "githubAccount": "Conta do GitHub", + "githubDescription": "Faça login com sua conta do GitHub.", + "importToken": "Importar Token", + "importDescription": "Cole um token de atualização exportado de {providerLabel}.", + "apiKey": "Chave da API", + "apiKeyDescription": "Cole uma chave de API {providerLabel} / CodeWhisperer de longa duração. Ela é armazenada como uma credencial bearer sem token de atualização; a descoberta de perfil é feita com o melhor esforço.", + "idcStartUrl": "URL de Início do IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "A URL do AWS IAM Identity Center da sua organização", + "awsRegion": "Região da AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Região da AWS para seu Centro de Identidade (padrão: us-east-1)", + "continue": "Continuar", + "back": "Voltar", + "autoDetecting": "Detectando token automaticamente...", + "readingCredentials": "Lendo credenciais {providerLabel} do cache do AWS SSO", + "tokenNotDetected": "O token {providerLabel} não foi detectado automaticamente. Por favor, cole seu token de atualização manualmente.", + "refreshToken": "Atualizar Token", + "tokenPlaceholder": "O token será preenchido automaticamente...", + "importing": "Importando...", + "apiKeyPlaceholder": "Cole seu chave de API {providerLabel}...", + "apiKeyStoredDescription": "Armazenado criptografado como uma credencial portadora de longa duração. Não há fluxo de atualização.", + "apiKeyRegionDescription": "Região da AWS para a chave (padrão: us-east-1)", + "validating": "Validando...", + "validateAndSaveApiKey": "Validar e Salvar Chave da API", + "errorAutoDetect": "Não foi possível detectar o token automaticamente", + "errorAutoDetectFailed": "Falha ao detectar o token automaticamente", + "errorRefreshTokenRequired": "Por favor, insira um token de atualização", + "errorImportFailed": "Importação falhou", + "errorApiKeyRequired": "Por favor, insira uma chave de API Kiro", + "errorApiKeyImportFailed": "Falha na importação da chave da API", + "errorIdcStartUrlRequired": "Por favor, insira sua URL de início do IDC" }, "kiroSocialOAuthModal": { - "title": "__MISSING__:Connect {providerLabel} via {providerName}", - "errorStartAuthorization": "__MISSING__:Failed to start authorization", - "errorAuthorizationExpired": "__MISSING__:Authorization expired. Start the login flow again.", - "errorAuthorizationFailed": "__MISSING__:Authorization failed", - "initializing": "__MISSING__:Initializing...", - "settingUp": "__MISSING__:Setting up {providerName} authentication", - "openIncognito": "__MISSING__:Open this link in an Incognito window", - "incognitoDescription": "__MISSING__:Use an Incognito/Private window to avoid session conflicts with existing accounts.", - "copyLink": "__MISSING__:Copy link", - "verificationCode": "__MISSING__:Verification code", - "waiting": "__MISSING__:Waiting for authorization...", - "cancel": "__MISSING__:Cancel", - "successTitle": "__MISSING__:Connected Successfully!", - "successMessage": "__MISSING__:Your {providerLabel} account via {providerName} has been connected.", - "done": "__MISSING__:Done", - "errorTitle": "__MISSING__:Connection Failed", - "close": "__MISSING__:Close" + "title": "Conectar {providerLabel} via {providerName}", + "errorStartAuthorization": "Falha ao iniciar a autorização", + "errorAuthorizationExpired": "A autorização expirou. Inicie o fluxo de login novamente.", + "errorAuthorizationFailed": "Autorização falhou", + "initializing": "Inicializando...", + "settingUp": "Configurando a autenticação {providerName}", + "openIncognito": "Abra este link em uma janela Anônima", + "incognitoDescription": "Use uma janela Anônima/Privada para evitar conflitos de sessão com contas existentes.", + "copyLink": "Copiar link", + "verificationCode": "Código de verificação", + "waiting": "Aguardando autorização...", + "cancel": "Cancelar", + "successTitle": "Conectado com Sucesso!", + "successMessage": "Sua conta {providerLabel} via {providerName} foi conectada.", + "done": "Concluído", + "errorTitle": "Conexão Falhou", + "close": "Fechar" }, "traeAuthModal": { - "errorAuthorizationFailed": "__MISSING__:Authorization failed", - "errorPopupBlocked": "__MISSING__:Popup blocked — allow popups for this site, or paste the token manually below.", - "errorPopupClosed": "__MISSING__:Authorization window was closed before completing.", - "errorAccessTokenRequired": "__MISSING__:Access token is required.", - "errorImportFailed": "__MISSING__:Import failed", - "title": "__MISSING__:Connect Trae SOLO", - "authorizeDescription": "__MISSING__:Authorize via trae.ai in a popup. The popup will close itself once the token has been imported.", - "authorizeImportant": "__MISSING__:Important: you must be logged in to trae.ai in this browser first. The authorize page only confirms an existing session — it cannot sign you in. If you see \"Login Failed\", click \"Open solo.trae.ai\", sign in, then return here.", - "waitingForAuthorization": "__MISSING__:Waiting for trae.ai…", - "authorizeWithBrowser": "__MISSING__:Authorize with Browser", - "openSoloTrae": "__MISSING__:Open solo.trae.ai", - "orPasteManually": "__MISSING__:or paste a token manually", - "manualInstructions": "__MISSING__:Sign in to solo.trae.ai, open DevTools → Network, send any chat message, and copy the JWT from the Authorization: Cloud-IDE-JWT {tokenPlaceholder} request header. JWT lifetime is ~14 days. Optional identity fields come from common_params in the same request body.", - "accessTokenLabel": "__MISSING__:Access Token (Cloud-IDE-JWT)", - "webId": "__MISSING__:Web ID", - "optional": "__MISSING__:optional", - "bizUserId": "__MISSING__:Biz User ID", - "userUniqueId": "__MISSING__:User Unique ID", - "scope": "__MISSING__:Scope", - "tenant": "__MISSING__:Tenant", - "region": "__MISSING__:Region", - "importing": "__MISSING__:Importing…", - "importToken": "__MISSING__:Import Token", - "cancel": "__MISSING__:Cancel" + "errorAuthorizationFailed": "Autorização falhou", + "errorPopupBlocked": "Popup bloqueado — permita popups para este site ou cole o token manualmente abaixo.", + "errorPopupClosed": "A janela de autorização foi fechada antes de ser concluída.", + "errorAccessTokenRequired": "Token de acesso é necessário.", + "errorImportFailed": "Importação falhou", + "title": "Conectar Trae SOLO", + "authorizeDescription": "Autorize via trae.ai em uma janela pop-up. A janela pop-up se fechará automaticamente assim que o token tiver sido importado.", + "authorizeImportant": "Importante: você deve estar logado no trae.ai neste navegador primeiro. A página de autorização apenas confirma uma sessão existente — ela não pode fazer o login. Se você ver \"Login Falhou\", clique em \"Abrir solo.trae.ai\", faça o login e depois volte aqui.", + "waitingForAuthorization": "Aguardando trae.ai…", + "authorizeWithBrowser": "Autorizar com o Navegador", + "openSoloTrae": "Abra solo.trae.ai", + "orPasteManually": "ou cole um token manualmente", + "manualInstructions": "Faça login em solo.trae.ai, abra o DevTools → Rede, envie qualquer mensagem de chat e copie o JWT do cabeçalho da requisição Authorization: Cloud-IDE-JWT {tokenPlaceholder}. O tempo de vida do JWT é de ~14 dias. Os campos de identidade opcionais vêm de common_params no mesmo corpo da requisição.", + "accessTokenLabel": "Token de Acesso (Cloud-IDE-JWT)", + "webId": "ID da Web", + "optional": "opcional", + "bizUserId": "ID do Usuário Biz", + "userUniqueId": "ID Único do Usuário", + "scope": "Escopo", + "tenant": "Inquilino", + "region": "Região", + "importing": "Importando…", + "importToken": "Importar Token", + "cancel": "Cancelar" }, "sharedComponents": { "distributeProxies": { - "distributing": "__MISSING__:Distributing...", - "complete": "__MISSING__:Complete", - "defaultLabel": "__MISSING__:Distribute Proxies" + "distributing": "Distribuindo...", + "complete": "Completo", + "defaultLabel": "Distribuir Proxies" } }, "providerTest": { - "dialogLabel": "__MISSING__:Test {provider}", - "deprecated": "__MISSING__:deprecated", - "risk": "__MISSING__:risk", - "close": "__MISSING__:Close", - "model": "__MISSING__:Model", - "key": "__MISSING__:Key", - "defaultKey": "__MISSING__:default", - "clearConversation": "__MISSING__:Clear conversation", - "clear": "__MISSING__:Clear", + "dialogLabel": "Teste {provider}", + "deprecated": "obsoleto", + "risk": "risco", + "close": "Fechar", + "model": "Modelo", + "key": "Chave", + "defaultKey": "padrão", + "clearConversation": "Limpar conversa", + "clear": "Limpar", "tabs": { - "test": "__MISSING__:Test", - "logs": "__MISSING__:Logs" + "test": "Teste", + "logs": "Registros" }, - "loadingLogs": "__MISSING__:Loading logs…", - "failedToLoadLogs": "__MISSING__:Failed to load logs", - "noLogsYet": "__MISSING__:No logs yet", - "noLogsDescription": "__MISSING__:Send a test message from the Test tab — logs for this provider will appear here.", - "openFullLogs": "__MISSING__:Open full logs page", - "live": "__MISSING__:Live", - "tailingLast": "__MISSING__:tailing last {count}", - "refreshNow": "__MISSING__:Refresh now", - "refresh": "__MISSING__:Refresh", - "unknownRequester": "__MISSING__:unknown requester", + "loadingLogs": "Carregando logs…", + "failedToLoadLogs": "Falha ao carregar logs", + "noLogsYet": "Nenhum log ainda", + "noLogsDescription": "Envie uma mensagem de teste na aba Teste — os logs para este provedor aparecerão aqui.", + "openFullLogs": "Abrir página de logs completos", + "live": "Ao Vivo", + "tailingLast": "seguindo os últimos {count}", + "refreshNow": "Atualizar agora", + "refresh": "Atualizar", + "unknownRequester": "solicitante desconhecido", "fields": { - "timestamp": "__MISSING__:Timestamp", - "status": "__MISSING__:Status", - "duration": "__MISSING__:Duration", - "model": "__MISSING__:Model", - "requestedModel": "__MISSING__:Requested model", - "provider": "__MISSING__:Provider", - "requester": "__MISSING__:Requester", - "tokens": "__MISSING__:Tokens" + "timestamp": "Carimbo de Data/Hora", + "status": "Status", + "duration": "Duração", + "model": "Modelo", + "requestedModel": "Modelo solicitado", + "provider": "Provedor", + "requester": "Solicitante", + "tokens": "Tokens" } }, "proxyLog": { - "detailAriaLabel": "__MISSING__:Proxy log detail", - "event": "__MISSING__:Proxy Event", - "close": "__MISSING__:Close proxy detail modal", - "time": "__MISSING__:Time", - "latency": "__MISSING__:Latency", - "clientIp": "__MISSING__:Client IP", - "proxy": "__MISSING__:Proxy", - "direct": "__MISSING__:Direct", - "type": "__MISSING__:Type", - "level": "__MISSING__:Level", - "provider": "__MISSING__:Provider", - "tlsFingerprint": "__MISSING__:TLS Fingerprint", - "directNative": "__MISSING__:Direct (native)", - "targetUrl": "__MISSING__:Target URL", - "error": "__MISSING__:Error", - "configuration": "__MISSING__:Proxy Configuration" + "detailAriaLabel": "Detalhe do log do proxy", + "event": "Evento Proxy", + "close": "Fechar modal de detalhes do proxy", + "time": "Tempo", + "latency": "Latência", + "clientIp": "IP do Cliente", + "proxy": "Proxy", + "direct": "Direto", + "type": "Tipo", + "level": "Nível", + "provider": "Provedor", + "tlsFingerprint": "Impressão Digital TLS", + "directNative": "Direto", + "targetUrl": "URL de Destino", + "error": "Erro", + "configuration": "Configuração de Proxy" }, "requestTimeline": { - "title": "__MISSING__:Request Timeline", + "title": "Linha do Tempo do Pedido", "modes": { - "follow": "__MISSING__:Follow", - "followDescription": "__MISSING__:Axis scrolls left, NOW line stays at 75%", - "now": "__MISSING__:Now", - "nowDescription": "__MISSING__:Jump to current time, NOW line resets to center", - "pan": "__MISSING__:Pan", - "panDescription": "__MISSING__:Drag to explore, background is frozen" + "follow": "Seguir", + "followDescription": "O eixo rola para a esquerda, a linha NOW permanece em 75%", + "now": "Agora", + "nowDescription": "Ir para o tempo atual, a linha NOW redefine para o centro", + "pan": "Pan", + "panDescription": "Arraste para explorar, o fundo está congelado" }, - "reset": "__MISSING__:Reset", - "started": "__MISSING__:Started", - "ended": "__MISSING__:Ended", - "duration": "__MISSING__:Duration", - "status": "__MISSING__:Status", - "provider": "__MISSING__:Provider", - "tokens": "__MISSING__:Tokens", - "active": "__MISSING__:Active", - "other": "__MISSING__:Other", - "tenMinutes": "__MISSING__:10min", - "hour": "__MISSING__:hour", - "day": "__MISSING__:day", - "unknownModel": "__MISSING__:unknown", - "pending": "__MISSING__:pending" + "reset": "Redefinir", + "started": "Iniciado", + "ended": "Encerrado", + "duration": "Duração", + "status": "Status", + "provider": "Provedor", + "tokens": "Tokens", + "active": "Ativo", + "other": "Outro", + "tenMinutes": "10min", + "hour": "hora", + "day": "dia", + "unknownModel": "desconhecido", + "pending": "pendente" }, "metadata": { - "compressionTitle": "__MISSING__:Compression", - "compressionDescription": "__MISSING__:Configure context compression settings to reduce token usage and costs.", - "relayTitle": "__MISSING__:OmniRoute — Relay Proxies", - "relayDescription": "__MISSING__:Serverless relay proxy endpoints for your AI infrastructure", - "trafficInspectorTitle": "__MISSING__:Traffic Inspector — OmniRoute", - "trafficInspectorDescription": "__MISSING__:Monitor LLM calls + debug any application's HTTPS traffic" + "compressionTitle": "Compressão", + "compressionDescription": "Configure as configurações de compressão de contexto para reduzir o uso de tokens e custos.", + "relayTitle": "OmniRoute — Proxies de Relay", + "relayDescription": "Endpoints de proxy relay sem servidor para sua infraestrutura de IA", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitore chamadas LLM + depure o tráfego HTTPS de qualquer aplicativo" }, "conductor": { "title": "Conductor — frota de agentes CLI", @@ -13560,5 +13607,13 @@ "sttFailed": "Transcrição falhou (confira modelo/provider de STT)", "ttsFailed": "Síntese de voz falhou (confira modelo/provider de TTS)", "micDenied": "Microfone indisponível ou permissão negada" + }, + "cliproxyProviderExposure": { + "title": "Exposição do Provedor", + "description": "Expose modelos CLIProxyAPI como um alvo de roteamento sob o prefixo cliproxyapi/.", + "label": "Expose como cliproxyapi/...", + "hint": "Quando habilitado, os modelos descobertos aparecem nas seleções de provedores em toda a OmniRoute.", + "updateFailed": "Falha ao atualizar (HTTP {status})", + "networkError": "Erro de rede — não foi possível atualizar a configuração de exposição do provedor" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index e298f86a88..3f34cdc05e 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -172,6 +172,18 @@ "unselectAll": "Desmarcar tudo", "visibleModels": "visíveis", "selectAllConfirm": "Adicionar {count} modelos a este combo?", + "testSelectedProviders": "Testes de fornecedores", + "testingSelectedProviders": "A testar {done}/{total}...", + "noProvidersSelectedToTest": "Verifique pelo menos um fornecedor abaixo primeiro", + "noModelsToTestForProviders": "Sem modelos para testar para os fornecedores selecionados", + "testSelectedProvidersResults": "{ok} de {total} modelos a funcionar", + "selectWorkingModels": "Adicionar a funcionar", + "unselectWorkingModels": "Desmarcar a trabalhar", + "noWorkingModelsToSelect": "Não há modelos de trabalho disponíveis para adicionar", + "providerTestHint": "Dica: verifique um fornecedor → Testar → Adicionar a funcionar. Clique novamente para desmarcar.", + "selectAllProviders": "Verifique todos os fornecedores", + "clearProviderSelection": "Desmarcar fornecedores", + "providersSelectedCount": "{count} fornecedores verificados", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Tamanho", + "toggleNoAuthProvider": "Alternar fornecedor sem autenticação", + "loadingModels": "A Carregar modelos…", + "selectAModel": "Selecione um modelo", + "degraded": "Degradado", + "zeroConfigBannerTitle": "A correr em modo zero-config", + "zeroConfigBannerBody": "OmniRoute gerou automaticamente chaves de encriptação seguras no primeiro lançamento. Elas são persistidas em {dataDir}. Nenhuma ação é necessária — os seus dados estão encriptados e seguros. Para usar chaves personalizadas, adicione JWT_SECRET e STORAGE_ENCRYPTION_KEY a esse arquivo.", + "batchRelativeTimeIn": "em {value}", + "batchRelativeTimeAgo": "há {value}", + "batchDetailsTitle": "Detalhes do Lote", + "batchProgress": "Progresso", + "batchCompletedCount": "{count} concluídos", + "batchFailedCount": "{count} falhou", + "batchPendingCount": "{count} pendente", + "batchTimeline": "Linha do Tempo", + "batchTimelineInProgress": "Em Andamento", + "batchTimelineFinalizing": "A Finalizar", + "batchTimelineCompleted": "Concluído", + "batchTimelineFailed": "Falhou", + "batchTimelineExpires": "Expira", + "batchTimelineExpired": "Expirado", + "batchTimelineCancelling": "A Cancelar", + "batchTimelineCancelled": "Cancelado", + "batchTokenUsage": "Utilização de Token", + "batchMetadata": "Metadados", + "batchFileContents": "Conteúdo do Ficheiro", + "batchFileUsedByCount": "Usado por {count, plural, one {# lote} other {# lotes}}", + "batchFilePreview": "Pré-visualização", + "batchFilePreviewTruncated": "A mostrar as primeiras {shown} linhas ({total} linhas no total)", + "batchFileDownloadFull": "Transferir Ficheiro Completo" }, "disabled": "Desativado", "featureFlagOmnirouteEmergencyFallbackDescription": "Encaminhar pedidos com orçamento esgotado para o fornecedor/modelo de contingência gratuito de emergência.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separador", "discovery": "Descoberta", "discoverySubtitle": "Analisar fornecedores para acesso gratuito", + "conductor": "Condutor", + "conductorSubtitle": "Frota de agentes CLI", "resilienceConnections": "Resiliência de Ligação", "resilienceConnectionsSubtitle": "Cooldown, disjuntor, estado de bloqueio", "settingsModalityBridge": "Ponte de Modalidade", - "settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto" + "settingsModalityBridgeSubtitle": "Fallback de imagem/áudio → texto para modelos apenas de texto", + "commandPalette": { + "title": "Palete de Comandos", + "searchPlaceholder": "Pesquisar páginas, definições, ferramentas...", + "clearSearch": "Limpar pesquisa", + "noResults": "Sem resultados", + "navigate": "navegar", + "open": "abrir", + "close": "fechar" + }, + "noResults": "Sem resultados" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Falha ao Atualizar Definições", "sync.token.created": "Token de Sincronização Criado", "sync.token.revoked": "Token de Sincronização Revogado" - } + }, + "mcpMetricCalls24h": "Chamadas (24h)", + "mcpMetricSuccessRate": "Taxa de sucesso", + "mcpMetricAvgDuration": "Duração média", + "mcpMetricTopTool": "Ferramenta principal" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Uma nova versão está disponível. Clique para atualizar.", "updateStarted": "Atualização iniciada...", "reloadingPageAutomatically": "Recarregando a página automaticamente...", - "providerTopology": "Topologia do provedor" + "providerTopology": "Topologia do provedor", + "downloadDmg": "Transferir DMG (macOS)", + "downloadDmgDescription": "Uma nova versão da aplicação de desktop OmniRoute está disponível. Por favor, faça o download e instale o instalador DMG para macOS para atualizar (atual: v{version}).", + "downloadExe": "Descarregar EXE (Windows)", + "downloadExeDescription": "Uma nova versão da aplicação de desktop OmniRoute está disponível. Por favor, faça o download e instale o instalador EXE para Windows para atualizar (atual: v{version}).", + "downloadAppImage": "Baixar AppImage (Linux)", + "downloadAppImageDescription": "Uma nova versão da aplicação de desktop OmniRoute está disponível. Por favor, faça o download do pacote AppImage para Linux para atualizar (atual: v{version}).", + "downloadUpdate": "Transferir Atualização", + "downloadUpdateDescription": "Uma nova versão da aplicação de desktop OmniRoute está disponível. Por favor, faça o download do formato de aplicação respetivo para o seu sistema para atualizar (atual: v{version}).", + "updateQueued": "Atualização enfileirada para v{version}.", + "updateDockerRebuilding": "A imagem do Docker está a ser reconstruída em segundo plano.", + "updateWaitingRestart": "A aguardar que o OmniRoute reinicie com a nova versão.", + "updateInstalling": "A instalar v{version}.", + "updateRunning": "OmniRoute está agora a correr a v{version}.", + "updateCompleted": "OmniRoute atualizado para v{version}.", + "updateDockerStillRebuilding": "A imagem do Docker ainda está a ser reconstruída para v{version}.", + "updateInstallingBackground": "A instalar v{version} em segundo plano.", + "updateWaitingVersion": "À espera que o OmniRoute volte na v{version}.", + "updateDockerStillInProgress": "A reconstrução do Docker ainda está em progresso.", + "updateRestarting": "Reinício do serviço em progresso. A aguardar que o OmniRoute volte a estar online...", + "updateTimeout": "A atualização começou, mas v{version} não ficou disponível antes do tempo limite. Atualize a página ou verifique os registos do servidor.", + "updateTimedOut": "A atualização para v{version} excedeu o tempo limite.", + "updateStartFailed": "Falha ao iniciar a atualização.", + "noResponseStream": "Nenhum fluxo de resposta recebido.", + "updateComplete": "Atualização completa!", + "updateFailed": "Atualização falhou.", + "updateNetworkError": "Erro de rede — conexão perdida durante a atualização.", + "stepInstallPackage": "Instalar Pacote", + "stepRebuildNativeModules": "Reconstruir Módulos Nativos", + "stepRestartService": "Reiniciar Serviço", + "stepComplete": "Completo", + "stepError": "Erro", + "updateCompleteTitle": "Atualização Completa!", + "updateFailedTitle": "Atualização Falhou", + "updatingTitle": "A atualizar o OmniRoute...", + "reloadNotice": "A página será recarregada automaticamente em alguns segundos.", + "retryNotice": "Por favor, tente novamente ou atualize manualmente via CLI.", + "restartNotice": "Não feche esta página. O sistema irá reiniciar automaticamente.", + "reloadNow": "Recarregar Agora", + "closeUpdate": "Fechar", + "retryUpdate": "Tentar Novamente", + "updateAvailableTitle": "Atualização Disponível: v{version}{desktop}", + "desktopAppLabel": "(App de Desktop)", + "checkingForUpdates": "A verificar atualizações...", + "versionAvailableForDownload": "A versão v{version} está disponível para download.", + "downloadingUpdate": "A transferir atualização... {percent}% completo.", + "updateDownloaded": "Atualização descarregada com sucesso! Clique em Reiniciar e Instalar para aplicar.", + "autoUpdateFailed": "A atualização automática falhou: {reason}.", + "unknownUpdateError": "Erro desconhecido", + "versionAvailableDesktop": "A versão v{version} está disponível para a aplicação de desktop.", + "manualUpdateRequired": "Atualização manual necessária para este tipo de instalação.", + "restartAndInstall": "Reiniciar e Instalar", + "checkForUpdate": "Verificar Atualização", + "manualUpdate": "Atualização Manual", + "directDownloadHint": "Ou faça o download do formato de instalador respetivo diretamente:", + "releaseNotes": "Notas de Lançamento", + "readMore": "Leia Mais", + "noAuthLabel": "Sem Autenticação" }, "analytics": { "title": "Análise", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Inferido a partir dos registos de chamadas persistidos em torno deste pedido", "routeRecommendations": "Recomendações", "routeLimitations": "Limitações", - "routeNoKnownLimitations": "Sem limitações conhecidas para esta explicação." + "routeNoKnownLimitations": "Sem limitações conhecidas para esta explicação.", + "searchAnalyticsLoading": "A carregar análises de pesquisa…", + "searchAnalyticsNoData": "Ainda não há dados de pesquisa disponíveis.", + "searchAnalyticsNoDataDescription": "Os pedidos de pesquisa aparecerão aqui após a primeira pesquisa via /v1/search.", + "searchAnalyticsToday": "{count} hoje", + "searchAnalyticsCachedRequests": "{count} pedidos em cache", + "searchAnalyticsApiCosts": "custos da API de pesquisa", + "searchAnalyticsErrors": "{count} erros", + "searchAnalyticsNoErrors": "Sem erros", + "searchAnalyticsProviderBreakdown": "Análise de Fornecedores", + "searchAnalyticsQueries": "consultas", + "searchAnalyticsEmptyDescription": "Use POST /v1/search para começar a direcionar pesquisas na web.", + "searchAnalyticsFreeTier": "Nível gratuito disponível: Serper (2.500/mês), Brave (2.000/mês), Exa (1.000/mês), Tavily (1.000/mês) — total de 6.500+ pesquisas gratuitas/mês com failover automático.", + "autoRoutingNoDataAvailable": "Não há análises de auto-roteamento disponíveis. Faça pedidos usando o prefixo auto/ para ver métricas.", + "defaultVariantLabel": "Padrão", + "freeTierAvailable": "Camada gratuita disponível" }, "apiManager": { "title": "Chaves de API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} provedores", "imageToTextBridgeAvailable": "A Modality Bridge pode descrever imagens para modelos apenas de texto agora. O playground inline estará disponível quando /api/v1/images/understanding for implementado.", "imageToTextBridgeCta": "Configure a ponte Imagem→Texto nas definições da Ponte de Modalidade", - "sttBridgeCta": "Configure a ponte Fala→Texto nas definições da Modality Bridge" + "sttBridgeCta": "Configure a ponte Fala→Texto nas definições da Modality Bridge", + "existingConnection": "Conexão existente", + "openrouterSttDescription": "Os modelos de reconhecimento de voz para texto do OpenRouter utilizam a sua conexão OpenRouter configurada. Nenhuma credencial separada é necessária." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Cole em:", "copilotReloadInstruction": "Depois, recarregue o VS Code e defina a chave de API no prompt de entrada.", "wireApiChatCompletions": "Conclusões de bate-papo (/chat/completions)", - "wireApiResponses": "API de respostas (/respostas)" + "wireApiResponses": "API de respostas (/respostas)", + "cliproxyapiActionFailed": "Ação falhou", + "cliproxyapiActionSucceeded": "Ação bem-sucedida", + "cliproxyapiCheckUpdates": "Verificar Atualizações", + "cliproxyapiDescription": "Fallback de proxy upstream (OAuth baseado em Go)", + "cliproxyapiHealth": "Saúde", + "cliproxyapiHealthy": "Saudável", + "cliproxyapiInstall": "Instalar", + "cliproxyapiNotInstalledValue": "Não instalado", + "cliproxyapiPort": "Porto", + "cliproxyapiRequestFailed": "Pedido falhado", + "cliproxyapiRestart": "Reiniciar", + "cliproxyapiStart": "Iniciar", + "cliproxyapiStatusError": "Erro", + "cliproxyapiStatusInstalled": "Instalado", + "cliproxyapiStatusNotInstalled": "Não Instalado", + "cliproxyapiStatusRunning": "A Executar", + "cliproxyapiStatusStopped": "Parado", + "cliproxyapiStop": "Parar", + "cliproxyapiUnhealthy": "Não saudável", + "cliproxyapiUnknown": "Desconhecido", + "cliproxyapiUpdate": "Atualizar", + "cliproxyapiUpdateAvailable": "Atualização disponível: v{current} → v{latest}", + "cliproxyapiVersion": "Versão" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Avançar apenas em caso de esgotamento da quota", + "fallbackOnlyOnQuotaExhaustionShort": "fallback apenas de quota", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "O pacote de modo e a ponderação ficam aqui; o estado de execução do disjuntor fica na página de Estado.", "emailVisibilityHint": "Os e-mails de conta aqui seguem a alternância de privacidade global.", "emailVisibilityTooltip": "Utilize o ícone do olho para revelar ou ocultar e-mails de conta globalmente em combinações, fornecedores e ecrãs de quotas.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Passo a passo (Fornecedor → Modelo)", + "builderModeGlobal": "Pesquisa de modelo global (Combo personalizado)", + "builderGlobalSearchPlaceholder": "Pesquisar modelos em todos os fornecedores (por exemplo, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Adicionar tudo", + "builderGlobalShortcuts": "Atalhos:", + "builderGlobalNoResults": "Nenhum modelo encontrado para \"{query}\".", + "builderGlobalProviderLabel": "Fornecedor:", + "builderGlobalAccountCount": "{count, plural, one {# conta} other {# contas}}", + "builderGlobalAdded": "Adicionado", + "builderGlobalAdd": "Adicionar", "manualModel": "Modelo manual", "manualModelInvalid": "Introduza um modelo como fornecedor/modelo.", "manualModelUnknownProvider": "Prefixo de fornecedor desconhecido.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilidade da Sessão", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Persistência desativada", "kimiPresetTitle": "Preset do Kimi Coding", "kimiPresetDescription": "Kimi K3 como modelo principal (Moonshot API), com redundância automática (fallback) para as suas ligações Kimi Code (kimi-coding, kimi-web) quando configurado.", - "kimiPresetCta": "Adicionar preset" + "kimiPresetCta": "Adicionar preset", + "intelligentComboCount": "{count, plural, one {# combinação inteligente} other {# combinações inteligentes}}", + "providersInScope": "{count, plural, one {# fornecedor em escopo} other {# fornecedores em escopo}}", + "savingModePack": "A Guardar {pack}…", + "errorTitle": "Falha ao carregar combos", + "errorDescription": "Não conseguimos carregar os dados do combo neste momento. Verifique a sua ligação e tente novamente.", + "errorId": "ID de Erro: {id}", + "errorRetry": "Tente Novamente", + "comboLabel": "Combo" }, "costs": { "title": "Custos", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL do WebDAV", "obsidianUsername": "Nome de utilizador", "obsidianPassword": "Palavra-passe", - "obsidianTailscaleHint": "Utilize o seu IP do Tailscale em vez de localhost se estiver a ligar a partir de um dispositivo móvel. Ambos os dispositivos têm de estar na mesma rede Tailscale." + "obsidianTailscaleHint": "Utilize o seu IP do Tailscale em vez de localhost se estiver a ligar a partir de um dispositivo móvel. Ambos os dispositivos têm de estar na mesma rede Tailscale.", + "cloudSyncNotConfigured": "A sincronização na nuvem não está configurada nesta instância.", + "notionConnect": "Conectar", + "notionConnectFailed": "Falha ao conectar", + "notionConnected": "Conectado", + "notionConnectionFailed": "Conexão falhou", + "notionDescription": "Pesquisar, ler, consultar e escrever no Notion através de modelos de IA roteados", + "notionDisconnect": "Desconectar", + "notionDisconnectFailed": "Falha ao desconectar", + "notionEnterToken": "Por favor, insira um token de integração do Notion", + "notionIntegrationHelp": "Criar uma Integração Interna em", + "notionIntegrationToken": "Token de Integração Interna do Notion", + "notionNotConnected": "Não conectado", + "notionTokenConfigured": "Token configurado. As ferramentas Notion estão disponíveis através do MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Fornecedor / Modelo", "noRemoteProviders": "Nenhum fornecedor com chave de API configurada", "selectProviderModel": "Selecione um modelo", + "customBaseUrlLabel": "URL base personalizada (opcional)", + "customModelIdLabel": "ID do modelo personalizado (opcional)", + "customEndpointHelp": "Utilize um endpoint /embeddings compatível com OpenAI. Endpoints locais são permitidos; alvos de metadados em nuvem estão bloqueados.", + "customEndpointSave": "Aplicar ponto de extremidade personalizado", + "customEndpointInvalid": "Introduza tanto uma URL base HTTP(S) válida como um ID de modelo, ou deixe ambos os campos vazios.", + "customEndpointSaveFailed": "O ponto de extremidade de incorporação personalizada não pôde ser guardado.", "staticEnabledLabel": "Ativar Static Potion", "staticEnabledDesc": "Transferir e utilizar o modelo potion-base-8M localmente", "transformersEnabledLabel": "Ativar Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "A limpar...", "cleanNow": "Limpar agora", "cleanupSuccess": "{count} ponto(s) removido(s)", - "cleanupFailed": "Falha na limpeza" + "cleanupFailed": "Falha na limpeza", + "hostLabel": "Anfitrião", + "collectionLabel": "Coleção" }, "rerank": { "enableLabel": "Ativar Rerank", @@ -4977,6 +5164,7 @@ "baseUrlHint": "Obrigatório. URL base da API do provedor.", "iconUrlLabel": "URL do ícone", "iconUrlHint": "Opcional. URL da imagem mostrada como ícone deste provedor.", + "iconUrlInvalid": "URL do ícone inválido. Utilize uma URL http(s):// ou data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatível (Produção)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessão já atual", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Aplicar autenticação", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Colar chave de API…", "zedSaving": "A guardar…", "zedImportAction": "Importar", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Ativar renovação automática da sessão do Cursor", + "cursorAgentNudgeBody": "Instale o cursor-agent para renovação automática de sessões — sem ele, as conexões do Cursor precisam de reconexão manual periódica aproximadamente a cada 24 horas.", + "cursorAgentNudgeDismiss": "Rejeitar", "zedManualImportFailed": "A importação manual falhou", "zedManualImportSuccess": "Token do {provider} importado do Zed", "grokImportTitle": "Importar autenticação do Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Nível gratuito para inferência serverless — sem necessidade de cartão de crédito", "gemini": "Gratuito para sempre: 1.500 req/dia para o Gemini 2.5 Flash — sem cartão de crédito, obtenha a chave em aistudio.google.com", "gigachat": "Ligue o GigaChat (Sber) com uma chave de API.", - "github-models": "Crie um PAT do GitHub com o âmbito 'models: read' em github.com/settings/tokens", "gitlab": "Token de acesso pessoal do GitLab para a API pública Code Suggestions. Configure um URL base autoalojado quando não estiver a utilizar o gitlab.com.", "gitlawb-gmi": "Obtenha a sua chave de API no painel do Gitlawb Opengateway.", "gitlawb": "Obtenha a sua chave de API no painel do Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Ligar o Kimi Coding com o fluxo OAuth existente.", "kiro": "Nível gratuito: 50 créditos/mês (~25K–100K tokens). ⚠️ Os ToS do Kiro proíbem a utilização de proxy/harness de terceiros.", "codex": "Ligar o OpenAI Codex com o fluxo OAuth existente.", - "qwen": "Ligar o Qwen Code com o fluxo OAuth existente." + "qwen": "Ligar o Qwen Code com o fluxo OAuth existente.", + "github-models": "Crie um PAT do GitHub com o âmbito 'models: read' em github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} aceita IDs de modelo nativos do provedor. Importe de /models ou adicione IDs personalizados para roteamento.", "bedrockModelsDescription": "Os modelos Amazon Bedrock têm escopo definido por região da AWS. Importe de /models ou adicione IDs de modelo Bedrock habilitados na região selecionada.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Quando todas as conexões configuradas estiverem esgotadas (quota, créditos ou expiração), use temporariamente o nível sem chave deste fornecedor. Desative para ignorar este fornecedor em vez de enviar pedidos anónimos — recomendado quando o nível sem chave os rejeita (401).", "anonymousFallbackEnabled": "Fallback anónimo ativado para {provider}", "anonymousFallbackDisabled": "Fallback anónimo desativado para {provider} — conexões esgotadas irão ignorar este provedor", - "anonymousFallbackUpdateFailed": "Falha ao atualizar a configuração de fallback anónimo" + "anonymousFallbackUpdateFailed": "Falha ao atualizar a configuração de fallback anónimo", + "batchDeleteFailed": "A eliminação em lote falhou", + "batchDeleteNetworkError": "Erro de rede durante a eliminação em lote", + "batchUpdateFailed": "Atualização em lote falhou", + "batchUpdateNetworkError": "Erro de rede durante a atualização em lote", + "categoryAudio": "Áudio", + "categoryCloudAgent": "Agente de Nuvem", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Pesquisar", + "categoryWebCookie": "Cookie Web", + "claudeExtraUsageBlockingDisabled": "Bloqueio de uso extra do Claude desativado (uso extra é permitido)", + "claudeExtraUsageBlockingEnabled": "Bloqueio de uso extra do Claude ativado (o uso extra será bloqueado)", + "claudeRoutingPreferenceDisabled": "Os modelos Claude sem prefixo já não preferem Claude Code", + "claudeRoutingPreferenceEnabled": "Os modelos Claude sem prefixo agora preferem Claude Code", + "clearMediaFilter": "Limpar", + "cliproxyRoutingDisabled": "As solicitações agora utilizam o OmniRoute nativo (direto)", + "cliproxyRoutingEnabled": "As solicitações agora são encaminhadas através do CLIProxyAPI (emulação mais profunda)", + "codexLimitPolicyUpdated": "Política de limite do Codex atualizada", + "codexServiceModeUpdated": "Modo de serviço do Codex atualizado", + "codexServiceTierActive": "O nível de serviço Codex {tier} está ativo", + "codexTierFastLabel": "Rápido", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Falha ao aplicar o código de autenticação do comando", + "commandCodeApplyingApproval": "Navegador aprovado, a aplicar…", + "commandCodeApplyingKey": "Aplicando a chave aprovada pelo navegador…", + "commandCodeApprovalInstructions": "Abra a URL de autenticação, aprove o acesso e cole a chave/JSON/URL retornada abaixo…", + "commandCodeAuthExpired": "Código de comando de autenticação expirado", + "commandCodeConnected": "Código de Comando conectado", + "commandCodeConnectionAdded": "Código de comando de ligação adicionado", + "commandCodeLinkExpired": "O link do código do comando expirou", + "commandCodeOpeningStudio": "A Abrir o Command Code Studio…", + "commandCodePopupBlocked": "Popup bloqueado. Por favor, permita popups e tente o Command Code Connect novamente.", + "commandCodeStartFailed": "Falha ao iniciar o comando Code auth", + "connectionDeleted": "Conexão eliminada", + "connectionFallback": "conexão", + "coolingConnectionsDescription": "Estas conexões retornaram um 429 (limite de taxa) na sua última solicitação. O OmniRoute irá ignorá-las até que o temporizador expire — não é necessário desativação manual.", + "coolingConnectionsTitle": "Atualmente a arrefecer ({count})", + "failedDeleteAlias": "Falha ao eliminar o alias", + "failedDeleteConnection": "Falha ao eliminar a ligação", + "failedDistributeProxies": "Falha ao distribuir proxies.", + "failedSaveModelEndpointSettings": "Falha ao salvar as configurações do endpoint do modelo", + "failedUpdateClaudeExtraUsagePolicy": "Falha ao atualizar a política de uso extra do Claude", + "failedUpdateClaudeRoutingPreference": "Falha ao atualizar a preferência de roteamento do Claude Code", + "failedUpdateCliproxyRouting": "Falha ao atualizar o roteamento do CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Falha ao atualizar a política de limite do Codex", + "failedUpdateCodexServiceMode": "Falha ao atualizar o modo de serviço do Codex", + "filterByMedia": "Mídia", + "freeBadge": "Grátis", + "kimiCodeApiKeyLabel": "Chave da API Kimi Code", + "modelTestFailed": "Teste do modelo falhou", + "modelTestNetworkError": "Erro de rede ao testar o modelo", + "networkError": "Erro de rede", + "networkErrorDeletingAlias": "Erro de rede ao eliminar o alias", + "networkErrorSettingAlias": "Erro de rede ao definir alias", + "noProvidersMatch": "Nenhum fornecedor corresponde à sua pesquisa.", + "noSavedProxies": "Nenhum proxy guardado encontrado. Adicione proxies em Definições → Proxy primeiro.", + "pageLoadErrorDescription": "Não conseguimos carregar os dados do fornecedor neste momento. Verifique a sua ligação e tente novamente.", + "pageLoadErrorId": "ID de Erro: {id}", + "pageLoadErrorRetry": "Tente Novamente", + "pageLoadErrorTitle": "Falha ao carregar os provedores", + "playgroundTitle": "Parque Infantil", + "providerDetailConnectionFlexActive": "O nível de serviço Codex flex está ativo para esta ligação", + "providerDetailConnectionPriorityActive": "O nível de serviço prioritário do Codex está ativo para esta conexão", + "providerDetailGlobalFlexActive": "O nível de serviço Global Codex flex está ativo", + "providerDetailGlobalPriorityActive": "O nível de serviço prioritário do Global Codex está ativo", + "proxiesDistributed": "Distribuído {assigned} atribuição(ões) de proxy através de {tagLabel}{total} conexão(ões).", + "rerankEndpoint": "Reclassificar", + "savedModelEndpointSettings": "Definições do ponto de extremidade do modelo guardado", + "searchByModelAria": "Pesquisar por modelo", + "selectSupportedEndpoint": "Selecione pelo menos um endpoint suportado", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Configurações", @@ -6460,7 +6719,24 @@ "loadFailed": "Falha ao carregar a lista de assinaturas", "toggleFailed": "Falha ao alternar o interruptor", "refreshFailed": "Falha ao atualizar", - "deleteFailed": "Falha ao excluir" + "deleteFailed": "Falha ao excluir", + "add": "Adicionar", + "cancel": "Cancelar", + "configure": "Configurar", + "copyEndpoint": "Copiar Endpoint", + "coreEndpointHint": "Dica do Endpoint Principal", + "coreNodesHint": "Dica de Nós Principais", + "create": "Criar", + "deleteConfirm": "Eliminar Confirmação", + "empty": "Vazio", + "globalModeDescription": "Descrição do Modo Global", + "localCoreHint": "Dica de Núcleo Local", + "nodeSummary": "Resumo do Nó", + "providerRequired": "Fornecedor Obrigatório", + "providerRouting": "Roteamento de Fornecedor", + "refresh": "Atualizar", + "refreshInterval": "Intervalo de Atualização", + "ruleModeDescription": "Descrição do Modo de Regra" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Executar um recurso automático de visão para texto antes de encaminhar pedidos de imagem para modelos apenas de texto.", "visionBridgeEnabledLabel": "Ativado", "visionBridgeEnabledDesc": "Alternar a ponte pré-chamada que substitui partes da imagem por texto extraído.", + "visionBridgeRerouteTextOnlyLabel": "Redirecionar modelos apenas de texto", + "visionBridgeRerouteTextOnlyDesc": "Envie o pedido completo, incluindo imagens, para o modelo de ponte quando o modelo selecionado não tiver entrada de imagem.", "visionBridgeModel": "Modelo de ponte", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Qualquer ID de modelo OmniRoute que suporte visão pode ser utilizado aqui.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "A chave de API não tem o âmbito manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Um ou mais prefixos têm como destino rotas com capacidade de spawn e não podem ser contornados.", "GENERIC": "Falha ao atualizar as definições de autorização." - } + }, + "remove": "Remover" }, "resilienceBaseCooldownLabel": "Tempo de espera básico", "scopeLabel": "Escopo", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "A testar áudio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clipe(s) transcrito(s) por {model}", "modalityBridgeAudioTestNoop": "Audio Bridge não ativou (o destino pode suportar áudio, nenhum fornecedor de STT está conectado ou a ponte está desativada)", - "modalityBridgeAudioTestError": "Teste de áudio falhou: {message}" + "modalityBridgeAudioTestError": "Teste de áudio falhou: {message}", + "modelRoutingDescriptionPlaceholder": "Roteie modelos Opus para combinação frontier", + "cliproxyapiFallbackCodes": "Códigos de Fallback do Cliproxyapi", + "cliproxyapiFallbackDescription": "Descrição de Fallback do Cliproxyapi", + "cliproxyapiHealthLabel": "Cliproxyapi Rótulo de Saúde", + "cliproxyapiImportFailed": "Falha na Importação do Cliproxyapi", + "cliproxyapiImportResult": "Resultado da Importação do Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Inválido", + "cliproxyapiLifecycleNoticeAfter": "Aviso de Ciclo de Vida do Cliproxyapi Após", + "cliproxyapiLifecycleNoticeBefore": "Aviso de Ciclo de Vida do Cliproxyapi Antes", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Aviso de Ciclo de Vida Link", + "cliproxyapiPortLabel": "Rótulo da Porta Cliproxyapi", + "cliproxyapiStatusLabel": "Rótulo de Estado do Cliproxyapi", + "cliproxyapiVersionLabel": "Etiqueta da Versão do Cliproxyapi", + "collection": "Coleção", + "errorPage": { + "description": "Não conseguimos carregar as definições neste momento. Por favor, tente novamente dentro de alguns segundos.", + "errorId": "ID de Erro: {id}", + "retry": "Tente Novamente", + "title": "Falha ao carregar as definições" + }, + "host": "Anfitrião", + "notInstalled": "Não instalado", + "oneproxyActions": "Ações Oneproxy", + "oneproxyActive": "Oneproxy Ativo", + "oneproxyAnonymity": "Anonymidade Oneproxy", + "oneproxyCountry": "Oneproxy País", + "oneproxyDelete": "Oneproxy Eliminar", + "oneproxyEmpty": "Oneproxy Vazio", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Latência do Oneproxy", + "oneproxyProtocol": "Protocolo Oneproxy", + "oneproxyQuality": "Qualidade Oneproxy", + "oneproxySyncFailed": "A sincronização falhou: {error}", + "oneproxySyncSuccess": "Sincronizados {total} proxies ({added} novos, {updated} atualizados)", + "proxyDocumentationSocks5DescAfter": "Documentação do Proxy Socks5 Desc Após", + "proxyFreePoolAddProxy": "Adicionar Proxy ao Pool Sem Proxy", + "proxyFreePoolAdding": "Adicionando Pool de Proxy Gratuito", + "proxyFreePoolSelectProxy": "Selecionar Proxy do Pool Sem Proxy", + "proxyStatusActive": "Estado do Proxy Ativo", + "proxyStatusInactive": "Estado do Proxy Inativo", + "routingAddEntry": "Adicionar entrada", + "settingSaveFailed": "Falha ao Salvar Configuração", + "settingSaved": "Configuração Guardada", + "skillsmpApiKeyHintAfter": ". Limite de taxa: {limit} pedidos/dia.", + "skillsmpApiKeyHintBefore": "Obtenha a sua chave de API de", + "syncFailed": "A sincronização falhou", + "unhealthy": "Não saudável", + "oneproxyDescription": "Busque e gire proxies validados gratuitos da plataforma comunitária 1proxy", + "oneproxySyncing": "A Sincronizar...", + "oneproxySyncNow": "Sincronizar Agora", + "oneproxyClearAll": "Limpar Tudo", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Limpar todos os proxies 1proxy?", + "memorySkillsSkillsmpDescription": "Conecte-se ao SkillsMP para descobrir e instalar competências do mercado.", + "memorySkillsActiveProviderDescription": "Escolha qual fornecedor a página de Skills utiliza para pesquisa e instalação.", + "memorySkillsSkillsmpProviderTitle": "Marketplace SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Marketplace autenticado (usa a sua chave API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Diretório skills.sh", + "memorySkillsSkillsshProviderDescription": "Fornecedor de diretório público (sem chave de API necessária).", + "routingCcBridgeCatalogName": "Ponte CC compatível com Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Fornecedor nativo Claude com tokens emitidos pelo OAuth.", + "routingCcBridgeName": "Ponte Claude-Code", + "routingCcBridgeDescription": "Encaminhar endpoints usando chaves de API (compatível com anthropic-cc-*).", + "routingCustomProviderDescription": "Fornecedor personalizado.", + "routingUnknownOpKind": "Tipo de op desconhecido: {kind}", + "routingInvalidJson": "JSON inválido: {error}", + "routingConfigMustBeObject": "A configuração deve ser um objeto JSON", + "routingEnabledMustBeBoolean": "`enabled` deve ser verdadeiro ou falso", + "routingPipelineMustBeArray": "`pipeline` deve ser um array de ops", + "routingPipelineTooLong": "O pipeline não pode exceder 50 ops", + "routingOpMissingKind": "Op #{index}: `kind` em falta ou inválido", + "routingOpUnknownKind": "Op #{index}: tipo desconhecido \"{kind}\"", + "routingJsonEditorHide": "Ocultar editor JSON", + "routingJsonEditorImportExport": "Importar / exportar JSON", + "routingJsonEditorLabel": "JSON (editar e aplicar, ou colar para importar)", + "routingApplyJson": "Aplicar JSON", + "routingTransformsFootnote": "Todas as operações de transformação são idempotentes na reexecução. As alterações têm efeito imediato na próxima solicitação.", + "cliproxyapiUnknown": "Desconhecido", + "cliproxyapiVersion": "Versão", + "cliproxyapiHealth": "Saúde", + "cliproxyapiPort": "Porto", + "qdrantHost": "Anfitrião", + "qdrantCollection": "Coleção" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Completo", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Padrão", + "off": "Desligado", + "lite": "Lite", + "standard": "Padrão", + "aggressive": "Agressivo", + "ultra": "Ultra", + "responsesToolOutput": "Saída da ferramenta de respostas" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Executa em último lugar na pilha (após o RTK/Caveman limpar o texto, o OmniGlyph converte o restante em imagens) e também executa de forma autónoma através do modo omniglyph. Esta é uma pré-visualização e permanece desativada por predefinição até que a validação de ponta a ponta esteja concluída.", "saved": "Guardado.", "saveFailed": "Não foi possível guardar.", - "enableAria": "Ativar o motor OmniGlyph" + "enableAria": "Ativar o motor OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Serviços Incorporados", @@ -9127,7 +9500,49 @@ "unableToLoad": "Não foi possível carregar as métricas do sistema", "product": "Produto", "resources": "Recursos", - "company": "Empresa" + "company": "Empresa", + "tokenHealthTooltips": { + "allHealthy": "Todos os tokens saudáveis", + "needsAttention": "Alguns tokens precisam de atenção", + "refreshFailures": "Falhas na atualização do token detectadas", + "unknown": "Estado de saúde desconhecido" + }, + "systemMonitor": { + "metricsAriaLabel": "Métricas do sistema", + "memory": "Memória", + "memoryShort": "mem", + "uptime": "Tempo de Atividade", + "ariaLabel": "Monitorização do sistema", + "title": "Monitor do Sistema", + "version": "Versão", + "connections": "Conexões", + "circuitBreakers": "Disjuntores", + "open": "{count} aberto", + "memoryUsage": "Uso de memória" + }, + "never": "Nunca", + "justNow": "Agora mesmo", + "minutesAgo": "há {count}m", + "hoursAgo": "há {count}h", + "tokens": "Tokens", + "costs": "Custos", + "autoRefresh": "Atualização Automática ({seconds}s)", + "toggleAutoRefresh": "Ativar/desativar atualização automática", + "activeRequests": "Pedidos Ativos", + "totalRequests": "Total de Pedidos", + "totalInputTokens": "Total de Tokens de Entrada", + "model": "Modelo", + "provider": "Fornecedor", + "requests": "Pedidos", + "lastUsed": "Último Utilizado", + "inputTokens": "Tokens de Entrada", + "totalTokens": "Total de Tokens", + "inputCost": "Custo de Entrada", + "outputCost": "Custo de Saída", + "noUsageData": "Ainda não há registos de utilização. Faça algumas solicitações para ver dados aqui.", + "account": "Conta", + "accountLabel": "Conta {id}", + "noAccountUsage": "Ainda não há utilização específica da conta registada. Faça pedidos usando contas OAuth para ver dados aqui." }, "auth": { "welcome": "Bem vindo", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Reiniciar através de Dados da App", + "resetViaAppDataDescription": "Elimine o ficheiro de configurações do diretório de dados da aplicação para redefinir a sua palavra-passe:", + "quitDesktopApp": "Sair completamente da aplicação de desktop OmniRoute", + "navigateToAppDataDirectory": "Navegue até o diretório de dados da aplicação:", + "checkSystemAppDataFolder": "(Verifique a pasta de dados do aplicativo do seu sistema)", + "relaunchDesktopFreshSetup": "Reinicie a aplicação de desktop OmniRoute — irá iniciar uma nova configuração", + "alternativeSetPasswordTitle": "Alternativa: Definir Nova Palavra-Passe", + "alternativeSetPasswordDescription": "Defina uma nova palavra-passe inicial através do ficheiro de ambiente do servidor:", + "openServerEnvFilePrefix": "Abrir", + "relaunchDesktopApp": "Reinicie a aplicação de desktop OmniRoute", + "codexLinkInvalidOrExpired": "Este link é inválido ou expirou.", + "codexValidationServerError": "Não foi possível alcançar o servidor para validar este link.", + "codexSaveConnectionError": "Não foi possível salvar a ligação. O link pode ter expirado.", + "codexDeviceLoginDisabled": "O login com código de dispositivo está desativado para esta conta OpenAI. Ative-o nas configurações de segurança do ChatGPT (ou peça ao administrador do seu espaço de trabalho).", + "codexAuthorizationTimedOut": "A autorização expirou. Clique em Iniciar novamente para tentar novamente.", + "authenticationCancelled": "A autenticação foi cancelada.", + "unexpectedAuthenticationError": "Erro inesperado durante a autenticação. Por favor, tente novamente.", + "connectOpenAiCodexTitle": "Conectar OpenAI Codex", + "codexConnectDescription": "Autorize uma conta ChatGPT para concluir a configuração desta ligação.", + "validatingCodexLink": "A validar o link…", + "codexGenerateCodeDescription": "Clique abaixo para gerar um código de uso único, depois faça login na OpenAI.", + "startCodexFlow": "Iniciar", + "requestingOpenAiCode": "A solicitar código da OpenAI…", + "codexVerificationInstructions": "1. Abra a página de verificação da OpenAI e 2. insira este código. Esta página atualiza automaticamente assim que você autoriza.", + "yourCode": "O seu código", + "openVerificationPage": "Abrir página de verificação", + "copyUrlShort": "Copiar URL", + "savingConnection": "A guardar a ligação…", + "codexConnected": "Conectado!", + "codexConnectionRegistered": "A conta Codex foi registada. Pode fechar esta aba.", + "tryAgain": "Tente novamente", + "traeAuthorizationSuccess": "Trae autorização ✓", + "traeAuthorizationFailed": "Falha na autorização do Trae", + "closeAuthorizationWindow": "Pode fechar esta janela.", + "returnToDashboard": "Voltar ao painel.", + "resetViaAppData": "Reiniciar via Dados da App", + "deleteSettingsToReset": "Elimine o ficheiro de definições do diretório de dados da aplicação para redefinir a sua palavra-passe:", + "quitAppCompletely": "Sair completamente da aplicação de desktop OmniRoute", + "navigateToAppData": "Navegar para o diretório de dados da aplicação", + "checkAppDataFolder": "Verifique a pasta de dados do aplicativo do seu sistema", + "deleteSettingsJson": "Eliminar", + "relaunchAppFresh": "Reinicie a aplicação de desktop OmniRoute — irá iniciar uma nova configuração", + "alternativeSetPassword": "Alternativa: Definir Nova Palavra-Passe", + "setNewPasswordViaEnv": "Defina uma nova palavra-passe inicial através do ficheiro de ambiente do servidor:", + "openServerEnv": "Abrir", + "inDataDirectory": "na diretoria de dados", + "addOrUpdate": "Adicionar ou atualizar", + "deleteAndRelaunch": "Eliminar", + "settingsJson": "settings.json", + "fromDataDir": "do diretório de dados", + "relaunchApp": "Reinicie a aplicação de desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Pronto para simplificar sua infraestrutura de IA?", "ctaDescription": "Junte-se aos desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Código aberto e gratuito para começar.", "startFree": "Comece grátis", - "readDocumentation": "Leia a documentação" + "readDocumentation": "Leia a documentação", + "company": "Empresa", + "pricing": "Preços", + "apiReference": "Referência da API", + "helpCenter": "Centro de Ajuda", + "about": "Sobre", + "blog": "Blog", + "contact": "Contacto", + "terms": "Termos", + "privacy": "Privacidade", + "license": "Licença", + "footerDescription": "A interface unificada para a infraestrutura de IA moderna. Segura, observável e escalável.", + "communityDiscussions": "Discussões da Comunidade" }, "docs": { "title": "Documentação", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registre e gerencie agentes por meio do registro ACP para comunicação entre agentes e compartilhamento de ferramentas.", "protocolAcpStep1": "Navegue até Painel → Agentes para visualizar os agentes ACP registrados.", "protocolAcpStep2": "Registre novos agentes com recursos e configuração de endpoint.", - "protocolAcpStep3": "Use ferramentas CLI para configurar canais de comunicação do agente." + "protocolAcpStep3": "Use ferramentas CLI para configurar canais de comunicação do agente.", + "metadataTitleTemplate": "%s — Documentação OmniRoute", + "metadataDefaultTitle": "Documentação do OmniRoute", + "metadataDescription": "Documentação abrangente para o gateway OmniRoute AI — configuração, API, compressão, implantação e muito mais.", + "layoutNavTitle": "Documentação do OmniRoute", + "layoutHomeLink": "Página Inicial da Documentação", + "layoutDashboardLink": "← Voltar ao Painel de Controlo", + "homeTitle": "Documentação do OmniRoute", + "homeMetadataDescription": "Tudo o que precisa para encaminhar, comprimir e escalar a sua IA — guias de configuração, referência da API, compressão, implementação e muito mais.", + "homeTwitterDescription": "Documentação abrangente para o gateway OmniRoute AI", + "homeDescription": "Tudo o que precisa para direcionar, comprimir e escalar a sua IA", + "homeSearchHint": "Pressione Ctrl K para pesquisar na documentação", + "featuredQuickStartTitle": "Início Rápido", + "featuredQuickStartDescription": "Coloque o OmniRoute a funcionar em 3 minutos", + "featuredAutoComboTitle": "Guia de Auto-Combo", + "featuredAutoComboDescription": "Deixe o OmniRoute escolher a melhor IA para si", + "featuredProvidersTitle": "Guia de Fornecedores", + "featuredProvidersDescription": "Conecte fornecedores de IA em minutos", + "nonTechUsersTitle": "Para Utilizadores Não Técnicos", + "nonTechUsersSubtitle": "Comece rapidamente — sem necessidade de formação técnica", + "techUsersTitle": "Para Utilizadores Técnicos", + "techUsersSubtitle": "Mergulhe na arquitetura, APIs e internos", + "apiExplorerMetadataTitle": "Explorador de API — Documentação OmniRoute", + "apiExplorerMetadataDescription": "Explorador de API Interativo — experimente os endpoints do OmniRoute ao vivo com respostas em tempo real", + "apiExplorerTitle": "Explorador de API", + "apiExplorerDescription": "Experimente os endpoints do OmniRoute ao vivo. Selecione um endpoint, configure o seu pedido e veja a resposta em tempo real.", + "apiExplorerSseStarted": "Fluxo SSE iniciado — verifique o terminal/devtools para saída em tempo real.", + "apiExplorerError": "Erro: {message}", + "apiExplorerAuth": "autenticação", + "apiExplorerResponseLabel": "Resposta", + "apiExplorerSelectEndpoint": "Selecione um endpoint para explorar", + "apiExplorerChooseApi": "Escolha uma API na barra lateral para ver detalhes e experimentá-la ao vivo", + "feedbackThanks": "Obrigado pelo seu feedback!", + "feedbackQuestion": "Esta página foi útil?", + "pageMetadataTitle": "{title} — Documentação OmniRoute", + "pageMetadataDescription": "Documentação do OmniRoute: {title}", + "breadcrumb": "Migalhas de Pão", + "apiReferenceTable": { + "parameters": "Parâmetros", + "name": "Nome", + "type": "Tipo", + "description": "Descrição", + "returns": "Devoluções", + "typePrefix": "Tipo:" + } }, "legal": { "privacyPolicy": "Política de Privacidade", @@ -9957,7 +10479,42 @@ "successMessage": "Sua conta {providerName} foi conectada.", "done": "Concluído", "error": "Falha na conexão", - "tryAgain": "Tente novamente" + "tryAgain": "Tente novamente", + "errorSessionIncomplete": "A sessão OAuth está incompleta (falta o URI de redirecionamento ou o verificador de código). Reinicie a conexão e tente novamente.", + "errorExchangeFailed": "Troca falhou", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: As credenciais padrão do Google OAuth só funcionam em localhost. Para uso remoto, configure as suas próprias credenciais OAuth através de variáveis de ambiente: ANTIGRAVITY_OAUTH_CLIENT_ID e ANTIGRAVITY_OAUTH_CLIENT_SECRET. Consulte a seção README 'OAuth em um Servidor Remoto'.", + "errorSaveFailed": "Falha ao guardar", + "errorAuthorizationFailed": "Autorização falhada", + "errorAuthorizationTimeout": "Tempo limite de autorização", + "errorRequestFailed": "Pedido falhado", + "errorCallbackServerFailed": "Falha ao iniciar o servidor de callback", + "errorBrowserUnavailable": "O OAuth do navegador não está disponível para este fornecedor no ambiente atual. Utilize o método de autenticação suportado em vez disso.", + "errorStateMismatch": "Desvio de estado OAuth. Reinicie a conexão e tente novamente.", + "errorImportAccessToken": "Falha ao importar o token de acesso", + "errorSessionNotInitialized": "Sessão OAuth não inicializada. Reinicie o fluxo de conexão e tente novamente.", + "errorNoAuthorizationCode": "Nenhum código de autorização encontrado. Cole o URL de retorno ou o Código de Autenticação.", + "tabDeviceCode": "Código do Dispositivo", + "tabBrowserLogin": "Login no Navegador", + "tabImportAuthJson": "Importar auth.json", + "tabPasteApiKey": "Cole o API Key", + "windsurfPasteDescription": "No Windsurf / IDE VS Code, execute o comando \"Windsurf: Provide Auth Token\" a partir da palete de comandos (ou clique no botão \"Get Windsurf Authentication Token\" do Jupyter), depois copie o token mostrado e cole-o abaixo. Abrir windsurf.com/show-auth-token diretamente apenas mostra uma página de \"Redirecionando\" — o IDE deve iniciar o fluxo.", + "grokAuthJsonDescription": "Cole o conteúdo COMPLETO de ~/.grok/auth.json (não apenas o campo \"key\" do JWT). Um JWT simples não tem refresh_token, por isso a conexão morre após a expiração (#7610). Prefira o modal dedicado de Importar auth.json quando disponível.", + "devinDesktopPasteDescription": "Cole o seu chave API Devin existente de uma sessão Devin autenticada. A disponibilidade de exportação da chave e os passos variam conforme a versão e a conta do Devin.", + "devinPasteDescription": "Forneça a sua WINDSURF_API_KEY (obtida através de `devin auth login`, ou através do comando \"Windsurf: Provide Auth Token\" no Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Chave API / Token", + "saving": "A Guardar…", + "saveConnection": "Guardar Conexão", + "gheDescription": "Introduza a URL base da sua instância do GitHub Enterprise (por exemplo, https://ghe.suaempresa.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL do GitHub Enterprise", + "gheUrlRequired": "É necessário o URL do GitHub Enterprise", + "gitlabDuoSetupTitle": "Configuração do OAuth Duo do GitLab", + "gitlabDuoSetupMessage": "O OAuth Duo do GitLab não está configurado. Registe uma aplicação OAuth em {applicationsUrl} com o URI de redirecionamento {redirectUri} e os scopes \"{scopes}\", depois defina {clientIdEnv} (e opcionalmente {clientSecretEnv}) e reinicie.", + "gitlabDuoSetupDescription": "Depois de a aplicação estar registada e as variáveis de ambiente estarem definidas nesta instância do OmniRoute, clique em Continuar para iniciar o login OAuth.", + "continue": "Continuar" }, "cursorAuthModal": { "title": "Conecte o Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Carregar mais", - "loadingMore": "A carregar mais..." + "loadingMore": "A carregar mais...", + "correlationId": "ID de Correlação", + "group": { + "showAllRows": "Mostrar todas as linhas", + "showLatestPerCorrelation": "Mostrar o mais recente por ID de correlação", + "grouped": "Agrupado" + }, + "running": "a correr", + "interval": { + "decrease": "Diminuir intervalo", + "title": "Intervalo de atualização automática em segundos", + "increase": "Aumentar intervalo" + }, + "status": { + "inProgress": "Em progresso", + "recoveredByRetry": "Recuperado por nova tentativa", + "goToParent": "Ir para o pedido pai", + "healedTitle": "Falhou, recuperado após {count} tentativas", + "healed": "curado", + "failedTitle": "Todas as {count} tentativas falharam", + "failed": "falhou", + "pinnedTitle": "Modelo selecionado através do fixador de sessão do cache de contexto", + "pinned": "fixado" + }, + "attempts": "tentativas", + "detail": { + "collapse": "Colapsar {title}", + "expand": "Expandir {title}", + "copyTitle": "Copiar {title}", + "copied": "Copiado!", + "copy": "Copiar", + "autoscrollOn": "Deslocação Automática: ativada", + "autoscrollOff": "Deslocação Automática: desligada", + "payload": { + "clientRawRequest": "Pedido Bruto do Cliente", + "clientRequest": "Pedido do Cliente", + "openaiRequest": "Pedido OpenAI", + "providerRequest": "Pedido de Fornecedor", + "providerResponse": "Resposta do Fornecedor", + "clientResponse": "Resposta do Cliente", + "pipelineError": "Erro de Pipeline" + }, + "payloadMissing": "O artefato de carga detalhada já não está disponível para esta entrada de log.", + "payloadCorrupt": "O artefato do payload detalhado não pôde ser analisado.", + "notAvailable": "N/A", + "semanticCache": "Semântico (OmniRoute)", + "upstreamCache": "Upstream (Fornecedor)", + "ariaLabel": "Detalhe do registo de pedidos", + "completed": "Concluído", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute retornou {status} mesmo que o provedor tenha retornado {provider}", + "previousRequest": "Pedido anterior", + "nextRequest": "Próximo pedido", + "close": "Fechar modal de detalhes", + "startedAt": "Começou Em", + "endedAt": "Terminado Em", + "duration": "Duração", + "model": "Modelo", + "provider": "Fornecedor", + "account": "Conta", + "input": "Entrada", + "totalIn": "Total Entrada: {value}", + "cacheRead": "Cache Leitura: {value}", + "cacheWrite": "Cache Write: {value}", + "compressed": "Comprimido: {from} → {to} ({percent}% poupados)", + "output": "Saída", + "totalOut": "Total Saída: {value}", + "reasoning": "Raciocínio: {value}", + "requestedModel": "Modelo Solicitado", + "requestProtocol": "Protocolo Req", + "cacheSource": "Fonte de Cache", + "modelPinning": "Fixação de Modelo", + "activeModelPinning": "Ativo — modelo selecionado através do fixador de sessão", + "rotated": "Rotacionado: {initial} -> {final}", + "apiKey": "Chave da API", + "noApiKey": "Sem chave de API", + "combo": "Combo", + "error": "Erro", + "unblockAll": "Desbloquear tudo", + "cleared": "Limpo", + "unblock": "Desbloquear", + "relatedRequests": "Pedidos Relacionados ({count})", + "current": "atual", + "detailStatus": "Estado Detalhado", + "loadingDetails": "A carregar detalhes do pedido...", + "providerEventStream": "Fluxo de Eventos do Fornecedor", + "clientEventStream": "Fluxo de Eventos do Cliente", + "eventStream": "Fluxo de Eventos", + "responsePayloadLegacy": "Payload de Resposta (Legado)", + "requestPayloadLegacy": "Payload de Requisição (Legado)", + "noPayload": "Não há dados de payload disponíveis para esta entrada de log.", + "correlationId": "ID de Correlação", + "correlationIdValue": "ID de Correlação: {id}", + "detailedPayloadInfo": "Ative o registo detalhado primeiro se quiser a visualização de carga útil de cliente/fornecedor em quatro etapas para novos pedidos." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} desativado", "providerAdded": "{provider} adicionado", "add": "Adicionar", - "manualApiKey": "Utilizar uma chave de API manual" + "manualApiKey": "Utilizar uma chave de API manual", + "createDahlTokenFailed": "Falha ao criar o token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configurar proxy", + "providerProxyTitleConfigured": "Proxy configurado: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Restrito por ToS — rever termos", "caution": "Atenção — cláusulas de uso pessoal / proxy", "ok": "Geralmente permissivo" - } + }, + "allProviders": "Todos os fornecedores", + "noApiKeyRequired": "Nenhuma chave de API necessária" }, "providerHealthAutopilot": { "title": "Piloto Automático de Estado do Fornecedor", @@ -12390,7 +13047,11 @@ "on": "LIGADO", "off": "DESLIGADO", "availableProviders": "Fornecedores disponíveis ({count})", - "noProviderOverrides": "Sem substituições — todos os fornecedores ativos participarão com os seus modelos predefinidos" + "noProviderOverrides": "Sem substituições — todos os fornecedores ativos participarão com os seus modelos predefinidos", + "resetFailed": "Reinício falhou", + "resetSuccess": "Configuração redefinida para os padrões", + "running": "A executar...", + "testFailed": "Teste falhou" }, "kimiSponsorBanner": { "foundingFriendTitle": "A Kimi (Moonshot AI) é a Amiga do Código Aberto fundadora do OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "O fornecedor não suporta visão para este pedido de imagem", "capabilityFilter.toolsMismatch": "O fornecedor não suporta a chamada de ferramentas", "capabilityFilter.structuredOutputMismatch": "O fornecedor não suporta saída estruturada", - "capabilityFilter.contextWindowMismatch": "A solicitação excede a janela de contexto do fornecedor" + "capabilityFilter.contextWindowMismatch": "A solicitação excede a janela de contexto do fornecedor", + "publicSystem": { + "notFound": { + "title": "Página não encontrada", + "description": "A página que está a procurar não existe ou foi movida.", + "dashboardAriaLabel": "Voltar ao painel de controlo", + "statusAriaLabel": "Abrir página de estado do sistema", + "systemStatus": "Estado do Sistema" + }, + "error": { + "title": "Erro Interno do Servidor", + "description": "Ocorreu um erro ao processar o seu pedido. A nossa equipa foi notificada e está a trabalhar numa solução.", + "errorId": "ID de Erro: {id}", + "detailsAriaLabel": "Detalhes do erro", + "retryAriaLabel": "Tente carregar a página novamente", + "tryAgain": "Tente Novamente", + "dashboardAriaLabel": "Voltar ao painel de controlo", + "statusAriaLabel": "Abrir estado do sistema", + "systemStatus": "Estado do Sistema" + }, + "globalError": { + "title": "Algo correu mal", + "description": "Ocorreu um erro inesperado. Isto foi registado e a nossa equipa irá investigar.", + "detailsAriaLabel": "Detalhes do erro", + "retryAriaLabel": "Tente carregar a página novamente", + "tryAgain": "Tente Novamente", + "statusAriaLabel": "Abrir estado do sistema", + "systemStatus": "Estado do Sistema" + }, + "offline": { + "title": "Problema de Conectividade", + "description": "OmniRoute não consegue aceder à rede neste momento. Verifique a sua internet, configurações de VPN ou proxy.", + "connectionRestored": "Conexão restaurada", + "offlineModeDetected": "Modo offline detetado", + "retryConnection": "Tentar Novamente a Conexão", + "openStatusPage": "Abrir Página de Estado" + }, + "maintenance": { + "title": "Manutenção Programada", + "description": "Alguns serviços estão temporariamente indisponíveis enquanto a manutenção está em andamento. O roteamento principal geralmente permanece online, mas as funcionalidades de gestão podem estar degradadas.", + "suggestion1": "Tente novamente após alguns minutos.", + "suggestion2": "Verifique os indicadores de saúde atuais e o estado do fornecedor antes de tentar novamente.", + "systemStatus": "Ver Estado do Sistema", + "healthDashboard": "Abrir o Painel de Saúde" + }, + "status": { + "title": "Estado do Sistema", + "description": "Instantâneo operacional ao vivo para os serviços principais do OmniRoute.", + "loadingHealth": "A Carregar métricas de saúde...", + "failedToLoad": "Falha ao carregar a saúde do sistema.", + "unableToReachHealth": "Incapaz de alcançar o endpoint de saúde. Verifique a conectividade e tente novamente.", + "healthCheckFailed": "Verificação de Saúde Falhou", + "openConnectivityHelp": "Ajuda de Conectividade Aberta", + "maintenanceInfo": "Informações de Manutenção", + "service": "Serviço", + "unknown": "desconhecido", + "notAvailable": "n/a", + "providersTracked": "Provedores Rastreados", + "circuitBreakerState": "Estado do Disjuntor do Fornecedor", + "lastUpdate": "Última atualização: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Pedido Inválido", + "description": "A carga útil da solicitação é inválida ou incompleta.", + "suggestion1": "Revise os campos obrigatórios e o formato da carga útil antes de tentar novamente.", + "suggestion2": "Se estiver a usar a API, valide o esquema JSON localmente.", + "suggestion3": "Se isto continuar a acontecer, abra o pedido no Translator Playground para inspecionar a carga útil.", + "primaryAction": "Abrir Documentação", + "secondaryAction": "Abrir Tradutor" + }, + "401": { + "title": "Não autorizado", + "description": "A autenticação é necessária para aceder a este recurso.", + "suggestion1": "Inicie sessão novamente e tente a operação.", + "suggestion2": "Para chamadas de API, confirme que o token Bearer está presente e é válido.", + "suggestion3": "Se o token foi recentemente rodado, atualize as suas credenciais de cliente.", + "primaryAction": "Ir para Iniciar Sessão", + "secondaryAction": "Gerir Chaves de API" + }, + "403": { + "title": "Proibido", + "description": "O seu pedido foi compreendido, mas o acesso é negado pela política.", + "suggestion1": "Verifique as regras de lista de permissões/lista de bloqueios de IP nas definições.", + "suggestion2": "Verifique as políticas de modelo e orçamento atribuídas à sua chave de API.", + "suggestion3": "Peça a um administrador para conceder o escopo de permissão necessário.", + "primaryAction": "Ajuda de Acesso Aberto", + "secondaryAction": "Abrir Definições de Segurança" + }, + "408": { + "title": "Tempo de Solicitação Esgotado", + "description": "O servidor não recebeu um pedido completo a tempo.", + "suggestion1": "Tente novamente a solicitação com um payload menor.", + "suggestion2": "Verifique a estabilidade da sua rede e a latência do VPN/proxy.", + "suggestion3": "Para operações longas, ative o streaming ou divida o pedido.", + "primaryAction": "Abrir Guia de Endpoint", + "secondaryAction": "Verificar Estado da Rede" + }, + "429": { + "title": "Demasiadas Solicitações", + "description": "Os limites de taxa foram excedidos para este cliente, chave ou fornecedor.", + "suggestion1": "Aguarde o tempo de recarga e tente novamente após o intervalo sugerido.", + "suggestion2": "Mude para um combo com fornecedores de fallback.", + "suggestion3": "Ajuste os perfis de resiliência/límite de taxa do fornecedor nas definições.", + "primaryAction": "Abrir Definições de Resiliência", + "secondaryAction": "Abrir Combos" + }, + "500": { + "title": "Erro Interno do Servidor", + "description": "Ocorreu um erro inesperado no servidor ao processar o seu pedido.", + "suggestion1": "Tente novamente dentro de alguns segundos.", + "suggestion2": "Verifique a telemetria de saúde e os registos do servidor para IDs de pedido correlacionados.", + "suggestion3": "Se persistir, reporte o problema com o carimbo de data/hora e o contexto do pedido.", + "primaryAction": "Abrir Painel de Saúde", + "secondaryAction": "Abrir Registos" + }, + "502": { + "title": "Gateway Inválido", + "description": "O fornecedor upstream ou a integração do gateway retornou uma resposta inválida.", + "suggestion1": "Tente novamente com outro fornecedor ou rota de combinação ativa.", + "suggestion2": "Verifique as credenciais do fornecedor e a disponibilidade do modelo.", + "suggestion3": "Inspecione a saída do tradutor se a conversão de formato estiver envolvida.", + "primaryAction": "Abrir Fornecedores", + "secondaryAction": "Abrir Tradutor" + }, + "503": { + "title": "Serviço Indisponível", + "description": "O serviço está temporariamente indisponível devido a manutenção ou dependências degradadas.", + "suggestion1": "Espere um momento e tente novamente.", + "suggestion2": "Verifique os avisos de manutenção e o estado do sistema.", + "suggestion3": "Use provedores de fallback se o seu fluxo de trabalho for sensível à latência.", + "primaryAction": "Detalhes de Manutenção", + "secondaryAction": "Estado do Sistema" + } + } + }, + "kiroAuthModal": { + "title": "Conectar {providerLabel}", + "chooseMethod": "Escolha o seu método de autenticação:", + "builderId": "ID do Construtor AWS", + "builderDescription": "Recomendado para a maioria dos utilizadores. Inicie sessão com a conta AWS ligada a {providerLabel}.", + "organization": "A Sua Organização (AWS IAM Identity Center)", + "organizationDescription": "Utilize a URL de início SSO da sua empresa (exemplo: {url}).", + "googleAccount": "Conta Google", + "googleDescription": "Inicie sessão com a sua conta Google.", + "githubAccount": "Conta do GitHub", + "githubDescription": "Inicie sessão com a sua conta GitHub.", + "importToken": "Importar Token", + "importDescription": "Cole uma token de atualização exportada de {providerLabel}.", + "apiKey": "Chave da API", + "apiKeyDescription": "Cole uma chave de API {providerLabel} / CodeWhisperer de longa duração. Ela é armazenada como uma credencial bearer sem token de atualização; a descoberta de perfil é feita com o melhor esforço.", + "idcStartUrl": "URL de Início do IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "A URL do AWS IAM Identity Center da sua organização", + "awsRegion": "Região AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Região AWS para o seu Centro de Identidade (padrão: us-east-1)", + "continue": "Continuar", + "back": "Voltar", + "autoDetecting": "Deteção automática de token...", + "readingCredentials": "A ler credenciais de {providerLabel} do cache do AWS SSO", + "tokenNotDetected": "O token {providerLabel} não foi detetado automaticamente. Por favor, cole o seu token de atualização manualmente.", + "refreshToken": "Atualizar Token", + "tokenPlaceholder": "O token será preenchido automaticamente...", + "importing": "A Importar...", + "apiKeyPlaceholder": "Cole o seu código de API {providerLabel}...", + "apiKeyStoredDescription": "Armazenado encriptado como uma credencial portadora de longa duração. Não há fluxo de atualização.", + "apiKeyRegionDescription": "Região AWS para a chave (padrão: us-east-1)", + "validating": "A Validar...", + "validateAndSaveApiKey": "Validar e Guardar a Chave da API", + "errorAutoDetect": "Não foi possível detectar o token automaticamente", + "errorAutoDetectFailed": "Falha ao detectar automaticamente o token", + "errorRefreshTokenRequired": "Por favor, insira um token de atualização", + "errorImportFailed": "Importação falhou", + "errorApiKeyRequired": "Por favor, insira uma chave de API Kiro", + "errorApiKeyImportFailed": "Falha na importação da chave da API", + "errorIdcStartUrlRequired": "Por favor, insira a sua URL de início do IDC" + }, + "kiroSocialOAuthModal": { + "title": "Conectar {providerLabel} através de {providerName}", + "errorStartAuthorization": "Falha ao iniciar a autorização", + "errorAuthorizationExpired": "A autorização expirou. Inicie o fluxo de login novamente.", + "errorAuthorizationFailed": "Autorização falhou", + "initializing": "A Inicializar...", + "settingUp": "A configurar a autenticação {providerName}", + "openIncognito": "Abra este link numa janela de Navegação Privada", + "incognitoDescription": "Utilize uma janela Incógnita/Privada para evitar conflitos de sessão com contas existentes.", + "copyLink": "Copiar link", + "verificationCode": "Código de verificação", + "waiting": "A aguardar autorização...", + "cancel": "Cancelar", + "successTitle": "Conectado com Sucesso!", + "successMessage": "A sua conta {providerLabel} através do {providerName} foi conectada.", + "done": "Concluído", + "errorTitle": "Conexão Falhada", + "close": "Fechar" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorização falhou", + "errorPopupBlocked": "Popup bloqueado — permita popups para este site, ou cole o token manualmente abaixo.", + "errorPopupClosed": "A janela de autorização foi fechada antes de ser concluída.", + "errorAccessTokenRequired": "É necessário um token de acesso.", + "errorImportFailed": "Importação falhou", + "title": "Conectar Trae SOLO", + "authorizeDescription": "Autorize através de trae.ai numa janela pop-up. A janela pop-up fechar-se-á automaticamente assim que o token tiver sido importado.", + "authorizeImportant": "Importante: deve estar autenticado em trae.ai neste navegador primeiro. A página de autorização apenas confirma uma sessão existente — não pode autenticar você. Se vir \"Falha na Autenticação\", clique em \"Abrir solo.trae.ai\", autentique-se e depois volte aqui.", + "waitingForAuthorization": "À espera de trae.ai…", + "authorizeWithBrowser": "Autorizar com o Navegador", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "ou cole um token manualmente", + "manualInstructions": "Inicie sessão em solo.trae.ai, abra o DevTools → Rede, envie qualquer mensagem de chat e copie o JWT do cabeçalho da requisição Authorization: Cloud-IDE-JWT {tokenPlaceholder}. A duração do JWT é de ~14 dias. Os campos de identidade opcionais vêm de common_params no mesmo corpo da requisição.", + "accessTokenLabel": "Token de Acesso (Cloud-IDE-JWT)", + "webId": "ID da Web", + "optional": "opcional", + "bizUserId": "ID do Utilizador Biz", + "userUniqueId": "ID Único do Utilizador", + "scope": "Âmbito", + "tenant": "Inquilino", + "region": "Região", + "importing": "A Importar…", + "importToken": "Importar Token", + "cancel": "Cancelar" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "A Distribuir...", + "complete": "Completo", + "defaultLabel": "Distribuir Proxies" + } + }, + "providerTest": { + "dialogLabel": "Testar {provider}", + "deprecated": "obsoleto", + "risk": "risco", + "close": "Fechar", + "model": "Modelo", + "key": "Chave", + "defaultKey": "padrão", + "clearConversation": "Limpar conversa", + "clear": "Limpar", + "tabs": { + "test": "Teste", + "logs": "Registos" + }, + "loadingLogs": "A Carregar registos…", + "failedToLoadLogs": "Falha ao carregar os registos", + "noLogsYet": "Sem registos ainda", + "noLogsDescription": "Envie uma mensagem de teste a partir da aba Teste — os registos para este fornecedor aparecerão aqui.", + "openFullLogs": "Abrir página de registos completos", + "live": "Ao Vivo", + "tailingLast": "a seguir os últimos {count}", + "refreshNow": "Atualizar agora", + "refresh": "Atualizar", + "unknownRequester": "solicitante desconhecido", + "fields": { + "timestamp": "Carimbo de Data/Hora", + "status": "Estado", + "duration": "Duração", + "model": "Modelo", + "requestedModel": "Modelo solicitado", + "provider": "Fornecedor", + "requester": "Solicitante", + "tokens": "Tokens" + } + }, + "proxyLog": { + "detailAriaLabel": "Detalhe do registo do proxy", + "event": "Evento Proxy", + "close": "Fechar modal de detalhes do proxy", + "time": "Hora", + "latency": "Latência", + "clientIp": "IP do Cliente", + "proxy": "Proxy", + "direct": "Direto", + "type": "Tipo", + "level": "Nível", + "provider": "Fornecedor", + "tlsFingerprint": "Impressão Digital TLS", + "directNative": "Direto", + "targetUrl": "URL de Destino", + "error": "Erro", + "configuration": "Configuração de Proxy" + }, + "requestTimeline": { + "title": "Linha do Tempo do Pedido", + "modes": { + "follow": "Seguir", + "followDescription": "O eixo rola para a esquerda, a linha NOW permanece a 75%", + "now": "Agora", + "nowDescription": "Ir para o tempo atual, a linha NOW redefine para o centro", + "pan": "Frigideira", + "panDescription": "Arraste para explorar, o fundo está congelado" + }, + "reset": "Reiniciar", + "started": "Iniciado", + "ended": "Terminado", + "duration": "Duração", + "status": "Estado", + "provider": "Fornecedor", + "tokens": "Tokens", + "active": "Ativo", + "other": "Outro", + "tenMinutes": "10min", + "hour": "hora", + "day": "dia", + "unknownModel": "desconhecido", + "pending": "pendente" + }, + "metadata": { + "compressionTitle": "Compressão", + "compressionDescription": "Configure as definições de compressão de contexto para reduzir o uso de tokens e os custos.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Endpoints de proxy relay sem servidor para a sua infraestrutura de IA", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitor chamadas LLM + depurar o tráfego HTTPS de qualquer aplicação" + }, + "conductor": { + "title": "Conductor — Frota de agentes CLI", + "subtitle": "OmniConductor hub: executores, fila de tarefas e conselhos, ao vivo", + "runners": "Corredores", + "tasks": "Tarefas", + "colName": "Nome", + "colClis": "CLIs", + "colStatus": "Estado", + "colTask": "Tarefa", + "colMode": "Modo", + "colRunner": "Executante", + "colSummary": "Resumo", + "online": "online", + "offline": "offline", + "draining": "drenagem", + "hubOffline": "Hub do condutor offline ou não configurado (CONDUCTOR_HUB_URL) — a mostrar nada em vez de dados desatualizados.", + "noRunners": "Nenhum corredor registado", + "noTasks": "Sem tarefas ainda", + "detailTitle": "Detalhe da tarefa", + "prompt": "Indicação", + "branch": "Ramo", + "fetchHint": "Busque o resultado com: git fetch origin {branch}", + "council": "Conselho", + "candidates": "Candidatos", + "cancel": "Cancelar tarefa", + "cancelConfirmTitle": "Cancelar esta tarefa?", + "cancelConfirmMessage": "O hub irá abortar a execução no runner. Isto não pode ser desfeito.", + "cancelFailed": "O hub recusou o cancelamento", + "close": "Fechar", + "error": "Erro", + "faroTitle": "Faro — porta-voz da frota", + "faroSubtitle": "Chat e voz, ancorados em eventos reais da frota. Comandos destrutivos pedem sempre confirmação.", + "faroEmpty": "Pergunte sobre a frota — por exemplo, \"como está a frota?\"", + "faroPending": "Faro está a pedir confirmação", + "faroPlaceholder": "fale com Faro…", + "faroSend": "enviar", + "faroOffline": "Faro (porta-voz) está offline", + "yes": "Sim", + "no": "Não", + "pushToTalk": "Pressione para falar", + "speakAnswers": "falar respostas", + "voiceModels": "Modelos de voz (fornecedor/modelo deste OmniRoute)", + "voiceIdle": "falar", + "voiceListening": "a ouvir…", + "voiceThinking": "a pensar…", + "voiceSpeaking": "a falar…", + "sttFailed": "A transcrição falhou (verifique o modelo/provedor STT)", + "ttsFailed": "A síntese de fala falhou (verifique o modelo/provedor TTS)", + "micDenied": "Microfone indisponível ou permissão negada" + }, + "cliproxyProviderExposure": { + "title": "Exposição do Fornecedor", + "description": "Expose os modelos CLIProxyAPI como um alvo de roteamento sob o prefixo cliproxyapi/.", + "label": "Expose como cliproxyapi/...", + "hint": "Quando ativado, os modelos descobertos aparecem nas seleções do provedor em todo o OmniRoute.", + "updateFailed": "Falha ao atualizar (HTTP {status})", + "networkError": "Erro de rede — não foi possível atualizar a configuração de exposição do fornecedor" + } } - diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index bbcdc36557..bb4c2a23a2 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -172,6 +172,18 @@ "unselectAll": "Deselectează tot", "visibleModels": "vizibile", "selectAllConfirm": "Adaugi {count} modele la această combinație?", + "testSelectedProviders": "Test providers", + "testingSelectedProviders": "Testare {done}/{total}...", + "noProvidersSelectedToTest": "Verifică mai întâi cel puțin un furnizor de mai jos", + "noModelsToTestForProviders": "Nu există modele de testat pentru furnizorii selectați", + "testSelectedProvidersResults": "{ok} din {total} modele funcționează", + "selectWorkingModels": "Adăugați funcționare", + "unselectWorkingModels": "Dezactivează selecția", + "noWorkingModelsToSelect": "Nu mai sunt modele funcționale de adăugat", + "providerTestHint": "Sugestie: verifică un furnizor → Test → Adaugă funcțional. Fă clic din nou pentru a deselecta.", + "selectAllProviders": "Verifică toți furnizorii", + "clearProviderSelection": "Debifați furnizorii", + "providersSelectedCount": "{count} furnizori verificați", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Dimensiune", + "toggleNoAuthProvider": "Comută furnizorul fără autentificare", + "loadingModels": "Încărcare modele…", + "selectAModel": "Selectați un model", + "degraded": "Degradat", + "zeroConfigBannerTitle": "Rulând în modul zero-config", + "zeroConfigBannerBody": "OmniRoute a generat automat chei de criptare securizate la prima lansare. Acestea sunt păstrate în {dataDir}. Nu este necesară nicio acțiune — datele tale sunt criptate și în siguranță. Pentru a folosi chei personalizate, adaugă JWT_SECRET și STORAGE_ENCRYPTION_KEY în acel fișier.", + "batchRelativeTimeIn": "în {value}", + "batchRelativeTimeAgo": "cu {value} în urmă", + "batchDetailsTitle": "Detalii Lot", + "batchProgress": "Progres", + "batchCompletedCount": "{count} finalizate", + "batchFailedCount": "{count} eșuat", + "batchPendingCount": "{count} în așteptare", + "batchTimeline": "Cronologie", + "batchTimelineInProgress": "În desfășurare", + "batchTimelineFinalizing": "Finalizare", + "batchTimelineCompleted": "Finalizat", + "batchTimelineFailed": "Eșuat", + "batchTimelineExpires": "Expiră", + "batchTimelineExpired": "Expirat", + "batchTimelineCancelling": "Anulând", + "batchTimelineCancelled": "Anulat", + "batchTokenUsage": "Utilizarea Token-ului", + "batchMetadata": "Metadate", + "batchFileContents": "Conținutul Fișierului", + "batchFileUsedByCount": "Folosit de {count, plural, one {# lot} other {# loturi}}", + "batchFilePreview": "Previzualizare", + "batchFilePreviewTruncated": "Afișare primele {shown} linii ({total} linii totale)", + "batchFileDownloadFull": "Descarcă Fișierul Complet" }, "disabled": "Dezactivat", "featureFlagOmnirouteEmergencyFallbackDescription": "Redirecționează cererile cu buget epuizat către furnizorul/modelul de rezervă gratuit de urgență.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Separator", "discovery": "Descoperire", "discoverySubtitle": "Scanează furnizorii pentru acces gratuit", + "conductor": "Conductor", + "conductorSubtitle": "Flota agentului CLI", "resilienceConnections": "Reziliența Conexiunii", "resilienceConnectionsSubtitle": "Cooldown, întrerupător, stare de blocare", "settingsModalityBridge": "Podul de Modalitate", - "settingsModalityBridgeSubtitle": "Fallback pentru text-only modele pentru imagine/audio → text" + "settingsModalityBridgeSubtitle": "Fallback pentru text-only modele pentru imagine/audio → text", + "commandPalette": { + "title": "Paleta de comenzi", + "searchPlaceholder": "Caută pagini, setări, unelte...", + "clearSearch": "Șterge căutarea", + "noResults": "Niciun rezultat", + "navigate": "navigați", + "open": "deschide", + "close": "închide" + }, + "noResults": "Niciun rezultat" }, "webhooks": { "title": "Webhook-uri", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Actualizarea setărilor a eșuat", "sync.token.created": "Tokenul de sincronizare a fost creat", "sync.token.revoked": "Tokenul de sincronizare a fost revocat" - } + }, + "mcpMetricCalls24h": "Apeluri (24h)", + "mcpMetricSuccessRate": "Rata de succes", + "mcpMetricAvgDuration": "Durata medie", + "mcpMetricTopTool": "Instrument de top" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Este disponibilă o nouă versiune. Faceți clic pentru a actualiza.", "updateStarted": "Actualizarea a început...", "reloadingPageAutomatically": "Se reîncarcă pagina automat...", - "providerTopology": "Topologia furnizorului" + "providerTopology": "Topologia furnizorului", + "downloadDmg": "Descarcă DMG (macOS)", + "downloadDmgDescription": "O nouă versiune a aplicației desktop OmniRoute este disponibilă. Vă rugăm să descărcați și să instalați programul de instalare DMG pentru macOS pentru a actualiza (curent: v{version}).", + "downloadExe": "Descarcă EXE (Windows)", + "downloadExeDescription": "O nouă versiune a aplicației desktop OmniRoute este disponibilă. Vă rugăm să descărcați și să instalați programul de instalare Windows EXE pentru a actualiza (curent: v{version}).", + "downloadAppImage": "Descarcă AppImage (Linux)", + "downloadAppImageDescription": "O nouă versiune a aplicației desktop OmniRoute este disponibilă. Vă rugăm să descărcați pachetul AppImage pentru Linux pentru a actualiza (curent: v{version}).", + "downloadUpdate": "Descarcă Actualizarea", + "downloadUpdateDescription": "O nouă versiune a aplicației desktop OmniRoute este disponibilă. Vă rugăm să descărcați formatul de aplicație corespunzător sistemului dumneavoastră pentru a actualiza (curent: v{version}).", + "updateQueued": "Actualizare în așteptare la v{version}.", + "updateDockerRebuilding": "Imaginea Docker se reconstruiește în fundal.", + "updateWaitingRestart": "Așteptând ca OmniRoute să repornească cu noua versiune.", + "updateInstalling": "Instalarea v{version}.", + "updateRunning": "OmniRoute rulează acum v{version}.", + "updateCompleted": "OmniRoute actualizat la v{version}.", + "updateDockerStillRebuilding": "Imaginea Docker se reconstruiește încă pentru v{version}.", + "updateInstallingBackground": "Instalarea v{version} în fundal.", + "updateWaitingVersion": "Așteptând ca OmniRoute să revină pe v{version}.", + "updateDockerStillInProgress": "Rebuild-ul Docker este încă în curs de desfășurare.", + "updateRestarting": "Reporniți serviciul în curs. Așteptând ca OmniRoute să revină online...", + "updateTimeout": "Actualizarea a început, dar v{version} nu a devenit disponibilă înainte de expirarea timpului. Reîmprospătează pagina sau verifică jurnalele serverului.", + "updateTimedOut": "Actualizarea la v{version} a expirat.", + "updateStartFailed": "Actualizarea nu a reușit să pornească.", + "noResponseStream": "Nu s-a primit niciun flux de răspuns.", + "updateComplete": "Actualizare completă!", + "updateFailed": "Actualizarea a eșuat.", + "updateNetworkError": "Eroare de rețea — conexiune pierdută în timpul actualizării.", + "stepInstallPackage": "Instalează Pachetul", + "stepRebuildNativeModules": "Reconstruiește Modulele Native", + "stepRestartService": "Repornire Serviciu", + "stepComplete": "Completat", + "stepError": "Eroare", + "updateCompleteTitle": "Actualizare completă!", + "updateFailedTitle": "Actualizare Eșuată", + "updatingTitle": "Actualizare OmniRoute...", + "reloadNotice": "Pagina se va reîncărca automat în câteva secunde.", + "retryNotice": "Te rugăm să încerci din nou sau să actualizezi manual prin CLI.", + "restartNotice": "Nu închideți această pagină. Sistemul se va reporni automat.", + "reloadNow": "Reîncarcă Acum", + "closeUpdate": "Închide", + "retryUpdate": "Reîncercare", + "updateAvailableTitle": "Actualizare disponibilă: v{version}{desktop}", + "desktopAppLabel": "(Aplicație Desktop)", + "checkingForUpdates": "Verificare actualizări...", + "versionAvailableForDownload": "Versiunea v{version} este disponibilă pentru descărcare.", + "downloadingUpdate": "Se descarcă actualizarea... {percent}% complet.", + "updateDownloaded": "Actualizarea a fost descărcată cu succes! Faceți clic pe Repornire și Instalare pentru a aplica.", + "autoUpdateFailed": "Actualizarea automată a eșuat: {reason}.", + "unknownUpdateError": "Eroare necunoscută", + "versionAvailableDesktop": "Versiunea v{version} este disponibilă pentru aplicația desktop.", + "manualUpdateRequired": "Actualizare manuală necesară pentru acest tip de instalare.", + "restartAndInstall": "Repornire și Instalare", + "checkForUpdate": "Verifică pentru actualizare", + "manualUpdate": "Actualizare Manuală", + "directDownloadHint": "Sau descărcați direct formatul installer-ului respectiv:", + "releaseNotes": "Note de Lansare", + "readMore": "Citește mai mult", + "noAuthLabel": "Fără Autentificare" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Dedus din jurnalele de apeluri persistate din jurul acestei cereri", "routeRecommendations": "Recomandări", "routeLimitations": "Limitări", - "routeNoKnownLimitations": "Nu există limitări cunoscute pentru această explicație." + "routeNoKnownLimitations": "Nu există limitări cunoscute pentru această explicație.", + "searchAnalyticsLoading": "Se încarcă analizele de căutare…", + "searchAnalyticsNoData": "Nu sunt disponibile date de căutare încă.", + "searchAnalyticsNoDataDescription": "Cererea de căutare va apărea aici după prima căutare prin /v1/search.", + "searchAnalyticsToday": "{count} astăzi", + "searchAnalyticsCachedRequests": "{count} cereri în cache", + "searchAnalyticsApiCosts": "costurile API de căutare", + "searchAnalyticsErrors": "{count} erori", + "searchAnalyticsNoErrors": "Fără erori", + "searchAnalyticsProviderBreakdown": "Analiza Furnizorilor", + "searchAnalyticsQueries": "interogări", + "searchAnalyticsEmptyDescription": "Folosește POST /v1/search pentru a începe rutarea căutărilor web.", + "searchAnalyticsFreeTier": "Tier gratuit disponibil: Serper (2.500/lună), Brave (2.000/lună), Exa (1.000/lună), Tavily (1.000/lună) — total 6.500+ căutări gratuite/lună cu comutare automată.", + "autoRoutingNoDataAvailable": "Nu sunt disponibile analize de auto-routing. Faceți cereri folosind prefixul auto/ pentru a vedea metricile.", + "defaultVariantLabel": "Implicit", + "freeTierAvailable": "Tier gratuit disponibil" }, "apiManager": { "title": "Chei API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} furnizori", "imageToTextBridgeAvailable": "Modality Bridge poate descrie imagini pentru modele doar text acum. Terenul de joacă inline va fi disponibil când /api/v1/images/understanding va fi implementat.", "imageToTextBridgeCta": "Configurează puntea Imagine→Text în setările Modality Bridge", - "sttBridgeCta": "Configurează puntea Speech→Text în setările Modality Bridge" + "sttBridgeCta": "Configurează puntea Speech→Text în setările Modality Bridge", + "existingConnection": "Conexiune existentă", + "openrouterSttDescription": "Modelele de recunoaștere vocală OpenRouter folosesc conexiunea OpenRouter configurată de tine. Nu este necesară o acreditivă separată." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Lipiți în:", "copilotReloadInstruction": "Apoi reîncărcați VS Code și setați cheia API în câmpul de introducere.", "wireApiChatCompletions": "Finalizări de chat (/chat/completions)", - "wireApiResponses": "API-ul Responses (/responses)" + "wireApiResponses": "API-ul Responses (/responses)", + "cliproxyapiActionFailed": "Acțiunea a eșuat", + "cliproxyapiActionSucceeded": "Acțiune reușită", + "cliproxyapiCheckUpdates": "Verifică actualizările", + "cliproxyapiDescription": "Fallback pentru proxy-ul upstream (OAuth bazat pe Go)", + "cliproxyapiHealth": "Sănătate", + "cliproxyapiHealthy": "Sănătos", + "cliproxyapiInstall": "Instalează", + "cliproxyapiNotInstalledValue": "Neinstalat", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Cererea a eșuat", + "cliproxyapiRestart": "Repornire", + "cliproxyapiStart": "Începe", + "cliproxyapiStatusError": "Eroare", + "cliproxyapiStatusInstalled": "Instalat", + "cliproxyapiStatusNotInstalled": "Neinstalat", + "cliproxyapiStatusRunning": "Se Rulează", + "cliproxyapiStatusStopped": "Oprit", + "cliproxyapiStop": "Oprește", + "cliproxyapiUnhealthy": "Nesănătos", + "cliproxyapiUnknown": "Necunoscut", + "cliproxyapiUpdate": "Actualizare", + "cliproxyapiUpdateAvailable": "Actualizare disponibilă: v{current} → v{latest}", + "cliproxyapiVersion": "Versiune" }, "combos": { "title": "Combo-uri", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Avansați doar la epuizarea cotei", + "fallbackOnlyOnQuotaExhaustionShort": "fallback doar pentru cotă", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Pachetul de moduri și ponderarea rămân aici; starea de runtime a circuit breaker-ului rămâne pe pagina Health.", "emailVisibilityHint": "E-mailurile conturilor de aici respectă comutatorul global de confidențialitate.", "emailVisibilityTooltip": "Utilizați pictograma ochi pentru a afișa sau ascunde e-mailurile conturilor la nivel global în ecranele de combinații, furnizori și cote.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Pas cu pas (Furnizor → Model)", + "builderModeGlobal": "Căutare model global (Combinație personalizată)", + "builderGlobalSearchPlaceholder": "Caută modele în toate furnizorii (de exemplu, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Adaugă tot", + "builderGlobalShortcuts": "Scurtături:", + "builderGlobalNoResults": "Nu a fost găsit niciun model pentru \"{query}\".", + "builderGlobalProviderLabel": "Furnizor:", + "builderGlobalAccountCount": "{count, plural, one {# cont} other {# conturi}}", + "builderGlobalAdded": "Adăugat", + "builderGlobalAdd": "Adaugă", "manualModel": "Model manual", "manualModelInvalid": "Introduceți un model sub forma furnizor/model.", "manualModelUnknownProvider": "Prefix de furnizor necunoscut.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Disponibilitate Sesiune", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Persistență dezactivată", "kimiPresetTitle": "Presetare Kimi Coding", "kimiPresetDescription": "Kimi K3 ca model principal (Moonshot API), cu revenire automată (fallback) la conexiunile dvs. Kimi Code (kimi-coding, kimi-web) atunci când sunt configurate.", - "kimiPresetCta": "Adaugă presetare" + "kimiPresetCta": "Adaugă presetare", + "intelligentComboCount": "{count, plural, one {# combinație inteligentă} other {# combinații inteligente}}", + "providersInScope": "{count, plural, one {# furnizor în domeniu} other {# furnizori în domeniu}}", + "savingModePack": "Se salvează {pack}…", + "errorTitle": "Nu s-au putut încărca combinațiile", + "errorDescription": "Nu am putut încărca datele combo în acest moment. Verifică-ți conexiunea și încearcă din nou.", + "errorId": "ID eroare: {id}", + "errorRetry": "Încearcă din nou", + "comboLabel": "Combo" }, "costs": { "title": "Costuri", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Nume de utilizator", "obsidianPassword": "Parolă", - "obsidianTailscaleHint": "Folosiți IP-ul Tailscale în loc de localhost dacă vă conectați de pe mobil. Ambele dispozitive trebuie să fie în aceeași rețea Tailscale." + "obsidianTailscaleHint": "Folosiți IP-ul Tailscale în loc de localhost dacă vă conectați de pe mobil. Ambele dispozitive trebuie să fie în aceeași rețea Tailscale.", + "cloudSyncNotConfigured": "Sincronizarea în cloud nu este configurată pe această instanță.", + "notionConnect": "Conectează-te", + "notionConnectFailed": "Conectare eșuată", + "notionConnected": "Conectat", + "notionConnectionFailed": "Conexiune eșuată", + "notionDescription": "Caută, citește, interoghează și scrie în Notion prin modele AI rute.", + "notionDisconnect": "Deconectare", + "notionDisconnectFailed": "Deconectare eșuată", + "notionEnterToken": "Vă rugăm să introduceți un token de integrare Notion", + "notionIntegrationHelp": "Creează o integrare internă la", + "notionIntegrationToken": "Token Intern de Integrare Notion", + "notionNotConnected": "Neconectat", + "notionTokenConfigured": "Token configurat. Instrumentele Notion sunt disponibile prin MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Furnizor / Model", "noRemoteProviders": "Niciun furnizor cu cheie API configurată", "selectProviderModel": "Selectați un model", + "customBaseUrlLabel": "URL de bază personalizată (opțional)", + "customModelIdLabel": "ID model personalizat (opțional)", + "customEndpointHelp": "Utilizați un endpoint /embeddings compatibil cu OpenAI. Endpoint-urile locale sunt permise; țintele de metadate din cloud sunt blocate.", + "customEndpointSave": "Aplică punctul final personalizat", + "customEndpointInvalid": "Introduceți atât un URL de bază HTTP(S) valid, cât și un ID de model, sau lăsați ambele câmpuri goale.", + "customEndpointSaveFailed": "Punctul de încorporare personalizat nu a putut fi salvat.", "staticEnabledLabel": "Activați Static Potion", "staticEnabledDesc": "Descărcați și utilizați modelul potion-base-8M local", "transformersEnabledLabel": "Activați Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Se curăță...", "cleanNow": "Curăță acum", "cleanupSuccess": "{count} punct(e) eliminate", - "cleanupFailed": "Curățarea a eșuat" + "cleanupFailed": "Curățarea a eșuat", + "hostLabel": "Gazdă", + "collectionLabel": "Colecție" }, "rerank": { "enableLabel": "Activează Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Diagrama de rezervă pe 3 niveluri OmniRoute", "apiKeyMgmt": "Gestiunea cheii API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Configurați furnizori gratuiti", + "description": "Activați opțional furnizorii selectați fără înregistrare. Revizuiți notificarea și site-ul fiecărui furnizor înainte de a continua; disponibilitatea și limitele de rată sunt controlate de terțe părți.", + "loading": "Se încarcă furnizori gratuit...", + "loadFailed": "Nu s-au putut încărca furnizorii gratuiti.", + "alreadyConfigured": "Toți furnizorii gratuiti eligibili sunt deja configurați.", + "reviewProviderSite": "Revizuiește site-ul furnizorului și termenii", + "confirmation": "Am revizuit acești furnizori terți și vreau ca OmniRoute să creeze conexiunile selectate.", + "setupSelected": "Configurați furnizorii selectați", + "settingUp": "Se configurează...", + "setupFailed": "Nu s-au putut configura furnizorii selectați. Nimic existent nu a fost modificat.", + "retryFailed": "Reîncercați furnizorii eșuați", + "orUseApiKey": "sau conectează-te cu un API key", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "creat", + "skipped": "deja configurat", + "failed": "eșuat" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Obligatoriu. Adresa URL de bază a API-ului furnizorului.", "iconUrlLabel": "URL pictogramă", "iconUrlHint": "Opțional. URL-ul imaginii afișate ca pictogramă a acestui furnizor.", + "iconUrlInvalid": "URL-ul iconului este invalid. Folosiți un URL http(s):// sau data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatibil (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sesiune deja curentă", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Aplicați autentificare", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Lipiți cheia API…", "zedSaving": "Se salvează…", "zedImportAction": "Importare", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Activare reînnoire automată a sesiunii Cursor", + "cursorAgentNudgeBody": "Instalați cursor-agent pentru reînnoirea automată a sesiunii — fără acesta, conexiunile Cursor necesită reconectare manuală periodică aproximativ la fiecare 24 de ore.", + "cursorAgentNudgeDismiss": "Respinge", "zedManualImportFailed": "Importul manual a eșuat", "zedManualImportSuccess": "Token {provider} importat din Zed", "grokImportTitle": "Importare autentificare Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Nivel gratuit pentru inferență serverless — nu este necesar card de credit", "gemini": "Gratuit pentru totdeauna: 1.500 req/zi pentru Gemini 2.5 Flash — fără card de credit, obțineți cheia la aistudio.google.com", "gigachat": "Conectați GigaChat (Sber) cu o cheie API.", - "github-models": "Creați un GitHub PAT cu scope-ul 'models: read' la github.com/settings/tokens", "gitlab": "Token de acces personal GitLab pentru API-ul public Code Suggestions. Configurați un URL de bază self-hosted când nu utilizați gitlab.com.", "gitlawb-gmi": "Obțineți cheia API din tabloul de bord Gitlawb Opengateway.", "gitlawb": "Obțineți cheia API din tabloul de bord Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Conectați Kimi Coding cu fluxul OAuth existent.", "kiro": "Nivel gratuit: 50 de credite/lună (~25K–100K tokenuri). ⚠️ Kiro ToS interzice utilizarea de proxy/harness terțe.", "codex": "Conectați OpenAI Codex cu fluxul OAuth existent.", - "qwen": "Conectați Qwen Code cu fluxul OAuth existent." + "qwen": "Conectați Qwen Code cu fluxul OAuth existent.", + "github-models": "Creați un GitHub PAT cu scope-ul 'models: read' la github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} acceptă ID-uri de model native ale furnizorului. Importați din /modele sau adăugați ID-uri personalizate pentru rutare.", "bedrockModelsDescription": "Modelele Amazon Bedrock sunt acoperite de regiunea AWS. Importați din /modele sau adăugați ID-uri de model Bedrock activate în regiunea selectată.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Când toate conexiunile configurate sunt epuizate (cota, credite sau expirare), folosiți temporar nivelul fără cheie al acestui furnizor. Dezactivați pentru a sări peste acest furnizor în loc de a trimite cereri anonime — recomandat atunci când nivelul fără cheie le respinge (401).", "anonymousFallbackEnabled": "Fallback anonim activat pentru {provider}", "anonymousFallbackDisabled": "Fallback anonim dezactivat pentru {provider} — conexiunile epuizate vor sări peste acest furnizor", - "anonymousFallbackUpdateFailed": "Actualizarea setării de rezervă anonimă a eșuat" + "anonymousFallbackUpdateFailed": "Actualizarea setării de rezervă anonimă a eșuat", + "batchDeleteFailed": "Ștergerea în masă a eșuat", + "batchDeleteNetworkError": "Eroare de rețea în timpul ștergerii în masă", + "batchUpdateFailed": "Actualizarea în lot a eșuat", + "batchUpdateNetworkError": "Eroare de rețea în timpul actualizării în lot", + "categoryAudio": "Audio", + "categoryCloudAgent": "Agent Cloud", + "categoryIde": "IDE", + "categoryLocal": "Local", + "categorySearch": "Caută", + "categoryWebCookie": "Cookie Web", + "claudeExtraUsageBlockingDisabled": "Blocarea utilizării suplimentare Claude dezactivată (utilizarea suplimentară este permisă)", + "claudeExtraUsageBlockingEnabled": "Blocarea utilizării suplimentare Claude activată (utilizarea suplimentară va fi blocată)", + "claudeRoutingPreferenceDisabled": "Modelele Claude fără prefix nu mai preferă Claude Code", + "claudeRoutingPreferenceEnabled": "Modelele Claude fără prefix preferă acum Claude Code", + "clearMediaFilter": "Șterge", + "cliproxyRoutingDisabled": "Solicitările folosesc acum OmniRoute nativ (direct)", + "cliproxyRoutingEnabled": "Solicitările sunt acum direcționate prin CLIProxyAPI (emulare mai profundă)", + "codexLimitPolicyUpdated": "Politica de limitare a Codex-ului actualizată", + "codexServiceModeUpdated": "Modul de serviciu Codex actualizat", + "codexServiceTierActive": "Tierul de serviciu Codex {tier} este activ", + "codexTierFastLabel": "Rapid", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Aplicarea codului de comandă auth a eșuat", + "commandCodeApplyingApproval": "Browser aprobat, se aplică…", + "commandCodeApplyingKey": "Aplicarea cheii aprobate de browser…", + "commandCodeApprovalInstructions": "Deschideți URL-ul de autentificare, aprobați accesul, apoi lipiți cheia/JSON/URL-ul returnat mai jos…", + "commandCodeAuthExpired": "Codul de comandă auth a expirat", + "commandCodeConnected": "Codul comenzii conectat", + "commandCodeConnectionAdded": "Conexiune Cod Comandă adăugată", + "commandCodeLinkExpired": "Linkul codului de comandă a expirat", + "commandCodeOpeningStudio": "Deschidere Command Code Studio…", + "commandCodePopupBlocked": "Popup blocat. Vă rugăm să permiteți ferontele și să încercați din nou Command Code Connect.", + "commandCodeStartFailed": "Nu s-a reușit să se pornească Command Code auth", + "connectionDeleted": "Conexiune ștearsă", + "connectionFallback": "conexiune", + "coolingConnectionsDescription": "Aceste conexiuni au returnat un 429 (limită de rată) la ultima lor solicitare. OmniRoute le va sări peste până când temporizatorul expiră — nu este necesară dezactivarea manuală.", + "coolingConnectionsTitle": "În prezent răcire ({count})", + "failedDeleteAlias": "Nu s-a reușit ștergerea aliasului", + "failedDeleteConnection": "Nu s-a putut șterge conexiunea", + "failedDistributeProxies": "Distribuirea proxy-urilor a eșuat.", + "failedSaveModelEndpointSettings": "Nu s-a reușit salvarea setărilor punctului final al modelului", + "failedUpdateClaudeExtraUsagePolicy": "Actualizarea politicii de utilizare suplimentară Claude a eșuat", + "failedUpdateClaudeRoutingPreference": "Actualizarea preferinței de rutare a codului Claude a eșuat", + "failedUpdateCliproxyRouting": "Actualizarea rutării CLIProxyAPI a eșuat", + "failedUpdateCodexLimitPolicy": "Actualizarea politicii limite Codex a eșuat", + "failedUpdateCodexServiceMode": "Actualizarea modului de serviciu Codex a eșuat", + "filterByMedia": "Media", + "freeBadge": "Gratuit", + "kimiCodeApiKeyLabel": "Cheia API Kimi Code", + "modelTestFailed": "Testul modelului a eșuat", + "modelTestNetworkError": "Eroare de rețea la testarea modelului", + "networkError": "Eroare de rețea", + "networkErrorDeletingAlias": "Eroare de rețea la ștergerea aliasului", + "networkErrorSettingAlias": "Eroare de rețea la setarea aliasului", + "noProvidersMatch": "Niciun furnizor nu se potrivește căutării tale.", + "noSavedProxies": "Nu au fost găsite proxy-uri salvate. Adăugați proxy-uri în Setări → Proxy mai întâi.", + "pageLoadErrorDescription": "Nu am putut încărca datele furnizorului în acest moment. Verifică-ți conexiunea și încearcă din nou.", + "pageLoadErrorId": "ID eroare: {id}", + "pageLoadErrorRetry": "Încearcă din nou", + "pageLoadErrorTitle": "Nu s-au putut încărca furnizorii", + "playgroundTitle": "Teren de joacă", + "providerDetailConnectionFlexActive": "Tierul de serviciu Codex flex este activ pentru această conexiune", + "providerDetailConnectionPriorityActive": "Tierul de serviciu prioritar Codex este activ pentru această conexiune", + "providerDetailGlobalFlexActive": "Tierul de serviciu Global Codex flex este activ", + "providerDetailGlobalPriorityActive": "Serviciul de prioritate Global Codex este activ", + "proxiesDistributed": "Distribuit {assigned} atribuirea(s) proxy în între {tagLabel}{total} conexiune(s).", + "rerankEndpoint": "Reordonează", + "savedModelEndpointSettings": "Setările punctului final al modelului salvat", + "searchByModelAria": "Caută după model", + "selectSupportedEndpoint": "Selectați cel puțin un punct final acceptat", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Setări", @@ -6460,7 +6719,24 @@ "loadFailed": "Nu s-a putut încărca lista de abonamente", "toggleFailed": "Comutatorul nu a reușit", "refreshFailed": "Nu s-a reîmprospătat", - "deleteFailed": "Ștergerea eșuată" + "deleteFailed": "Ștergerea eșuată", + "add": "Adaugă", + "cancel": "Anulează", + "configure": "Configure", + "copyEndpoint": "Copiază Endpoint-ul", + "coreEndpointHint": "Indicație Endpoint Principal", + "coreNodesHint": "Indicație Noduri de Bază", + "create": "Creează", + "deleteConfirm": "Confirmare Ștergere", + "empty": "Gol", + "globalModeDescription": "Descriere Mod Global", + "localCoreHint": "Indicație Locală de Core", + "nodeSummary": "Rezumat Nod", + "providerRequired": "Furnizor Necesar", + "providerRouting": "Rutare Furnizor", + "refresh": "Actualizează", + "refreshInterval": "Interval De Actualizare", + "ruleModeDescription": "Descrierea Modului Regulilor" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Rulează o rezervă automată de la imagine la text înainte de a direcționa solicitările de imagini către modele exclusiv text.", "visionBridgeEnabledLabel": "Activat", "visionBridgeEnabledDesc": "Comută puntea de pre-apel care înlocuiește părțile de imagine cu textul extras.", + "visionBridgeRerouteTextOnlyLabel": "Reroute modele text-only", + "visionBridgeRerouteTextOnlyDesc": "Trimite cererea completă, inclusiv imaginile, către modelul bridge atunci când modelul selectat nu are input de imagine.", "visionBridgeModel": "Model de pod", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Orice ID de model OmniRoute care acceptă vision poate fi utilizat aici.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Cheii API îi lipsește scope-ul manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Unul sau mai multe prefixe vizează rute capabile de spawn și nu permit bypass.", "GENERIC": "Actualizarea setărilor authz a eșuat." - } + }, + "remove": "Elimină" }, "resilienceBaseCooldownLabel": "Răcire de bază", "scopeLabel": "Domeniul de aplicare", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testare audio…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip-uri transcrise de {model}", "modalityBridgeAudioTestNoop": "Audio Bridge nu s-a activat (ținta poate suporta audio, nu este conectat niciun furnizor STT sau podul este dezactivat)", - "modalityBridgeAudioTestError": "Testul audio a eșuat: {message}" + "modalityBridgeAudioTestError": "Testul audio a eșuat: {message}", + "modelRoutingDescriptionPlaceholder": "Rutează modelele Opus către combinația frontieră", + "cliproxyapiFallbackCodes": "Coduri de rezervă Cliproxyapi", + "cliproxyapiFallbackDescription": "Descriere fallback Cliproxyapi", + "cliproxyapiHealthLabel": "Eticheta Sănătate Cliproxyapi", + "cliproxyapiImportFailed": "Cliproxyapi Import Eșuat", + "cliproxyapiImportResult": "Rezultatul Importului Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL invalidă", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Notificare Ciclu De Viață După", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Notificare Ciclu De Viață Înainte", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Notificare Ciclu De Viață Link", + "cliproxyapiPortLabel": "Eticheta Port Cliproxyapi", + "cliproxyapiStatusLabel": "Eticheta Stării Cliproxyapi", + "cliproxyapiVersionLabel": "Eticheta Versiunii Cliproxyapi", + "collection": "Colecție", + "errorPage": { + "description": "Nu am putut încărca setările în acest moment. Te rugăm să încerci din nou în câteva secunde.", + "errorId": "ID eroare: {id}", + "retry": "Încearcă din nou", + "title": "Nu s-au putut încărca setările" + }, + "host": "Gazdă", + "notInstalled": "Neinstalat", + "oneproxyActions": "Acțiuni Oneproxy", + "oneproxyActive": "Oneproxy Activă", + "oneproxyAnonymity": "Anonymitatea Oneproxy", + "oneproxyCountry": "Oneproxy Țară", + "oneproxyDelete": "Oneproxy Șterge", + "oneproxyEmpty": "Oneproxy Gol", + "oneproxyHost": "Oneproxy Gazdă", + "oneproxyLatency": "Latenta Oneproxy", + "oneproxyProtocol": "Protocol Oneproxy", + "oneproxyQuality": "Calitatea Oneproxy", + "oneproxySyncFailed": "Sincronizare eșuată: {error}", + "oneproxySyncSuccess": "Sincronizate {total} proxy-uri ({added} noi, {updated} actualizate)", + "proxyDocumentationSocks5DescAfter": "Documentația Proxy Socks5 Descriere După", + "proxyFreePoolAddProxy": "Adaugă Proxy în Pool-ul Fără Proxy", + "proxyFreePoolAdding": "Adăugarea Pool-ului Proxy Fără", + "proxyFreePoolSelectProxy": "Selectează Proxy din Pool-ul Fără Proxy", + "proxyStatusActive": "Stare Proxy Activă", + "proxyStatusInactive": "Starea Proxy Inactivă", + "routingAddEntry": "Adaugă intrare", + "settingSaveFailed": "Salvarea setărilor a eșuat", + "settingSaved": "Setare Salvată", + "skillsmpApiKeyHintAfter": ". Limită de rată: {limit} cereri/zi.", + "skillsmpApiKeyHintBefore": "Obțineți cheia dvs. API de la", + "syncFailed": "Sincronizare eșuată", + "unhealthy": "Nesănătos", + "oneproxyDescription": "Obțineți și rotiți proxy-uri validate gratuite de pe platforma comunității 1proxy", + "oneproxySyncing": "Sincronizare...", + "oneproxySyncNow": "Sincronizează Acum", + "oneproxyClearAll": "Șterge Tot", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Șterge toate proxy-urile 1proxy?", + "memorySkillsSkillsmpDescription": "Conectează-te la SkillsMP pentru a descoperi și instala abilități din piață.", + "memorySkillsActiveProviderDescription": "Alegeți ce furnizor folosește pagina Abilități pentru căutare și instalare.", + "memorySkillsSkillsmpProviderTitle": "Piața SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Piață autentificată (folosește cheia ta API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Directorul skills.sh", + "memorySkillsSkillsshProviderDescription": "Furnizor de director public (nu este necesar un API key).", + "routingCcBridgeCatalogName": "Pod CC compatibil cu Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Furnizor Native Claude cu tokenuri emise de OAuth.", + "routingCcBridgeName": "Claude-Code Pod", + "routingCcBridgeDescription": "Rutează punctele finale folosind chei API (compatibile-anthropic-cc-*).", + "routingCustomProviderDescription": "Furnizor personalizat.", + "routingUnknownOpKind": "Tip de op necunoscut: {kind}", + "routingInvalidJson": "JSON invalid: {error}", + "routingConfigMustBeObject": "Config trebuie să fie un obiect JSON", + "routingEnabledMustBeBoolean": "`enabled` trebuie să fie adevărat sau fals", + "routingPipelineMustBeArray": "`pipeline` trebuie să fie un array de ops", + "routingPipelineTooLong": "Pipeline-ul nu poate depăși 50 de operații", + "routingOpMissingKind": "Op #{index}: lipsă sau invalid `kind`", + "routingOpUnknownKind": "Op #{index}: tip necunoscut \"{kind}\"", + "routingJsonEditorHide": "Ascunde editorul JSON", + "routingJsonEditorImportExport": "Importați / exportați JSON", + "routingJsonEditorLabel": "JSON (editează și aplică, sau lipește pentru a importa)", + "routingApplyJson": "Aplică JSON", + "routingTransformsFootnote": "Toate operațiile de transformare sunt idempotente la reluare. Modificările au efect imediat la următoarea solicitare.", + "cliproxyapiUnknown": "Necunoscut", + "cliproxyapiVersion": "Versiune", + "cliproxyapiHealth": "Sănătate", + "cliproxyapiPort": "Port", + "qdrantHost": "Gazdă", + "qdrantCollection": "Colecție" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Implicit", + "off": "Oprit", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Agresiv", + "ultra": "Ultra", + "responsesToolOutput": "Ieșirea instrumentului de răspunsuri" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Rulează ultimul în stivă (după ce RTK/Caveman curăță textul, OmniGlyph convertește restul în imagini) și rulează, de asemenea, de sine stătător prin modul omniglyph. Aceasta este o previzualizare și rămâne dezactivată în mod implicit până când validarea end-to-end este finalizată.", "saved": "Salvat.", "saveFailed": "Nu s-a putut salva.", - "enableAria": "Activează motorul OmniGlyph" + "enableAria": "Activează motorul OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Servicii integrate", @@ -9127,7 +9500,49 @@ "unableToLoad": "Nu se pot încărca valorile sistemului", "product": "Produs", "resources": "Resurse", - "company": "Compania" + "company": "Compania", + "tokenHealthTooltips": { + "allHealthy": "Toate tokenurile sunt sănătoase", + "needsAttention": "Unele tokenuri necesită atenție", + "refreshFailures": "Au fost detectate eșecuri la reîmprospătarea token-ului", + "unknown": "Starea de sănătate necunoscută" + }, + "systemMonitor": { + "metricsAriaLabel": "Metrici de sistem", + "memory": "Memorie", + "memoryShort": "mem", + "uptime": "Timp de funcționare", + "ariaLabel": "Monitorizarea sistemului", + "title": "Monitor De Sistem", + "version": "Versiune", + "connections": "Conexiuni", + "circuitBreakers": "Dispozitive De Protecție", + "open": "{count} deschis", + "memoryUsage": "Utilizarea memoriei" + }, + "never": "Niciodată", + "justNow": "Chiar acum", + "minutesAgo": "cu {count}m în urmă", + "hoursAgo": "cu {count}h în urmă", + "tokens": "Tokeni", + "costs": "Costuri", + "autoRefresh": "Actualizare Automată ({seconds}s)", + "toggleAutoRefresh": "Comută actualizarea automată", + "activeRequests": "Cereri Active", + "totalRequests": "Total Cereri", + "totalInputTokens": "Total Tokeni de Intrare", + "model": "Model", + "provider": "Furnizor", + "requests": "Cereri", + "lastUsed": "Ultima Utilizare", + "inputTokens": "Tokeni de Intrare", + "totalTokens": "Total Tokeni", + "inputCost": "Costul de Intrare", + "outputCost": "Costul de Ieșire", + "noUsageData": "Nu s-au înregistrat utilizări încă. Faceți câteva cereri pentru a vedea datele aici.", + "account": "Cont", + "accountLabel": "Cont {id}", + "noAccountUsage": "Nu s-au înregistrat încă utilizări specifice contului. Faceți cereri folosind conturi OAuth pentru a vedea datele aici." }, "auth": { "welcome": "Bun venit", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Resetează prin Datele Aplicației", + "resetViaAppDataDescription": "Ștergeți fișierul de setări din directorul de date al aplicației pentru a vă reseta parola:", + "quitDesktopApp": "Ieși complet din aplicația desktop OmniRoute", + "navigateToAppDataDirectory": "Navigați la directorul de date al aplicației:", + "checkSystemAppDataFolder": "(Verifică folderul de date al aplicației sistemului tău)", + "relaunchDesktopFreshSetup": "Relansează aplicația desktop OmniRoute — va începe o configurare nouă", + "alternativeSetPasswordTitle": "Alternativ: Setează o Parolă Nouă", + "alternativeSetPasswordDescription": "Setați o nouă parolă inițială prin intermediul fișierului de mediu al serverului:", + "openServerEnvFilePrefix": "Deschide", + "relaunchDesktopApp": "Relansează aplicația desktop OmniRoute", + "codexLinkInvalidOrExpired": "Acest link este invalid sau a expirat.", + "codexValidationServerError": "Nu s-a putut ajunge la server pentru a valida acest link.", + "codexSaveConnectionError": "Nu s-a putut salva conexiunea. Linkul poate fi expirat.", + "codexDeviceLoginDisabled": "Autentificarea cu cod de dispozitiv este dezactivată pentru acest cont OpenAI. Activați-o în setările de securitate ChatGPT (sau întrebați administratorul spațiului de lucru).", + "codexAuthorizationTimedOut": "Autorizarea a expirat. Faceți clic pe Start din nou pentru a încerca din nou.", + "authenticationCancelled": "Autentificarea a fost anulată.", + "unexpectedAuthenticationError": "Eroare neașteptată în timpul autentificării. Vă rugăm să încercați din nou.", + "connectOpenAiCodexTitle": "Conectează OpenAI Codex", + "codexConnectDescription": "Autorizează un cont ChatGPT pentru a finaliza configurarea acestei conexiuni.", + "validatingCodexLink": "Validare link…", + "codexGenerateCodeDescription": "Faceți clic mai jos pentru a genera un cod unic, apoi conectați-vă la OpenAI.", + "startCodexFlow": "Începe", + "requestingOpenAiCode": "Solicitând cod de la OpenAI…", + "codexVerificationInstructions": "1. Deschide pagina de verificare OpenAI și 2. introdu acest cod. Această pagină se actualizează automat odată ce te autorizezi.", + "yourCode": "Codul tău", + "openVerificationPage": "Deschide pagina de verificare", + "copyUrlShort": "Copiază URL-ul", + "savingConnection": "Salvarea conexiunii…", + "codexConnected": "Conectat!", + "codexConnectionRegistered": "Contul Codex a fost înregistrat. Poți închide acest tab.", + "tryAgain": "Încearcă din nou", + "traeAuthorizationSuccess": "Trae autorizare ✓", + "traeAuthorizationFailed": "Autorizarea Trae a eșuat", + "closeAuthorizationWindow": "Puteți închide această fereastră.", + "returnToDashboard": "Întoarce-te la tabloul de bord.", + "resetViaAppData": "Resetare prin Datele Aplicației", + "deleteSettingsToReset": "Ștergeți fișierul de setări din directorul de date al aplicației pentru a vă reseta parola:", + "quitAppCompletely": "Ieși complet din aplicația desktop OmniRoute", + "navigateToAppData": "Navigați la directorul de date al aplicației", + "checkAppDataFolder": "Verifică folderul de date al aplicației sistemului tău", + "deleteSettingsJson": "Șterge", + "relaunchAppFresh": "Relansează aplicația desktop OmniRoute — va începe o configurare nouă", + "alternativeSetPassword": "Alternativ: Setează o Parolă Nouă", + "setNewPasswordViaEnv": "Setați o nouă parolă inițială prin intermediul fișierului de mediu al serverului:", + "openServerEnv": "Deschide", + "inDataDirectory": "în directorul de date", + "addOrUpdate": "Adaugă sau actualizează", + "deleteAndRelaunch": "Șterge", + "settingsJson": "settings.json", + "fromDataDir": "din directorul de date", + "relaunchApp": "Relansează aplicația desktop OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Sunteți gata să vă simplificați infrastructura AI?", "ctaDescription": "Alăturați-vă dezvoltatorilor care își eficientizează integrările AI cu OmniRoute. Open source și liber pentru a începe.", "startFree": "Începe gratuit", - "readDocumentation": "Citiți documentația" + "readDocumentation": "Citiți documentația", + "company": "Companie", + "pricing": "Prețuri", + "apiReference": "Referință API", + "helpCenter": "Centrul de Ajutor", + "about": "Despre", + "blog": "Blog", + "contact": "Contactați", + "terms": "Termeni", + "privacy": "Confidențialitate", + "license": "Licență", + "footerDescription": "Interfața unificată pentru infrastructura modernă AI. Securizată, observabilă și scalabilă.", + "communityDiscussions": "Discuții Comunitare" }, "docs": { "title": "Documentare", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Înregistrați și gestionați agenții prin intermediul registrului ACP pentru comunicarea între agenți și partajarea instrumentelor.", "protocolAcpStep1": "Navigați la Tabloul de bord → Agenți pentru a vedea agenții ACP înregistrați.", "protocolAcpStep2": "Înregistrați noi agenți cu capacități și configurație finală.", - "protocolAcpStep3": "Utilizați instrumentele CLI pentru a configura canalele de comunicare a agentului." + "protocolAcpStep3": "Utilizați instrumentele CLI pentru a configura canalele de comunicare a agentului.", + "metadataTitleTemplate": "%s — Documentația OmniRoute", + "metadataDefaultTitle": "Documentația OmniRoute", + "metadataDescription": "Documentație cuprinzătoare pentru gateway-ul OmniRoute AI — configurare, API, compresie, desfășurare și altele.", + "layoutNavTitle": "OmniRoute Docs", + "layoutHomeLink": "Acasă Docs", + "layoutDashboardLink": "← Înapoi la Taboul de Bord", + "homeTitle": "Documentația OmniRoute", + "homeMetadataDescription": "Tot ce ai nevoie pentru a rutezi, comprima și scala AI-ul tău — ghiduri de configurare, referință API, compresie, implementare și altele.", + "homeTwitterDescription": "Documentație cuprinzătoare pentru gateway-ul OmniRoute AI", + "homeDescription": "Tot ce ai nevoie pentru a rutea, comprima și scala AI-ul tău", + "homeSearchHint": "Apasă Ctrl K pentru a căuta în documentație", + "featuredQuickStartTitle": "Începere Rapidă", + "featuredQuickStartDescription": "Pune OmniRoute în funcțiune în 3 minute", + "featuredAutoComboTitle": "Ghid Auto-Combo", + "featuredAutoComboDescription": "Lasă OmniRoute să aleagă cel mai bun AI pentru tine", + "featuredProvidersTitle": "Ghidul Furnizorilor", + "featuredProvidersDescription": "Conectează furnizorii de AI în câteva minute", + "nonTechUsersTitle": "Pentru Utilizatori Non-Tehnici", + "nonTechUsersSubtitle": "Începe rapid — nu este nevoie de experiență tehnică", + "techUsersTitle": "Pentru utilizatorii tehnici", + "techUsersSubtitle": "Explorare profundă a arhitecturii, API-urilor și internelor", + "apiExplorerMetadataTitle": "API Explorer — Documentația OmniRoute", + "apiExplorerMetadataDescription": "Explorator API interactiv — testează punctele finale OmniRoute în direct cu răspunsuri în timp real", + "apiExplorerTitle": "Explorator API", + "apiExplorerDescription": "Încercați punctele finale OmniRoute în direct. Selectați un punct final, configurați cererea dvs. și vedeți răspunsul în timp real.", + "apiExplorerSseStarted": "Fluxul SSE a început — verificați terminalul/devtools pentru ieșire în timp real.", + "apiExplorerError": "Eroare: {message}", + "apiExplorerAuth": "autentificare", + "apiExplorerResponseLabel": "Răspuns", + "apiExplorerSelectEndpoint": "Selectați un endpoint de explorat", + "apiExplorerChooseApi": "Alegeți o API din bara laterală pentru a vedea detalii și a o încerca în direct", + "feedbackThanks": "Mulțumim pentru feedbackul tău!", + "feedbackQuestion": "A fost această pagină utilă?", + "pageMetadataTitle": "{title} — Documentația OmniRoute", + "pageMetadataDescription": "Documentația OmniRoute: {title}", + "breadcrumb": "Crumbelina", + "apiReferenceTable": { + "parameters": "Parametrii", + "name": "Nume", + "type": "Tip", + "description": "Descriere", + "returns": "Returnează", + "typePrefix": "Tip:" + } }, "legal": { "privacyPolicy": "Politica de confidențialitate", @@ -9957,7 +10479,42 @@ "successMessage": "Contul dvs. {providerName} a fost conectat.", "done": "Gata", "error": "Conexiunea a eșuat", - "tryAgain": "Încercați din nou" + "tryAgain": "Încercați din nou", + "errorSessionIncomplete": "Sesunea OAuth este incompletă (lipsesc URI-ul de redirecționare sau verificatorul de cod). Reporniti conexiunea și încercați din nou.", + "errorExchangeFailed": "Schimbul a eșuat", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Credențialele implicite Google OAuth funcționează doar pe localhost. Pentru utilizare de la distanță, configurează-ți propriile credențiale OAuth prin variabile de mediu: ANTIGRAVITY_OAUTH_CLIENT_ID și ANTIGRAVITY_OAUTH_CLIENT_SECRET. Vezi secțiunea README 'OAuth pe un server la distanță'.", + "errorSaveFailed": "Salvarea a eșuat", + "errorAuthorizationFailed": "Autorizarea a eșuat", + "errorAuthorizationTimeout": "Timp de expirare a autorizării", + "errorRequestFailed": "Cererea a eșuat", + "errorCallbackServerFailed": "Eșec la pornirea serverului de callback", + "errorBrowserUnavailable": "Browser OAuth nu este disponibil pentru acest furnizor în mediul curent. Folosiți metoda de autentificare acceptată în schimb.", + "errorStateMismatch": "Neconcordanță a stării OAuth. Reporniti conexiunea și încercați din nou.", + "errorImportAccessToken": "Importul tokenului de acces a eșuat", + "errorSessionNotInitialized": "Sesunea OAuth nu a fost inițializată. Reporniti fluxul de conexiune și încercați din nou.", + "errorNoAuthorizationCode": "Nu a fost găsit niciun cod de autorizare. Lipiți URL-ul de callback sau Codul de Autentificare.", + "tabDeviceCode": "Cod Dispozitiv", + "tabBrowserLogin": "Autentificare Browser", + "tabImportAuthJson": "Importați auth.json", + "tabPasteApiKey": "Lipește cheia API", + "windsurfPasteDescription": "În Windsurf / VS Code IDE, rulează comanda \"Windsurf: Provide Auth Token\" din paleta de comenzi (sau apasă pe butonul Jupyter \"Get Windsurf Authentication Token\"), apoi copiază tokenul afișat și lipește-l mai jos. Deschiderea directă a windsurf.com/show-auth-token arată doar o pagină de \"Redirecting\" — IDE-ul trebuie să inițieze fluxul.", + "grokAuthJsonDescription": "Lipește conținutul COMPLET al ~/.grok/auth.json (nu doar câmpul JWT \"key\"). Un JWT simplu nu are refresh_token, așa că conexiunea se întrerupe după expirare (#7610). Preferă modalul dedicat Import auth.json când este disponibil.", + "devinDesktopPasteDescription": "Lipiți o cheie API Devin existentă dintr-o sesiune Devin autentificată. Disponibilitatea exportului cheii și pașii variază în funcție de versiunea și contul Devin.", + "devinPasteDescription": "Furnizați cheia dumneavoastră WINDSURF_API_KEY (obținută prin `devin auth login`, sau prin comanda \"Windsurf: Provide Auth Token\" din Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Cheie API / Token", + "saving": "Se salvează…", + "saveConnection": "Salvează Conexiunea", + "gheDescription": "Introduceți URL-ul de bază al instanței dvs. GitHub Enterprise (de exemplu, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL-ul GitHub Enterprise", + "gheUrlRequired": "Este necesar un URL GitHub Enterprise", + "gitlabDuoSetupTitle": "Configurarea OAuth Duo pentru GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth nu este configurat. Înregistrează o aplicație OAuth la {applicationsUrl} cu URI de redirecționare {redirectUri} și scope-uri \"{scopes}\", apoi setează {clientIdEnv} (și opțional {clientSecretEnv}) și repornește.", + "gitlabDuoSetupDescription": "După ce aplicația este înregistrată și variabilele de mediu sunt setate pe această instanță OmniRoute, faceți clic pe Continuare pentru a începe autentificarea OAuth.", + "continue": "Continuă" }, "cursorAuthModal": { "title": "Conectați Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Încarcă mai mult", - "loadingMore": "Se încarcă mai mult..." + "loadingMore": "Se încarcă mai mult...", + "correlationId": "ID de corelație", + "group": { + "showAllRows": "Arată toate rândurile", + "showLatestPerCorrelation": "Arată cele mai recente după ID-ul de corelare", + "grouped": "Grupat" + }, + "running": "rulând", + "interval": { + "decrease": "Scade intervalul", + "title": "Interval de auto-reîmprospătare în secunde", + "increase": "Crește intervalul" + }, + "status": { + "inProgress": "În desfășurare", + "recoveredByRetry": "Recuperat prin reîncercare", + "goToParent": "Mergi la cererea părinte", + "healedTitle": "Eșuat, recuperat după {count} încercări", + "healed": "vindecat", + "failedTitle": "Toate cele {count} încercări au eșuat", + "failed": "eșuat", + "pinnedTitle": "Model selectat prin fixarea sesiunii context-cache", + "pinned": "fixat" + }, + "attempts": "încercări", + "detail": { + "collapse": "Colapsează {title}", + "expand": "Extinde {title}", + "copyTitle": "Copiază {title}", + "copied": "Copiat!", + "copy": "Copiază", + "autoscrollOn": "Derulare automată: activată", + "autoscrollOff": "Derulare automată: oprită", + "payload": { + "clientRawRequest": "Cerere Brută Client", + "clientRequest": "Cerere Client", + "openaiRequest": "Cerere OpenAI", + "providerRequest": "Cerere Furnizor", + "providerResponse": "Răspunsul Furnizorului", + "clientResponse": "Răspunsul Clientului", + "pipelineError": "Eroare de Pipeline" + }, + "payloadMissing": "Artifactul detaliat al payload-ului nu mai este disponibil pentru această intrare de jurnal.", + "payloadCorrupt": "Artifactul detaliat al payload-ului nu a putut fi analizat.", + "notAvailable": "N/A", + "semanticCache": "Semantic (OmniRoute)", + "upstreamCache": "Upstream (Furnizor)", + "ariaLabel": "Detalii jurnal solicitare", + "completed": "Finalizat", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute a returnat {status} deși furnizorul a returnat {provider}", + "previousRequest": "Cerere anterioară", + "nextRequest": "Următoarea cerere", + "close": "Închide modalul de detalii", + "startedAt": "Început La", + "endedAt": "Finalizat La", + "duration": "Durată", + "model": "Model", + "provider": "Furnizor", + "account": "Cont", + "input": "Introducere", + "totalIn": "Total În: {value}", + "cacheRead": "Citire Cache: {value}", + "cacheWrite": "Scriere Cache: {value}", + "compressed": "Comprimat: {from} → {to} ({percent}% economisit)", + "output": "Ieșire", + "totalOut": "Total Ieșire: {value}", + "reasoning": "Raționament: {value}", + "requestedModel": "Model Solicitat", + "requestProtocol": "Protocol Req", + "cacheSource": "Sursă Cache", + "modelPinning": "Fixarea Modelului", + "activeModelPinning": "Activ — model selectat prin fixarea sesiunii", + "rotated": "Rotit: {initial} -> {final}", + "apiKey": "Cheie API", + "noApiKey": "Fără cheie API", + "combo": "Combo", + "error": "Eroare", + "unblockAll": "Dezblochează tot", + "cleared": "Șters", + "unblock": "Deblochează", + "relatedRequests": "Cereri Asemănătoare ({count})", + "current": "curent", + "detailStatus": "Stare Detaliată", + "loadingDetails": "Se încarcă detaliile cererii...", + "providerEventStream": "Fluxul de Evenimente al Furnizorului", + "clientEventStream": "Fluxul de Evenimente al Clientului", + "eventStream": "Flux De Evenimente", + "responsePayloadLegacy": "Payload Răspuns (Legacy)", + "requestPayloadLegacy": "Payload-ul Cererii (Legacy)", + "noPayload": "Nu sunt disponibile date de payload pentru această intrare de jurnal.", + "correlationId": "ID de corelare", + "correlationIdValue": "ID de corelare: {id}", + "detailedPayloadInfo": "Activați mai întâi jurnalizarea detaliată dacă doriți vizualizarea payload-ului client/provider în patru etape pentru cererile noi." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} dezactivat", "providerAdded": "{provider} adăugat", "add": "Adaugă", - "manualApiKey": "Folosește o cheie API manuală" + "manualApiKey": "Folosește o cheie API manuală", + "createDahlTokenFailed": "Nu s-a reușit crearea tokenului Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Configurează proxy", + "providerProxyTitleConfigured": "Proxy configurat: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "restricționat prin ToS — revizuiți termenii", "caution": "Atenție — clauze de utilizare personală / proxy", "ok": "În general permisiv" - } + }, + "allProviders": "Toți furnizorii", + "noApiKeyRequired": "Nu este necesar un API key" }, "providerHealthAutopilot": { "title": "Autopilot stare furnizor", @@ -12390,7 +13047,11 @@ "on": "PORNIT", "off": "OPRIT", "availableProviders": "Furnizori disponibili ({count})", - "noProviderOverrides": "Fără suprascrieri — toți furnizorii activi vor participa cu modelele lor implicite" + "noProviderOverrides": "Fără suprascrieri — toți furnizorii activi vor participa cu modelele lor implicite", + "resetFailed": "Reset eșuat", + "resetSuccess": "Resetare configurație la valorile implicite", + "running": "Se rulează...", + "testFailed": "Testul a eșuat" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) este prietenul open source fondator al OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Furnizorul nu suportă viziunea pentru această cerere de imagine", "capabilityFilter.toolsMismatch": "Furnizorul nu suportă apelarea instrumentului", "capabilityFilter.structuredOutputMismatch": "Furnizorul nu suportă ieșirea structurată", - "capabilityFilter.contextWindowMismatch": "Cererea depășește fereastra de context a furnizorului" + "capabilityFilter.contextWindowMismatch": "Cererea depășește fereastra de context a furnizorului", + "publicSystem": { + "notFound": { + "title": "Pagina nu a fost găsită", + "description": "Pagina pe care o căutați nu există sau a fost mutată.", + "dashboardAriaLabel": "Întoarce-te la tabloul de bord", + "statusAriaLabel": "Deschide pagina de stare a sistemului", + "systemStatus": "Starea Sistemului" + }, + "error": { + "title": "Eroare Internă de Server", + "description": "A apărut o problemă în timpul procesării cererii dumneavoastră. Echipa noastră a fost notificată și lucrează la o soluție.", + "errorId": "ID eroare: {id}", + "detailsAriaLabel": "Detalii eroare", + "retryAriaLabel": "Reîncercați să încărcați pagina", + "tryAgain": "Încearcă din nou", + "dashboardAriaLabel": "Întoarce-te la tabloul de bord", + "statusAriaLabel": "Deschide starea sistemului", + "systemStatus": "Starea Sistemului" + }, + "globalError": { + "title": "Ceva a mers prost", + "description": "A apărut o eroare neașteptată. Aceasta a fost înregistrată și echipa noastră va investiga.", + "detailsAriaLabel": "Detalii eroare", + "retryAriaLabel": "Reîncercați să încărcați pagina", + "tryAgain": "Încearcă din nou", + "statusAriaLabel": "Deschide starea sistemului", + "systemStatus": "Starea Sistemului" + }, + "offline": { + "title": "Problemă de Conectivitate", + "description": "OmniRoute nu poate accesa rețeaua în acest moment. Verifică-ți setările de internet, VPN sau proxy.", + "connectionRestored": "Conexiune restabilită", + "offlineModeDetected": "Modul offline detectat", + "retryConnection": "Reîncercare Conexiune", + "openStatusPage": "Deschide Pagina de Status" + }, + "maintenance": { + "title": "Întreținere Programată", + "description": "Unele servicii sunt temporar indisponibile în timp ce întreținerea este în curs de desfășurare. Rutarea de bază rămâne de obicei online, dar funcțiile de gestionare pot fi degradate.", + "suggestion1": "Reîncercați după câteva minute.", + "suggestion2": "Verifică indicatorii de sănătate actuali și starea furnizorului înainte de a încerca din nou.", + "systemStatus": "Vizualizați Starea Sistemului", + "healthDashboard": "Deschide Panoul de Sănătate" + }, + "status": { + "title": "Starea Sistemului", + "description": "Instantaneu operațional live pentru serviciile de bază OmniRoute.", + "loadingHealth": "Încărcare metrici de sănătate...", + "failedToLoad": "Încărcarea stării sistemului a eșuat.", + "unableToReachHealth": "Imposibil de a accesa endpoint-ul de sănătate. Verifică conectivitatea și încearcă din nou.", + "healthCheckFailed": "Verificarea stării a eșuat", + "openConnectivityHelp": "Ajutor pentru Conectivitate Deschisă", + "maintenanceInfo": "Informații de Întreținere", + "service": "Serviciu", + "unknown": "necunoscut", + "notAvailable": "n/a", + "providersTracked": "Furnizori Monitorizați", + "circuitBreakerState": "Starea Circuit Breaker a Furnizorului", + "lastUpdate": "Ultima actualizare: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Cerere Greșită", + "description": "Payload-ul cererii este invalid sau incomplet.", + "suggestion1": "Verificați câmpurile obligatorii și formatul payload-ului înainte de a încerca din nou.", + "suggestion2": "Dacă folosiți API-ul, validați schema JSON local.", + "suggestion3": "Dacă acest lucru continuă să se întâmple, deschide cererea în Translator Playground pentru a inspecta payload-ul.", + "primaryAction": "Deschide Documentația", + "secondaryAction": "Deschide Traducătorul" + }, + "401": { + "title": "Neautorizat", + "description": "Autentificarea este necesară pentru a accesa această resursă.", + "suggestion1": "Conectează-te din nou și încearcă din nou operațiunea.", + "suggestion2": "Pentru apelurile API, confirmați că tokenul Bearer este prezent și valid.", + "suggestion3": "Dacă tokenul a fost recent rotit, actualizați acreditivele clientului.", + "primaryAction": "Mergi la Autentificare", + "secondaryAction": "Gestionați Cheile API" + }, + "403": { + "title": "Interzis", + "description": "Cererea dumneavoastră a fost înțeleasă, dar accesul este refuzat de politică.", + "suggestion1": "Verifică regulile de allowlist/blocklist IP în setări.", + "suggestion2": "Verifică politicile modelului și bugetului atribuite cheii tale API.", + "suggestion3": "Solicită unui administrator să acorde domeniul de permisiuni necesar.", + "primaryAction": "Ajutor pentru Acces Deschis", + "secondaryAction": "Deschide Setările de Securitate" + }, + "408": { + "title": "Timp de așteptare pentru cerere depășit", + "description": "Serverul nu a primit o cerere completă la timp.", + "suggestion1": "Reîncercați cererea cu o sarcină mai mică.", + "suggestion2": "Verifică stabilitatea rețelei tale și latența VPN/proxy.", + "suggestion3": "Pentru operațiuni lungi, activați streaming-ul sau împărțiți cererea.", + "primaryAction": "Deschide Ghidul Endpoint", + "secondaryAction": "Verifică Starea Rețelei" + }, + "429": { + "title": "Prea Multe Cereri", + "description": "Limitele de rată au fost depășite pentru acest client, cheie sau furnizor.", + "suggestion1": "Așteptați perioada de așteptare și încercați din nou după intervalul sugerat.", + "suggestion2": "Comută la un combo cu furnizori de rezervă.", + "suggestion3": "Ajustați profilurile de reziliență/limitare a ratei ale furnizorului în setări.", + "primaryAction": "Deschide Setările de Reziliență", + "secondaryAction": "Deschide Combos" + }, + "500": { + "title": "Eroare Internă a Serverului", + "description": "A apărut o eroare neașteptată pe server în timp ce se procesa cererea dumneavoastră.", + "suggestion1": "Reîncercați o dată în câteva secunde.", + "suggestion2": "Verifică telemetria de sănătate și jurnalele serverului pentru ID-uri de cerere corelate.", + "suggestion3": "Dacă persistă, raportați problema cu timestamp-ul și contextul cererii.", + "primaryAction": "Deschide Panoul de Sănătate", + "secondaryAction": "Deschide Jurnalele" + }, + "502": { + "title": "Gateway Prost", + "description": "Furnizorul upstream sau integrarea gateway-ului a returnat un răspuns invalid.", + "suggestion1": "Reîncercați cu un alt furnizor sau o rută de combinație activă.", + "suggestion2": "Verificați acreditivele furnizorului și disponibilitatea modelului.", + "suggestion3": "Inspectați ieșirea traducătorului dacă este implicată conversia formatului.", + "primaryAction": "Deschide Furnizorii", + "secondaryAction": "Deschide Traducătorul" + }, + "503": { + "title": "Serviciu Indisponibil", + "description": "Serviciul este temporar indisponibil din cauza întreținerii sau a dependențelor degradate.", + "suggestion1": "Așteptați un moment și încercați din nou.", + "suggestion2": "Verificați anunțurile de întreținere și starea sistemului.", + "suggestion3": "Utilizați furnizori de rezervă dacă fluxul dumneavoastră de lucru este sensibil la latență.", + "primaryAction": "Detalii de întreținere", + "secondaryAction": "Starea Sistemului" + } + } + }, + "kiroAuthModal": { + "title": "Conectează {providerLabel}", + "chooseMethod": "Alegeți metoda de autentificare:", + "builderId": "ID-ul Builder AWS", + "builderDescription": "Recomandat pentru cei mai mulți utilizatori. Conectați-vă cu contul AWS legat de {providerLabel}.", + "organization": "Organizația Ta (AWS IAM Identity Center)", + "organizationDescription": "Utilizați URL-ul de start SSO al companiei dvs. (exemplu: {url}).", + "googleAccount": "Cont Google", + "googleDescription": "Conectați-vă cu contul dvs. Google.", + "githubAccount": "Cont GitHub", + "githubDescription": "Conectează-te cu contul tău GitHub.", + "importToken": "Importă Token", + "importDescription": "Lipește un token de reîmprospătare exportat din {providerLabel}.", + "apiKey": "Cheie API", + "apiKeyDescription": "Introduceți o cheie API {providerLabel} / CodeWhisperer pe termen lung. Aceasta este stocată ca un acreditiv bearer fără token de reîmprospătare; descoperirea profilului se face cu cel mai bun efort.", + "idcStartUrl": "IDC Start URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL-ul Centrului de Identitate AWS IAM al organizației dumneavoastră", + "awsRegion": "Regiune AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Regiunea AWS pentru Centrul tău de Identitate (implicit: us-east-1)", + "continue": "Continuă", + "back": "Înapoi", + "autoDetecting": "Detectare automată a tokenului...", + "readingCredentials": "Citirea acreditivelor {providerLabel} din cache-ul AWS SSO", + "tokenNotDetected": "Tokenul {providerLabel} nu a fost detectat automat. Vă rugăm să lipiți manual tokenul de reîmprospătare.", + "refreshToken": "Token de Refresh", + "tokenPlaceholder": "Tokenul va fi completat automat...", + "importing": "Importare...", + "apiKeyPlaceholder": "Lipește cheia ta API {providerLabel}...", + "apiKeyStoredDescription": "Stocat criptat ca un credential de tip bearer cu o durată lungă de viață. Nu există un flux de reîmprospătare.", + "apiKeyRegionDescription": "Regiunea AWS pentru cheie (implicit: us-east-1)", + "validating": "Validare...", + "validateAndSaveApiKey": "Validează și Salvează Cheia API", + "errorAutoDetect": "Nu s-a putut detecta automat tokenul", + "errorAutoDetectFailed": "Nu s-a reușit detectarea automată a tokenului", + "errorRefreshTokenRequired": "Vă rugăm să introduceți un token de reîmprospătare", + "errorImportFailed": "Importul a eșuat", + "errorApiKeyRequired": "Vă rugăm să introduceți o cheie API Kiro", + "errorApiKeyImportFailed": "Importarea cheii API a eșuat", + "errorIdcStartUrlRequired": "Vă rugăm să introduceți URL-ul de început IDC" + }, + "kiroSocialOAuthModal": { + "title": "Conectează {providerLabel} prin {providerName}", + "errorStartAuthorization": "Autorizarea a eșuat la pornire", + "errorAuthorizationExpired": "Autorizarea a expirat. Începe din nou fluxul de autentificare.", + "errorAuthorizationFailed": "Autorizarea a eșuat", + "initializing": "Se inițializează...", + "settingUp": "Configurarea autentificării {providerName}", + "openIncognito": "Deschide acest link într-o fereastră Incognito", + "incognitoDescription": "Folosește o fereastră Incognito/Privată pentru a evita conflictele de sesiune cu conturile existente.", + "copyLink": "Copiază linkul", + "verificationCode": "Cod de verificare", + "waiting": "Așteptând autorizarea...", + "cancel": "Anulează", + "successTitle": "Conectat cu succes!", + "successMessage": "Contul dumneavoastră {providerLabel} prin {providerName} a fost conectat.", + "done": "Finalizat", + "errorTitle": "Conexiune Eșuată", + "close": "Închide" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorizarea a eșuat", + "errorPopupBlocked": "Popup blocat — permite pop-up-uri pentru acest site sau lipește tokenul manual mai jos.", + "errorPopupClosed": "Fereastra de autorizare a fost închisă înainte de a finaliza.", + "errorAccessTokenRequired": "Tokenul de acces este necesar.", + "errorImportFailed": "Importul a eșuat", + "title": "Conectează Trae SOLO", + "authorizeDescription": "Autorizează prin trae.ai într-o fereastră pop-up. Fereastra pop-up se va închide singură odată ce tokenul a fost importat.", + "authorizeImportant": "Important: trebuie să fiți conectat la trae.ai în acest browser mai întâi. Pagina de autorizare confirmă doar o sesiune existentă — nu vă poate conecta. Dacă vedeți \"Login Failed\", faceți clic pe \"Open solo.trae.ai\", conectați-vă, apoi reveniți aici.", + "waitingForAuthorization": "Așteptând trae.ai…", + "authorizeWithBrowser": "Autentificare cu Browserul", + "openSoloTrae": "Deschide solo.trae.ai", + "orPasteManually": "sau lipiți un token manual", + "manualInstructions": "Conectați-vă la solo.trae.ai, deschideți DevTools → Network, trimiteți orice mesaj de chat și copiați JWT din antetul cererii Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Durata de viață a JWT este de ~14 zile. Câmpurile opționale de identitate provin din common_params din același corp al cererii.", + "accessTokenLabel": "Token de Acces (Cloud-IDE-JWT)", + "webId": "ID Web", + "optional": "opțional", + "bizUserId": "ID Utilizator Biz", + "userUniqueId": "ID Unic Utilizator", + "scope": "Domeniu", + "tenant": "Chiriaș", + "region": "Regiune", + "importing": "Importare…", + "importToken": "Importă Token", + "cancel": "Anulează" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuind...", + "complete": "Completat", + "defaultLabel": "Distribuie Proxii" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "depreciat", + "risk": "riscuri", + "close": "Închide", + "model": "Model", + "key": "Cheie", + "defaultKey": "implicit", + "clearConversation": "Șterge conversația", + "clear": "Șterge", + "tabs": { + "test": "Test", + "logs": "Jurnale" + }, + "loadingLogs": "Se încarcă jurnalele…", + "failedToLoadLogs": "Nu s-au putut încărca jurnalele", + "noLogsYet": "Nu există încă jurnale", + "noLogsDescription": "Trimite un mesaj de test din tab-ul Test — jurnalele pentru acest furnizor vor apărea aici.", + "openFullLogs": "Deschide pagina completă a jurnalelor", + "live": "Live", + "tailingLast": "urmărind ultimele {count}", + "refreshNow": "Reîmprospătează acum", + "refresh": "Reîmprospătare", + "unknownRequester": "solicitant necunoscut", + "fields": { + "timestamp": "Marcă de timp", + "status": "Stare", + "duration": "Durată", + "model": "Model", + "requestedModel": "Model solicitat", + "provider": "Furnizor", + "requester": "Solicitant", + "tokens": "Tokeni" + } + }, + "proxyLog": { + "detailAriaLabel": "Detalii jurnal proxy", + "event": "Eveniment Proxy", + "close": "Închide modalul de detalii al proxy-ului", + "time": "Timp", + "latency": "Latentă", + "clientIp": "IP-ul clientului", + "proxy": "Proxy", + "direct": "Direct", + "type": "Tip", + "level": "Nivel", + "provider": "Furnizor", + "tlsFingerprint": "Amprenta TLS", + "directNative": "Direct", + "targetUrl": "URL țintă", + "error": "Eroare", + "configuration": "Configurarea Proxy" + }, + "requestTimeline": { + "title": "Cronologia Cererii", + "modes": { + "follow": "Urmărește", + "followDescription": "Axul derulează la stânga, linia NOW rămâne la 75%", + "now": "Acum", + "nowDescription": "Sari la timpul curent, linia NOW se resetează la centru", + "pan": "Tavă", + "panDescription": "Trage pentru a explora, fundalul este înghețat" + }, + "reset": "Resetare", + "started": "Început", + "ended": "Finalizat", + "duration": "Durată", + "status": "Stare", + "provider": "Furnizor", + "tokens": "Tokeni", + "active": "Activ", + "other": "Altul", + "tenMinutes": "10min", + "hour": "oră", + "day": "zi", + "unknownModel": "necunoscut", + "pending": "în așteptare" + }, + "metadata": { + "compressionTitle": "Compresie", + "compressionDescription": "Configurează setările de compresie a contextului pentru a reduce utilizarea token-urilor și costurile.", + "relayTitle": "OmniRoute — Proxii de Relay", + "relayDescription": "Puncte finale de proxy relay fără server pentru infrastructura ta AI", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitorizați apelurile LLM + depanați traficul HTTPS al oricărei aplicații" + }, + "conductor": { + "title": "Conductor — flota agentului CLI", + "subtitle": "Hub OmniConductor: executori, coada de sarcini și consilii, live", + "runners": "Runners", + "tasks": "Sarcini", + "colName": "Nume", + "colClis": "CLI-uri", + "colStatus": "Stare", + "colTask": "Sarcină", + "colMode": "Mod", + "colRunner": "Runner", + "colSummary": "Rezumat", + "online": "online", + "offline": "offline", + "draining": "drainare", + "hubOffline": "Hub-ul conductor offline sau neconfigurat (CONDUCTOR_HUB_URL) — nu afișează nimic în loc de date învechite.", + "noRunners": "Niciun alergător înregistrat", + "noTasks": "Nu sunt încă sarcini", + "detailTitle": "Detalii sarcină", + "prompt": "Solicitare", + "branch": "Ramură", + "fetchHint": "Obține rezultatul cu: git fetch origin {branch}", + "council": "Consiliu", + "candidates": "Candidați", + "cancel": "Anulează sarcina", + "cancelConfirmTitle": "Anulează această sarcină?", + "cancelConfirmMessage": "Hub-ul va anula execuția pe runner. Aceasta nu poate fi anulată.", + "cancelFailed": "Hub-ul a refuzat anularea", + "close": "Închide", + "error": "Eroare", + "faroTitle": "Faro — purtător de cuvânt al flotei", + "faroSubtitle": "Chat și voce, ancorate în evenimentele reale ale flotei. Comenzile distrugătoare cer întotdeauna confirmare.", + "faroEmpty": "Întreabă despre flotă — de exemplu, \"cum este flota?\"", + "faroPending": "Faro solicită confirmarea", + "faroPlaceholder": "vorbește cu Faro…", + "faroSend": "trimite", + "faroOffline": "Faro (purtător de cuvânt) este offline", + "yes": "Da", + "no": "Nu", + "pushToTalk": "Ține pentru a vorbi", + "speakAnswers": "vorbește răspunsurile", + "voiceModels": "Modele vocale (furnizor/model al acestui OmniRoute)", + "voiceIdle": "vorbește", + "voiceListening": "ascultând…", + "voiceThinking": "gândind…", + "voiceSpeaking": "vorbind…", + "sttFailed": "Transcrierea a eșuat (verificați modelul/furnizorul STT)", + "ttsFailed": "Sinteză vocală eșuată (verificați modelul/furnizorul TTS)", + "micDenied": "Microfon indisponibil sau permisiune refuzată" + }, + "cliproxyProviderExposure": { + "title": "Expunerea Furnizorului", + "description": "Expune modelele CLIProxyAPI ca țintă de rutare sub prefixul cliproxyapi/.", + "label": "Expune ca cliproxyapi/...", + "hint": "Când este activat, modelele descoperite apar în selecțiile furnizorului din OmniRoute.", + "updateFailed": "Actualizarea a eșuat (HTTP {status})", + "networkError": "Eroare de rețea — nu s-a putut actualiza setarea de expunere a furnizorului" + } } - diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index fab2ebe907..7ccac048a1 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -172,6 +172,18 @@ "unselectAll": "Снять выделение", "visibleModels": "видимых", "selectAllConfirm": "Добавить {count} моделей в эту комбинацию?", + "testSelectedProviders": "Поставщики тестов", + "testingSelectedProviders": "Тестирование {done}/{total}...", + "noProvidersSelectedToTest": "Сначала выберите хотя бы одного провайдера ниже", + "noModelsToTestForProviders": "Нет моделей для тестирования для выбранных провайдеров", + "testSelectedProvidersResults": "{ok} из {total} моделей работает", + "selectWorkingModels": "Добавить рабочий", + "unselectWorkingModels": "Снять выделение работы", + "noWorkingModelsToSelect": "Нет доступных рабочих моделей для добавления", + "providerTestHint": "Совет: проверьте провайдера → Тест → Добавить рабочий. Нажмите снова, чтобы отменить выбор.", + "selectAllProviders": "Проверить всех провайдеров", + "clearProviderSelection": "Снять отметку с провайдеров", + "providersSelectedCount": "Проверено {count} провайдеров", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Размер", + "toggleNoAuthProvider": "Переключить провайдер без аутентификации", + "loadingModels": "Загрузка моделей…", + "selectAModel": "Выберите модель", + "degraded": "Ухудшено", + "zeroConfigBannerTitle": "Запуск в режиме нулевой конфигурации", + "zeroConfigBannerBody": "OmniRoute автоматически сгенерировал безопасные ключи шифрования при первом запуске. Они сохранены в {dataDir}. Действий не требуется — ваши данные зашифрованы и в безопасности. Чтобы использовать пользовательские ключи, добавьте JWT_SECRET и STORAGE_ENCRYPTION_KEY в этот файл.", + "batchRelativeTimeIn": "в {value}", + "batchRelativeTimeAgo": "{value} назад", + "batchDetailsTitle": "Детали Пакета", + "batchProgress": "Прогресс", + "batchCompletedCount": "{count} завершено", + "batchFailedCount": "{count} не удалось", + "batchPendingCount": "{count} в ожидании", + "batchTimeline": "Хронология", + "batchTimelineInProgress": "В процессе", + "batchTimelineFinalizing": "Завершение", + "batchTimelineCompleted": "Завершено", + "batchTimelineFailed": "Не удалось", + "batchTimelineExpires": "Истекает", + "batchTimelineExpired": "Истек срок действия", + "batchTimelineCancelling": "Отмена", + "batchTimelineCancelled": "Отменено", + "batchTokenUsage": "Использование токенов", + "batchMetadata": "Метаданные", + "batchFileContents": "Содержимое файла", + "batchFileUsedByCount": "Используется {count, plural, one {# партия} other {# партий}}", + "batchFilePreview": "Предварительный просмотр", + "batchFilePreviewTruncated": "Показаны первые {shown} строки ({total} всего строк)", + "batchFileDownloadFull": "Скачать полный файл" }, "disabled": "Отключено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправлять запросы при исчерпании бюджета на резервный бесплатный провайдер/модель.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Разделитель", "discovery": "Обнаружение", "discoverySubtitle": "Сканировать провайдеров на наличие бесплатного доступа", + "conductor": "Кондуктор", + "conductorSubtitle": "CLI-агент флот", "resilienceConnections": "Устойчивость Соединения", "resilienceConnectionsSubtitle": "Cooldown, автомат защиты, состояние блокировки", "settingsModalityBridge": "Мост Модальности", - "settingsModalityBridgeSubtitle": "Резервное копирование изображения/аудио в текст для моделей только с текстом" + "settingsModalityBridgeSubtitle": "Резервное копирование изображения/аудио в текст для моделей только с текстом", + "commandPalette": { + "title": "Командная палитра", + "searchPlaceholder": "Поиск страниц, настроек, инструментов...", + "clearSearch": "Очистить поиск", + "noResults": "Нет результатов", + "navigate": "навигация", + "open": "открыть", + "close": "закрыть" + }, + "noResults": "Нет результатов" }, "webhooks": { "title": "Вебхуки", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Не удалось обновить настройки", "sync.token.created": "Токен синхронизации создан", "sync.token.revoked": "Токен синхронизации отозван" - } + }, + "mcpMetricCalls24h": "Звонки (24 ч)", + "mcpMetricSuccessRate": "Уровень успеха", + "mcpMetricAvgDuration": "Средняя продолжительность", + "mcpMetricTopTool": "Лучший инструмент" }, "themesPage": { "title": "Темы", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Доступна новая версия. Нажмите для обновления.", "updateStarted": "Обновление начато...", "reloadingPageAutomatically": "Автоматическая перезагрузка страницы...", - "providerTopology": "Топология провайдера" + "providerTopology": "Топология провайдера", + "downloadDmg": "Скачать DMG (macOS)", + "downloadDmgDescription": "Доступна новая версия настольного приложения OmniRoute. Пожалуйста, загрузите и установите установщик DMG для macOS, чтобы обновить (текущая: v{version}).", + "downloadExe": "Скачать EXE (Windows)", + "downloadExeDescription": "Доступна новая версия настольного приложения OmniRoute. Пожалуйста, загрузите и установите установщик Windows EXE для обновления (текущая версия: v{version}).", + "downloadAppImage": "Скачать AppImage (Linux)", + "downloadAppImageDescription": "Доступна новая версия настольного приложения OmniRoute. Пожалуйста, загрузите пакет Linux AppImage для обновления (текущая: v{version}).", + "downloadUpdate": "Скачать обновление", + "downloadUpdateDescription": "Доступна новая версия настольного приложения OmniRoute. Пожалуйста, загрузите соответствующий формат приложения для вашей системы, чтобы обновить (текущая версия: v{version}).", + "updateQueued": "Запланировано обновление до v{version}.", + "updateDockerRebuilding": "Docker-образ пересобирается в фоновом режиме.", + "updateWaitingRestart": "Ожидание перезапуска OmniRoute с новой версией.", + "updateInstalling": "Установка v{version}.", + "updateRunning": "OmniRoute теперь работает на версии v{version}.", + "updateCompleted": "OmniRoute обновлён до версии {version}.", + "updateDockerStillRebuilding": "Docker-образ все еще пересобирается для v{version}.", + "updateInstallingBackground": "Установка v{version} в фоновом режиме.", + "updateWaitingVersion": "Ожидание возвращения OmniRoute на v{version}.", + "updateDockerStillInProgress": "Docker перестройка все еще в процессе.", + "updateRestarting": "Перезапуск службы в процессе. Ожидание, пока OmniRoute снова станет доступным...", + "updateTimeout": "Обновление начато, но v{version} не стало доступным до истечения времени ожидания. Обновите страницу или проверьте журналы сервера.", + "updateTimedOut": "Время ожидания обновления до v{version} истекло.", + "updateStartFailed": "Не удалось запустить обновление.", + "noResponseStream": "Не получен поток ответа.", + "updateComplete": "Обновление завершено!", + "updateFailed": "Обновление не удалось.", + "updateNetworkError": "Ошибка сети — соединение потеряно во время обновления.", + "stepInstallPackage": "Установить пакет", + "stepRebuildNativeModules": "Пересобрать Нативные Модули", + "stepRestartService": "Перезапустить службу", + "stepComplete": "Завершено", + "stepError": "Ошибка", + "updateCompleteTitle": "Обновление завершено!", + "updateFailedTitle": "Ошибка обновления", + "updatingTitle": "Обновление OmniRoute...", + "reloadNotice": "Страница перезагрузится автоматически через несколько секунд.", + "retryNotice": "Пожалуйста, попробуйте еще раз или обновите вручную через CLI.", + "restartNotice": "Не закрывайте эту страницу. Система перезапустится автоматически.", + "reloadNow": "Перезагрузить сейчас", + "closeUpdate": "Закрыть", + "retryUpdate": "Повторить", + "updateAvailableTitle": "Доступно обновление: v{version}{desktop}", + "desktopAppLabel": "(Десктопное приложение)", + "checkingForUpdates": "Проверка обновлений...", + "versionAvailableForDownload": "Версия v{version} доступна для загрузки.", + "downloadingUpdate": "Загрузка обновления... {percent}% завершено.", + "updateDownloaded": "Обновление успешно загружено! Нажмите Перезагрузить и установить, чтобы применить.", + "autoUpdateFailed": "Не удалось выполнить автоматическое обновление: {reason}.", + "unknownUpdateError": "Неизвестная ошибка", + "versionAvailableDesktop": "Версия v{version} доступна для настольного приложения.", + "manualUpdateRequired": "Требуется ручное обновление для этого типа установки.", + "restartAndInstall": "Перезагрузить и установить", + "checkForUpdate": "Проверить обновления", + "manualUpdate": "Ручное обновление", + "directDownloadHint": "Или загрузите соответствующий формат установщика напрямую:", + "releaseNotes": "Примечания к выпуску", + "readMore": "Читать далее", + "noAuthLabel": "Нет аутентификации" }, "analytics": { "title": "Аналитика", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Определено на основе сохраненных журналов вызовов для этого запроса", "routeRecommendations": "Рекомендации", "routeLimitations": "Ограничения", - "routeNoKnownLimitations": "Нет известных ограничений для этого объяснения." + "routeNoKnownLimitations": "Нет известных ограничений для этого объяснения.", + "searchAnalyticsLoading": "Загрузка аналитики поиска…", + "searchAnalyticsNoData": "Нет данных для поиска.", + "searchAnalyticsNoDataDescription": "Запросы поиска появятся здесь после первого поиска через /v1/search.", + "searchAnalyticsToday": "{count} сегодня", + "searchAnalyticsCachedRequests": "{count} кэшированных запросов", + "searchAnalyticsApiCosts": "стоимость API поиска", + "searchAnalyticsErrors": "{count} ошибок", + "searchAnalyticsNoErrors": "Нет ошибок", + "searchAnalyticsProviderBreakdown": "Разбивка по провайдерам", + "searchAnalyticsQueries": "запросы", + "searchAnalyticsEmptyDescription": "Используйте POST /v1/search, чтобы начать маршрутизацию веб-поисков.", + "searchAnalyticsFreeTier": "Доступен бесплатный тариф: Serper (2,500/мес), Brave (2,000/мес), Exa (1,000/мес), Tavily (1,000/мес) — всего 6,500+ бесплатных поисков/месяц с автоматическим переключением.", + "autoRoutingNoDataAvailable": "Нет доступной аналитики авто-маршрутизации. Делайте запросы с префиксом auto/ для просмотра метрик.", + "defaultVariantLabel": "По умолчанию", + "freeTierAvailable": "Доступен бесплатный тариф" }, "apiManager": { "title": "API-ключи", @@ -2348,7 +2478,9 @@ "providerCount": "{count} провайдеров", "imageToTextBridgeAvailable": "Мост Модальности теперь может описывать изображения для моделей только с текстом. Встроенная площадка будет доступна, когда /api/v1/images/understanding будет реализован.", "imageToTextBridgeCta": "Настройте мост Изображение→Текст в настройках Моста Модальности", - "sttBridgeCta": "Настройте мост Speech→Text в настройках Modality Bridge" + "sttBridgeCta": "Настройте мост Speech→Text в настройках Modality Bridge", + "existingConnection": "Существующее соединение", + "openrouterSttDescription": "Модели распознавания речи OpenRouter используют ваше настроенное соединение OpenRouter. Отдельные учетные данные не требуются." }, "search": { "searchQuery": "Поисковый запрос", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Вставить в:", "copilotReloadInstruction": "Затем перезапустите VS Code и укажите API-ключ в поле ввода.", "wireApiChatCompletions": "Завершения чата (/chat/completions)", - "wireApiResponses": "API ответов (/responses)" + "wireApiResponses": "API ответов (/responses)", + "cliproxyapiActionFailed": "Действие не выполнено", + "cliproxyapiActionSucceeded": "Действие выполнено успешно", + "cliproxyapiCheckUpdates": "Проверить обновления", + "cliproxyapiDescription": "Резервный прокси-сервер (OAuth на основе Go)", + "cliproxyapiHealth": "Здоровье", + "cliproxyapiHealthy": "Здоровый", + "cliproxyapiInstall": "Установить", + "cliproxyapiNotInstalledValue": "Не установлено", + "cliproxyapiPort": "Порт", + "cliproxyapiRequestFailed": "Запрос не удался", + "cliproxyapiRestart": "Перезапустить", + "cliproxyapiStart": "Начать", + "cliproxyapiStatusError": "Ошибка", + "cliproxyapiStatusInstalled": "Установлено", + "cliproxyapiStatusNotInstalled": "Не установлено", + "cliproxyapiStatusRunning": "Запуск", + "cliproxyapiStatusStopped": "Остановлено", + "cliproxyapiStop": "Стоп", + "cliproxyapiUnhealthy": "Нездоровый", + "cliproxyapiUnknown": "Неизвестно", + "cliproxyapiUpdate": "Обновить", + "cliproxyapiUpdateAvailable": "Доступно обновление: v{current} → v{latest}", + "cliproxyapiVersion": "Версия" }, "combos": { "title": "Комбо", @@ -3236,6 +3391,8 @@ "pricingMissing": "Без цен", "pricingAvailableShort": "есть цена", "pricingMissingShort": "нет цены", + "fallbackOnlyOnQuotaExhaustion": "Продолжить только при исчерпании квоты", + "fallbackOnlyOnQuotaExhaustionShort": "только резервная копия квоты", "warningRoundRobinSingleModel": "Round robin наиболее полезен минимум с 2 моделями.", "warningCostOptimizedPartialPricing": "Только у {priced} из {total} моделей есть цены. Маршрутизация может быть лишь частично чувствительна к стоимости.", "warningCostOptimizedNoPricing": "Для этого комбо не найдены данные о ценах. Оптимизация по стоимости может маршрутизировать неожиданно.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Режим упаковки и вес остаются здесь; состояние выполнения размыкателя остается на странице состояния.", "emailVisibilityHint": "Электронные адреса аккаунтов здесь следуют глобальному переключателю конфиденциальности.", "emailVisibilityTooltip": "Используйте значок глаза, чтобы показать или скрыть адреса электронной почты аккаунта глобально на экранах комбинаций, провайдеров и квот.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Пошагово (Поставщик → Модель)", + "builderModeGlobal": "Глобальный поиск модели (Пользовательская комбинация)", + "builderGlobalSearchPlaceholder": "Искать модели у всех провайдеров (например, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Добавить все", + "builderGlobalShortcuts": "Сочетания клавиш:", + "builderGlobalNoResults": "Модель не найдена для \"{query}\".", + "builderGlobalProviderLabel": "Поставщик:", + "builderGlobalAccountCount": "{count, plural, one {# аккаунт} other {# аккаунтов}}", + "builderGlobalAdded": "Добавлено", + "builderGlobalAdd": "Добавить", "manualModel": "Ручная модель", "manualModelInvalid": "Введите модель в формате provider/model.", "manualModelUnknownProvider": "Неизвестный префикс провайдера.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Доступность сессии", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Привязка выключена", "kimiPresetTitle": "Пресет Kimi Coding", "kimiPresetDescription": "Kimi K3 в качестве основной модели (Moonshot API) с автоматическим переключением на ваши подключения Kimi Code (kimi-coding, kimi-web) при их настройке.", - "kimiPresetCta": "Добавить пресет" + "kimiPresetCta": "Добавить пресет", + "intelligentComboCount": "{count, plural, one {# интеллектуальная комбинация} other {# интеллектуальных комбинаций}}", + "providersInScope": "{count, plural, one {# поставщик в области} other {# поставщиков в области}}", + "savingModePack": "Сохранение {pack}…", + "errorTitle": "Не удалось загрузить комбо", + "errorDescription": "Мы не смогли загрузить данные комбо в данный момент. Проверьте ваше соединение и попробуйте снова.", + "errorId": "Идентификатор ошибки: {id}", + "errorRetry": "Попробуйте снова", + "comboLabel": "Комбо" }, "costs": { "title": "Затраты", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Имя пользователя", "obsidianPassword": "Пароль", - "obsidianTailscaleHint": "Используйте IP-адрес Tailscale вместо localhost при подключении с мобильного устройства. Оба устройства должны находиться в одной сети Tailscale." + "obsidianTailscaleHint": "Используйте IP-адрес Tailscale вместо localhost при подключении с мобильного устройства. Оба устройства должны находиться в одной сети Tailscale.", + "cloudSyncNotConfigured": "Синхронизация с облаком не настроена на этом экземпляре.", + "notionConnect": "Подключиться", + "notionConnectFailed": "Не удалось подключиться", + "notionConnected": "Подключено", + "notionConnectionFailed": "Ошибка подключения", + "notionDescription": "Ищите, читайте, запрашивайте и записывайте в Notion через маршрутизируемые ИИ модели", + "notionDisconnect": "Отключить", + "notionDisconnectFailed": "Не удалось отключиться", + "notionEnterToken": "Пожалуйста, введите токен интеграции Notion", + "notionIntegrationHelp": "Создать внутреннюю интеграцию в", + "notionIntegrationToken": "Токен внутренней интеграции Notion", + "notionNotConnected": "Не подключено", + "notionTokenConfigured": "Токен настроен. Инструменты Notion доступны через MCP." }, "endpoints": { "tabProxy": "Прокси конечных точек", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Поставщик / Модель", "noRemoteProviders": "Нет провайдеров с настроенным API-ключом", "selectProviderModel": "Выберите модель", + "customBaseUrlLabel": "Пользовательский базовый URL (необязательно)", + "customModelIdLabel": "Идентификатор пользовательской модели (необязательно)", + "customEndpointHelp": "Используйте совместимый с OpenAI /embeddings конечный пункт. Локальные конечные пункты разрешены; облачные метаданные заблокированы.", + "customEndpointSave": "Применить пользовательский конечный пункт", + "customEndpointInvalid": "Введите как действительный базовый URL HTTP(S), так и идентификатор модели, или оставьте оба поля пустыми.", + "customEndpointSaveFailed": "Не удалось сохранить пользовательскую конечную точку встраивания.", "staticEnabledLabel": "Включить Статическую Зелье", "staticEnabledDesc": "Скачайте и используйте модель potion-base-8M локально", "transformersEnabledLabel": "Включить Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Очистка...", "cleanNow": "Очистить сейчас", "cleanupSuccess": "{count} балл(ов) удалено", - "cleanupFailed": "Очистка не удалась" + "cleanupFailed": "Очистка не удалась", + "hostLabel": "Хост", + "collectionLabel": "Коллекция" }, "rerank": { "enableLabel": "Включить Ререйтинг", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Трехуровневая резервная схема OmniRoute", "apiKeyMgmt": "Управление ключами API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Настроить бесплатных провайдеров", + "description": "При желании включите выбранные провайдеры без регистрации. Ознакомьтесь с уведомлением и сайтом каждого провайдера перед продолжением; доступность и лимиты по количеству запросов контролируются третьими сторонами.", + "loading": "Загрузка бесплатных провайдеров...", + "loadFailed": "Не удалось загрузить бесплатные провайдеры.", + "alreadyConfigured": "Все подходящие бесплатные провайдеры уже настроены.", + "reviewProviderSite": "Просмотрите сайт провайдера и условия", + "confirmation": "Я рассмотрел этих сторонних поставщиков и хочу, чтобы OmniRoute создал выбранные соединения.", + "setupSelected": "Настроить выбранных поставщиков", + "settingUp": "Настройка...", + "setupFailed": "Не удалось настроить выбранные провайдеры. Ничего существующего не было изменено.", + "retryFailed": "Повторить неудачные провайдеры", + "orUseApiKey": "или подключитесь с помощью ключа API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "создано", + "skipped": "уже настроено", + "failed": "не удалось" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Обязательно. Базовый URL-адрес API поставщика.", "iconUrlLabel": "URL-адрес иконки", "iconUrlHint": "Необязательно. URL-адрес изображения, используемого в качестве иконки этого провайдера.", + "iconUrlInvalid": "Неверный URL значка. Используйте URL-адрес http(s):// или data:image/*;base64.", "anthropicPrefixPlaceholder": "ac-прод", "openaiPrefixPlaceholder": "oc-прод", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,14 +5431,14 @@ "ccAliasSectionHint": "Эти зеркала публикуют не-Claude модели под ID claude/<провайдер>/<модель>, чтобы Claude Code gateway model discovery мог их перечислить.", "ccAliasProviderLevelLabel": "Провайдер включён", "ccAliasModelOverridesLabel": "Переопределения моделей", - "ccAliasModelOverrideAriaLabel": "Переопределение модели", + "ccAliasModelOverrideAriaLabel": "Override for {modelId}", "ccAliasStateInherit": "Наследовать", "ccAliasStateOn": "Вкл", "ccAliasStateOff": "Выкл", "ccAliasAddModelPlaceholder": "Добавить модель…", "ccAliasAddModelButton": "Добавить", - "ccAliasLoadError": "Не удалось загрузить зеркальные ID Claude Code", - "ccAliasSaveError": "Не удалось сохранить зеркальные ID Claude Code", + "ccAliasLoadError": "Failed to load discovery-alias settings: {error}", + "ccAliasSaveError": "Failed to save discovery-alias setting: {error}", "compatUpstreamHeadersLabel": "Дополнительные заголовки upstream", "compatUpstreamHeadersHint": "Настройка с высоким уровнем доверия - тот же уровень, что и редактирование API-учётных данных провайдера; использовать только доверенным администраторам. Применяется после того, как OmniRoute добавит авторизацию из API-ключа провайдера. Если пользовательский заголовок совпадает по имени с уже существующим (например, Authorization), ваше значение полностью заменяет автоматически созданный заголовок (включая Bearer token) - upstream увидит только введённое вами значение, а не ключ из настроек. Ошибка настройки может привести к 401 или поломке upstream-аутентификации. По одной строке на заголовок (например, дополнительный Authentication для некоторых шлюзов). Наведите курсор или сфокусируйте поле, чтобы увидеть предпросмотр. Сохраняется при потере фокуса, клике вне поля или закрытии панели.", "compatUpstreamHeaderName": "Имя заголовка", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Совместимость (Прод.)", "tokenRefreshed": "Токен успешно обновлён", "tokenRefreshFailed": "Не удалось обновить токен", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Сессия уже активна", "applyCodexAuthLocal": "Применить авторизацию", "exportCodexAuthFile": "Экспортировать авторизацию", "applyClaudeAuthLocal": "Применить авторизацию", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Вставьте API-ключ…", "zedSaving": "Сохранение…", "zedImportAction": "Импортировать", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Включить автоматическое обновление сессии курсора", + "cursorAgentNudgeBody": "Установите cursor-agent для автоматического обновления сессий — без него соединения Cursor требуют периодического ручного переподключения примерно каждые 24 часа.", + "cursorAgentNudgeDismiss": "Отклонить", "zedManualImportFailed": "Не удалось выполнить ручной импорт", "zedManualImportSuccess": "Импортирован токен {provider} из Zed", "grokImportTitle": "Импорт Grok Build Auth", @@ -5878,7 +6066,6 @@ "friendliai": "Бесплатный тариф для бессерверного инференса — кредитная карта не требуется", "gemini": "Бесплатно навсегда: 1 500 запросов в день для Gemini 2.5 Flash — без кредитной карты, получите ключ на aistudio.google.com", "gigachat": "Подключите GigaChat (Сбер) с помощью API-ключа.", - "github-models": "Создайте GitHub PAT с областью доступа 'models: read' на github.com/settings/tokens", "gitlab": "Персональный токен доступа GitLab для публичного Code Suggestions API. Настройте собственный базовый URL-адрес, если не используете gitlab.com.", "gitlawb-gmi": "Получите API-ключ в панели управления Gitlawb Opengateway.", "gitlawb": "Получите API-ключ в панели управления Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Подключите Kimi Coding с помощью существующего процесса OAuth.", "kiro": "Бесплатный тариф: 50 кредитов/месяц (~25K–100K токенов). ⚠️ Условия использования Kiro запрещают использование сторонних прокси/оболочек.", "codex": "Подключите OpenAI Codex с помощью существующего процесса OAuth.", - "qwen": "Подключите Qwen Code с помощью существующего процесса OAuth." + "qwen": "Подключите Qwen Code с помощью существующего процесса OAuth.", + "github-models": "Создайте GitHub PAT с областью доступа 'models: read' на github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} принимает собственные идентификаторы моделей поставщика. Импортируйте из /models или добавляйте собственные идентификаторы для маршрутизации.", "bedrockModelsDescription": "Модели Amazon Bedrock охватываются регионом AWS. Импортируйте из /models или добавьте идентификаторы моделей Bedrock, включенные в выбранном регионе.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Когда все настроенные соединения исчерпаны (квота, кредиты или срок действия), временно используйте безключевой уровень этого провайдера. Выключите, чтобы пропустить этого провайдера вместо отправки анонимных запросов — рекомендуется, когда безключевой уровень их отклоняет (401).", "anonymousFallbackEnabled": "Анонимный резервный вариант включен для {provider}", "anonymousFallbackDisabled": "Анонимный резервный вариант отключен для {provider} — исчерпанные соединения будут пропускать этого провайдера", - "anonymousFallbackUpdateFailed": "Не удалось обновить настройку анонимного резервного варианта" + "anonymousFallbackUpdateFailed": "Не удалось обновить настройку анонимного резервного варианта", + "batchDeleteFailed": "Пакетное удаление не удалось", + "batchDeleteNetworkError": "Ошибка сети во время пакетного удаления", + "batchUpdateFailed": "Пакетное обновление не удалось", + "batchUpdateNetworkError": "Ошибка сети во время пакетного обновления", + "categoryAudio": "Аудио", + "categoryCloudAgent": "Облачный Агент", + "categoryIde": "IDE", + "categoryLocal": "Локальный", + "categorySearch": "Поиск", + "categoryWebCookie": "Веб-куки", + "claudeExtraUsageBlockingDisabled": "Блокировка дополнительного использования Claude отключена (дополнительное использование разрешено)", + "claudeExtraUsageBlockingEnabled": "Блокировка дополнительного использования Claude включена (дополнительное использование будет заблокировано)", + "claudeRoutingPreferenceDisabled": "Модели Claude без префикса больше не предпочитают Claude Code", + "claudeRoutingPreferenceEnabled": "Модели Claude без префикса теперь предпочитают Claude Code", + "clearMediaFilter": "Очистить", + "cliproxyRoutingDisabled": "Запросы теперь используют нативный OmniRoute (прямой)", + "cliproxyRoutingEnabled": "Запросы теперь проходят через CLIProxyAPI (глубокая эмуляция)", + "codexLimitPolicyUpdated": "Политика ограничения Codex обновлена", + "codexServiceModeUpdated": "Режим службы Codex обновлён", + "codexServiceTierActive": "Активен уровень сервиса Codex {tier}", + "codexTierFastLabel": "Быстро", + "codexTierFlexLabel": "Флекс", + "commandCodeApplyFailed": "Не удалось применить код команды auth", + "commandCodeApplyingApproval": "Браузер одобрен, применяется…", + "commandCodeApplyingKey": "Применение ключа, одобренного браузером…", + "commandCodeApprovalInstructions": "Откройте URL для аутентификации, подтвердите доступ, затем вставьте возвращённый ключ/JSON/URL ниже…", + "commandCodeAuthExpired": "Код команды auth истек", + "commandCodeConnected": "Команда Код подключена", + "commandCodeConnectionAdded": "Команда Код соединение добавлено", + "commandCodeLinkExpired": "Ссылка на код команды устарела", + "commandCodeOpeningStudio": "Открытие Command Code Studio…", + "commandCodePopupBlocked": "Всплывающее окно заблокировано. Пожалуйста, разрешите всплывающие окна и попробуйте снова выполнить Command Code Connect.", + "commandCodeStartFailed": "Не удалось запустить команду Code auth", + "connectionDeleted": "Соединение удалено", + "connectionFallback": "соединение", + "coolingConnectionsDescription": "Эти соединения вернули 429 (лимит частоты) в своем последнем запросе. OmniRoute пропустит их, пока таймер не истечет — отключение вручную не требуется.", + "coolingConnectionsTitle": "В настоящее время охлаждение ({count})", + "failedDeleteAlias": "Не удалось удалить псевдоним", + "failedDeleteConnection": "Не удалось удалить соединение", + "failedDistributeProxies": "Не удалось распределить прокси.", + "failedSaveModelEndpointSettings": "Не удалось сохранить настройки конечной точки модели", + "failedUpdateClaudeExtraUsagePolicy": "Не удалось обновить политику дополнительного использования Claude", + "failedUpdateClaudeRoutingPreference": "Не удалось обновить предпочтение маршрутизации кода Claude", + "failedUpdateCliproxyRouting": "Не удалось обновить маршрутизацию CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Не удалось обновить политику ограничения Codex", + "failedUpdateCodexServiceMode": "Не удалось обновить режим службы Codex", + "filterByMedia": "Медиа", + "freeBadge": "Бесплатно", + "kimiCodeApiKeyLabel": "Kimi Code API Ключ", + "modelTestFailed": "Тест модели не пройден", + "modelTestNetworkError": "Ошибка сети при тестировании модели", + "networkError": "Ошибка сети", + "networkErrorDeletingAlias": "Ошибка сети при удалении псевдонима", + "networkErrorSettingAlias": "Ошибка сети при установке псевдонима", + "noProvidersMatch": "Нет провайдеров, соответствующих вашему запросу.", + "noSavedProxies": "Не найдено сохранённых прокси. Сначала добавьте прокси в Настройки → Прокси.", + "pageLoadErrorDescription": "Мы не смогли загрузить данные провайдера в данный момент. Проверьте ваше соединение и попробуйте снова.", + "pageLoadErrorId": "Ошибка ID: {id}", + "pageLoadErrorRetry": "Попробуйте еще раз", + "pageLoadErrorTitle": "Не удалось загрузить провайдеров", + "playgroundTitle": "Игровая площадка", + "providerDetailConnectionFlexActive": "Уровень сервиса Codex flex активен для этого соединения", + "providerDetailConnectionPriorityActive": "Активен уровень приоритетного сервиса Codex для этого соединения", + "providerDetailGlobalFlexActive": "Активен уровень сервиса Global Codex flex", + "providerDetailGlobalPriorityActive": "Активен уровень приоритетного сервиса Global Codex", + "proxiesDistributed": "Распределено {assigned} назначение(я) прокси по {tagLabel}{total} соединению(ям).", + "rerankEndpoint": "Пересортировать", + "savedModelEndpointSettings": "Настройки конечной точки сохраненной модели", + "searchByModelAria": "Поиск по модели", + "selectSupportedEndpoint": "Выберите хотя бы одну поддерживаемую конечную точку", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Настройки", @@ -6175,14 +6434,14 @@ "cacheConfigSaveSuccess": "Конфигурация кэша сохранена", "cacheConfigSaveFailed": "Не удалось сохранить конфигурацию кэша", "modelCatalogTtlWholeNumberError": "TTL должен быть целым числом", - "modelCatalogTtlMinimumError": "TTL должен быть больше 0", - "modelCatalogTtlMaximumError": "TTL не может быть больше 7 дней", + "modelCatalogTtlMinimumError": "Minimum is {min} ms", + "modelCatalogTtlMaximumError": "Maximum is {max} ms", "modelCatalogCacheTtl": "TTL кэша каталога моделей", "modelCatalogCacheTtlDescription": "Как долго кэшировать каталог моделей (в секундах)", "modelCatalogCacheTtlLabel": "TTL кэша", "modelCatalogCacheTtlSaving": "Сохранение…", "modelCatalogCacheTtlSave": "Сохранить", - "modelCatalogCacheTtlCurrent": "Текущий TTL: {ttl} сек", + "modelCatalogCacheTtlCurrent": "Текущий TTL: {value} сек", "mitmProxy": "МИТМ-прокси", "pricing": "Цены", "storage": "Хранение", @@ -6460,7 +6719,24 @@ "loadFailed": "Не удалось загрузить список подписок.", "toggleFailed": "Не удалось переключить переключатель", "refreshFailed": "Не удалось обновить", - "deleteFailed": "Не удалось удалить" + "deleteFailed": "Не удалось удалить", + "add": "Добавить", + "cancel": "Отмена", + "configure": "Настроить", + "copyEndpoint": "Скопировать конечную точку", + "coreEndpointHint": "Подсказка основного конечного пункта", + "coreNodesHint": "Подсказка о Корневых Узлах", + "create": "Создать", + "deleteConfirm": "Подтверждение удаления", + "empty": "Пусто", + "globalModeDescription": "Описание глобального режима", + "localCoreHint": "Локальный подсказка ядра", + "nodeSummary": "Сводка узла", + "providerRequired": "Требуется провайдер", + "providerRouting": "Маршрутизация Провайдеров", + "refresh": "Обновить", + "refreshInterval": "Интервал обновления", + "ruleModeDescription": "Описание режима правил" }, "bulkHealthcheck": "Массовая проверка здоровья", "bulkHealthcheckDesc": "Проверьте все настроенные прокси по целевому URL, чтобы определить рабочие.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Запустите автоматическое преобразование изображения в текст перед перенаправлением запросов изображений на модели только для текста.", "visionBridgeEnabledLabel": "Включено", "visionBridgeEnabledDesc": "Переключите предварительный мост вызова, который заменяет части изображения извлеченным текстом.", + "visionBridgeRerouteTextOnlyLabel": "Перенаправить модели только с текстом", + "visionBridgeRerouteTextOnlyDesc": "Отправьте полный запрос, включая изображения, в модель моста, когда выбранная модель не имеет входного изображения.", "visionBridgeModel": "Модель моста", "visionBridgeModelPlaceholder": "опенай/gpt-4o-мини", "visionBridgeModelHint": "Любой идентификатор модели OmniRoute, который поддерживает визуализацию, может быть использован здесь.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Ключ API не имеет области управления.", "BYPASS_PREFIX_NOT_ALLOWED": "Один или несколько префиксов нацелены на маршруты, способные к спавну, и не могут быть обойдены.", "GENERIC": "Не удалось обновить настройки authz." - } + }, + "remove": "Удалить" }, "resilienceBaseCooldownLabel": "Базовое время восстановления", "scopeLabel": "Область применения", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Тестирование аудио…", "modalityBridgeAudioTestOk": "Аудио мост ОК — {count} клип(ов) транскрибировано {model}", "modalityBridgeAudioTestNoop": "Аудио мост не активирован (цель может поддерживать аудио, провайдер STT не подключен или мост отключен)", - "modalityBridgeAudioTestError": "Тест аудио не удался: {message}" + "modalityBridgeAudioTestError": "Тест аудио не удался: {message}", + "modelRoutingDescriptionPlaceholder": "Маршрут моделей Opus к комбинации frontier", + "cliproxyapiFallbackCodes": "Коды резервного копирования Cliproxyapi", + "cliproxyapiFallbackDescription": "Описание резервного копирования Cliproxyapi", + "cliproxyapiHealthLabel": "Метка состояния Cliproxyapi", + "cliproxyapiImportFailed": "Не удалось импортировать Cliproxyapi", + "cliproxyapiImportResult": "Результат импорта Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi Неверный URL", + "cliproxyapiLifecycleNoticeAfter": "Уведомление о жизненном цикле Cliproxyapi После", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Уведомление О Жизненном Цикле Перед", + "cliproxyapiLifecycleNoticeLink": "Ссылка Уведомления О Жизненном Цикле Cliproxyapi", + "cliproxyapiPortLabel": "Метка порта Cliproxyapi", + "cliproxyapiStatusLabel": "Статус Cliproxyapi", + "cliproxyapiVersionLabel": "Метка версии Cliproxyapi", + "collection": "Коллекция", + "errorPage": { + "description": "Мы не смогли загрузить настройки в данный момент. Пожалуйста, повторите попытку через несколько секунд.", + "errorId": "Ошибка ID: {id}", + "retry": "Попробуйте еще раз", + "title": "Не удалось загрузить настройки" + }, + "host": "Хост", + "notInstalled": "Не установлено", + "oneproxyActions": "Действия Oneproxy", + "oneproxyActive": "Oneproxy Активен", + "oneproxyAnonymity": "Анонимность Oneproxy", + "oneproxyCountry": "Страна Oneproxy", + "oneproxyDelete": "Удалить Oneproxy", + "oneproxyEmpty": "Oneproxy Пусто", + "oneproxyHost": "Oneproxy Хост", + "oneproxyLatency": "Задержка Oneproxy", + "oneproxyProtocol": "Протокол Oneproxy", + "oneproxyQuality": "Качество Oneproxy", + "oneproxySyncFailed": "Синхронизация не удалась: {error}", + "oneproxySyncSuccess": "Синхронизировано {total} прокси ({added} новых, {updated} обновленных)", + "proxyDocumentationSocks5DescAfter": "Документация прокси Socks5 Описание После", + "proxyFreePoolAddProxy": "Добавить прокси в бесплатный пул", + "proxyFreePoolAdding": "Добавление прокси без оплаты", + "proxyFreePoolSelectProxy": "Выбор прокси из бесплатного пула", + "proxyStatusActive": "Статус прокси Активен", + "proxyStatusInactive": "Статус прокси Неактивен", + "routingAddEntry": "Добавить запись", + "settingSaveFailed": "Не удалось сохранить настройки", + "settingSaved": "Настройки сохранены", + "skillsmpApiKeyHintAfter": ". Лимит запросов: {limit} запросов/день.", + "skillsmpApiKeyHintBefore": "Получите свой API-ключ от", + "syncFailed": "Синхронизация не удалась", + "unhealthy": "Нездоровый", + "oneproxyDescription": "Получите и вращайте бесплатные проверенные прокси с платформы сообщества 1proxy", + "oneproxySyncing": "Синхронизация...", + "oneproxySyncNow": "Синхронизировать сейчас", + "oneproxyClearAll": "Очистить все", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Очистить все прокси 1proxy?", + "memorySkillsSkillsmpDescription": "Подключитесь к SkillsMP, чтобы открыть и установить навыки из магазина.", + "memorySkillsActiveProviderDescription": "Выберите, какого провайдера использует страница Навыков для поиска и установки.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Маркетплейс", + "memorySkillsSkillsmpProviderDescription": "Аутентифицированный рынок (использует ваш ключ API SkillsMP).", + "memorySkillsSkillsshProviderTitle": "Директория skills.sh", + "memorySkillsSkillsshProviderDescription": "Поставщик публичного каталога (ключ API не требуется).", + "routingCcBridgeCatalogName": "Совместимый с Anthropic мост CC", + "routingClaudeProviderName": "Клод (OAuth)", + "routingClaudeProviderDescription": "Нативный провайдер Claude с токенами, выданными OAuth.", + "routingCcBridgeName": "Клод-Код Мост", + "routingCcBridgeDescription": "Релейные конечные точки с использованием API-ключей (совместимые с anthropic-cc-*).", + "routingCustomProviderDescription": "Пользовательский провайдер.", + "routingUnknownOpKind": "Неизвестный тип операции: {kind}", + "routingInvalidJson": "Неверный JSON: {error}", + "routingConfigMustBeObject": "Конфигурация должна быть объектом JSON", + "routingEnabledMustBeBoolean": "`enabled` должно быть true или false", + "routingPipelineMustBeArray": "`pipeline` должен быть массивом ops", + "routingPipelineTooLong": "Пайплайн не может превышать 50 операций", + "routingOpMissingKind": "Op #{index}: отсутствует или недействителен `kind`", + "routingOpUnknownKind": "Операция #{index}: неизвестный тип \"{kind}\"", + "routingJsonEditorHide": "Скрыть редактор JSON", + "routingJsonEditorImportExport": "Импорт / экспорт JSON", + "routingJsonEditorLabel": "JSON (редактировать и применить, или вставить для импорта)", + "routingApplyJson": "Применить JSON", + "routingTransformsFootnote": "Все операции преобразования являются идемпотентными при повторном выполнении. Изменения вступают в силу немедленно при следующем запросе.", + "cliproxyapiUnknown": "Неизвестно", + "cliproxyapiVersion": "Версия", + "cliproxyapiHealth": "Здоровье", + "cliproxyapiPort": "Порт", + "qdrantHost": "Хост", + "qdrantCollection": "Коллекция" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Полный", "ultra": "Ультра" } + }, + "modeOptions": { + "default": "По умолчанию", + "off": "Выкл", + "lite": "Лайт", + "standard": "Стандартный", + "aggressive": "Агрессивный", + "ultra": "Ультра", + "responsesToolOutput": "Вывод инструмента ответов" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Запускается последним в стеке (после того как RTK/Caveman очищает текст, а OmniGlyph преобразует оставшуюся часть в изображения), а также работает автономно в режиме omniglyph. Это предварительная версия, которая остается отключенной по умолчанию до завершения сквозной проверки.", "saved": "Сохранено.", "saveFailed": "Не удалось сохранить.", - "enableAria": "Включить движок OmniGlyph" + "enableAria": "Включить движок OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Встроенные службы", @@ -9127,7 +9500,49 @@ "unableToLoad": "Невозможно загрузить системные метрики", "product": "Продукт", "resources": "Ресурсы", - "company": "Компания" + "company": "Компания", + "tokenHealthTooltips": { + "allHealthy": "Все токены в порядке", + "needsAttention": "Некоторым токенам требуется внимание", + "refreshFailures": "Обнаружены ошибки обновления токена", + "unknown": "Статус здоровья неизвестен" + }, + "systemMonitor": { + "metricsAriaLabel": "Системные метрики", + "memory": "Память", + "memoryShort": "mem", + "uptime": "Время безотказной работы", + "ariaLabel": "Мониторинг системы", + "title": "Монитор системы", + "version": "Версия", + "connections": "Соединения", + "circuitBreakers": "Автоматические выключатели", + "open": "{count} открыто", + "memoryUsage": "Использование памяти" + }, + "never": "Никогда", + "justNow": "Только что", + "minutesAgo": "{count}м назад", + "hoursAgo": "{count}ч назад", + "tokens": "Токены", + "costs": "Затраты", + "autoRefresh": "Автообновление ({seconds}s)", + "toggleAutoRefresh": "Переключить автоматическое обновление", + "activeRequests": "Активные запросы", + "totalRequests": "Всего запросов", + "totalInputTokens": "Общее количество входных токенов", + "model": "Модель", + "provider": "Поставщик", + "requests": "Запросы", + "lastUsed": "Последнее использование", + "inputTokens": "Входные токены", + "totalTokens": "Всего токенов", + "inputCost": "Стоимость ввода", + "outputCost": "Стоимость вывода", + "noUsageData": "Пока нет зафиксированного использования. Сделайте несколько запросов, чтобы увидеть данные здесь.", + "account": "Учетная запись", + "accountLabel": "Учетная запись {id}", + "noAccountUsage": "Пока нет записей об использовании, связанных с аккаунтом. Делайте запросы, используя аккаунты OAuth, чтобы увидеть данные здесь." }, "auth": { "welcome": "Добро пожаловать", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Сброс через данные приложения", + "resetViaAppDataDescription": "Удалите файл настроек из каталога данных приложения, чтобы сбросить пароль:", + "quitDesktopApp": "Полностью выйти из настольного приложения OmniRoute", + "navigateToAppDataDirectory": "Перейдите в каталог данных приложения:", + "checkSystemAppDataFolder": "(Проверьте папку данных системного приложения)", + "relaunchDesktopFreshSetup": "Перезапустите настольное приложение OmniRoute — оно начнет новую настройку", + "alternativeSetPasswordTitle": "Альтернатива: Установить новый пароль", + "alternativeSetPasswordDescription": "Установите новый начальный пароль через файл окружения сервера:", + "openServerEnvFilePrefix": "Открыть", + "relaunchDesktopApp": "Перезапустите настольное приложение OmniRoute", + "codexLinkInvalidOrExpired": "Эта ссылка недействительна или истекла.", + "codexValidationServerError": "Не удалось связаться с сервером для проверки этой ссылки.", + "codexSaveConnectionError": "Не удалось сохранить соединение. Ссылка могла истечь.", + "codexDeviceLoginDisabled": "Вход с помощью кода устройства отключен для этой учетной записи OpenAI. Включите его в настройках безопасности ChatGPT (или обратитесь к администратору вашего рабочего пространства).", + "codexAuthorizationTimedOut": "Время авторизации истекло. Нажмите Начать снова, чтобы повторить попытку.", + "authenticationCancelled": "Аутентификация была отменена.", + "unexpectedAuthenticationError": "Неожиданная ошибка во время аутентификации. Пожалуйста, попробуйте снова.", + "connectOpenAiCodexTitle": "Подключить OpenAI Codex", + "codexConnectDescription": "Авторизуйте аккаунт ChatGPT, чтобы завершить настройку этого соединения.", + "validatingCodexLink": "Проверка ссылки…", + "codexGenerateCodeDescription": "Нажмите ниже, чтобы сгенерировать одноразовый код, затем войдите в OpenAI.", + "startCodexFlow": "Начать", + "requestingOpenAiCode": "Запрос кода у OpenAI…", + "codexVerificationInstructions": "1. Откройте страницу проверки OpenAI и 2. введите этот код. Эта страница обновляется автоматически после авторизации.", + "yourCode": "Ваш код", + "openVerificationPage": "Открыть страницу проверки", + "copyUrlShort": "Скопировать URL", + "savingConnection": "Сохранение соединения…", + "codexConnected": "Подключено!", + "codexConnectionRegistered": "Аккаунт Codex был зарегистрирован. Вы можете закрыть эту вкладку.", + "tryAgain": "Попробуйте еще раз", + "traeAuthorizationSuccess": "Авторизация Trae ✓", + "traeAuthorizationFailed": "Ошибка авторизации Trae", + "closeAuthorizationWindow": "Вы можете закрыть это окно.", + "returnToDashboard": "Вернуться на панель управления.", + "resetViaAppData": "Сброс через данные приложения", + "deleteSettingsToReset": "Удалите файл настроек из каталога данных приложения, чтобы сбросить ваш пароль:", + "quitAppCompletely": "Полностью выйти из настольного приложения OmniRoute", + "navigateToAppData": "Перейдите в каталог данных приложения", + "checkAppDataFolder": "Проверьте папку данных приложений вашей системы", + "deleteSettingsJson": "Удалить", + "relaunchAppFresh": "Перезапустите настольное приложение OmniRoute — оно начнет новую настройку", + "alternativeSetPassword": "Альтернатива: Установить Новый Пароль", + "setNewPasswordViaEnv": "Установите новый начальный пароль через файл окружения сервера:", + "openServerEnv": "Открыть", + "inDataDirectory": "в каталоге данных", + "addOrUpdate": "Добавить или обновить", + "deleteAndRelaunch": "Удалить", + "settingsJson": "settings.json", + "fromDataDir": "из каталога данных", + "relaunchApp": "Перезапустите настольное приложение OmniRoute" }, "landing": { "brandName": "ОмниРоут", @@ -9275,7 +9741,19 @@ "ctaTitle": "Готовы упростить свою инфраструктуру искусственного интеллекта?", "ctaDescription": "Присоединяйтесь к разработчикам, которые оптимизируют интеграцию искусственного интеллекта с помощью OmniRoute. Открытый исходный код и бесплатный запуск.", "startFree": "Начать бесплатно", - "readDocumentation": "Читать документацию" + "readDocumentation": "Читать документацию", + "company": "Компания", + "pricing": "Цены", + "apiReference": "Справочник API", + "helpCenter": "Центр помощи", + "about": "О программе", + "blog": "Блог", + "contact": "Контакт", + "terms": "Условия", + "privacy": "Конфиденциальность", + "license": "Лицензия", + "footerDescription": "Унифицированный интерфейс для современной ИИ-инфраструктуры. Безопасный, наблюдаемый и масштабируемый.", + "communityDiscussions": "Обсуждения сообщества" }, "docs": { "title": "Документация", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Регистрируйте агентов и управляйте ими через реестр ACP для межагентского взаимодействия и совместного использования инструментов.", "protocolAcpStep1": "Перейдите в «Панель управления» → «Агенты», чтобы просмотреть зарегистрированных агентов ACP.", "protocolAcpStep2": "Зарегистрируйте новых агентов с возможностями и конфигурацией конечной точки.", - "protocolAcpStep3": "Используйте инструменты CLI для настройки каналов связи агента." + "protocolAcpStep3": "Используйте инструменты CLI для настройки каналов связи агента.", + "metadataTitleTemplate": "%s — Документация OmniRoute", + "metadataDefaultTitle": "Документация OmniRoute", + "metadataDescription": "Полная документация для OmniRoute AI gateway — настройка, API, сжатие, развертывание и многое другое.", + "layoutNavTitle": "Документация OmniRoute", + "layoutHomeLink": "Домашняя страница документации", + "layoutDashboardLink": "← Назад к Панели Управления", + "homeTitle": "Документация OmniRoute", + "homeMetadataDescription": "Все, что вам нужно для маршрутизации, сжатия и масштабирования вашего ИИ — руководства по настройке, справочник API, сжатие, развертывание и многое другое.", + "homeTwitterDescription": "Полная документация для OmniRoute AI gateway", + "homeDescription": "Все, что вам нужно для маршрутизации, сжатия и масштабирования вашего ИИ", + "homeSearchHint": "Нажмите Ctrl K, чтобы найти документацию", + "featuredQuickStartTitle": "Быстрый старт", + "featuredQuickStartDescription": "Запустите OmniRoute за 3 минуты", + "featuredAutoComboTitle": "Авто-комбо руководство", + "featuredAutoComboDescription": "Позвольте OmniRoute выбрать для вас лучший ИИ", + "featuredProvidersTitle": "Руководство для поставщиков", + "featuredProvidersDescription": "Подключите AI-поставщиков за считанные минуты", + "nonTechUsersTitle": "Для нетехнических пользователей", + "nonTechUsersSubtitle": "Начните быстро — технические знания не требуются", + "techUsersTitle": "Для технических пользователей", + "techUsersSubtitle": "Глубокое погружение в архитектуру, API и внутренние компоненты", + "apiExplorerMetadataTitle": "API Explorer — Документация OmniRoute", + "apiExplorerMetadataDescription": "Интерактивный API-эксплорер — попробуйте конечные точки OmniRoute в реальном времени с ответами в реальном времени", + "apiExplorerTitle": "API Исследователь", + "apiExplorerDescription": "Попробуйте конечные точки OmniRoute в реальном времени. Выберите конечную точку, настройте ваш запрос и посмотрите ответ в реальном времени.", + "apiExplorerSseStarted": "Запуск потока SSE — проверьте терминал/инструменты разработчика для получения данных в реальном времени.", + "apiExplorerError": "Ошибка: {message}", + "apiExplorerAuth": "аутентификация", + "apiExplorerResponseLabel": "Ответ", + "apiExplorerSelectEndpoint": "Выберите конечную точку для исследования", + "apiExplorerChooseApi": "Выберите API из боковой панели, чтобы увидеть детали и попробовать его вживую", + "feedbackThanks": "Спасибо за ваш отзыв!", + "feedbackQuestion": "Была ли эта страница полезной?", + "pageMetadataTitle": "{title} — Документация OmniRoute", + "pageMetadataDescription": "Документация OmniRoute: {title}", + "breadcrumb": "Хлебные крошки", + "apiReferenceTable": { + "parameters": "Параметры", + "name": "Имя", + "type": "Тип", + "description": "Описание", + "returns": "Возвраты", + "typePrefix": "Тип:" + } }, "legal": { "privacyPolicy": "Политика конфиденциальности", @@ -9957,7 +10479,42 @@ "successMessage": "Ваша учетная запись {providerName} подключена.", "done": "Готово", "error": "Соединение не удалось", - "tryAgain": "Попробуйте еще раз" + "tryAgain": "Попробуйте еще раз", + "errorSessionIncomplete": "Сессия OAuth неполная (отсутствует URI перенаправления или код проверки). Перезапустите соединение и попробуйте снова.", + "errorExchangeFailed": "Обмен не удался", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Стандартные учетные данные Google OAuth работают только на localhost. Для удаленного использования настройте свои собственные учетные данные OAuth через переменные окружения: ANTIGRAVITY_OAUTH_CLIENT_ID и ANTIGRAVITY_OAUTH_CLIENT_SECRET. См. раздел README 'OAuth на удаленном сервере'.", + "errorSaveFailed": "Сохранение не удалось", + "errorAuthorizationFailed": "Авторизация не удалась", + "errorAuthorizationTimeout": "Таймаут авторизации", + "errorRequestFailed": "Запрос не удался", + "errorCallbackServerFailed": "Не удалось запустить сервер обратного вызова", + "errorBrowserUnavailable": "OAuth для браузера недоступен для этого провайдера в текущей среде. Используйте поддерживаемый метод аутентификации вместо этого.", + "errorStateMismatch": "Несоответствие состояния OAuth. Перезапустите соединение и попробуйте снова.", + "errorImportAccessToken": "Не удалось импортировать токен доступа", + "errorSessionNotInitialized": "Сессия OAuth не инициализирована. Перезапустите процесс подключения и попробуйте снова.", + "errorNoAuthorizationCode": "Код авторизации не найден. Вставьте URL обратного вызова или код аутентификации.", + "tabDeviceCode": "Код Устройства", + "tabBrowserLogin": "Вход в браузер", + "tabImportAuthJson": "Импортировать auth.json", + "tabPasteApiKey": "Вставьте API-ключ", + "windsurfPasteDescription": "В IDE Windsurf / VS Code выполните команду \"Windsurf: Provide Auth Token\" из палитры команд (или нажмите кнопку Jupyter \"Get Windsurf Authentication Token\"), затем скопируйте показанный токен и вставьте его ниже. Открытие windsurf.com/show-auth-token напрямую показывает только страницу \"Redirecting\" — поток должен инициировать IDE.", + "grokAuthJsonDescription": "Вставьте ПОЛНОЕ содержимое ~/.grok/auth.json (не только поле JWT \"key\"). Обычный JWT не имеет refresh_token, поэтому соединение прекращается после истечения срока действия (#7610). Предпочитайте специальное модальное окно Импорт auth.json, когда оно доступно.", + "devinDesktopPasteDescription": "Вставьте существующий ключ API Devin из аутентифицированной сессии Devin. Доступность экспорта ключа и шаги могут различаться в зависимости от версии Devin и учетной записи.", + "devinPasteDescription": "Укажите ваш WINDSURF_API_KEY (полученный через `devin auth login` или через команду \"Windsurf: Provide Auth Token\" в IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Ключ / Токен", + "saving": "Сохранение…", + "saveConnection": "Сохранить соединение", + "gheDescription": "Введите базовый URL вашего экземпляра GitHub Enterprise (например, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "Требуется URL-адрес GitHub Enterprise", + "gitlabDuoSetupTitle": "Настройка Duo OAuth для GitLab", + "gitlabDuoSetupMessage": "Не настроен Duo OAuth для GitLab. Зарегистрируйте OAuth-приложение по адресу {applicationsUrl} с URI перенаправления {redirectUri} и областями \"{scopes}\", затем установите {clientIdEnv} (и, при необходимости, {clientSecretEnv}) и перезапустите.", + "gitlabDuoSetupDescription": "После регистрации приложения и настройки переменных окружения в этом экземпляре OmniRoute нажмите Продолжить, чтобы начать вход через OAuth.", + "continue": "Продолжить" }, "cursorAuthModal": { "title": "Подключить курсор IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Загрузить еще", - "loadingMore": "Загрузка еще..." + "loadingMore": "Загрузка еще...", + "correlationId": "Идентификатор корреляции", + "group": { + "showAllRows": "Показать все строки", + "showLatestPerCorrelation": "Показать последние по идентификатору корреляции", + "grouped": "Группированный" + }, + "running": "выполнение", + "interval": { + "decrease": "Уменьшить интервал", + "title": "Интервал автообновления в секундах", + "increase": "Увеличить интервал" + }, + "status": { + "inProgress": "В процессе", + "recoveredByRetry": "Восстановлено повторной попыткой", + "goToParent": "Перейти к родительскому запросу", + "healedTitle": "Не удалось, восстановлено после {count} попыток", + "healed": "исцелён", + "failedTitle": "Все {count} попытки не удались", + "failed": "не удалось", + "pinnedTitle": "Модель выбрана через закрепление сессии кэша контекста", + "pinned": "закреплено" + }, + "attempts": "попытки", + "detail": { + "collapse": "Свернуть {title}", + "expand": "Развернуть {title}", + "copyTitle": "Скопировать {title}", + "copied": "Скопировано!", + "copy": "Копировать", + "autoscrollOn": "Автопрокрутка: включена", + "autoscrollOff": "Автопрокрутка: выключена", + "payload": { + "clientRawRequest": "Сырой запрос клиента", + "clientRequest": "Запрос клиента", + "openaiRequest": "Запрос OpenAI", + "providerRequest": "Запрос Провайдера", + "providerResponse": "Ответ провайдера", + "clientResponse": "Ответ клиента", + "pipelineError": "Ошибка конвейера" + }, + "payloadMissing": "Подробный артефакт полезной нагрузки больше недоступен для этой записи журнала.", + "payloadCorrupt": "Не удалось разобрать детализированный артефакт полезной нагрузки.", + "notAvailable": "N/A", + "semanticCache": "Семантический (OmniRoute)", + "upstreamCache": "Верхний уровень (Поставщик)", + "ariaLabel": "Детали журнала запросов", + "completed": "Завершено", + "upstreamStatus": "Верхний поток: {status}", + "statusDiscrepancy": "OmniRoute вернул {status}, хотя провайдер вернул {provider}", + "previousRequest": "Предыдущий запрос", + "nextRequest": "Следующий запрос", + "close": "Закрыть модальное окно с деталями", + "startedAt": "Начато в", + "endedAt": "Завершено В", + "duration": "Длительность", + "model": "Модель", + "provider": "Поставщик", + "account": "Учетная запись", + "input": "Ввод", + "totalIn": "Всего поступило: {value}", + "cacheRead": "Чтение кэша: {value}", + "cacheWrite": "Запись в кэш: {value}", + "compressed": "Сжато: {from} → {to} ({percent}% сэкономлено)", + "output": "Вывод", + "totalOut": "Всего выведено: {value}", + "reasoning": "Обоснование: {value}", + "requestedModel": "Запрашиваемая Модель", + "requestProtocol": "Протокол Req", + "cacheSource": "Кэш Источника", + "modelPinning": "Закрепление Модели", + "activeModelPinning": "Активный — модель, выбранная через закрепление сессии", + "rotated": "Повернуто: {initial} -> {final}", + "apiKey": "API ключ", + "noApiKey": "Нет ключа API", + "combo": "Комбо", + "error": "Ошибка", + "unblockAll": "Разблокировать все", + "cleared": "Очистить", + "unblock": "Разблокировать", + "relatedRequests": "Связанные запросы ({count})", + "current": "текущий", + "detailStatus": "Статус деталей", + "loadingDetails": "Загрузка деталей запроса...", + "providerEventStream": "Поставщик событийного потока", + "clientEventStream": "Поток Событий Клиента", + "eventStream": "Поток Событий", + "responsePayloadLegacy": "Ответный Пейлоад (Устаревший)", + "requestPayloadLegacy": "Запрос Пейлоад (Устаревший)", + "noPayload": "Нет данных о полезной нагрузке для этой записи журнала.", + "correlationId": "Идентификатор корреляции", + "correlationIdValue": "Идентификатор корреляции: {id}", + "detailedPayloadInfo": "Сначала включите детализированный логгинг, если вы хотите получить четырехступенчатый просмотр полезной нагрузки клиента/поставщика для новых запросов." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} отключен", "providerAdded": "{provider} добавлен", "add": "Добавить", - "manualApiKey": "Использовать ручной API-ключ" + "manualApiKey": "Использовать ручной API-ключ", + "createDahlTokenFailed": "Не удалось создать токен Dahl", + "providerProxy": "Прокси", + "providerProxyConfigureHint": "Настроить прокси", + "providerProxyTitleConfigured": "Прокси настроен: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Ограничено Условиями использования — ознакомьтесь с правилами", "caution": "Внимание — пункты о личном использовании / прокси", "ok": "В целом разрешительные" - } + }, + "allProviders": "Все провайдеры", + "noApiKeyRequired": "Ключ API не требуется" }, "providerHealthAutopilot": { "title": "Автопилот состояния провайдеров", @@ -12390,7 +13047,11 @@ "on": "ВКЛ", "off": "ВЫКЛ", "availableProviders": "Доступные провайдеры ({count})", - "noProviderOverrides": "Без переопределений — все активные провайдеры будут участвовать со своими моделями по умолчанию" + "noProviderOverrides": "Без переопределений — все активные провайдеры будут участвовать со своими моделями по умолчанию", + "resetFailed": "Сброс не удался", + "resetSuccess": "Сброс конфигурации к значениям по умолчанию", + "running": "Запуск...", + "testFailed": "Тест не пройден" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) — друг-основатель открытого кода OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Поставщик не поддерживает визуализацию для этого запроса изображения", "capabilityFilter.toolsMismatch": "Провайдер не поддерживает вызов инструмента", "capabilityFilter.structuredOutputMismatch": "Поставщик не поддерживает структурированный вывод", - "capabilityFilter.contextWindowMismatch": "Запрос превышает контекстное окно провайдера" + "capabilityFilter.contextWindowMismatch": "Запрос превышает контекстное окно провайдера", + "publicSystem": { + "notFound": { + "title": "Страница не найдена", + "description": "Страница, которую вы ищете, не существует или была перемещена.", + "dashboardAriaLabel": "Вернуться на панель управления", + "statusAriaLabel": "Открыть страницу состояния системы", + "systemStatus": "Статус системы" + }, + "error": { + "title": "Внутренняя ошибка сервера", + "description": "Что-то пошло не так при обработке вашего запроса. Наша команда была уведомлена и работает над исправлением.", + "errorId": "Ошибка ID: {id}", + "detailsAriaLabel": "Детали ошибки", + "retryAriaLabel": "Повторите загрузку страницы", + "tryAgain": "Попробуйте снова", + "dashboardAriaLabel": "Вернуться на панель управления", + "statusAriaLabel": "Открыть статус системы", + "systemStatus": "Состояние системы" + }, + "globalError": { + "title": "Что-то пошло не так", + "description": "Произошла неожиданная ошибка. Это было зафиксировано, и наша команда проведет расследование.", + "detailsAriaLabel": "Детали ошибки", + "retryAriaLabel": "Повторить загрузку страницы", + "tryAgain": "Попробуйте снова", + "statusAriaLabel": "Открыть статус системы", + "systemStatus": "Статус системы" + }, + "offline": { + "title": "Проблема с подключением", + "description": "OmniRoute не может в данный момент подключиться к сети. Проверьте свои настройки интернета, VPN или прокси.", + "connectionRestored": "Соединение восстановлено", + "offlineModeDetected": "Обнаружен режим оффлайн", + "retryConnection": "Повторить подключение", + "openStatusPage": "Открыть страницу статуса" + }, + "maintenance": { + "title": "Запланированное Обслуживание", + "description": "Некоторые сервисы временно недоступны во время проведения технического обслуживания. Основная маршрутизация обычно остается онлайн, но функции управления могут быть ограничены.", + "suggestion1": "Повторите попытку через несколько минут.", + "suggestion2": "Проверьте текущие индикаторы состояния и статус провайдера перед повторной попыткой.", + "systemStatus": "Просмотреть статус системы", + "healthDashboard": "Открыть Панель Здоровья" + }, + "status": { + "title": "Состояние системы", + "description": "Живой операционный снимок для основных сервисов OmniRoute.", + "loadingHealth": "Загрузка метрик здоровья...", + "failedToLoad": "Не удалось загрузить состояние системы.", + "unableToReachHealth": "Не удалось достичь конечной точки состояния. Проверьте подключение и повторите попытку.", + "healthCheckFailed": "Проверка состояния не удалась", + "openConnectivityHelp": "Справка по открытой совместимости", + "maintenanceInfo": "Информация о техническом обслуживании", + "service": "Сервис", + "unknown": "неизвестно", + "notAvailable": "н/д", + "providersTracked": "Отслеживаемые провайдеры", + "circuitBreakerState": "Состояние автоматического выключателя провайдера", + "lastUpdate": "Последнее обновление: {timestamp}", + "uptimeMinutes": "{minutes}м", + "uptimeHoursMinutes": "{hours}ч {minutes}м" + }, + "statusPages": { + "400": { + "title": "Неверный запрос", + "description": "Нагрузочный запрос недействителен или неполон.", + "suggestion1": "Проверьте обязательные поля и формат полезной нагрузки перед повторной попыткой.", + "suggestion2": "Если вы используете API, проверьте JSON-схему локально.", + "suggestion3": "Если это продолжает происходить, откройте запрос в Translator Playground, чтобы проверить полезную нагрузку.", + "primaryAction": "Открыть документацию", + "secondaryAction": "Открыть переводчик" + }, + "401": { + "title": "Неавторизованный", + "description": "Требуется аутентификация для доступа к этому ресурсу.", + "suggestion1": "Войдите снова и повторите операцию.", + "suggestion2": "Для вызовов API подтвердите, что токен Bearer присутствует и действителен.", + "suggestion3": "Если токен был недавно обновлён, обновите свои учётные данные клиента.", + "primaryAction": "Перейти к входу", + "secondaryAction": "Управление ключами API" + }, + "403": { + "title": "Запрещено", + "description": "Ваш запрос был понят, но доступ запрещен политикой.", + "suggestion1": "Проверьте правила разрешенного/заблокированного IP в настройках.", + "suggestion2": "Проверьте модели и политики бюджета, назначенные вашему API-ключу.", + "suggestion3": "Попросите администратора предоставить необходимый диапазон разрешений.", + "primaryAction": "Помощь по открытом доступе", + "secondaryAction": "Открыть настройки безопасности" + }, + "408": { + "title": "Время запроса истекло", + "description": "Сервер не получил полный запрос вовремя.", + "suggestion1": "Повторите запрос с меньшим объемом данных.", + "suggestion2": "Проверьте стабильность вашей сети и задержку VPN/прокси.", + "suggestion3": "Для длительных операций включите потоковую передачу или разделите запрос.", + "primaryAction": "Открыть руководство по конечным точкам", + "secondaryAction": "Проверить состояние сети" + }, + "429": { + "title": "Слишком много запросов", + "description": "Превышены лимиты запросов для этого клиента, ключа или провайдера.", + "suggestion1": "Подождите окончания времени ожидания и повторите попытку через предложенный интервал.", + "suggestion2": "Переключитесь на комбинацию с резервными провайдерами.", + "suggestion3": "Настройте профили устойчивости/лимитов скорости провайдера в настройках.", + "primaryAction": "Открыть настройки устойчивости", + "secondaryAction": "Открыть Комбо" + }, + "500": { + "title": "Внутренняя ошибка сервера", + "description": "Произошла неожиданная ошибка на стороне сервера при обработке вашего запроса.", + "suggestion1": "Повторите попытку через несколько секунд.", + "suggestion2": "Проверьте телеметрию состояния и журналы сервера на наличие связанных идентификаторов запросов.", + "suggestion3": "Если проблема сохраняется, сообщите о ней с указанием временной метки и контекста запроса.", + "primaryAction": "Открыть Панель Здоровья", + "secondaryAction": "Открыть журналы" + }, + "502": { + "title": "Плохой шлюз", + "description": "Поставщик верхнего уровня или интеграция шлюза вернули недействительный ответ.", + "suggestion1": "Повторите попытку с другим провайдером или активным комбинированным маршрутом.", + "suggestion2": "Проверьте учетные данные поставщика и доступность модели.", + "suggestion3": "Проверьте вывод переводчика, если вовлечено преобразование формата.", + "primaryAction": "Открыть Провайдеры", + "secondaryAction": "Открыть переводчик" + }, + "503": { + "title": "Сервис недоступен", + "description": "Сервис временно недоступен из-за технического обслуживания или ухудшенных зависимостей.", + "suggestion1": "Подождите минуту и повторите попытку.", + "suggestion2": "Проверьте уведомления о техническом обслуживании и состояние системы.", + "suggestion3": "Используйте резервные провайдеры, если ваш рабочий процесс чувствителен к задержкам.", + "primaryAction": "Детали обслуживания", + "secondaryAction": "Статус системы" + } + } + }, + "kiroAuthModal": { + "title": "Подключить {providerLabel}", + "chooseMethod": "Выберите ваш метод аутентификации:", + "builderId": "AWS Builder ID", + "builderDescription": "Рекомендуется для большинства пользователей. Войдите с помощью учетной записи AWS, связанной с {providerLabel}.", + "organization": "Ваша организация (AWS IAM Identity Center)", + "organizationDescription": "Используйте URL-адрес начала SSO вашей компании (например: {url}).", + "googleAccount": "Учетная запись Google", + "googleDescription": "Войдите с помощью вашей учетной записи Google.", + "githubAccount": "Учетная запись GitHub", + "githubDescription": "Войдите с помощью вашей учетной записи GitHub.", + "importToken": "Импортировать токен", + "importDescription": "Вставьте токен обновления, экспортированный из {providerLabel}.", + "apiKey": "API ключ", + "apiKeyDescription": "Вставьте долгоживущий {providerLabel} / CodeWhisperer API ключ. Он хранится как учетные данные bearer без токена обновления; обнаружение профиля осуществляется наилучшим образом.", + "idcStartUrl": "IDC Начальный URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL вашего центра идентификации AWS IAM вашей организации", + "awsRegion": "Регион AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Регион AWS для вашего Центра Идентификации (по умолчанию: us-east-1)", + "continue": "Продолжить", + "back": "Назад", + "autoDetecting": "Автоопределение токена...", + "readingCredentials": "Чтение учетных данных {providerLabel} из кэша AWS SSO", + "tokenNotDetected": "Токен {providerLabel} не был автоматически обнаружен. Пожалуйста, вставьте ваш токен обновления вручную.", + "refreshToken": "Токен обновления", + "tokenPlaceholder": "Токен будет автоматически заполнен...", + "importing": "Импортирование...", + "apiKeyPlaceholder": "Вставьте ваш ключ API {providerLabel}...", + "apiKeyStoredDescription": "Хранится в зашифрованном виде как долгосрочный токен доступа. Процесса обновления нет.", + "apiKeyRegionDescription": "Регион AWS для ключа (по умолчанию: us-east-1)", + "validating": "Проверка...", + "validateAndSaveApiKey": "Проверить и сохранить API-ключ", + "errorAutoDetect": "Не удалось автоматически определить токен", + "errorAutoDetectFailed": "Не удалось автоматически определить токен", + "errorRefreshTokenRequired": "Пожалуйста, введите токен обновления", + "errorImportFailed": "Импорт не удался", + "errorApiKeyRequired": "Пожалуйста, введите ключ API Kiro", + "errorApiKeyImportFailed": "Импорт ключа API не удался", + "errorIdcStartUrlRequired": "Пожалуйста, введите ваш URL-адрес начала IDC" + }, + "kiroSocialOAuthModal": { + "title": "Подключить {providerLabel} через {providerName}", + "errorStartAuthorization": "Не удалось начать авторизацию", + "errorAuthorizationExpired": "Срок действия авторизации истек. Начните процесс входа снова.", + "errorAuthorizationFailed": "Авторизация не удалась", + "initializing": "Инициализация...", + "settingUp": "Настройка аутентификации {providerName}", + "openIncognito": "Откройте эту ссылку в режиме инкогнито", + "incognitoDescription": "Используйте режим Инкогнито/Частный режим, чтобы избежать конфликтов сессий с существующими учетными записями.", + "copyLink": "Скопировать ссылку", + "verificationCode": "Код подтверждения", + "waiting": "Ожидание авторизации...", + "cancel": "Отменить", + "successTitle": "Успешно подключено!", + "successMessage": "Ваш аккаунт {providerLabel} через {providerName} был подключен.", + "done": "Готово", + "errorTitle": "Ошибка подключения", + "close": "Закрыть" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Авторизация не удалась", + "errorPopupBlocked": "Всплывающее окно заблокировано — разрешите всплывающие окна для этого сайта или вставьте токен вручную ниже.", + "errorPopupClosed": "Окно авторизации было закрыто до завершения.", + "errorAccessTokenRequired": "Токен доступа необходим.", + "errorImportFailed": "Импорт не удался", + "title": "Подключить Trae SOLO", + "authorizeDescription": "Авторизуйтесь через trae.ai в всплывающем окне. Всплывающее окно закроется автоматически после импорта токена.", + "authorizeImportant": "Важно: вы должны войти в систему на trae.ai в этом браузере сначала. Страница авторизации только подтверждает существующую сессию — она не может вас авторизовать. Если вы видите \"Ошибка входа\", нажмите \"Открыть solo.trae.ai\", войдите в систему, а затем вернитесь сюда.", + "waitingForAuthorization": "Ожидание trae.ai…", + "authorizeWithBrowser": "Авторизоваться через браузер", + "openSoloTrae": "Откройте solo.trae.ai", + "orPasteManually": "или вставьте токен вручную", + "manualInstructions": "Войдите на solo.trae.ai, откройте DevTools → Сеть, отправьте любое сообщение в чате и скопируйте JWT из заголовка запроса Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Срок действия JWT составляет ~14 дней. Необязательные поля идентификации берутся из common_params в том же теле запроса.", + "accessTokenLabel": "Токен доступа (Cloud-IDE-JWT)", + "webId": "Веб-идентификатор", + "optional": "необязательный", + "bizUserId": "Идентификатор пользователя Biz", + "userUniqueId": "Уникальный идентификатор пользователя", + "scope": "Область действия", + "tenant": "Арендатор", + "region": "Регион", + "importing": "Импортируется…", + "importToken": "Импортировать токен", + "cancel": "Отмена" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Распределение...", + "complete": "Завершено", + "defaultLabel": "Распределить прокси" + } + }, + "providerTest": { + "dialogLabel": "Тест {provider}", + "deprecated": "устаревший", + "risk": "риск", + "close": "Закрыть", + "model": "Модель", + "key": "Ключ", + "defaultKey": "по умолчанию", + "clearConversation": "Очистить разговор", + "clear": "Очистить", + "tabs": { + "test": "Тест", + "logs": "Журналы" + }, + "loadingLogs": "Загрузка журналов…", + "failedToLoadLogs": "Не удалось загрузить логи", + "noLogsYet": "Нет логов еще", + "noLogsDescription": "Отправьте тестовое сообщение из вкладки Тест — журналы для этого провайдера появятся здесь.", + "openFullLogs": "Открыть страницу полных журналов", + "live": "В прямом эфире", + "tailingLast": "просмотр последних {count}", + "refreshNow": "Обновить сейчас", + "refresh": "Обновить", + "unknownRequester": "неизвестный запросчик", + "fields": { + "timestamp": "Метка времени", + "status": "Статус", + "duration": "Продолжительность", + "model": "Модель", + "requestedModel": "Запрашиваемая модель", + "provider": "Поставщик", + "requester": "Запросчик", + "tokens": "Токены" + } + }, + "proxyLog": { + "detailAriaLabel": "Детали журнала прокси", + "event": "Прокси-событие", + "close": "Закрыть модальное окно деталей прокси", + "time": "Время", + "latency": "Задержка", + "clientIp": "IP-адрес клиента", + "proxy": "Прокси", + "direct": "Прямой", + "type": "Тип", + "level": "Уровень", + "provider": "Поставщик", + "tlsFingerprint": "TLS отпечаток", + "directNative": "Прямой", + "targetUrl": "Целевой URL", + "error": "Ошибка", + "configuration": "Настройка прокси" + }, + "requestTimeline": { + "title": "Временная шкала запроса", + "modes": { + "follow": "Следовать", + "followDescription": "Ось прокручивается влево, линия NOW остается на 75%", + "now": "Теперь", + "nowDescription": "Перейти к текущему времени, линия NOW сбрасывается в центр", + "pan": "Панорамирование", + "panDescription": "Перетащите, чтобы исследовать, фон заморожен" + }, + "reset": "Сбросить", + "started": "Начато", + "ended": "Завершено", + "duration": "Длительность", + "status": "Статус", + "provider": "Поставщик", + "tokens": "Токены", + "active": "Активный", + "other": "Другие", + "tenMinutes": "10мин", + "hour": "час", + "day": "день", + "unknownModel": "неизвестно", + "pending": "в ожидании" + }, + "metadata": { + "compressionTitle": "Сжатие", + "compressionDescription": "Настройте параметры сжатия контекста, чтобы уменьшить использование токенов и затраты.", + "relayTitle": "OmniRoute — Релейные Прокси", + "relayDescription": "Безсерверные конечные точки прокси для вашей ИИ-инфраструктуры", + "trafficInspectorTitle": "Трафик Инспектор — OmniRoute", + "trafficInspectorDescription": "Мониторинг вызовов LLM + отладка HTTPS-трафика любого приложения" + }, + "conductor": { + "title": "Кондуктор — Флот CLI-агентов", + "subtitle": "OmniConductor хаб: исполнители, очередь задач и советы, в реальном времени", + "runners": "Бегуны", + "tasks": "Задачи", + "colName": "Имя", + "colClis": "CLI-интерфейсы", + "colStatus": "Статус", + "colTask": "Задача", + "colMode": "Режим", + "colRunner": "Запускатель", + "colSummary": "Сводка", + "online": "онлайн", + "offline": "вне сети", + "draining": "сливание", + "hubOffline": "Кондукторский хаб оффлайн или не настроен (CONDUCTOR_HUB_URL) — не отображает ничего, кроме устаревших данных.", + "noRunners": "Нет зарегистрированных участников", + "noTasks": "Нет задач пока что", + "detailTitle": "Детали задачи", + "prompt": "Подсказка", + "branch": "Ветка", + "fetchHint": "Получите результат с помощью: git fetch origin {branch}", + "council": "Совет", + "candidates": "Кандидаты", + "cancel": "Отменить задачу", + "cancelConfirmTitle": "Отменить эту задачу?", + "cancelConfirmMessage": "Хаб прервет выполнение на исполнителе. Это нельзя отменить.", + "cancelFailed": "Хаб отказал в отмене", + "close": "Закрыть", + "error": "Ошибка", + "faroTitle": "Faro — представитель флота", + "faroSubtitle": "Чат и голос, привязанные к реальным событиям флота. Разрушительные команды всегда требуют подтверждения.", + "faroEmpty": "Спросите о флоте — например, \"как дела с флотом?\"", + "faroPending": "Faro запрашивает подтверждение", + "faroPlaceholder": "поговори с Фаро…", + "faroSend": "отправить", + "faroOffline": "Faro (представитель) не в сети", + "yes": "Да", + "no": "Нет", + "pushToTalk": "Удерживайте, чтобы говорить", + "speakAnswers": "говорить ответы", + "voiceModels": "Модели голоса (поставщик/модель этого OmniRoute)", + "voiceIdle": "говорить", + "voiceListening": "прослушивание…", + "voiceThinking": "думаю…", + "voiceSpeaking": "говоря…", + "sttFailed": "Не удалось выполнить транскрипцию (проверьте модель/поставщика STT)", + "ttsFailed": "Синтез речи не удался (проверьте модель/поставщика TTS)", + "micDenied": "Микрофон недоступен или доступ запрещен" + }, + "cliproxyProviderExposure": { + "title": "Экспозиция Провайдера", + "description": "Экспортируйте модели CLIProxyAPI в качестве целевого маршрута под префиксом cliproxyapi/.", + "label": "Экспортировать как cliproxyapi/...", + "hint": "Когда включено, обнаруженные модели появляются в выборках провайдеров по всему OmniRoute.", + "updateFailed": "Не удалось обновить (HTTP {status})", + "networkError": "Ошибка сети — не удалось обновить настройки экспозиции провайдера" + } } - diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 3d0d013da1..c81549a8a1 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -172,6 +172,18 @@ "unselectAll": "Zrušiť výber", "visibleModels": "viditeľné", "selectAllConfirm": "Pridať {count} modelov do tejto kombinácie?", + "testSelectedProviders": "Testovacie poskytovatele", + "testingSelectedProviders": "Testovanie {done}/{total}...", + "noProvidersSelectedToTest": "Skontrolujte najprv aspoň jedného poskytovateľa nižšie", + "noModelsToTestForProviders": "Žiadne modely na testovanie pre vybrané poskytovatele", + "testSelectedProvidersResults": "{ok} z {total} modelov funguje", + "selectWorkingModels": "Pridať pracovný", + "unselectWorkingModels": "Zrušiť výber pracovného", + "noWorkingModelsToSelect": "Nie sú žiadne pracovné modely na pridanie", + "providerTestHint": "Tip: skontrolujte poskytovateľa → Test → Pridať funkčný. Kliknite znova na zrušenie výberu.", + "selectAllProviders": "Skontrolovať všetkých poskytovateľov", + "clearProviderSelection": "Zrušiť zaškrtnutie poskytovateľov", + "providersSelectedCount": "Skontrolovaných {count} poskytovateľov", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Veľkosť", + "toggleNoAuthProvider": "Prepnúť poskytovateľa bez autentifikácie", + "loadingModels": "Načítavam modely…", + "selectAModel": "Vyberte model", + "degraded": "Znížený", + "zeroConfigBannerTitle": "Beží v režime bez konfigurácie", + "zeroConfigBannerBody": "OmniRoute automaticky vygeneroval zabezpečené šifrovacie kľúče pri prvom spustení. Sú uložené v {dataDir}. Nie je potrebná žiadna akcia — vaše údaje sú šifrované a bezpečné. Ak chcete použiť vlastné kľúče, pridajte JWT_SECRET a STORAGE_ENCRYPTION_KEY do tohto súboru.", + "batchRelativeTimeIn": "v {value}", + "batchRelativeTimeAgo": "pred {value}", + "batchDetailsTitle": "Podrobnosti dávky", + "batchProgress": "Pokrok", + "batchCompletedCount": "{count} dokončených", + "batchFailedCount": "{count} zlyhalo", + "batchPendingCount": "{count} čaká na spracovanie", + "batchTimeline": "Časová os", + "batchTimelineInProgress": "Prebieha", + "batchTimelineFinalizing": "Finalizácia", + "batchTimelineCompleted": "Dokončené", + "batchTimelineFailed": "Zlyhalo", + "batchTimelineExpires": "Expiruje", + "batchTimelineExpired": "Expirujúce", + "batchTimelineCancelling": "Zrušenie", + "batchTimelineCancelled": "Zrušené", + "batchTokenUsage": "Použitie tokenu", + "batchMetadata": "Metadáta", + "batchFileContents": "Obsah súboru", + "batchFileUsedByCount": "Používa sa {count, plural, one {# dávka} other {# dávok}}", + "batchFilePreview": "Náhľad", + "batchFilePreviewTruncated": "Zobrazenie prvých {shown} riadkov ({total} celkom riadkov)", + "batchFileDownloadFull": "Stiahnuť celý súbor" }, "disabled": "Zakázané", "featureFlagOmnirouteEmergencyFallbackDescription": "Smerovať požiadavky s vyčerpaným rozpočtom na núdzového bezplatného záložného poskytovateľa/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Oddeľovač", "discovery": "Zisťovanie", "discoverySubtitle": "Skenovať poskytovateľov na bezplatný prístup", + "conductor": "Konduktor", + "conductorSubtitle": "CLI-agent flotila", "resilienceConnections": "Odolnosť Pripojenia", "resilienceConnectionsSubtitle": "Cooldown, istič, stav uzamknutia", "settingsModalityBridge": "Modálny Most", - "settingsModalityBridgeSubtitle": "Obrázok/audio → textová náhrada pre modely iba s textom" + "settingsModalityBridgeSubtitle": "Obrázok/audio → textová náhrada pre modely iba s textom", + "commandPalette": { + "title": "Príkazová paleta", + "searchPlaceholder": "Hľadať stránky, nastavenia, nástroje...", + "clearSearch": "Vymazať vyhľadávanie", + "noResults": "Žiadne výsledky", + "navigate": "navigovať", + "open": "otvorené", + "close": "zatvoriť" + }, + "noResults": "Žiadne výsledky" }, "webhooks": { "title": "Webhooky", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Aktualizácia nastavení zlyhala", "sync.token.created": "Synchronizačný token vytvorený", "sync.token.revoked": "Synchronizačný token odvolaný" - } + }, + "mcpMetricCalls24h": "Hovory (24h)", + "mcpMetricSuccessRate": "Miera úspešnosti", + "mcpMetricAvgDuration": "Priemerná dĺžka", + "mcpMetricTopTool": "Najlepší nástroj" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "K dispozícii je nová verzia. Kliknutím aktualizujte.", "updateStarted": "Aktualizácia spustená...", "reloadingPageAutomatically": "Automaticky sa znova načítava stránka...", - "providerTopology": "Topológia poskytovateľa" + "providerTopology": "Topológia poskytovateľa", + "downloadDmg": "Stiahnuť DMG (macOS)", + "downloadDmgDescription": "Nová verzia desktopovej aplikácie OmniRoute je k dispozícii. Prosím, stiahnite a nainštalujte inštalátor DMG pre macOS na aktualizáciu (aktuálna: v{version}).", + "downloadExe": "Stiahnuť EXE (Windows)", + "downloadExeDescription": "Nová verzia desktopovej aplikácie OmniRoute je k dispozícii. Prosím, stiahnite a nainštalujte inštalátor Windows EXE na aktualizáciu (aktuálna: v{version}).", + "downloadAppImage": "Stiahnuť AppImage (Linux)", + "downloadAppImageDescription": "Nová verzia desktopovej aplikácie OmniRoute je k dispozícii. Prosím, stiahnite si balík Linux AppImage na aktualizáciu (aktuálna: v{version}).", + "downloadUpdate": "Stiahnuť aktualizáciu", + "downloadUpdateDescription": "Nová verzia desktopovej aplikácie OmniRoute je k dispozícii. Prosím, stiahnite si príslušný formát aplikácie pre váš systém na aktualizáciu (aktuálna: v{version}).", + "updateQueued": "Čakajúca aktualizácia na v{version}.", + "updateDockerRebuilding": "Docker obraz sa v pozadí znovu vytvára.", + "updateWaitingRestart": "Čakám na reštart OmniRoute s novou verziou.", + "updateInstalling": "Inštalácia v{version}.", + "updateRunning": "OmniRoute teraz beží vo verzii v{version}.", + "updateCompleted": "OmniRoute bol aktualizovaný na v{version}.", + "updateDockerStillRebuilding": "Docker image sa stále rebuilduje pre v{version}.", + "updateInstallingBackground": "Inštalácia v{version} na pozadí.", + "updateWaitingVersion": "Čakám, kým sa OmniRoute vráti na v{version}.", + "updateDockerStillInProgress": "Docker rebuild je stále v priebehu.", + "updateRestarting": "Reštartovanie služby prebieha. Čakám, kým sa OmniRoute znova pripojí...", + "updateTimeout": "Aktualizácia sa začala, ale v{version} nebola dostupná pred vypršaním časového limitu. Obnovte stránku alebo skontrolujte serverové protokoly.", + "updateTimedOut": "Aktualizácia na v{version} vypršala.", + "updateStartFailed": "Nepodarilo sa spustiť aktualizáciu.", + "noResponseStream": "Nebola prijatá žiadna odpoveď.", + "updateComplete": "Aktualizácia dokončená!", + "updateFailed": "Aktualizácia zlyhala.", + "updateNetworkError": "Chyba siete — pripojenie sa stratilo počas aktualizácie.", + "stepInstallPackage": "Nainštalovať balík", + "stepRebuildNativeModules": "Prebudovať natívne moduly", + "stepRestartService": "Reštartovať službu", + "stepComplete": "Dokončiť", + "stepError": "Chyba", + "updateCompleteTitle": "Aktualizácia dokončená!", + "updateFailedTitle": "Aktualizácia zlyhala", + "updatingTitle": "Aktualizácia OmniRoute...", + "reloadNotice": "Stránka sa automaticky znovu načíta o niekoľko sekúnd.", + "retryNotice": "Skúste to znova alebo aktualizujte ručne cez CLI.", + "restartNotice": "Nezatvárajte túto stránku. Systém sa automaticky reštartuje.", + "reloadNow": "Obnoviť teraz", + "closeUpdate": "Zavrieť", + "retryUpdate": "Skúsiť znova", + "updateAvailableTitle": "Aktualizácia k dispozícii: v{version}{desktop}", + "desktopAppLabel": "(Desktop App)", + "checkingForUpdates": "Kontrola aktualizácií...", + "versionAvailableForDownload": "Verzia v{version} je k dispozícii na stiahnutie.", + "downloadingUpdate": "Sťahovanie aktualizácie... {percent}% dokončené.", + "updateDownloaded": "Aktualizácia bola úspešne stiahnutá! Kliknite na Reštartovať a nainštalovať, aby ste ju použili.", + "autoUpdateFailed": "Automatická aktualizácia zlyhala: {reason}.", + "unknownUpdateError": "Neznáma chyba", + "versionAvailableDesktop": "Verzia v{version} je k dispozícii pre desktopovú aplikáciu.", + "manualUpdateRequired": "Pre tento typ inštalácie je potrebná manuálna aktualizácia.", + "restartAndInstall": "Reštartovať a nainštalovať", + "checkForUpdate": "Skontrolovať aktualizáciu", + "manualUpdate": "Ručná aktualizácia", + "directDownloadHint": "Alebo si stiahnite príslušný formát inštalátora priamo:", + "releaseNotes": "Poznámky k vydaniu", + "readMore": "Čítať viac", + "noAuthLabel": "Žiadna autentifikácia" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Odvodené z uložených denníkov volaní okolo tejto požiadavky", "routeRecommendations": "Odporúčania", "routeLimitations": "Obmedzenia", - "routeNoKnownLimitations": "Pre toto vysvetlenie nie sú známe žiadne obmedzenia." + "routeNoKnownLimitations": "Pre toto vysvetlenie nie sú známe žiadne obmedzenia.", + "searchAnalyticsLoading": "Načítavam analytiku vyhľadávania…", + "searchAnalyticsNoData": "Žiadne údaje o vyhľadávaní zatiaľ nie sú k dispozícii.", + "searchAnalyticsNoDataDescription": "Vyhľadávacie požiadavky sa tu objavia po prvom vyhľadaní pomocou /v1/search.", + "searchAnalyticsToday": "{count} dnes", + "searchAnalyticsCachedRequests": "{count} uložených požiadaviek", + "searchAnalyticsApiCosts": "náklady na vyhľadávanie API", + "searchAnalyticsErrors": "{count} chyby", + "searchAnalyticsNoErrors": "Žiadne chyby", + "searchAnalyticsProviderBreakdown": "Rozdelenie poskytovateľov", + "searchAnalyticsQueries": "dotazy", + "searchAnalyticsEmptyDescription": "Použite POST /v1/search na začatie smerovania webových vyhľadávaní.", + "searchAnalyticsFreeTier": "Dostupná bezplatná úroveň: Serper (2 500/m), Brave (2 000/m), Exa (1 000/m), Tavily (1 000/m) — celkom 6 500+ bezplatných vyhľadávaní/mesiac s automatickým prechodom.", + "autoRoutingNoDataAvailable": "Žiadne analýzy automatického smerovania nie sú k dispozícii. Robte požiadavky pomocou predpony auto/ na zobrazenie metrík.", + "defaultVariantLabel": "Predvolené", + "freeTierAvailable": "Dostupný bezplatný plán" }, "apiManager": { "title": "API kľúče", @@ -2348,7 +2478,9 @@ "providerCount": "{count} poskytovateľov", "imageToTextBridgeAvailable": "Modality Bridge teraz dokáže popisovať obrázky pre modely iba s textom. Inline ihrisko bude k dispozícii, keď bude implementované /api/v1/images/understanding.", "imageToTextBridgeCta": "Nastavte most Obraz→Text v nastaveniach Modality Bridge", - "sttBridgeCta": "Nakonfigurujte most Reč→Text v nastaveniach Modality Bridge" + "sttBridgeCta": "Nakonfigurujte most Reč→Text v nastaveniach Modality Bridge", + "existingConnection": "Existujúce pripojenie", + "openrouterSttDescription": "Modely prevodu reči na text OpenRouter používajú vaše nakonfigurované pripojenie OpenRouter. Nie sú potrebné žiadne samostatné poverenia." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Vložiť do:", "copilotReloadInstruction": "Potom znova načítajte VS Code a nastavte kľúč API vo vstupnej výzve.", "wireApiChatCompletions": "Dokončenia rozhovoru (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Akcia zlyhala", + "cliproxyapiActionSucceeded": "Akcia bola úspešná", + "cliproxyapiCheckUpdates": "Skontrolovať aktualizácie", + "cliproxyapiDescription": "Záložný proxy server upstream (OAuth založený na Go)", + "cliproxyapiHealth": "Zdravie", + "cliproxyapiHealthy": "Zdravý", + "cliproxyapiInstall": "Nainštalovať", + "cliproxyapiNotInstalledValue": "Nie je nainštalované", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Žiadosť zlyhala", + "cliproxyapiRestart": "Reštartovať", + "cliproxyapiStart": "Štart", + "cliproxyapiStatusError": "Chyba", + "cliproxyapiStatusInstalled": "Nainštalované", + "cliproxyapiStatusNotInstalled": "Nainštalované", + "cliproxyapiStatusRunning": "Spúšťanie", + "cliproxyapiStatusStopped": "Zastavené", + "cliproxyapiStop": "Zastaviť", + "cliproxyapiUnhealthy": "Nezdravé", + "cliproxyapiUnknown": "Neznáme", + "cliproxyapiUpdate": "Aktualizovať", + "cliproxyapiUpdateAvailable": "Aktualizácia je k dispozícii: v{current} → v{latest}", + "cliproxyapiVersion": "Verzia" }, "combos": { "title": "kombá", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Pokračujte iba pri vyčerpaní kvóty", + "fallbackOnlyOnQuotaExhaustionShort": "iba záložný limit", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Balík režimov a váženie zostávajú tu; stav ističa za behu zostáva na stránke Health.", "emailVisibilityHint": "E-maily účtov tu nasledujú globálne nastavenie súkromia.", "emailVisibilityTooltip": "Pomocou ikony oka môžete globálne zobraziť alebo skryť e-maily účtov v kombináciách, poskytovateľoch a obrazovkách kvót.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Krok za krokom (Poskytovateľ → Model)", + "builderModeGlobal": "Globálne vyhľadávanie modelov (Vlastná kombinácia)", + "builderGlobalSearchPlaceholder": "Hľadať modely naprieč všetkými poskytovateľmi (napr. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Pridať všetko", + "builderGlobalShortcuts": "Klávesové skratky:", + "builderGlobalNoResults": "Nenašiel sa žiadny model pre \"{query}\".", + "builderGlobalProviderLabel": "Poskytovateľ:", + "builderGlobalAccountCount": "{count, plural, one {# účet} other {# účtov}}", + "builderGlobalAdded": "Pridané", + "builderGlobalAdd": "Pridať", "manualModel": "Manuálny model", "manualModelInvalid": "Zadajte model vo formáte poskytovateľ/model.", "manualModelUnknownProvider": "Neznámy prefix poskytovateľa.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Dostupnosť relácie", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Stickiness vypnutá", "kimiPresetTitle": "Predvoľba Kimi Coding", "kimiPresetDescription": "Kimi K3 ako primárny model (Moonshot API) s automatickým záložným riešením na vaše pripojenia Kimi Code (kimi-coding, kimi-web), ak sú nakonfigurované.", - "kimiPresetCta": "Pridať predvoľbu" + "kimiPresetCta": "Pridať predvoľbu", + "intelligentComboCount": "{count, plural, one {# inteligentná kombinácia} other {# inteligentné kombinácie}}", + "providersInScope": "{count, plural, one {# poskytovateľ v rozsahu} other {# poskytovatelia v rozsahu}}", + "savingModePack": "Ukladanie {pack}…", + "errorTitle": "Nepodarilo sa načítať kombinácie", + "errorDescription": "Momentálne sa nám nepodarilo načítať údaje kombinácie. Skontrolujte svoje pripojenie a skúste to znova.", + "errorId": "Chyba ID: {id}", + "errorRetry": "Skúste znova", + "comboLabel": "Kombinácia" }, "costs": { "title": "náklady", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "Používateľské meno", "obsidianPassword": "Heslo", - "obsidianTailscaleHint": "Ak sa pripájate z mobilu, použite svoju Tailscale IP namiesto localhost. Obidve zariadenia musia byť v rovnakej sieti Tailscale." + "obsidianTailscaleHint": "Ak sa pripájate z mobilu, použite svoju Tailscale IP namiesto localhost. Obidve zariadenia musia byť v rovnakej sieti Tailscale.", + "cloudSyncNotConfigured": "Cloud sync nie je na tejto inštancii nakonfigurovaný.", + "notionConnect": "Pripojiť", + "notionConnectFailed": "Nepodarilo sa pripojiť", + "notionConnected": "Pripojené", + "notionConnectionFailed": "Pripojenie zlyhalo", + "notionDescription": "Hľadajte, čítajte, dotazujte sa a píšte do Notion prostredníctvom smerovaných AI modelov", + "notionDisconnect": "Odpojiť", + "notionDisconnectFailed": "Nepodarilo sa odpojiť", + "notionEnterToken": "Zadajte token integrácie Notion", + "notionIntegrationHelp": "Vytvorte internú integráciu na", + "notionIntegrationToken": "Notion Interný Integračný Token", + "notionNotConnected": "Nie je pripojené", + "notionTokenConfigured": "Token je nakonfigurovaný. Nástroje Notion sú dostupné cez MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Poskytovateľ / Model", "noRemoteProviders": "Žiadni poskytovatelia s nakonfigurovaným API kľúčom", "selectProviderModel": "Vyberte model", + "customBaseUrlLabel": "Vlastná základná URL (voliteľné)", + "customModelIdLabel": "ID vlastného modelu (voliteľné)", + "customEndpointHelp": "Použite koncový bod /embeddings kompatibilný s OpenAI. Lokálne koncové body sú povolené; cloudové ciele metadát sú zablokované.", + "customEndpointSave": "Použiť vlastný koncový bod", + "customEndpointInvalid": "Zadajte platnú základnú URL HTTP(S) a ID modelu, alebo nechajte obe polia prázdne.", + "customEndpointSaveFailed": "Vlastný koncový bod pre vloženie sa nedal uložiť.", "staticEnabledLabel": "Povoliť Static Potion", "staticEnabledDesc": "Stiahnuť a používať model potion-base-8M lokálne", "transformersEnabledLabel": "Povoliť Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Čistí sa...", "cleanNow": "Vyčistiť teraz", "cleanupSuccess": "{count} bod(ov) odstránených", - "cleanupFailed": "Čistenie zlyhalo" + "cleanupFailed": "Čistenie zlyhalo", + "hostLabel": "Host", + "collectionLabel": "Zbierka" }, "rerank": { "enableLabel": "Povoliť Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "3-vrstvový záložný diagram OmniRoute", "apiKeyMgmt": "API kľúč Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Nastavte bezplatných poskytovateľov", + "description": "Voliteľne povolte vybrané poskytovatele bez registrácie. Pred pokračovaním si prečítajte oznámenie a stránku každého poskytovateľa; dostupnosť a limity rýchlosti sú riadené tretími stranami.", + "loading": "Načítavam voľných poskytovateľov...", + "loadFailed": "Nepodarilo sa načítať voľných poskytovateľov.", + "alreadyConfigured": "Všetci oprávnení bezplatní poskytovatelia sú už nakonfigurovaní.", + "reviewProviderSite": "Skontrolujte stránku poskytovateľa a podmienky", + "confirmation": "Preskúmal som týchto poskytovateľov tretích strán a chcem, aby OmniRoute vytvoril vybrané pripojenia.", + "setupSelected": "Nastaviť vybraných poskytovateľov", + "settingUp": "Nastavovanie...", + "setupFailed": "Nepodarilo sa nastaviť vybraných poskytovateľov. Nič existujúce nebolo zmenené.", + "retryFailed": "Opakovať zlyhané poskytovatele", + "orUseApiKey": "alebo sa pripojte pomocou API kľúča", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "vytvorené", + "skipped": "už nakonfigurované", + "failed": "zlyhalo" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Povinné. Základná adresa URL rozhrania API poskytovateľa.", "iconUrlLabel": "URL ikony", "iconUrlHint": "Voliteľné. URL obrázka zobrazeného ako ikona tohto poskytovateľa.", + "iconUrlInvalid": "Neplatná URL ikony. Použite http(s):// alebo data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibilné (produkt)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Relácia je už aktuálna", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Použiť autorizáciu", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Prilepiť API kľúč…", "zedSaving": "Ukladá sa…", "zedImportAction": "Importovať", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Povoliť automatické obnovenie relácie kurzora", + "cursorAgentNudgeBody": "Nainštalujte cursor-agent na automatické obnovenie relácie — bez neho je potrebné periodicky manuálne obnovovať pripojenia Cursor zhruba každých 24 hodín.", + "cursorAgentNudgeDismiss": "Zavrieť", "zedManualImportFailed": "Manuálny import zlyhal", "zedManualImportSuccess": "Importovaný token {provider} zo Zed", "grokImportTitle": "Importovať overenie Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Bezplatná úroveň pre serverless inferenciu — nevyžaduje sa kreditná karta", "gemini": "Navždy zadarmo: 1 500 požiadaviek/deň pre Gemini 2.5 Flash — bez kreditnej karty, kľúč získate na aistudio.google.com", "gigachat": "Pripojte GigaChat (Sber) pomocou API kľúča.", - "github-models": "Vytvorte si GitHub PAT s rozsahom 'models: read' na adrese github.com/settings/tokens", "gitlab": "Osobný prístupový token GitLab pre verejné API Code Suggestions. Ak nepoužívate gitlab.com, nakonfigurujte vlastnú základnú URL.", "gitlawb-gmi": "Získajte svoj API kľúč z nástenky Gitlawb Opengateway.", "gitlawb": "Získajte svoj API kľúč z nástenky Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Pripojte Kimi Coding pomocou existujúceho toku OAuth.", "kiro": "Bezplatná úroveň: 50 kreditov/mesiac (~25k – 100k tokenov). ⚠️ Podmienky používania (ToS) Kiro zakazujú používanie proxy/harness tretích strán.", "codex": "Pripojte OpenAI Codex pomocou existujúceho toku OAuth.", - "qwen": "Pripojte Qwen Code pomocou existujúceho toku OAuth." + "qwen": "Pripojte Qwen Code pomocou existujúceho toku OAuth.", + "github-models": "Vytvorte si GitHub PAT s rozsahom 'models: read' na adrese github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} akceptuje ID modelu natívneho poskytovateľa. Importujte z /models alebo pridajte vlastné ID pre smerovanie.", "bedrockModelsDescription": "Modely Amazon Bedrock sú vymedzené podľa regiónu AWS. Importovať z /models alebo pridať ID modelu Bedrock povolené vo vybranom regióne.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Keď sú všetky nakonfigurované pripojenia vyčerpané (kvóta, kredity alebo vypršanie platnosti), dočasne použite bezkľúčovú úroveň tohto poskytovateľa. Vypnite, aby ste preskočili tohto poskytovateľa namiesto odosielania anonymných požiadaviek — odporúča sa, keď bezkľúčová úroveň ich odmieta (401).", "anonymousFallbackEnabled": "Anonymný záložný režim povolený pre {provider}", "anonymousFallbackDisabled": "Anonymný záložný režim je vypnutý pre {provider} — vyčerpané pripojenia preskočia tohto poskytovateľa", - "anonymousFallbackUpdateFailed": "Nepodarilo sa aktualizovať nastavenie anonymného záložného režimu" + "anonymousFallbackUpdateFailed": "Nepodarilo sa aktualizovať nastavenie anonymného záložného režimu", + "batchDeleteFailed": "Hromadné vymazanie zlyhalo", + "batchDeleteNetworkError": "Chyba siete počas hromadného vymazávania", + "batchUpdateFailed": "Hromadná aktualizácia zlyhala", + "batchUpdateNetworkError": "Chyba siete počas hromadnej aktualizácie", + "categoryAudio": "Zvuk", + "categoryCloudAgent": "Cloud Agent", + "categoryIde": "IDE", + "categoryLocal": "Miestny", + "categorySearch": "Hľadať", + "categoryWebCookie": "Webová cookie", + "claudeExtraUsageBlockingDisabled": "Blokovanie nadmerného používania Claude je vypnuté (nadmerné používanie je povolené)", + "claudeExtraUsageBlockingEnabled": "Blokovanie nadmerného používania Claude je povolené (nadmerné používanie bude zablokované)", + "claudeRoutingPreferenceDisabled": "Modely Claude bez predpony už nepreferujú Claude Code", + "claudeRoutingPreferenceEnabled": "Modely Claude bez predpony teraz uprednostňujú Claude Code", + "clearMediaFilter": "Vymazať", + "cliproxyRoutingDisabled": "Žiadosti teraz používajú natívny OmniRoute (priamo)", + "cliproxyRoutingEnabled": "Žiadosti teraz prechádzajú cez CLIProxyAPI (hlbšia emulácia)", + "codexLimitPolicyUpdated": "Politika limitu Codex bola aktualizovaná", + "codexServiceModeUpdated": "Režim služby Codex bol aktualizovaný", + "codexServiceTierActive": "Služobná úroveň Codex {tier} je aktívna", + "codexTierFastLabel": "Rýchlo", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Nepodarilo sa aplikovať príkazový kód auth", + "commandCodeApplyingApproval": "Prehliadač schválený, aplikuje sa…", + "commandCodeApplyingKey": "Aplikovanie kľúča schváleného prehliadačom…", + "commandCodeApprovalInstructions": "Otvorte auth URL, schváľte prístup a potom vložte vrátený kľúč/JSON/URL nižšie…", + "commandCodeAuthExpired": "Príkazový kód auth vypršal", + "commandCodeConnected": "Príkaz Kód pripojený", + "commandCodeConnectionAdded": "Príkazový kód pripojenia pridaný", + "commandCodeLinkExpired": "Odkaz na príkazový kód vypršal", + "commandCodeOpeningStudio": "Otvorenie Command Code Studio…", + "commandCodePopupBlocked": "Vyskakovacie okno je zablokované. Prosím, povoľte vyskakovacie okná a skúste pripojenie príkazu znova.", + "commandCodeStartFailed": "Nepodarilo sa spustiť príkaz Code auth", + "connectionDeleted": "Pripojenie bolo odstránené", + "connectionFallback": "pripojenie", + "coolingConnectionsDescription": "Tieto pripojenia vrátili 429 (limit rýchlosti) pri ich poslednej žiadosti. OmniRoute ich preskočí, kým neuplynie časovač — nie je potrebné manuálne vypnutie.", + "coolingConnectionsTitle": "Momentálne chladenie ({count})", + "failedDeleteAlias": "Nepodarilo sa odstrániť alias", + "failedDeleteConnection": "Nepodarilo sa odstrániť pripojenie", + "failedDistributeProxies": "Nepodarilo sa distribuovať proxy.", + "failedSaveModelEndpointSettings": "Nepodarilo sa uložiť nastavenia koncového bodu modelu", + "failedUpdateClaudeExtraUsagePolicy": "Nepodarilo sa aktualizovať politiku dodatočného používania Claude", + "failedUpdateClaudeRoutingPreference": "Nepodarilo sa aktualizovať preferenciu smerovania kódu Claude", + "failedUpdateCliproxyRouting": "Nepodarilo sa aktualizovať smerovanie CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Nepodarilo sa aktualizovať politiku limitu Codex", + "failedUpdateCodexServiceMode": "Nepodarilo sa aktualizovať režim služby Codex", + "filterByMedia": "Média", + "freeBadge": "Bezplatné", + "kimiCodeApiKeyLabel": "Kimi Code API Kľúč", + "modelTestFailed": "Testovanie modelu zlyhalo", + "modelTestNetworkError": "Chyba siete pri testovaní modelu", + "networkError": "Chyba siete", + "networkErrorDeletingAlias": "Chyba siete pri odstraňovaní aliasu", + "networkErrorSettingAlias": "Chyba siete pri nastavovaní aliasu", + "noProvidersMatch": "Žiadni poskytovatelia nezodpovedajú vášmu vyhľadávaniu.", + "noSavedProxies": "Neboli nájdené žiadne uložené proxy. Najprv pridajte proxy v Nastaveniach → Proxy.", + "pageLoadErrorDescription": "Momentálne sa nám nepodarilo načítať údaje poskytovateľa. Skontrolujte svoje pripojenie a skúste to znova.", + "pageLoadErrorId": "Chyba ID: {id}", + "pageLoadErrorRetry": "Skúste znova", + "pageLoadErrorTitle": "Nepodarilo sa načítať poskytovateľov", + "playgroundTitle": "Herné Ihrisko", + "providerDetailConnectionFlexActive": "Úroveň služby Codex flex je aktívna pre toto pripojenie", + "providerDetailConnectionPriorityActive": "Úroveň prioritnej služby Codex je aktívna pre toto pripojenie", + "providerDetailGlobalFlexActive": "Globálna služba flex tier Codex je aktívna", + "providerDetailGlobalPriorityActive": "Globálna služba prioritného kódu je aktívna", + "proxiesDistributed": "Distribuované {assigned} priradenie proxy cez {tagLabel}{total} pripojení.", + "rerankEndpoint": "Preusporiadať", + "savedModelEndpointSettings": "Nastavenia koncového bodu uloženého modelu", + "searchByModelAria": "Hľadať podľa modelu", + "selectSupportedEndpoint": "Vyberte aspoň jeden podporovaný koncový bod", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Nastavenia", @@ -6460,7 +6719,24 @@ "loadFailed": "Nepodarilo sa načítať zoznam odberov", "toggleFailed": "Nepodarilo sa prepnúť prepínač", "refreshFailed": "Obnovenie zlyhalo", - "deleteFailed": "Odstránenie zlyhalo" + "deleteFailed": "Odstránenie zlyhalo", + "add": "Pridať", + "cancel": "Zrušiť", + "configure": "Nastaviť", + "copyEndpoint": "Kopírovať koncový bod", + "coreEndpointHint": "Jadrový koncový bod Nápoveda", + "coreNodesHint": "Nápoveda k Hlavným Uzlom", + "create": "Vytvoriť", + "deleteConfirm": "Potvrdiť odstránenie", + "empty": "Prázdny", + "globalModeDescription": "Popis globálneho režimu", + "localCoreHint": "Miestny jadrový náznak", + "nodeSummary": "Zhrnutie uzla", + "providerRequired": "Poskytovateľ je povinný", + "providerRouting": "Smerovanie poskytovateľa", + "refresh": "Obnoviť", + "refreshInterval": "Interval Obnovenia", + "ruleModeDescription": "Popis režimu pravidla" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Spustiť automatickú zálohu vision-to-text pred smerovaním požiadaviek na obrázky do modelov určených len pre text.", "visionBridgeEnabledLabel": "Povolené", "visionBridgeEnabledDesc": "Prepnúť premostenie pred volaním, ktoré nahrádza časti obrázka extrahovaným textom.", + "visionBridgeRerouteTextOnlyLabel": "Preposlať modely iba s textom", + "visionBridgeRerouteTextOnlyDesc": "Odošlite kompletný požiadavok, vrátane obrázkov, na mostový model, keď vybraný model nemá vstup pre obrázky.", "visionBridgeModel": "Model mosta", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Tu je možné použiť akékoľvek ID modelu OmniRoute, ktoré podporuje vision.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API kľúču chýba rozsah manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Jeden alebo viacero prefixov smeruje na trasy s podporou spúšťania a nemožno ich obísť.", "GENERIC": "Nepodarilo sa aktualizovať nastavenia autorizácie." - } + }, + "remove": "Odstrániť" }, "resilienceBaseCooldownLabel": "Základné cooldown", "scopeLabel": "Rozsah", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testovanie zvuku…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klip(y) prepisované pomocou {model}", "modalityBridgeAudioTestNoop": "Audio Bridge sa nepodarilo aktivovať (cieľ môže podporovať audio, žiadny poskytovateľ STT nie je pripojený, alebo je most vypnutý)", - "modalityBridgeAudioTestError": "Test zvuku zlyhal: {message}" + "modalityBridgeAudioTestError": "Test zvuku zlyhal: {message}", + "modelRoutingDescriptionPlaceholder": "Smerovať modely Opus na kombináciu frontier", + "cliproxyapiFallbackCodes": "Cliproxyapi Záložné Kódy", + "cliproxyapiFallbackDescription": "Popis záložného Cliproxyapi", + "cliproxyapiHealthLabel": "Zdravie Cliproxyapi", + "cliproxyapiImportFailed": "Cliproxyapi Import Zlyhal", + "cliproxyapiImportResult": "Cliproxyapi Import Výsledok", + "cliproxyapiInvalidUrl": "Cliproxyapi Neplatná URL", + "cliproxyapiLifecycleNoticeAfter": "Oznámenie o životnom cykle Cliproxyapi po", + "cliproxyapiLifecycleNoticeBefore": "Oznámenie o životnom cykle Cliproxyapi Pred", + "cliproxyapiLifecycleNoticeLink": "Oznámenie o životnom cykle Cliproxyapi Odkaz", + "cliproxyapiPortLabel": "Cliproxyapi Port Názov", + "cliproxyapiStatusLabel": "Stav značky Cliproxyapi", + "cliproxyapiVersionLabel": "Verzia Cliproxyapi", + "collection": "Zbierka", + "errorPage": { + "description": "Nastavenia sa momentálne nedajú načítať. Skúste to znova o niekoľko sekúnd.", + "errorId": "Chyba ID: {id}", + "retry": "Skúsiť znova", + "title": "Nepodarilo sa načítať nastavenia" + }, + "host": "Host", + "notInstalled": "Nie je nainštalované", + "oneproxyActions": "Oneproxy Akcie", + "oneproxyActive": "Oneproxy Aktívny", + "oneproxyAnonymity": "Oneproxy Anonymita", + "oneproxyCountry": "Oneproxy Krajina", + "oneproxyDelete": "Oneproxy Odstrániť", + "oneproxyEmpty": "Oneproxy Prázdny", + "oneproxyHost": "Oneproxy Host", + "oneproxyLatency": "Oneproxy Latencia", + "oneproxyProtocol": "Oneproxy protokol", + "oneproxyQuality": "Oneproxy Kvalita", + "oneproxySyncFailed": "Synchronizácia zlyhala: {error}", + "oneproxySyncSuccess": "Synchronizované {total} proxy ({added} nové, {updated} aktualizované)", + "proxyDocumentationSocks5DescAfter": "Dokumentácia Proxy Socks5 Popis Po", + "proxyFreePoolAddProxy": "Proxy Free Pool Pridať Proxy", + "proxyFreePoolAdding": "Pridávanie bezplatného proxy poolu", + "proxyFreePoolSelectProxy": "Výber proxy z bezplatného poolu", + "proxyStatusActive": "Stav proxy Aktívny", + "proxyStatusInactive": "Stav proxy neaktívny", + "routingAddEntry": "Pridať záznam", + "settingSaveFailed": "Uloženie nastavenia zlyhalo", + "settingSaved": "Nastavenie Uložené", + "skillsmpApiKeyHintAfter": ". Obmedzenie rýchlosti: {limit} požiadaviek/deň.", + "skillsmpApiKeyHintBefore": "Získajte svoj API kľúč z", + "syncFailed": "Synchronizácia zlyhala", + "unhealthy": "Nezdravé", + "oneproxyDescription": "Získajte a otáčajte bezplatné overené proxy z komunity 1proxy", + "oneproxySyncing": "Synchronizácia...", + "oneproxySyncNow": "Synchronizovať teraz", + "oneproxyClearAll": "Vymazať všetko", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Vymazať všetky 1proxy proxy?", + "memorySkillsSkillsmpDescription": "Pripojte sa k SkillsMP, aby ste objavili a nainštalovali zručnosti z trhu.", + "memorySkillsActiveProviderDescription": "Vyberte, ktorého poskytovateľa používa stránka Zručnosti na vyhľadávanie a inštaláciu.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Trh", + "memorySkillsSkillsmpProviderDescription": "Autentifikovaný trh (používa váš API kľúč SkillsMP).", + "memorySkillsSkillsshProviderTitle": "adresár skills.sh", + "memorySkillsSkillsshProviderDescription": "Poskytovateľ verejného adresára (nie je potrebný API kľúč).", + "routingCcBridgeCatalogName": "Most kompatibilný s Anthropic CC bridge", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Nativny poskytovateľ Claude s tokenmi vydanými OAuth.", + "routingCcBridgeName": "Claude-Code Most", + "routingCcBridgeDescription": "Relay koncové body pomocou API kľúčov (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Vlastný poskytovateľ.", + "routingUnknownOpKind": "Neznámy typ operácie: {kind}", + "routingInvalidJson": "Neplatný JSON: {error}", + "routingConfigMustBeObject": "Konfigurácia musí byť JSON objekt.", + "routingEnabledMustBeBoolean": "`enabled` musí byť pravda alebo nepravda", + "routingPipelineMustBeArray": "`pipeline` musí byť pole ops", + "routingPipelineTooLong": "Pipeline nemôže prekročiť 50 operácií", + "routingOpMissingKind": "Op #{index}: chýbajúci alebo neplatný `kind`", + "routingOpUnknownKind": "Op #{index}: neznámy typ \"{kind}\"", + "routingJsonEditorHide": "Skryť editor JSON", + "routingJsonEditorImportExport": "Importovať / exportovať JSON", + "routingJsonEditorLabel": "JSON (upraviť a aplikovať, alebo vložiť na import)", + "routingApplyJson": "Použiť JSON", + "routingTransformsFootnote": "Všetky transformačné operácie sú idempotentné pri opätovnom spustení. Zmeny nadobúdajú účinnosť okamžite pri ďalšej požiadavke.", + "cliproxyapiUnknown": "Neznáme", + "cliproxyapiVersion": "Verzia", + "cliproxyapiHealth": "Zdravie", + "cliproxyapiPort": "Port", + "qdrantHost": "Host", + "qdrantCollection": "Zbierka" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Predvolené", + "off": "Vypnuté", + "lite": "Lite", + "standard": "Štandardný", + "aggressive": "Agresívny", + "ultra": "Ultra", + "responsesToolOutput": "Výstup nástroja odpovedí" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Spúšťa sa ako posledný v stacku (po tom, čo RTK/Caveman vyčistí text, OmniGlyph skonvertuje zvyšok na obrázky) a funguje aj samostatne v režime omniglyph. Toto je predbežná verzia a predvolene zostáva vypnutá, kým sa nedokončí end-to-end validácia.", "saved": "Uložené.", "saveFailed": "Nepodarilo sa uložiť.", - "enableAria": "Povoliť engine OmniGlyph" + "enableAria": "Povoliť engine OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Vstavané služby", @@ -9127,7 +9500,49 @@ "unableToLoad": "Nie je možné načítať systémové metriky", "product": "Produkt", "resources": "Zdroje", - "company": "Spoločnosť" + "company": "Spoločnosť", + "tokenHealthTooltips": { + "allHealthy": "Všetky tokeny sú zdravé", + "needsAttention": "Niektoré tokeny potrebujú pozornosť", + "refreshFailures": "Zistené zlyhania obnovenia tokenu", + "unknown": "Zdravotný stav neznámy" + }, + "systemMonitor": { + "metricsAriaLabel": "Systémové metriky", + "memory": "Pamäť", + "memoryShort": "mem", + "uptime": "Dostupnosť", + "ariaLabel": "Sledovanie systému", + "title": "Systémový monitor", + "version": "Verzia", + "connections": "Pripojenia", + "circuitBreakers": "Ističe", + "open": "{count} otvorené", + "memoryUsage": "Využitie pamäte" + }, + "never": "Nikdy", + "justNow": "Práve teraz", + "minutesAgo": "pred {count}m", + "hoursAgo": "pred {count}h", + "tokens": "Tokeny", + "costs": "Náklady", + "autoRefresh": "Automatické obnovenie ({seconds}s)", + "toggleAutoRefresh": "Prepnúť automatické obnovenie", + "activeRequests": "Aktívne požiadavky", + "totalRequests": "Celkový počet požiadaviek", + "totalInputTokens": "Celkový počet vstupných tokenov", + "model": "Model", + "provider": "Poskytovateľ", + "requests": "Žiadosti", + "lastUsed": "Naposledy použitý", + "inputTokens": "Vstupné tokeny", + "totalTokens": "Celkové tokeny", + "inputCost": "Náklady na vstup", + "outputCost": "Náklady na výstup", + "noUsageData": "Zatiaľ nie sú zaznamenané žiadne použitia. Urobte niekoľko požiadaviek, aby ste tu videli údaje.", + "account": "Účet", + "accountLabel": "Účet {id}", + "noAccountUsage": "Žiadne údaje o používaní špecifické pre účet zatiaľ neboli zaznamenané. Robte požiadavky pomocou účtov OAuth, aby ste tu videli údaje." }, "auth": { "welcome": "Vitajte", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Obnoviť cez údaje aplikácie", + "resetViaAppDataDescription": "Odstráňte súbor nastavení z adresára aplikácie, aby ste resetovali svoje heslo:", + "quitDesktopApp": "Úplne ukončite desktopovú aplikáciu OmniRoute", + "navigateToAppDataDirectory": "Prejdite do adresára s údajmi aplikácie:", + "checkSystemAppDataFolder": "(Overte si priečinok s údajmi aplikácie systému)", + "relaunchDesktopFreshSetup": "Reštartujte desktopovú aplikáciu OmniRoute — spustí sa nový proces nastavenia", + "alternativeSetPasswordTitle": "Alternatíva: Nastaviť nové heslo", + "alternativeSetPasswordDescription": "Nastavte nové počiatočné heslo prostredníctvom súboru prostredia servera:", + "openServerEnvFilePrefix": "Otvoriť", + "relaunchDesktopApp": "Znovu spustite desktopovú aplikáciu OmniRoute", + "codexLinkInvalidOrExpired": "Tento odkaz je neplatný alebo vypršaný.", + "codexValidationServerError": "Nepodarilo sa dosiahnuť server na overenie tohto odkazu.", + "codexSaveConnectionError": "Nepodarilo sa uložiť pripojenie. Odkaz mohol vypršať.", + "codexDeviceLoginDisabled": "Prihlásenie pomocou kódu zariadenia je pre tento účet OpenAI zakázané. Povoliť ho môžete v nastaveniach zabezpečenia ChatGPT (alebo sa opýtajte správcu vašej pracovnej plochy).", + "codexAuthorizationTimedOut": "Čas autorizácie vypršal. Kliknite na Začať znova, aby ste to skúsili.", + "authenticationCancelled": "Overenie bolo zrušené.", + "unexpectedAuthenticationError": "Neočakávaná chyba počas autentifikácie. Skúste to prosím znova.", + "connectOpenAiCodexTitle": "Pripojiť OpenAI Codex", + "codexConnectDescription": "Autorizujte účet ChatGPT na dokončenie nastavenia tohto pripojenia.", + "validatingCodexLink": "Overovanie odkazu…", + "codexGenerateCodeDescription": "Kliknite nižšie na vygenerovanie jednorazového kódu, potom sa prihláste do OpenAI.", + "startCodexFlow": "Štart", + "requestingOpenAiCode": "Žiadam kód od OpenAI…", + "codexVerificationInstructions": "1. Otvorte stránku overenia OpenAI a 2. zadajte tento kód. Táto stránka sa automaticky aktualizuje, akonáhle autorizujete.", + "yourCode": "Váš kód", + "openVerificationPage": "Otvorte stránku na overenie", + "copyUrlShort": "Kopírovať URL", + "savingConnection": "Ukladám pripojenie…", + "codexConnected": "Pripojené!", + "codexConnectionRegistered": "Účet Codex bol zaregistrovaný. Môžete zavrieť túto kartu.", + "tryAgain": "Skús to znova", + "traeAuthorizationSuccess": "Trae autorizácia ✓", + "traeAuthorizationFailed": "Trae autorizácia zlyhala", + "closeAuthorizationWindow": "Toto okno môžete zavrieť.", + "returnToDashboard": "Vrátiť sa na ovládací panel.", + "resetViaAppData": "Obnoviť cez údaje aplikácie", + "deleteSettingsToReset": "Odstráňte súbor nastavení z adresára aplikácie, aby ste resetovali svoje heslo:", + "quitAppCompletely": "Úplne ukončite desktopovú aplikáciu OmniRoute", + "navigateToAppData": "Prejdite do adresára s údajmi aplikácie", + "checkAppDataFolder": "Skontrolujte svoju systémovú aplikáciu dátový priečinok", + "deleteSettingsJson": "Odstrániť", + "relaunchAppFresh": "Reštartujte desktopovú aplikáciu OmniRoute — spustí sa nový proces nastavenia", + "alternativeSetPassword": "Alternatíva: Nastaviť nové heslo", + "setNewPasswordViaEnv": "Nastavte nové počiatočné heslo prostredníctvom súboru prostredia servera:", + "openServerEnv": "Otvoriť", + "inDataDirectory": "v adresári s údajmi", + "addOrUpdate": "Pridať alebo aktualizovať", + "deleteAndRelaunch": "Vymazať", + "settingsJson": "settings.json", + "fromDataDir": "z adresára s údajmi", + "relaunchApp": "Znovu spustite desktopovú aplikáciu OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ste pripravení zjednodušiť svoju infraštruktúru AI?", "ctaDescription": "Pridajte sa k vývojárom, ktorí zefektívňujú svoje integrácie AI s OmniRoute. Open source a zadarmo začať.", "startFree": "Začnite zadarmo", - "readDocumentation": "Prečítajte si dokumentáciu" + "readDocumentation": "Prečítajte si dokumentáciu", + "company": "Spoločnosť", + "pricing": "Ceny", + "apiReference": "API Referencia", + "helpCenter": "Centrum Pomoci", + "about": "O aplikácii", + "blog": "Blog", + "contact": "Kontakt", + "terms": "Podmienky", + "privacy": "Ochrana súkromia", + "license": "Licencia", + "footerDescription": "Jednotné rozhranie pre modernú AI infraštruktúru. Bezpečné, pozorovateľné a škálovateľné.", + "communityDiscussions": "Diskusie v komunite" }, "docs": { "title": "Dokumentácia", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Zaregistrujte a spravujte agentov prostredníctvom registra AKT na komunikáciu medzi agentmi a zdieľanie nástrojov.", "protocolAcpStep1": "Ak chcete zobraziť registrovaných agentov AKT, prejdite na Dashboard → Agents.", "protocolAcpStep2": "Zaregistrujte nových agentov so schopnosťami a konfiguráciou koncového bodu.", - "protocolAcpStep3": "Na konfiguráciu komunikačných kanálov agentov použite nástroje CLI." + "protocolAcpStep3": "Na konfiguráciu komunikačných kanálov agentov použite nástroje CLI.", + "metadataTitleTemplate": "%s — OmniRoute Dokumentácia", + "metadataDefaultTitle": "OmniRoute Dokumentácia", + "metadataDescription": "Komplexná dokumentácia pre OmniRoute AI gateway — nastavenie, API, kompresia, nasadenie a ďalšie.", + "layoutNavTitle": "OmniRoute Dokumentácia", + "layoutHomeLink": "Domov dokumentov", + "layoutDashboardLink": "← Späť na Dashboard", + "homeTitle": "OmniRoute Dokumentácia", + "homeMetadataDescription": "Všetko, čo potrebujete na smerovanie, kompresiu a škálovanie vašej AI — návody na nastavenie, referenciu API, kompresiu, nasadenie a ďalšie.", + "homeTwitterDescription": "Komplexná dokumentácia pre OmniRoute AI gateway", + "homeDescription": "Všetko, čo potrebujete na smerovanie, kompresiu a škálovanie vášho AI", + "homeSearchHint": "Stlačte Ctrl K na vyhľadanie dokumentácie", + "featuredQuickStartTitle": "Rýchly Štart", + "featuredQuickStartDescription": "Spustite OmniRoute za 3 minúty", + "featuredAutoComboTitle": "Auto-Combo Príručka", + "featuredAutoComboDescription": "Nechajte OmniRoute vybrať pre vás najlepší AI", + "featuredProvidersTitle": "Sprievodca poskytovateľmi", + "featuredProvidersDescription": "Pripojte AI poskytovateľov za pár minút", + "nonTechUsersTitle": "Pre netechnických používateľov", + "nonTechUsersSubtitle": "Začnite rýchlo — nie je potrebné technické zázemie", + "techUsersTitle": "Pre technických používateľov", + "techUsersSubtitle": "Hlboké ponorenie do architektúry, API a interných procesov", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "Interaktívny API prehliadač — vyskúšajte koncové body OmniRoute naživo s odpoveďami v reálnom čase", + "apiExplorerTitle": "API Prieskumník", + "apiExplorerDescription": "Vyskúšajte koncové body OmniRoute naživo. Vyberte koncový bod, nakonfigurujte svoju požiadavku a sledujte odpoveď v reálnom čase.", + "apiExplorerSseStarted": "SSE stream sa začal — skontrolujte terminál/devtools pre výstup v reálnom čase.", + "apiExplorerError": "Chyba: {message}", + "apiExplorerAuth": "autentifikácia", + "apiExplorerResponseLabel": "Odpoveď", + "apiExplorerSelectEndpoint": "Vyberte koncový bod na preskúmanie", + "apiExplorerChooseApi": "Vyberte API z bočného panela, aby ste videli podrobnosti a vyskúšali ho naživo", + "feedbackThanks": "Ďakujeme za vašu spätnú väzbu!", + "feedbackQuestion": "Bola táto stránka užitočná?", + "pageMetadataTitle": "{title} — OmniRoute Dokumentácia", + "pageMetadataDescription": "OmniRoute dokumentácia: {title}", + "breadcrumb": "Navigačná Lišta", + "apiReferenceTable": { + "parameters": "Parametre", + "name": "Názov", + "type": "Typ", + "description": "Popis", + "returns": "Vracia", + "typePrefix": "Typ:" + } }, "legal": { "privacyPolicy": "Zásady ochrany osobných údajov", @@ -9957,7 +10479,42 @@ "successMessage": "Váš účet {providerName} bol pripojený.", "done": "Hotovo", "error": "Pripojenie zlyhalo", - "tryAgain": "Skúste to znova" + "tryAgain": "Skúste to znova", + "errorSessionIncomplete": "OAuth relácia je neúplná (chýba presmerovacia URI alebo overovač kódu). Reštartujte pripojenie a skúste to znova.", + "errorExchangeFailed": "Výmena zlyhala", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Predvolené Google OAuth poverenia fungujú iba na localhost. Pre vzdialené použitie si nakonfigurujte vlastné OAuth poverenia prostredníctvom premenných prostredia: ANTIGRAVITY_OAUTH_CLIENT_ID a ANTIGRAVITY_OAUTH_CLIENT_SECRET. Pozrite si časť README 'OAuth na vzdialenom serveri'.", + "errorSaveFailed": "Uloženie zlyhalo", + "errorAuthorizationFailed": "Autorizácia zlyhala", + "errorAuthorizationTimeout": "Časový limit autorizácie", + "errorRequestFailed": "Žiadosť zlyhala", + "errorCallbackServerFailed": "Nepodarilo sa spustiť server spätného volania", + "errorBrowserUnavailable": "Prehliadač OAuth nie je prehto poskytovateľa k dispozícii v aktuálnom prostredí. Namiesto toho použite podporovanú metódu autentifikácie.", + "errorStateMismatch": "Nesúlad stavu OAuth. Reštartujte pripojenie a skúste to znova.", + "errorImportAccessToken": "Nepodarilo sa importovať prístupový token", + "errorSessionNotInitialized": "OAuth relácia nebola inicializovaná. Reštartujte tok pripojenia a skúste to znova.", + "errorNoAuthorizationCode": "Nebola nájdená žiadna autorizačná kód. Vložte URL spätného volania alebo autentifikačný kód.", + "tabDeviceCode": "Kód zariadenia", + "tabBrowserLogin": "Prihlásenie do prehliadača", + "tabImportAuthJson": "Importovať auth.json", + "tabPasteApiKey": "Vložte API kľúč", + "windsurfPasteDescription": "V IDE Windsurf / VS Code spustite príkaz \"Windsurf: Provide Auth Token\" z palety príkazov (alebo kliknite na tlačidlo Jupyter \"Get Windsurf Authentication Token\"), potom skopírujte zobrazený token a vložte ho nižšie. Priame otvorenie windsurf.com/show-auth-token zobrazuje iba stránku \"Redirecting\" — tok musí iniciovať IDE.", + "grokAuthJsonDescription": "Vložte CELÝ obsah ~/.grok/auth.json (nie len pole JWT \"key\"). Holý JWT nemá refresh_token, takže pripojenie sa po vypršaní platnosti zruší (#7610). Uprednostnite špeciálny modal na import auth.json, keď je k dispozícii.", + "devinDesktopPasteDescription": "Vložte existujúci kľúč API Devin z autentifikovanej relácie Devin. Dostupnosť exportu kľúča a kroky sa líšia podľa verzie a účtu Devin.", + "devinPasteDescription": "Poskytnite svoj WINDSURF_API_KEY (získaný pomocou `devin auth login`, alebo prostredníctvom príkazu \"Windsurf: Provide Auth Token\" v IDE Windsurf).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Kľúč / Token", + "saving": "Ukladanie…", + "saveConnection": "Uložiť pripojenie", + "gheDescription": "Zadajte základnú URL adresu vašej inštancie GitHub Enterprise (napr. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL pre GitHub Enterprise", + "gheUrlRequired": "Je potrebné zadať URL adresu GitHub Enterprise", + "gitlabDuoSetupTitle": "Nastavenie Duo OAuth pre GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth nie je nakonfigurovaný. Zaregistrujte OAuth aplikáciu na {applicationsUrl} s URI na presmerovanie {redirectUri} a rozsahmi \"{scopes}\", potom nastavte {clientIdEnv} (a voliteľne {clientSecretEnv}) a reštartujte.", + "gitlabDuoSetupDescription": "Po registrácii aplikácie a nastavení env premenných na tejto inštancii OmniRoute kliknite na Pokračovať, aby ste začali prihlásenie pomocou OAuth.", + "continue": "Pokračovať" }, "cursorAuthModal": { "title": "Pripojte kurzorové IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Načítať viac", - "loadingMore": "Načítava sa viac..." + "loadingMore": "Načítava sa viac...", + "correlationId": "ID korelácie", + "group": { + "showAllRows": "Zobraziť všetky riadky", + "showLatestPerCorrelation": "Zobraziť najnovšie podľa ID korelácie", + "grouped": "Zoskupené" + }, + "running": "beží", + "interval": { + "decrease": "Znížiť interval", + "title": "Interval automatického obnovenia v sekundách", + "increase": "Zvýšiť interval" + }, + "status": { + "inProgress": "Prebieha", + "recoveredByRetry": "Obnovené opakovaním", + "goToParent": "Prejdite na nadriadenú požiadavku", + "healedTitle": "Zlyhalo, zotavené po {count} pokusoch", + "healed": "uzdravený", + "failedTitle": "Všetkých {count} pokusov zlyhalo", + "failed": "zlyhalo", + "pinnedTitle": "Model vybraný prostredníctvom prichytávania relácie cache kontextu", + "pinned": "pripnuté" + }, + "attempts": "pokusy", + "detail": { + "collapse": "Zbaliť {title}", + "expand": "Rozšíriť {title}", + "copyTitle": "Kopírovať {title}", + "copied": "Skopírované!", + "copy": "Kopírovať", + "autoscrollOn": "Automatické posúvanie: zapnuté", + "autoscrollOff": "Automatické posúvanie: vypnuté", + "payload": { + "clientRawRequest": "Klientský surový požiadavok", + "clientRequest": "Žiadosť klienta", + "openaiRequest": "OpenAI Žiadosť", + "providerRequest": "Žiadosť o poskytovateľa", + "providerResponse": "Odpoveď poskytovateľa", + "clientResponse": "Odpoveď Klienta", + "pipelineError": "Chyba v pipeline" + }, + "payloadMissing": "Podrobný payload artefakt už nie je k dispozícii pre tento záznam protokolu.", + "payloadCorrupt": "Podrobný payload artefakt sa nedal analyzovať.", + "notAvailable": "N/A", + "semanticCache": "Semantický (OmniRoute)", + "upstreamCache": "Upstream (Poskytovateľ)", + "ariaLabel": "Detail žiadosti o protokol", + "completed": "Dokončené", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute vrátil {status}, aj keď poskytovateľ vrátil {provider}", + "previousRequest": "Predchádzajúca žiadosť", + "nextRequest": "Ďalšia požiadavka", + "close": "Zavrieť detailný modal", + "startedAt": "Začalo sa o", + "endedAt": "Ukončené O", + "duration": "Trvanie", + "model": "Model", + "provider": "Poskytovateľ", + "account": "Účet", + "input": "Vstup", + "totalIn": "Celkom Príjmy: {value}", + "cacheRead": "Cache Čítanie: {value}", + "cacheWrite": "Cache Write: {value}", + "compressed": "Komprimované: {from} → {to} ({percent}% ušetrené)", + "output": "Výstup", + "totalOut": "Celkový výstup: {value}", + "reasoning": "Dôvod: {value}", + "requestedModel": "Požadovaný model", + "requestProtocol": "Req Protokol", + "cacheSource": "Cache Zdroj", + "modelPinning": "Model Pinning", + "activeModelPinning": "Aktívne — model vybraný pomocou pripevnenia relácie", + "rotated": "Otočené: {initial} -> {final}", + "apiKey": "API kľúč", + "noApiKey": "Žiadny API kľúč", + "combo": "Kombinácia", + "error": "Chyba", + "unblockAll": "Odomknúť všetko", + "cleared": "Vymazané", + "unblock": "Odblokovať", + "relatedRequests": "Súvisiace požiadavky ({count})", + "current": "aktuálny", + "detailStatus": "Detailný stav", + "loadingDetails": "Načítavam podrobnosti požiadavky...", + "providerEventStream": "Poskytovateľ udalostného prúdu", + "clientEventStream": "Klientský prúd udalostí", + "eventStream": "Prúd udalostí", + "responsePayloadLegacy": "Payload Odpovede (Dedičstvo)", + "requestPayloadLegacy": "Žiadosť o Payload (Legacy)", + "noPayload": "Žiadne údaje o payload neboli k dispozícii pre tento záznam.", + "correlationId": "ID korelácie", + "correlationIdValue": "ID korelácie: {id}", + "detailedPayloadInfo": "Najprv povolte podrobné protokolovanie, ak chcete zobrazenie štyroch fáz klienta/poskytovateľa pre nové požiadavky." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} zakázaný", "providerAdded": "{provider} pridaný", "add": "Pridať", - "manualApiKey": "Použiť manuálny API kľúč" + "manualApiKey": "Použiť manuálny API kľúč", + "createDahlTokenFailed": "Nepodarilo sa vytvoriť token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Nastaviť proxy", + "providerProxyTitleConfigured": "Proxy je nakonfigurovaný: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Obmedzené zmluvnými podmienkami — skontrolujte podmienky", "caution": "Upozornenie — klauzuly o osobnom použití / proxy", "ok": "Všeobecne benevolentné" - } + }, + "allProviders": "Všetci poskytovatelia", + "noApiKeyRequired": "Nie je potrebný žiadny API kľúč" }, "providerHealthAutopilot": { "title": "Autopilot stavu poskytovateľov", @@ -12390,7 +13047,11 @@ "on": "ZAP", "off": "VYP", "availableProviders": "Dostupní poskytovatelia ({count})", - "noProviderOverrides": "Žiadne prepísania — všetci aktívni poskytovatelia sa zapoja so svojimi predvolenými modelmi" + "noProviderOverrides": "Žiadne prepísania — všetci aktívni poskytovatelia sa zapoja so svojimi predvolenými modelmi", + "resetFailed": "Obnovenie zlyhalo", + "resetSuccess": "Obnovenie konfigurácie na predvolené hodnoty", + "running": "Prebieha...", + "testFailed": "Test zlyhal" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) je zakladajúci open source priateľ OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Poskytovateľ nepodporuje víziu pre tento požiadavku na obrázok", "capabilityFilter.toolsMismatch": "Poskytovateľ nepodporuje volanie nástroja", "capabilityFilter.structuredOutputMismatch": "Poskytovateľ nepodporuje štruktúrovaný výstup", - "capabilityFilter.contextWindowMismatch": "Žiadosť presahuje kontextové okno poskytovateľa" + "capabilityFilter.contextWindowMismatch": "Žiadosť presahuje kontextové okno poskytovateľa", + "publicSystem": { + "notFound": { + "title": "Stránka nenájdená", + "description": "Stránka, ktorú hľadáte, neexistuje alebo bola presunutá.", + "dashboardAriaLabel": "Návrat na ovládací panel", + "statusAriaLabel": "Otvor stránku stavu systému", + "systemStatus": "Stav systému" + }, + "error": { + "title": "Interná chyba servera", + "description": "Niečo sa pokazilo pri spracovaní vašej žiadosti. Náš tím bol informovaný a pracuje na oprave.", + "errorId": "Chyba ID: {id}", + "detailsAriaLabel": "Podrobnosti o chybe", + "retryAriaLabel": "Skúste znova načítať stránku", + "tryAgain": "Skúste znova", + "dashboardAriaLabel": "Návrat na ovládací panel", + "statusAriaLabel": "Otvorenie stavu systému", + "systemStatus": "Stav systému" + }, + "globalError": { + "title": "Niečo sa pokazilo", + "description": "Vyskytla sa neočakávaná chyba. Toto bolo zaznamenané a náš tím to preskúma.", + "detailsAriaLabel": "Podrobnosti o chybe", + "retryAriaLabel": "Skúste znovu načítať stránku", + "tryAgain": "Skúste znova", + "statusAriaLabel": "Otvorenie stavu systému", + "systemStatus": "Stav systému" + }, + "offline": { + "title": "Problém s pripojením", + "description": "OmniRoute momentálne nemôže dosiahnuť sieť. Skontrolujte svoje internetové, VPN alebo proxy nastavenia.", + "connectionRestored": "Pripojenie obnovené", + "offlineModeDetected": "Zistený offline režim", + "retryConnection": "Opakovať pripojenie", + "openStatusPage": "Otvorit stránku stavu" + }, + "maintenance": { + "title": "Plánovaná údržba", + "description": "Niektoré služby sú dočasne nedostupné, zatiaľ čo prebieha údržba. Hlavné smerovanie zvyčajne zostáva online, ale funkcie správy môžu byť obmedzené.", + "suggestion1": "Skúste to znova o niekoľko minút.", + "suggestion2": "Skontrolujte aktuálne ukazovatele zdravia a stav poskytovateľa pred opätovným pokusom.", + "systemStatus": "Zobraziť stav systému", + "healthDashboard": "Otvorenie zdravotného panela" + }, + "status": { + "title": "Stav systému", + "description": "Živý operačný snímok pre základné služby OmniRoute.", + "loadingHealth": "Načítavam zdravotné metriky...", + "failedToLoad": "Nepodarilo sa načítať stav systému.", + "unableToReachHealth": "Nemožno dosiahnuť zdravotný koncový bod. Skontrolujte pripojenie a skúste to znova.", + "healthCheckFailed": "Kontrola zdravia zlyhala", + "openConnectivityHelp": "Otvorené pripojenie Pomoc", + "maintenanceInfo": "Informácie o údržbe", + "service": "Služba", + "unknown": "neznáme", + "notAvailable": "n/a", + "providersTracked": "Sledovaní poskytovatelia", + "circuitBreakerState": "Stav obvodu poskytovateľa", + "lastUpdate": "Posledná aktualizácia: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Zlá požiadavka", + "description": "Payload požiadavky je neplatný alebo neúplný.", + "suggestion1": "Skontrolujte požadované polia a formát payloadu pred opätovným pokusom.", + "suggestion2": "Ak používate API, overte JSON schému lokálne.", + "suggestion3": "Ak sa to bude naďalej diať, otvorte požiadavku v Translator Playground, aby ste skontrolovali payload.", + "primaryAction": "Otvorenie dokumentácie", + "secondaryAction": "Otvor prekladač" + }, + "401": { + "title": "Neautorizované", + "description": "Na prístup k tomuto zdroju je potrebná autentifikácia.", + "suggestion1": "Prihláste sa znova a skúste operáciu opäť.", + "suggestion2": "Pre API volania potvrďte, že Bearer token je prítomný a platný.", + "suggestion3": "Ak bol token nedávno otočený, aktualizujte svoje klientské poverenia.", + "primaryAction": "Prejdite na prihlásenie", + "secondaryAction": "Spravovať API kľúče" + }, + "403": { + "title": "Zakázané", + "description": "Vaša žiadosť bola pochopená, ale prístup je zamietnutý politikou.", + "suggestion1": "Skontrolujte pravidlá povoleného/zablokovaného IP v nastaveniach.", + "suggestion2": "Overte model a rozpočtové politiky priradené k vášmu API kľúču.", + "suggestion3": "Požiadajte administrátora, aby pridelil požadovaný rozsah oprávnení.", + "primaryAction": "Otvorené prístupové pomocné informácie", + "secondaryAction": "Otvorené nastavenia zabezpečenia" + }, + "408": { + "title": "Časový limit požiadavky", + "description": "Server nedostal kompletnú požiadavku včas.", + "suggestion1": "Opakujte požiadavku s menším payloadom.", + "suggestion2": "Skontrolujte stabilitu siete a latenciu VPN/proxy.", + "suggestion3": "Pre dlhé operácie povolte streamovanie alebo rozdeľte požiadavku.", + "primaryAction": "Otvorenie príručky pre koncový bod", + "secondaryAction": "Skontrolovať stav siete" + }, + "429": { + "title": "Príliš veľa požiadaviek", + "description": "Prekročili sa limity hodnotenia pre tohto klienta, kľúč alebo poskytovateľa.", + "suggestion1": "Počkajte na cooldown a skúste to znova po navrhovanom intervale.", + "suggestion2": "Prepnite na kombináciu s náhradnými poskytovateľmi.", + "suggestion3": "Nastavte profily odolnosti/obmedzenia rýchlosti poskytovateľa v nastaveniach.", + "primaryAction": "Otvorenie nastavení odolnosti", + "secondaryAction": "Otvorené kombinácie" + }, + "500": { + "title": "Interná chyba servera", + "description": "Pri spracovaní vašej žiadosti došlo k neočakávanej chybe na strane servera.", + "suggestion1": "Skúste znova o niekoľko sekúnd.", + "suggestion2": "Skontrolujte telemetriu zdravia a serverové protokoly pre korelované ID požiadaviek.", + "suggestion3": "Ak pretrváva, nahláste problém s časovou pečiatkou a kontextom požiadavky.", + "primaryAction": "Otvorenie zdravotného panela", + "secondaryAction": "Otvorené protokoly" + }, + "502": { + "title": "Zlý brána", + "description": "Integrácia upstream poskytovateľa alebo brány vrátila neplatnú odpoveď.", + "suggestion1": "Skúste to znova s iným poskytovateľom alebo aktívnou kombinovanou trasou.", + "suggestion2": "Skontrolujte poverenia poskytovateľa a dostupnosť modelu.", + "suggestion3": "Skontrolujte výstup prekladača, ak je zapojená konverzia formátu.", + "primaryAction": "Otvorené poskytovatele", + "secondaryAction": "Otvor prekladač" + }, + "503": { + "title": "Služba nedostupná", + "description": "Služba je dočasne nedostupná z dôvodu údržby alebo zhoršených závislostí.", + "suggestion1": "Počkajte chvíľu a skúste to znova.", + "suggestion2": "Skontrolujte oznámenia o údržbe a stav systému.", + "suggestion3": "Použite záložných poskytovateľov, ak je váš pracovný tok citlivý na latenciu.", + "primaryAction": "Podrobnosti o údržbe", + "secondaryAction": "Stav systému" + } + } + }, + "kiroAuthModal": { + "title": "Pripojiť {providerLabel}", + "chooseMethod": "Vyberte si svoju metódu autentifikácie:", + "builderId": "AWS Builder ID", + "builderDescription": "Odporúčané pre väčšinu používateľov. Prihláste sa pomocou účtu AWS prepojeného s {providerLabel}.", + "organization": "Vaša organizácia (AWS IAM Identity Center)", + "organizationDescription": "Použite štartovaciu URL adresu SSO vašej spoločnosti (príklad: {url}).", + "googleAccount": "Účet Google", + "googleDescription": "Prihláste sa pomocou svojho účtu Google.", + "githubAccount": "Účet GitHub", + "githubDescription": "Prihláste sa pomocou svojho účtu GitHub.", + "importToken": "Importovať Token", + "importDescription": "Vložte obnovený token exportovaný z {providerLabel}.", + "apiKey": "API Kľúč", + "apiKeyDescription": "Vložte dlhodobý {providerLabel} / CodeWhisperer API kľúč. Ukladá sa ako bearer poverenie bez tokenu na obnovenie; objavovanie profilu je na základe najlepšieho úsilia.", + "idcStartUrl": "IDC Štartovacia URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL identitného centra AWS IAM vašej organizácie", + "awsRegion": "AWS Región", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS región pre vaše Identity Center (predvolené: us-east-1)", + "continue": "Pokračovať", + "back": "Späť", + "autoDetecting": "Automatické zistenie tokenu...", + "readingCredentials": "Čítanie poverení {providerLabel} z cache AWS SSO", + "tokenNotDetected": "Token {providerLabel} nebol automaticky zistený. Prosím, vložte svoj obnovovací token ručne.", + "refreshToken": "Obnoviť token", + "tokenPlaceholder": "Token bude automaticky vyplnený...", + "importing": "Importovanie...", + "apiKeyPlaceholder": "Vložte svoj {providerLabel} API kľúč...", + "apiKeyStoredDescription": "Uložené šifrované ako dlhodobá nositeľská poverenie. Neexistuje žiadny tok obnovenia.", + "apiKeyRegionDescription": "AWS región pre kľúč (predvolené: us-east-1)", + "validating": "Overovanie...", + "validateAndSaveApiKey": "Overiť a uložiť API kľúč", + "errorAutoDetect": "Nepodarilo sa automaticky zistiť token", + "errorAutoDetectFailed": "Nepodarilo sa automaticky zistiť token", + "errorRefreshTokenRequired": "Prosím, zadajte obnovovací token", + "errorImportFailed": "Import zlyhal", + "errorApiKeyRequired": "Zadajte prosím Kiro API kľúč", + "errorApiKeyImportFailed": "Importovanie API kľúča zlyhalo", + "errorIdcStartUrlRequired": "Zadajte prosím svoju URL adresu pre začiatok IDC" + }, + "kiroSocialOAuthModal": { + "title": "Pripojiť {providerLabel} cez {providerName}", + "errorStartAuthorization": "Nepodarilo sa spustiť autorizáciu", + "errorAuthorizationExpired": "Autorizácia vypršala. Začnite proces prihlásenia znova.", + "errorAuthorizationFailed": "Autorizácia zlyhala", + "initializing": "Inicializácia...", + "settingUp": "Nastavenie autentifikácie {providerName}", + "openIncognito": "Otvorte tento odkaz v okne Inkognito", + "incognitoDescription": "Použite okno Incognito/Private, aby ste predišli konfliktom relácií s existujúcimi účtami.", + "copyLink": "Kopírovať odkaz", + "verificationCode": "Overovací kód", + "waiting": "Čakám na autorizáciu...", + "cancel": "Zrušiť", + "successTitle": "Úspešne pripojené!", + "successMessage": "Váš účet {providerLabel} cez {providerName} bol pripojený.", + "done": "Hotovo", + "errorTitle": "Pripojenie zlyhalo", + "close": "Zavrieť" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Autorizácia zlyhala", + "errorPopupBlocked": "Vyskakovacie okno zablokované — povoľte vyskakovacie okná pre túto stránku, alebo vložte token ručne nižšie.", + "errorPopupClosed": "Okno autorizácie bolo zatvorené pred dokončením.", + "errorAccessTokenRequired": "Je potrebný prístupový token.", + "errorImportFailed": "Import zlyhal", + "title": "Pripojiť Trae SOLO", + "authorizeDescription": "Autorizujte sa cez trae.ai v okne. Okno sa automaticky zatvorí, keď bude token importovaný.", + "authorizeImportant": "Importante: musíte byť prihlásený na trae.ai v tento prehliadač najprv. Stránka autorizácie iba potvrdzuje existujúcu reláciu — nemôže vás prihlásiť. Ak vidíte \"Prihlásenie zlyhalo\", kliknite na \"Otvoriť solo.trae.ai\", prihláste sa, a potom sa vráťte sem.", + "waitingForAuthorization": "Čakám na trae.ai…", + "authorizeWithBrowser": "Autorizovať pomocou prehliadača", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "alebo vložte token ručne", + "manualInstructions": "Prihláste sa na solo.trae.ai, otvorte DevTools → Network, pošlite akúkoľvek správu a skopírujte JWT z Authorization: Cloud-IDE-JWT {tokenPlaceholder} hlavičky požiadavky. Životnosť JWT je ~14 dní. Voliteľné identifikačné polia pochádzajú z common_params v tej istej požiadavke.", + "accessTokenLabel": "Prístupový token (Cloud-IDE-JWT)", + "webId": "Web ID", + "optional": "voliteľné", + "bizUserId": "ID používateľa Biz", + "userUniqueId": "Jedinečné ID používateľa", + "scope": "Rozsah", + "tenant": "Nájomca", + "region": "Oblasť", + "importing": "Importovanie…", + "importToken": "Importovať Token", + "cancel": "Zrušiť" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuovanie...", + "complete": "Dokončiť", + "defaultLabel": "Distribuovať proxy" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "zastaralé", + "risk": "riziko", + "close": "Zavrieť", + "model": "Model", + "key": "Kľúč", + "defaultKey": "predvolené", + "clearConversation": "Vymazať konverzáciu", + "clear": "Vymazať", + "tabs": { + "test": "Test", + "logs": "Záznamy" + }, + "loadingLogs": "Načítavam protokoly…", + "failedToLoadLogs": "Nepodarilo sa načítať protokoly", + "noLogsYet": "Žiadne záznamy ešte", + "noLogsDescription": "Odošlite testovaciu správu z karty Test — protokoly pre tohto poskytovateľa sa tu zobrazia.", + "openFullLogs": "Otvorit úplnú stránku s protokolmi", + "live": "Naživo", + "tailingLast": "sledovanie posledných {count}", + "refreshNow": "Obnoviť teraz", + "refresh": "Obnoviť", + "unknownRequester": "neznámy žiadateľ", + "fields": { + "timestamp": "Časová pečiatka", + "status": "Stav", + "duration": "Trvanie", + "model": "Model", + "requestedModel": "Požadovaný model", + "provider": "Poskytovateľ", + "requester": "Žiadateľ", + "tokens": "Tokeny" + } + }, + "proxyLog": { + "detailAriaLabel": "Detaili protokolu proxy", + "event": "Proxy Udalosť", + "close": "Zavrieť modal s podrobnosťami proxy", + "time": "Čas", + "latency": "Latencia", + "clientIp": "Klientské IP", + "proxy": "Proxy", + "direct": "Priamy", + "type": "Typ", + "level": "Úroveň", + "provider": "Poskytovateľ", + "tlsFingerprint": "TLS Odtlačok", + "directNative": "Priamy", + "targetUrl": "Cieľová URL", + "error": "Chyba", + "configuration": "Konfigurácia proxy" + }, + "requestTimeline": { + "title": "Časová os požiadaviek", + "modes": { + "follow": "Sledovať", + "followDescription": "Os x sa posúva doľava, NOW čiara zostáva na 75%", + "now": "Teraz", + "nowDescription": "Preskoči na aktuálny čas, NOW riadok sa resetuje na stred", + "pan": "Pan", + "panDescription": "Potiahnite na preskúmanie, pozadie je zamrznuté" + }, + "reset": "Obnoviť", + "started": "Začaté", + "ended": "Ukončené", + "duration": "Trvanie", + "status": "Stav", + "provider": "Poskytovateľ", + "tokens": "Tokeny", + "active": "Aktívny", + "other": "Iné", + "tenMinutes": "10min", + "hour": "hodina", + "day": "deň", + "unknownModel": "neznámy", + "pending": "čakajúce" + }, + "metadata": { + "compressionTitle": "Komprimácia", + "compressionDescription": "Nastavte nastavenia kompresie kontextu na zníženie používania tokenov a nákladov.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy koncové body pre vašu AI infraštruktúru", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Monitor LLM volania + debugovať HTTPS prenos akéhokoľvek aplikácie" + }, + "conductor": { + "title": "Conductor — flotila CLI-agentov", + "subtitle": "OmniConductor hub: bežci, fronta úloh a rady, živé", + "runners": "Bežci", + "tasks": "Úlohy", + "colName": "Názov", + "colClis": "CLIs", + "colStatus": "Stav", + "colTask": "Úloha", + "colMode": "Režim", + "colRunner": "Bežec", + "colSummary": "Zhrnutie", + "online": "online", + "offline": "offline", + "draining": "odvodňovanie", + "hubOffline": "Conductor hub je offline alebo nie je nakonfigurovaný (CONDUCTOR_HUB_URL) — nezobrazuje nič okrem zastaraných údajov.", + "noRunners": "Žiadni registrovaní bežci", + "noTasks": "Žiadne úlohy ešte", + "detailTitle": "Detail úlohy", + "prompt": "Výzva", + "branch": "Pobočka", + "fetchHint": "Získajte výsledok pomocou: git fetch origin {branch}", + "council": "Rada", + "candidates": "Kandidáti", + "cancel": "Zrušiť úlohu", + "cancelConfirmTitle": "Zrušiť túto úlohu?", + "cancelConfirmMessage": "Centrum zruší vykonávanie na bežci. Toto nie je možné zvrátiť.", + "cancelFailed": "Hub odmietol zrušenie", + "close": "Zavrieť", + "error": "Chyba", + "faroTitle": "Faro — hovorca flotily", + "faroSubtitle": "Chat a hlas, zakotvené v skutočných udalostiach flotily. Deštruktívne príkazy vždy žiadajú o potvrdenie.", + "faroEmpty": "Opýtajte sa na flotilu — napr. \"ako sa má flotila?\"", + "faroPending": "Faro žiada o potvrdenie", + "faroPlaceholder": "porozprávaj sa s Farom…", + "faroSend": "odoslať", + "faroOffline": "Faro (hovorca) je offline", + "yes": "Áno", + "no": "Nie", + "pushToTalk": "Držte na rozprávanie", + "speakAnswers": "hovor odpovede", + "voiceModels": "Hlasové modely (poskytovateľ/model tohto OmniRoute)", + "voiceIdle": "hovoriť", + "voiceListening": "počúvanie…", + "voiceThinking": "premýšľam…", + "voiceSpeaking": "hovorím…", + "sttFailed": "Prepis zlyhal (skontrolujte model/poskytovateľa STT)", + "ttsFailed": "Zlyhanie syntézy reči (skontrolujte model/poskytovateľa TTS)", + "micDenied": "Mikrofón nie je k dispozícii alebo povolenie zamietnuté" + }, + "cliproxyProviderExposure": { + "title": "Expozícia poskytovateľa", + "description": "Expose CLIProxyAPI modely ako cieľ smerovania pod prefixom cliproxyapi/.", + "label": "Expose as cliproxyapi/...", + "hint": "Keď je povolené, objavené modely sa zobrazia v selektoroch poskytovateľa naprieč OmniRoute.", + "updateFailed": "Nepodarilo sa aktualizovať (HTTP {status})", + "networkError": "Chyba siete — nepodarilo sa aktualizovať nastavenie expozície poskytovateľa" + } } - diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 7cfc15bdc2..1ca819cb2e 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -172,6 +172,18 @@ "unselectAll": "Avmarkera alla", "visibleModels": "synliga", "selectAllConfirm": "Lägg till {count} modeller i den här kombinationen?", + "testSelectedProviders": "Testleverantörer", + "testingSelectedProviders": "Testar {done}/{total}...", + "noProvidersSelectedToTest": "Kontrollera minst en leverantör nedan först", + "noModelsToTestForProviders": "Inga modeller att testa för de valda leverantörerna", + "testSelectedProvidersResults": "{ok} av {total} modeller fungerar", + "selectWorkingModels": "Lägg till arbete", + "unselectWorkingModels": "Avmarkera arbete", + "noWorkingModelsToSelect": "Inga fungerande modeller kvar att lägga till", + "providerTestHint": "Tips: kontrollera en leverantör → Testa → Lägg till fungerande. Klicka igen för att avmarkera.", + "selectAllProviders": "Kontrollera alla leverantörer", + "clearProviderSelection": "Avmarkera leverantörer", + "providersSelectedCount": "{count} leverantörer kontrollerade", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Storlek", + "toggleNoAuthProvider": "Växla ingen autentisering leverantör", + "loadingModels": "Laddar modeller…", + "selectAModel": "Välj en modell", + "degraded": "Försämrad", + "zeroConfigBannerTitle": "Kör i zero-config-läge", + "zeroConfigBannerBody": "OmniRoute auto-genererade säkra krypteringsnycklar vid första lanseringen. De sparas i {dataDir}. Ingen åtgärd krävs — dina data är krypterade och säkra. För att använda anpassade nycklar, lägg till JWT_SECRET och STORAGE_ENCRYPTION_KEY i den filen.", + "batchRelativeTimeIn": "i {value}", + "batchRelativeTimeAgo": "{value} sedan", + "batchDetailsTitle": "Batchdetaljer", + "batchProgress": "Framsteg", + "batchCompletedCount": "{count} slutförda", + "batchFailedCount": "{count} misslyckades", + "batchPendingCount": "{count} väntande", + "batchTimeline": "Tidslinje", + "batchTimelineInProgress": "Pågående", + "batchTimelineFinalizing": "Avslutar", + "batchTimelineCompleted": "Slutförd", + "batchTimelineFailed": "Misslyckades", + "batchTimelineExpires": "Utgår", + "batchTimelineExpired": "Utgått", + "batchTimelineCancelling": "Avbryter", + "batchTimelineCancelled": "Avbruten", + "batchTokenUsage": "Tokenanvändning", + "batchMetadata": "Metadata", + "batchFileContents": "Filinnehåll", + "batchFileUsedByCount": "Används av {count, plural, one {# batch} other {# batches}}", + "batchFilePreview": "Förhandsgranskning", + "batchFilePreviewTruncated": "Visar de första {shown} raderna ({total} totalt rader)", + "batchFileDownloadFull": "Ladda Ner Hela Filen" }, "disabled": "Inaktiverad", "featureFlagOmnirouteEmergencyFallbackDescription": "Dirigera anrop med förbrukad budget till den kostnadsfria reservleverantören/-modellen för nödfall.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Avskiljare", "discovery": "Upptäckt", "discoverySubtitle": "Skanna leverantörer efter fri åtkomst", + "conductor": "Ledare", + "conductorSubtitle": "CLI-agent flotta", "resilienceConnections": "Anslutningsresiliens", "resilienceConnectionsSubtitle": "Cooldown, brytare, låsstatus", "settingsModalityBridge": "Modalitetsbro", - "settingsModalityBridgeSubtitle": "Bild/ljud → textfallback för textendastmodeller" + "settingsModalityBridgeSubtitle": "Bild/ljud → textfallback för textendastmodeller", + "commandPalette": { + "title": "Kommandopalett", + "searchPlaceholder": "Sök sidor, inställningar, verktyg...", + "clearSearch": "Rensa sökning", + "noResults": "Inga resultat", + "navigate": "navigera", + "open": "öppna", + "close": "stäng" + }, + "noResults": "Inga resultat" }, "webhooks": { "title": "Webhooks", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Uppdatering av inställningar misslyckades", "sync.token.created": "Synkroniseringstoken skapad", "sync.token.revoked": "Synkroniseringstoken återkallad" - } + }, + "mcpMetricCalls24h": "Samtal (24h)", + "mcpMetricSuccessRate": "Framgångsfrekvens", + "mcpMetricAvgDuration": "Genomsnittlig varaktighet", + "mcpMetricTopTool": "Toppverktyg" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "En ny version finns tillgänglig. Klicka för att uppdatera.", "updateStarted": "Uppdatering startade...", "reloadingPageAutomatically": "Laddar om sidan automatiskt...", - "providerTopology": "Leverantörstopologi" + "providerTopology": "Leverantörstopologi", + "downloadDmg": "Ladda ner DMG (macOS)", + "downloadDmgDescription": "En ny version av OmniRoute-skrivbordsappen är tillgänglig. Vänligen ladda ner och installera macOS DMG-installationsprogrammet för att uppdatera (nuvarande: v{version}).", + "downloadExe": "Ladda ner EXE (Windows)", + "downloadExeDescription": "En ny version av OmniRoute-skrivbordsappen är tillgänglig. Vänligen ladda ner och installera Windows EXE-installationsprogrammet för att uppdatera (nuvarande: v{version}).", + "downloadAppImage": "Ladda ner AppImage (Linux)", + "downloadAppImageDescription": "En ny version av OmniRoute-skrivbordsappen är tillgänglig. Vänligen ladda ner Linux AppImage-paketet för att uppdatera (nuvarande: v{version}).", + "downloadUpdate": "Ladda Ner Uppdatering", + "downloadUpdateDescription": "En ny version av OmniRoute-skrivbordsappen är tillgänglig. Vänligen ladda ner det respektive appformatet för ditt system för att uppdatera (nuvarande: v{version}).", + "updateQueued": "Köad uppdatering till v{version}.", + "updateDockerRebuilding": "Docker-bilden byggs om i bakgrunden.", + "updateWaitingRestart": "Väntar på att OmniRoute ska starta om med den nya versionen.", + "updateInstalling": "Installerar v{version}.", + "updateRunning": "OmniRoute kör nu v{version}.", + "updateCompleted": "OmniRoute uppdaterad till v{version}.", + "updateDockerStillRebuilding": "Docker-bilden byggs fortfarande om för v{version}.", + "updateInstallingBackground": "Installerar v{version} i bakgrunden.", + "updateWaitingVersion": "Väntar på att OmniRoute ska återkomma på v{version}.", + "updateDockerStillInProgress": "Docker ombyggnad pågår fortfarande.", + "updateRestarting": "Tjänstomstart pågår. Väntar på att OmniRoute ska komma tillbaka online...", + "updateTimeout": "Uppdatering påbörjad, men v{version} blev inte tillgänglig innan tidsgränsen. Uppdatera sidan eller kontrollera serverloggar.", + "updateTimedOut": "Uppdatering till v{version} tog för lång tid.", + "updateStartFailed": "Misslyckades med att starta uppdateringen.", + "noResponseStream": "Ingen svarström mottagen.", + "updateComplete": "Uppdatering klar!", + "updateFailed": "Uppdatering misslyckades.", + "updateNetworkError": "Nätverksfel — anslutningen förlorades under uppdateringen.", + "stepInstallPackage": "Installera Paket", + "stepRebuildNativeModules": "Återuppbyggnad av inbyggda moduler", + "stepRestartService": "Starta Tjänst", + "stepComplete": "Komplett", + "stepError": "Fel", + "updateCompleteTitle": "Uppdatering Slutförd!", + "updateFailedTitle": "Uppdatering Misslyckades", + "updatingTitle": "Uppdaterar OmniRoute...", + "reloadNotice": "Sidan kommer att laddas om automatiskt om några sekunder.", + "retryNotice": "Vänligen försök igen eller uppdatera manuellt via CLI.", + "restartNotice": "Stäng inte den här sidan. Systemet kommer att starta om automatiskt.", + "reloadNow": "Ladda om nu", + "closeUpdate": "Stäng", + "retryUpdate": "Försök igen", + "updateAvailableTitle": "Uppdatering Tillgänglig: v{version}{desktop}", + "desktopAppLabel": "(Skrivbordsapp)", + "checkingForUpdates": "Kontrollerar efter uppdateringar...", + "versionAvailableForDownload": "Version v{version} är tillgänglig för nedladdning.", + "downloadingUpdate": "Laddar ner uppdatering... {percent}% klar.", + "updateDownloaded": "Uppdatering nedladdad framgångsrikt! Klicka på Starta om & Installera för att tillämpa.", + "autoUpdateFailed": "Automatisk uppdatering misslyckades: {reason}.", + "unknownUpdateError": "Okänt fel", + "versionAvailableDesktop": "Version v{version} är tillgänglig för skrivbordsappen.", + "manualUpdateRequired": "Manuell uppdatering krävs för den här installationstypen.", + "restartAndInstall": "Starta om & Installera", + "checkForUpdate": "Kontrollera efter uppdatering", + "manualUpdate": "Manuell Uppdatering", + "directDownloadHint": "Eller ladda ner det respektive installationsformatet direkt:", + "releaseNotes": "Versionsinformation", + "readMore": "Läs Mer", + "noAuthLabel": "Ingen autentisering" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Härledd från sparade anropsloggar kring denna begäran", "routeRecommendations": "Rekommendationer", "routeLimitations": "Begränsningar", - "routeNoKnownLimitations": "Inga kända begränsningar för denna förklaring." + "routeNoKnownLimitations": "Inga kända begränsningar för denna förklaring.", + "searchAnalyticsLoading": "Laddar sökanalys…", + "searchAnalyticsNoData": "Inga sökdata tillgängliga än.", + "searchAnalyticsNoDataDescription": "Sökförfrågningar kommer att visas här efter den första sökningen via /v1/search.", + "searchAnalyticsToday": "{count} idag", + "searchAnalyticsCachedRequests": "{count} cachade förfrågningar", + "searchAnalyticsApiCosts": "sök API-kostnader", + "searchAnalyticsErrors": "{count} fel", + "searchAnalyticsNoErrors": "Inga fel", + "searchAnalyticsProviderBreakdown": "Leverantörsöversikt", + "searchAnalyticsQueries": "frågor", + "searchAnalyticsEmptyDescription": "Använd POST /v1/search för att börja styra webb sökningar.", + "searchAnalyticsFreeTier": "Kostnadsfri nivå tillgänglig: Serper (2 500/månad), Brave (2 000/månad), Exa (1 000/månad), Tavily (1 000/månad) — totalt 6 500+ kostnadsfria sökningar/månad med automatisk failover.", + "autoRoutingNoDataAvailable": "Inga auto-routing-analyser tillgängliga. Gör förfrågningar med auto/-prefixet för att se mätvärden.", + "defaultVariantLabel": "Standard", + "freeTierAvailable": "Gratis nivå tillgänglig" }, "apiManager": { "title": "API-nycklar", @@ -2348,7 +2478,9 @@ "providerCount": "{count} leverantörer", "imageToTextBridgeAvailable": "Modality Bridge kan nu beskriva bilder för textbaserade modeller. Inline-lekplatsen kommer att vara tillgänglig när /api/v1/images/understanding har implementerats.", "imageToTextBridgeCta": "Konfigurera Image→Text-bron i Inställningar för Modality Bridge", - "sttBridgeCta": "Konfigurera tal→text-bryggan i inställningarna för Modality Bridge" + "sttBridgeCta": "Konfigurera tal→text-bryggan i inställningarna för Modality Bridge", + "existingConnection": "Befintlig anslutning", + "openrouterSttDescription": "OpenRouter tal-till-text modeller använder din konfigurerade OpenRouter-anslutning. Ingen separat autentisering krävs." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Klistra in i:", "copilotReloadInstruction": "Ladda sedan om VS Code och ange API-nyckeln i inmatningsfältet.", "wireApiChatCompletions": "Chattavslut (/chat/kompletteringar)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Åtgärden misslyckades", + "cliproxyapiActionSucceeded": "Åtgärden lyckades", + "cliproxyapiCheckUpdates": "Kontrollera uppdateringar", + "cliproxyapiDescription": "Uppströms proxy-fallback (Go-baserad OAuth)", + "cliproxyapiHealth": "Hälsa", + "cliproxyapiHealthy": "Hälsosam", + "cliproxyapiInstall": "Installera", + "cliproxyapiNotInstalledValue": "Inte installerad", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "Begäran misslyckades", + "cliproxyapiRestart": "Starta om", + "cliproxyapiStart": "Starta", + "cliproxyapiStatusError": "Fel", + "cliproxyapiStatusInstalled": "Installerad", + "cliproxyapiStatusNotInstalled": "Inte installerad", + "cliproxyapiStatusRunning": "Körning", + "cliproxyapiStatusStopped": "Stoppad", + "cliproxyapiStop": "Stopp", + "cliproxyapiUnhealthy": "Ohälsosam", + "cliproxyapiUnknown": "Okänd", + "cliproxyapiUpdate": "Uppdatera", + "cliproxyapiUpdateAvailable": "Uppdatering tillgänglig: v{current} → v{latest}", + "cliproxyapiVersion": "Version" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "inget pris", + "fallbackOnlyOnQuotaExhaustion": "Endast gå vidare vid kvotutnyttjande", + "fallbackOnlyOnQuotaExhaustionShort": "kvot-endast återställning", "warningRoundRobinSingleModel": "Round-robin är mest användbar med minst 2 modeller.", "warningCostOptimizedPartialPricing": "Endast {priced} av {total} modeller har prissättning. Rutning kan vara delvis kostnadsmedveten.", "warningCostOptimizedNoPricing": "Inga prisuppgifter hittades för denna kombination. Kostnadsoptimerad kan väga oväntat.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Lägespaket och viktning stannar här; brytarens körtidsstatus finns på sidan Hälsa.", "emailVisibilityHint": "Konto-e-postadresser här följer det globala integritetsreglaget.", "emailVisibilityTooltip": "Använd ögonikonen för att visa eller dölja konto-e-postadresser globalt över kombor, leverantörer och kvotskärmar.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Steg för steg (Leverantör → Modell)", + "builderModeGlobal": "Global modell sökning (Anpassad kombination)", + "builderGlobalSearchPlaceholder": "Sök modeller över alla leverantörer (t.ex. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Lägg till allt", + "builderGlobalShortcuts": "Genvägar:", + "builderGlobalNoResults": "Ingen modell hittades för \"{query}\".", + "builderGlobalProviderLabel": "Leverantör:", + "builderGlobalAccountCount": "{count, plural, one {# konto} other {# konton}}", + "builderGlobalAdded": "Tillagd", + "builderGlobalAdd": "Lägg till", "manualModel": "Manuell modell", "manualModelInvalid": "Ange en modell som provider/model.", "manualModelUnknownProvider": "Okänt leverantörsprefix.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Sessions Tillgänglighet", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Sessionslåsning av", "kimiPresetTitle": "Kimi Coding-förinställning", "kimiPresetDescription": "Kimi K3 som primär modell (Moonshot API), med automatisk reservlösning till dina Kimi Code-anslutningar (kimi-coding, kimi-web) när de är konfigurerade.", - "kimiPresetCta": "Lägg till förinställning" + "kimiPresetCta": "Lägg till förinställning", + "intelligentComboCount": "{count, plural, one {# intelligent kombination} other {# intelligenta kombinationer}}", + "providersInScope": "{count, plural, one {# leverantör i omfång} other {# leverantörer i omfång}}", + "savingModePack": "Sparar {pack}…", + "errorTitle": "Misslyckades med att ladda kombinationer", + "errorDescription": "Vi kunde inte ladda combo-data just nu. Kontrollera din anslutning och försök igen.", + "errorId": "Fel-ID: {id}", + "errorRetry": "Försök igen", + "comboLabel": "Kombination" }, "costs": { "title": "Kostnader", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV-URL", "obsidianUsername": "Användarnamn", "obsidianPassword": "Lösenord", - "obsidianTailscaleHint": "Använd din Tailscale-IP istället för localhost om du ansluter från mobilen. Båda enheterna måste vara på samma Tailscale-nätverk." + "obsidianTailscaleHint": "Använd din Tailscale-IP istället för localhost om du ansluter från mobilen. Båda enheterna måste vara på samma Tailscale-nätverk.", + "cloudSyncNotConfigured": "Molnsynkronisering är inte konfigurerad på denna instans.", + "notionConnect": "Anslut", + "notionConnectFailed": "Misslyckades med att ansluta", + "notionConnected": "Ansluten", + "notionConnectionFailed": "Anslutning misslyckades", + "notionDescription": "Sök, läs, fråga och skriv till Notion genom routade AI-modeller", + "notionDisconnect": "Koppla bort", + "notionDisconnectFailed": "Misslyckades med att koppla bort", + "notionEnterToken": "Vänligen ange en Notion-integrations-token", + "notionIntegrationHelp": "Skapa en Intern Integration på", + "notionIntegrationToken": "Notion Interna Integrations Token", + "notionNotConnected": "Inte ansluten", + "notionTokenConfigured": "Token konfigurerad. Notion-verktyg är tillgängliga via MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Leverantör / Modell", "noRemoteProviders": "Inga leverantörer med konfigurerad API-nyckel", "selectProviderModel": "Välj en modell", + "customBaseUrlLabel": "Anpassad bas-URL (valfritt)", + "customModelIdLabel": "Anpassad modell-ID (valfritt)", + "customEndpointHelp": "Använd en OpenAI-kompatibel /embeddings slutpunkt. Lokala slutpunkter är tillåtna; molnmetadata mål är blockerade.", + "customEndpointSave": "Använd anpassad slutpunkt", + "customEndpointInvalid": "Ange både en giltig HTTP(S) bas-URL och en modell-ID, eller lämna båda fälten tomma.", + "customEndpointSaveFailed": "Den anpassade inbäddningsslutpunkten kunde inte sparas.", "staticEnabledLabel": "Aktivera Static Potion", "staticEnabledDesc": "Ladda ner och använd potion-base-8M-modellen lokalt", "transformersEnabledLabel": "Aktivera Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Rensar...", "cleanNow": "Rensa nu", "cleanupSuccess": "{count} punkt(er) borttagna", - "cleanupFailed": "Rensning misslyckades" + "cleanupFailed": "Rensning misslyckades", + "hostLabel": "Värd", + "collectionLabel": "Samling" }, "rerank": { "enableLabel": "Aktivera Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-nivå reservdiagram", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Ställ in gratisleverantörer", + "description": "Valfritt aktivera valda leverantörer utan registrering. Granska varje leverantörs meddelande och webbplats innan du fortsätter; tillgänglighet och hastighetsbegränsningar kontrolleras av tredje parter.", + "loading": "Laddar gratisleverantörer...", + "loadFailed": "Kunde inte ladda gratisleverantörer.", + "alreadyConfigured": "Alla berättigade gratisleverantörer är redan konfigurerade.", + "reviewProviderSite": "Granska leverantörens webbplats och villkor", + "confirmation": "Jag har granskat dessa tredjepartsleverantörer och vill att OmniRoute ska skapa de valda anslutningarna.", + "setupSelected": "Ställ in valda leverantörer", + "settingUp": "Sätter upp...", + "setupFailed": "Kunde inte konfigurera de valda leverantörerna. Inget befintligt ändrades.", + "retryFailed": "Försök igen med misslyckade leverantörer", + "orUseApiKey": "eller anslut med en API-nyckel", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "skapad", + "skipped": "redan konfigurerad", + "failed": "misslyckades" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Obligatoriskt. Providers API-basadress.", "iconUrlLabel": "Ikon-URL", "iconUrlHint": "Valfritt. Bild-URL som visas som denna leverantörs ikon.", + "iconUrlInvalid": "Ogiltig ikon-URL. Använd en http(s):// eller data:image/*;base64-URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Kompatibel (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Sessionen är redan aktuell", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Tillämpa autentisering", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Klistra in API-nyckel…", "zedSaving": "Sparar…", "zedImportAction": "Importera", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Aktivera automatisk förnyelse av Cursor-sessionen", + "cursorAgentNudgeBody": "Installera cursor-agent för automatisk sessionsförnyelse — utan den behöver Cursor-anslutningar periodisk manuell återanslutning ungefär var 24:e timme.", + "cursorAgentNudgeDismiss": "Avvisa", "zedManualImportFailed": "Manuell import misslyckades", "zedManualImportSuccess": "Importerade {provider}-token från Zed", "grokImportTitle": "Importera Grok Build-autentisering", @@ -5878,7 +6066,6 @@ "friendliai": "Gratisnivå för serverlös inferens — inget kreditkort krävs", "gemini": "Gratis för alltid: 1 500 anrop/dag för Gemini 2.5 Flash — inget kreditkort, hämta nyckel på aistudio.google.com", "gigachat": "Anslut GigaChat (Sber) med en API-nyckel.", - "github-models": "Skapa en GitHub PAT med omfånget 'models: read' på github.com/settings/tokens", "gitlab": "Personlig åtkomsttoken för GitLab för det offentliga Code Suggestions-API:et. Konfigurera en egenvärd bas-URL när du inte använder gitlab.com.", "gitlawb-gmi": "Hämta din API-nyckel från instrumentpanelen för Gitlawb Opengateway.", "gitlawb": "Hämta din API-nyckel från instrumentpanelen för Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Anslut Kimi Coding med det befintliga OAuth-flödet.", "kiro": "Gratisnivå: 50 krediter/månad (~25K–100K tokens). ⚠️ Kiros användarvillkor förbjuder användning av tredjepartsproxy/harness.", "codex": "Anslut OpenAI Codex med det befintliga OAuth-flödet.", - "qwen": "Anslut Qwen Code med det befintliga OAuth-flödet." + "qwen": "Anslut Qwen Code med det befintliga OAuth-flödet.", + "github-models": "Skapa en GitHub PAT med omfånget 'models: read' på github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} accepterar leverantörsbaserade modell-ID:n. Importera från /models eller lägg till anpassade ID:n för routing.", "bedrockModelsDescription": "Amazon Bedrock-modeller omfattas av AWS-regionen. Importera från /models eller lägg till Bedrock-modell-ID:n aktiverade i den valda regionen.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "När alla konfigurerade anslutningar är uttömda (kvot, krediter eller utgång), använd tillfälligt denna leverantörs nyckellösa nivå. Stäng av för att hoppa över denna leverantör istället för att skicka anonyma förfrågningar — rekommenderas när den nyckellösa nivån avvisar dem (401).", "anonymousFallbackEnabled": "Anonym fallback aktiverad för {provider}", "anonymousFallbackDisabled": "Anonym fallback inaktiverad för {provider} — uttömda anslutningar kommer att hoppa över denna leverantör", - "anonymousFallbackUpdateFailed": "Misslyckades med att uppdatera anonym fallback-inställning" + "anonymousFallbackUpdateFailed": "Misslyckades med att uppdatera anonym fallback-inställning", + "batchDeleteFailed": "Batch radering misslyckades", + "batchDeleteNetworkError": "Nätverksfel under batchborttagning", + "batchUpdateFailed": "Batchuppdatering misslyckades", + "batchUpdateNetworkError": "Nätverksfel under batchuppdatering", + "categoryAudio": "Ljud", + "categoryCloudAgent": "Molnagent", + "categoryIde": "IDE", + "categoryLocal": "Lokal", + "categorySearch": "Sök", + "categoryWebCookie": "Webkaka", + "claudeExtraUsageBlockingDisabled": "Claude extra-användning blockering inaktiverad (extra användning är tillåten)", + "claudeExtraUsageBlockingEnabled": "Claude extra-användning blockering aktiverad (extra användning kommer att blockeras)", + "claudeRoutingPreferenceDisabled": "Oprefixed Claude-modeller föredrar inte längre Claude Code", + "claudeRoutingPreferenceEnabled": "Oprefixerade Claude-modeller föredrar nu Claude Code", + "clearMediaFilter": "Rensa", + "cliproxyRoutingDisabled": "Förfrågningar använder nu native OmniRoute (direkt)", + "cliproxyRoutingEnabled": "Förfrågningar routas nu genom CLIProxyAPI (djupare emulering)", + "codexLimitPolicyUpdated": "Codex begränsningspolicy uppdaterad", + "codexServiceModeUpdated": "Codex tjänstläge uppdaterat", + "codexServiceTierActive": "Codex {tier} tjänstenivå är aktiv", + "codexTierFastLabel": "Snabb", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Misslyckades med att tillämpa kommandokoden auth", + "commandCodeApplyingApproval": "Webbläsare godkänd, tillämpar…", + "commandCodeApplyingKey": "Tillämpa webbläsar-godkänd nyckel…", + "commandCodeApprovalInstructions": "Öppna auth-URL:en, godkänn åtkomst och klistra sedan in den returnerade nyckeln/JSON:en/URL:en nedan…", + "commandCodeAuthExpired": "Kommandokod autentisering har gått ut", + "commandCodeConnected": "Kommandokod ansluten", + "commandCodeConnectionAdded": "Kommandokodanslutning tillagd", + "commandCodeLinkExpired": "Kommandokodens länk har gått ut", + "commandCodeOpeningStudio": "Öppnar Command Code Studio…", + "commandCodePopupBlocked": "Popup blockerad. Vänligen tillåt popup-fönster och försök igen med Command Code Connect.", + "commandCodeStartFailed": "Misslyckades med att starta Command Code auth", + "connectionDeleted": "Anslutning raderad", + "connectionFallback": "anslutning", + "coolingConnectionsDescription": "Dessa anslutningar returnerade en 429 (rate-limit) på sin senaste begäran. OmniRoute kommer att hoppa över dem tills timern går ut — ingen manuell inaktivering krävs.", + "coolingConnectionsTitle": "För närvarande kylning ({count})", + "failedDeleteAlias": "Misslyckades med att ta bort aliaset", + "failedDeleteConnection": "Misslyckades med att ta bort anslutning", + "failedDistributeProxies": "Misslyckades med att distribuera proxyer.", + "failedSaveModelEndpointSettings": "Misslyckades med att spara inställningar för modellens slutpunkt", + "failedUpdateClaudeExtraUsagePolicy": "Misslyckades med att uppdatera Claude extra-användningspolicy", + "failedUpdateClaudeRoutingPreference": "Misslyckades med att uppdatera Claude Code-routingpreferens", + "failedUpdateCliproxyRouting": "Misslyckades med att uppdatera CLIProxyAPI-routing", + "failedUpdateCodexLimitPolicy": "Misslyckades med att uppdatera Codex gränspolicy", + "failedUpdateCodexServiceMode": "Misslyckades med att uppdatera Codex-tjänstläge", + "filterByMedia": "Media", + "freeBadge": "Gratis", + "kimiCodeApiKeyLabel": "Kimi Code API Nyckel", + "modelTestFailed": "Modelltestet misslyckades", + "modelTestNetworkError": "Nätverksfel vid testning av modell", + "networkError": "Nätverksfel", + "networkErrorDeletingAlias": "Nätverksfel vid borttagning av alias", + "networkErrorSettingAlias": "Nätverksfel vid inställning av alias", + "noProvidersMatch": "Inga leverantörer matchar din sökning.", + "noSavedProxies": "Inga sparade proxyer hittades. Lägg till proxyer i Inställningar → Proxy först.", + "pageLoadErrorDescription": "Vi kunde inte ladda leverantörsdata just nu. Kontrollera din anslutning och försök igen.", + "pageLoadErrorId": "Fel-ID: {id}", + "pageLoadErrorRetry": "Försök igen", + "pageLoadErrorTitle": "Misslyckades med att ladda leverantörer", + "playgroundTitle": "Lekplats", + "providerDetailConnectionFlexActive": "Codex flex-tjänstenivå är aktiv för denna anslutning", + "providerDetailConnectionPriorityActive": "Codex prioriterad tjänst nivå är aktiv för denna anslutning", + "providerDetailGlobalFlexActive": "Global Codex flex-tjänstnivå är aktiv", + "providerDetailGlobalPriorityActive": "Global Codex prioriterad tjänst nivå är aktiv", + "proxiesDistributed": "Distribuerad {assigned} proxy-tilldelning(ar) över {tagLabel}{total} anslutning(ar).", + "rerankEndpoint": "Omrankning", + "savedModelEndpointSettings": "Inställningar för sparad modellslutpunkt", + "searchByModelAria": "Sök efter modell", + "selectSupportedEndpoint": "Välj minst en stödd slutpunkt", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Inställningar", @@ -6460,7 +6719,24 @@ "loadFailed": "Det gick inte att läsa in prenumerationslistan", "toggleFailed": "Det gick inte att växla strömbrytaren", "refreshFailed": "Det gick inte att uppdatera", - "deleteFailed": "Det gick inte att ta bort" + "deleteFailed": "Det gick inte att ta bort", + "add": "Lägg till", + "cancel": "Avbryt", + "configure": "Konfigurera", + "copyEndpoint": "Kopiera Endpoint", + "coreEndpointHint": "Kärn Endpoint Tips", + "coreNodesHint": "Kärnnoder Tips", + "create": "Skapa", + "deleteConfirm": "Ta Bort Bekräftelse", + "empty": "Tomt", + "globalModeDescription": "Global Läge Beskrivning", + "localCoreHint": "Lokal Kärnledtråd", + "nodeSummary": "Nodsammanfattning", + "providerRequired": "Leverantör krävs", + "providerRouting": "Leverantörsrouting", + "refresh": "Uppdatera", + "refreshInterval": "Uppdateringsintervall", + "ruleModeDescription": "Regelmodusbeskrivning" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Kör en automatisk vision-till-text-fallback innan bildförfrågningar dirigeras till modeller som endast stöder text.", "visionBridgeEnabledLabel": "Aktiverad", "visionBridgeEnabledDesc": "Växla bryggan före anrop som ersätter bilddelar med extraherad text.", + "visionBridgeRerouteTextOnlyLabel": "Omdirigera textbaserade modeller", + "visionBridgeRerouteTextOnlyDesc": "Skicka den kompletta begäran, inklusive bilder, till bro-modellen när den valda modellen inte har något bildinmatning.", "visionBridgeModel": "Bromodell", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Alla OmniRoute-modell-ID:n som stöder vision kan användas här.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-nyckeln saknar manage-scope.", "BYPASS_PREFIX_NOT_ALLOWED": "Ett eller flera prefix är riktade mot spawn-kapabla rutter och kan inte förbikopplas.", "GENERIC": "Misslyckades med att uppdatera auktoriseringsinställningar." - } + }, + "remove": "Ta bort" }, "resilienceBaseCooldownLabel": "Baskylning", "scopeLabel": "Omfattning", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Testar ljud…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} klipp transkriberade av {model}", "modalityBridgeAudioTestNoop": "Audio Bridge aktiverades inte (målet kan stödja ljud, ingen STT-leverantör är ansluten, eller bron är inaktiverad)", - "modalityBridgeAudioTestError": "Ljudtestet misslyckades: {message}" + "modalityBridgeAudioTestError": "Ljudtestet misslyckades: {message}", + "modelRoutingDescriptionPlaceholder": "Routa Opus-modeller till frontier-kombination", + "cliproxyapiFallbackCodes": "Cliproxyapi Fallback Koder", + "cliproxyapiFallbackDescription": "Cliproxyapi Återställningsbeskrivning", + "cliproxyapiHealthLabel": "Cliproxyapi Hälsomärkning", + "cliproxyapiImportFailed": "Cliproxyapi Import Misslyckades", + "cliproxyapiImportResult": "Cliproxyapi Importresultat", + "cliproxyapiInvalidUrl": "Cliproxyapi Ogiltig URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Livscykelmeddelande Efter", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Livscykelmeddelande Före", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Livscykelmeddelande Länk", + "cliproxyapiPortLabel": "Cliproxyapi Port Etikett", + "cliproxyapiStatusLabel": "Cliproxyapi Status Etikett", + "cliproxyapiVersionLabel": "Cliproxyapi Versionsetikett", + "collection": "Samling", + "errorPage": { + "description": "Vi kunde inte ladda inställningarna just nu. Vänligen försök igen om några sekunder.", + "errorId": "Fel-ID: {id}", + "retry": "Försök igen", + "title": "Misslyckades med att ladda inställningar" + }, + "host": "Värd", + "notInstalled": "Inte installerad", + "oneproxyActions": "Oneproxy Åtgärder", + "oneproxyActive": "Oneproxy Aktiv", + "oneproxyAnonymity": "Oneproxy Anonymitet", + "oneproxyCountry": "Oneproxy Land", + "oneproxyDelete": "Oneproxy Ta Bort", + "oneproxyEmpty": "Oneproxy Tomt", + "oneproxyHost": "Oneproxy Värd", + "oneproxyLatency": "Oneproxy Latens", + "oneproxyProtocol": "Oneproxy-protokoll", + "oneproxyQuality": "Oneproxy Kvalitet", + "oneproxySyncFailed": "Synkronisering misslyckades: {error}", + "oneproxySyncSuccess": "Synkroniserade {total} proxies ({added} nya, {updated} uppdaterade)", + "proxyDocumentationSocks5DescAfter": "Proxy Dokumentation Socks5 Beskrivning Efter", + "proxyFreePoolAddProxy": "Proxy Fri Pool Lägg Till Proxy", + "proxyFreePoolAdding": "Proxy Fri Pool Lägger Till", + "proxyFreePoolSelectProxy": "Proxy Fri Pool Välj Proxy", + "proxyStatusActive": "Proxystatus Aktiv", + "proxyStatusInactive": "Proxystatus Inaktiv", + "routingAddEntry": "Lägg till post", + "settingSaveFailed": "Inställning Spara Misslyckades", + "settingSaved": "Inställning Sparad", + "skillsmpApiKeyHintAfter": ". Begärningsgräns: {limit} begärningar/dag.", + "skillsmpApiKeyHintBefore": "Hämta din API-nyckel från", + "syncFailed": "Synkronisering misslyckades", + "unhealthy": "Ohälsosam", + "oneproxyDescription": "Hämta och rotera gratis validerade proxies från 1proxy-communityplattformen", + "oneproxySyncing": "Synkroniserar...", + "oneproxySyncNow": "Synkronisera Nu", + "oneproxyClearAll": "Rensa Alla", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Rensa alla 1proxy-proxyer?", + "memorySkillsSkillsmpDescription": "Anslut till SkillsMP för att upptäcka och installera färdigheter från marknadsplatsen.", + "memorySkillsActiveProviderDescription": "Välj vilken leverantör som Skills-sidan använder för sökning och installation.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marknadsplats", + "memorySkillsSkillsmpProviderDescription": "Autentiserad marknadsplats (använder din SkillsMP API-nyckel).", + "memorySkillsSkillsshProviderTitle": "skills.sh Katalog", + "memorySkillsSkillsshProviderDescription": "Offentlig katalogleverantör (ingen API-nyckel krävs).", + "routingCcBridgeCatalogName": "Anthropic-kompatibel CC-bro", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Inhemsk Claude-leverantör med OAuth-utgivna token.", + "routingCcBridgeName": "Claude-Code Bro", + "routingCcBridgeDescription": "Relay-slutpunkter med API-nycklar (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Anpassad leverantör.", + "routingUnknownOpKind": "Okänd op-typ: {kind}", + "routingInvalidJson": "Ogiltig JSON: {error}", + "routingConfigMustBeObject": "Konfigurationen måste vara ett JSON-objekt", + "routingEnabledMustBeBoolean": "`enabled` måste vara true eller false", + "routingPipelineMustBeArray": "`pipeline` måste vara en array av ops", + "routingPipelineTooLong": "Pipeline kan inte överskrida 50 ops", + "routingOpMissingKind": "Op #{index}: saknas eller ogiltig `kind`", + "routingOpUnknownKind": "Op #{index}: okänt slag \"{kind}\"", + "routingJsonEditorHide": "Dölj JSON-redigeraren", + "routingJsonEditorImportExport": "Importera / exportera JSON", + "routingJsonEditorLabel": "JSON (redigera och tillämpa, eller klistra in för att importera)", + "routingApplyJson": "Tillämpa JSON", + "routingTransformsFootnote": "Alla transformeringsoperationer är idempotenta vid omkörning. Ändringar träder i kraft omedelbart vid nästa begäran.", + "cliproxyapiUnknown": "Okänd", + "cliproxyapiVersion": "Version", + "cliproxyapiHealth": "Hälsa", + "cliproxyapiPort": "Port", + "qdrantHost": "Värd", + "qdrantCollection": "Samling" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Standard", + "off": "Av", + "lite": "Lite", + "standard": "Standard", + "aggressive": "Aggressiv", + "ultra": "Ultra", + "responsesToolOutput": "Svar verktygets utdata" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Körs sist i stacken (efter att RTK/Caveman rensar texten konverterar OmniGlyph resten till bilder) och körs även fristående via omniglyph-läge. Detta är en förhandsgranskning och förblir inaktiverad som standard tills end-to-end-valideringen är slutförd.", "saved": "Sparat.", "saveFailed": "Kunde inte spara.", - "enableAria": "Aktivera OmniGlyph-motorn" + "enableAria": "Aktivera OmniGlyph-motorn", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Inbäddade tjänster", @@ -9127,7 +9500,49 @@ "unableToLoad": "Det gick inte att läsa in systemstatistik", "product": "Produkt", "resources": "Resurser", - "company": "Företag" + "company": "Företag", + "tokenHealthTooltips": { + "allHealthy": "Alla tokens friska", + "needsAttention": "Vissa tokens behöver uppmärksamhet", + "refreshFailures": "Tokenuppdateringsfel upptäckta", + "unknown": "Hälsostatus okänd" + }, + "systemMonitor": { + "metricsAriaLabel": "Systemmetrik", + "memory": "Minne", + "memoryShort": "mem", + "uptime": "Drifttid", + "ariaLabel": "Systemövervakning", + "title": "Systemövervakning", + "version": "Version", + "connections": "Anslutningar", + "circuitBreakers": "Kretsbrytare", + "open": "{count} öppen", + "memoryUsage": "Minneanvändning" + }, + "never": "Aldrig", + "justNow": "Nyss", + "minutesAgo": "{count}m sedan", + "hoursAgo": "{count}h sedan", + "tokens": "Tokener", + "costs": "Kostnader", + "autoRefresh": "Automatisk Uppdatering ({seconds}s)", + "toggleAutoRefresh": "Växla automatisk uppdatering", + "activeRequests": "Aktiva Förfrågningar", + "totalRequests": "Totala Förfrågningar", + "totalInputTokens": "Totala Inmatningstokens", + "model": "Modell", + "provider": "Leverantör", + "requests": "Förfrågningar", + "lastUsed": "Senast Använda", + "inputTokens": "Inmatningstokens", + "totalTokens": "Totala Token", + "inputCost": "Inmatningskostnad", + "outputCost": "Utmatningskostnad", + "noUsageData": "Ingen användning registrerad än. Gör några förfrågningar för att se data här.", + "account": "Konto", + "accountLabel": "Konto {id}", + "noAccountUsage": "Inga kontospecifika användningar har registrerats än. Gör förfrågningar med OAuth-konton för att se data här." }, "auth": { "welcome": "Välkommen", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Återställ via App-data", + "resetViaAppDataDescription": "Ta bort inställningsfilen från appdata-katalogen för att återställa ditt lösenord:", + "quitDesktopApp": "Avsluta OmniRoute-skrivbordsappen helt", + "navigateToAppDataDirectory": "Navigera till appdata-katalogen:", + "checkSystemAppDataFolder": "(Kontrollera din systemappdata-mapp)", + "relaunchDesktopFreshSetup": "Starta om OmniRoute-skrivbordsappen — den kommer att påbörja en ny installation", + "alternativeSetPasswordTitle": "Alternativ: Ställ In Nytt Lösenord", + "alternativeSetPasswordDescription": "Ställ in ett nytt initialt lösenord via servermiljöfilen:", + "openServerEnvFilePrefix": "Öppna", + "relaunchDesktopApp": "Starta om OmniRoute-skrivbordsappen", + "codexLinkInvalidOrExpired": "Denna länk är ogiltig eller har gått ut.", + "codexValidationServerError": "Kunde inte nå servern för att validera denna länk.", + "codexSaveConnectionError": "Kunde inte spara anslutningen. Länken kan ha gått ut.", + "codexDeviceLoginDisabled": "Enhetskodinloggning är inaktiverad för detta OpenAI-konto. Aktivera det i ChatGPT:s säkerhetsinställningar (eller fråga din arbetsytans administratör).", + "codexAuthorizationTimedOut": "Åtkomsttiden har gått ut. Klicka på Starta om för att försöka igen.", + "authenticationCancelled": "Autentisering avbröts.", + "unexpectedAuthenticationError": "Oväntat fel under autentisering. Vänligen försök igen.", + "connectOpenAiCodexTitle": "Anslut OpenAI Codex", + "codexConnectDescription": "Auktorisera ett ChatGPT-konto för att slutföra inställningen av denna anslutning.", + "validatingCodexLink": "Validerar länk…", + "codexGenerateCodeDescription": "Klicka nedan för att generera en engångskod, och logga sedan in på OpenAI.", + "startCodexFlow": "Starta", + "requestingOpenAiCode": "Begär kod från OpenAI…", + "codexVerificationInstructions": "1. Öppna OpenAI-verifieringssidan och 2. ange denna kod. Denna sida uppdateras automatiskt när du auktoriserar.", + "yourCode": "Din kod", + "openVerificationPage": "Öppna verifieringssidan", + "copyUrlShort": "Kopiera URL", + "savingConnection": "Sparar anslutning…", + "codexConnected": "Ansluten!", + "codexConnectionRegistered": "Codex-kontot har registrerats. Du kan stänga den här fliken.", + "tryAgain": "Försök igen", + "traeAuthorizationSuccess": "Trae auktorisering ✓", + "traeAuthorizationFailed": "Trae auktorisering misslyckades", + "closeAuthorizationWindow": "Du kan stänga det här fönstret.", + "returnToDashboard": "Återgå till instrumentpanelen.", + "resetViaAppData": "Återställ via App-data", + "deleteSettingsToReset": "Ta bort inställningsfilen från appdata-katalogen för att återställa ditt lösenord:", + "quitAppCompletely": "Avsluta OmniRoute-skrivbordsappen helt", + "navigateToAppData": "Navigera till appdata-katalogen", + "checkAppDataFolder": "Kontrollera din systemappdata-mapp", + "deleteSettingsJson": "Ta bort", + "relaunchAppFresh": "Starta om OmniRoute-skrivbordsappen — den kommer att påbörja en ny installation", + "alternativeSetPassword": "Alternativ: Ställ In Nytt Lösenord", + "setNewPasswordViaEnv": "Ställ in ett nytt initialt lösenord via serverns miljöfil:", + "openServerEnv": "Öppna", + "inDataDirectory": "i datakatalogen", + "addOrUpdate": "Lägg till eller uppdatera", + "deleteAndRelaunch": "Ta bort", + "settingsJson": "settings.json", + "fromDataDir": "från datakatalogen", + "relaunchApp": "Starta om OmniRoute-skrivbordsappen" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Är du redo att förenkla din AI-infrastruktur?", "ctaDescription": "Gå med utvecklare som effektiviserar sina AI-integrationer med OmniRoute. Öppen källkod och gratis att starta.", "startFree": "Börja gratis", - "readDocumentation": "Läs dokumentation" + "readDocumentation": "Läs dokumentation", + "company": "Företag", + "pricing": "Prissättning", + "apiReference": "API Referens", + "helpCenter": "Hjälpcenter", + "about": "Om", + "blog": "Blogg", + "contact": "Kontakt", + "terms": "Villkor", + "privacy": "Integritet", + "license": "Licens", + "footerDescription": "Det enhetliga gränssnittet för modern AI-infrastruktur. Säkert, observerbart och skalbart.", + "communityDiscussions": "Gemenskapsdiskussioner" }, "docs": { "title": "Dokumentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Registrera och hantera agenter via ACP-registret för kommunikation mellan agenter och verktygsdelning.", "protocolAcpStep1": "Navigera till Dashboard → Agenter för att visa registrerade ACP-agenter.", "protocolAcpStep2": "Registrera nya agenter med funktioner och slutpunktskonfiguration.", - "protocolAcpStep3": "Använd CLI-verktyg för att konfigurera agentkommunikationskanaler." + "protocolAcpStep3": "Använd CLI-verktyg för att konfigurera agentkommunikationskanaler.", + "metadataTitleTemplate": "%s — OmniRoute Dokuментation", + "metadataDefaultTitle": "OmniRoute Dokumentation", + "metadataDescription": "Omfattande dokumentation för OmniRoute AI-gateway — installation, API, komprimering, distribution och mer.", + "layoutNavTitle": "OmniRoute Dokumentation", + "layoutHomeLink": "Dokument Hem", + "layoutDashboardLink": "← Tillbaka till Instrumentpanelen", + "homeTitle": "OmniRoute Dokumentation", + "homeMetadataDescription": "Allt du behöver för att styra, komprimera och skala din AI — installationsguider, API-referens, komprimering, distribution och mer.", + "homeTwitterDescription": "Omfattande dokumentation för OmniRoute AI-gateway", + "homeDescription": "Allt du behöver för att styra, komprimera och skala din AI", + "homeSearchHint": "Tryck på Ctrl K för att söka i dokumentationen", + "featuredQuickStartTitle": "Snabbstart", + "featuredQuickStartDescription": "Få OmniRoute att fungera på 3 minuter", + "featuredAutoComboTitle": "Auto-Combo Guide", + "featuredAutoComboDescription": "Låt OmniRoute välja den bästa AI:n för dig", + "featuredProvidersTitle": "Leverantörsguide", + "featuredProvidersDescription": "Anslut AI-leverantörer på några minuter", + "nonTechUsersTitle": "För icke-tekniska användare", + "nonTechUsersSubtitle": "Kom igång snabbt — ingen teknisk bakgrund behövs", + "techUsersTitle": "För teknikanvändare", + "techUsersSubtitle": "Djupdykning i arkitektur, API:er och interna system", + "apiExplorerMetadataTitle": "API Utforskare — OmniRoute Dokumentation", + "apiExplorerMetadataDescription": "Interaktiv API-explorer — prova OmniRoute-ändpunkter live med realtidsrespons", + "apiExplorerTitle": "API Utforskare", + "apiExplorerDescription": "Prova OmniRoute-ändpunkter live. Välj en ändpunkt, konfigurera din begäran och se svaret i realtid.", + "apiExplorerSseStarted": "SSE-strömmen har startat — kontrollera terminalen/devtools för realtidsutdata.", + "apiExplorerError": "Fel: {message}", + "apiExplorerAuth": "autentisering", + "apiExplorerResponseLabel": "Svar", + "apiExplorerSelectEndpoint": "Välj en slutpunkt att utforska", + "apiExplorerChooseApi": "Välj en API från sidofältet för att se detaljer och prova den live", + "feedbackThanks": "Tack för din feedback!", + "feedbackQuestion": "Var den här sidan till hjälp?", + "pageMetadataTitle": "{title} — OmniRoute Dokumentation", + "pageMetadataDescription": "OmniRoute-dokumentation: {title}", + "breadcrumb": "Brödsmulor", + "apiReferenceTable": { + "parameters": "Parametrar", + "name": "Namn", + "type": "Typ", + "description": "Beskrivning", + "returns": "Återgår", + "typePrefix": "Typ:" + } }, "legal": { "privacyPolicy": "Sekretesspolicy", @@ -9957,7 +10479,42 @@ "successMessage": "Ditt {providerName}-konto har kopplats.", "done": "Klart", "error": "Anslutning misslyckades", - "tryAgain": "Försök igen" + "tryAgain": "Försök igen", + "errorSessionIncomplete": "OAuth-session är ofullständig (saknar omdirigerings-URI eller kodverifierare). Starta om anslutningen och försök igen.", + "errorExchangeFailed": "Utbytet misslyckades", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: De standard Google OAuth-uppgifterna fungerar endast på localhost. För fjärranvändning, konfigurera dina egna OAuth-uppgifter via miljövariabler: ANTIGRAVITY_OAUTH_CLIENT_ID och ANTIGRAVITY_OAUTH_CLIENT_SECRET. Se avsnittet README 'OAuth på en fjärrserver'.", + "errorSaveFailed": "Sparande misslyckades", + "errorAuthorizationFailed": "Autorisering misslyckades", + "errorAuthorizationTimeout": "Auktoriseringstidsgräns", + "errorRequestFailed": "Begäran misslyckades", + "errorCallbackServerFailed": "Misslyckades med att starta callback-servern", + "errorBrowserUnavailable": "Webbläsarens OAuth är inte tillgänglig för denna leverantör i den aktuella miljön. Använd den stödda autentiseringsmetoden istället.", + "errorStateMismatch": "OAuth-tillståndet matchar inte. Starta om anslutningen och försök igen.", + "errorImportAccessToken": "Misslyckades med att importera åtkomsttoken", + "errorSessionNotInitialized": "OAuth-sessionen är inte initierad. Starta om anslutningsflödet och försök igen.", + "errorNoAuthorizationCode": "Ingen auktoriseringskod hittades. Klistra in callback-URL:en eller autentiseringskoden.", + "tabDeviceCode": "Enhetskod", + "tabBrowserLogin": "Webbläsarinloggning", + "tabImportAuthJson": "Importera auth.json", + "tabPasteApiKey": "Klistra in API-nyckel", + "windsurfPasteDescription": "I Windsurf / VS Code IDE, kör kommandot \"Windsurf: Provide Auth Token\" från kommandopaletten (eller klicka på Jupyter \"Get Windsurf Authentication Token\"-knappen), kopiera sedan den visade token och klistra in den nedan. Att öppna windsurf.com/show-auth-token direkt visar endast en \"Redirecting\"-sida — IDE:n måste initiera flödet.", + "grokAuthJsonDescription": "Klistra in hela innehållet i ~/.grok/auth.json (inte bara JWT \"nyckel\"-fältet). En ren JWT har ingen refresh_token, så anslutningen dör efter utgång (#7610). Föredra den dedikerade Import auth.json-modalen när den är tillgänglig.", + "devinDesktopPasteDescription": "Klistra in en befintlig Devin API-nyckel från en autentiserad Devin-session. Tillgänglighet för nyckelexport och steg varierar beroende på Devin-version och konto.", + "devinPasteDescription": "Ange din WINDSURF_API_KEY (erhållen via `devin auth login`, eller via Windsurf IDE-kommandot \"Windsurf: Provide Auth Token\").", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Bygg auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Nyckel / Token", + "saving": "Sparar…", + "saveConnection": "Spara Anslutning", + "gheDescription": "Ange bas-URL:en för din GitHub Enterprise-instans (t.ex. https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise-URL", + "gheUrlRequired": "GitHub Enterprise-URL är obligatorisk", + "gitlabDuoSetupTitle": "GitLab Duo OAuth-installation", + "gitlabDuoSetupMessage": "GitLab Duo OAuth är inte konfigurerat. Registrera en OAuth-applikation på {applicationsUrl} med omdirigerings-URI {redirectUri} och behörigheter \"{scopes}\", ställ sedan in {clientIdEnv} (och valfritt {clientSecretEnv}) och starta om.", + "gitlabDuoSetupDescription": "När applikationen är registrerad och miljövariablerna är inställda på denna OmniRoute-instans, klicka på Fortsätt för att påbörja OAuth-inloggningen.", + "continue": "Fortsätt" }, "cursorAuthModal": { "title": "Anslut Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Ladda mer", - "loadingMore": "Laddar mer..." + "loadingMore": "Laddar mer...", + "correlationId": "Korrelations-ID", + "group": { + "showAllRows": "Visa alla rader", + "showLatestPerCorrelation": "Visa senaste per korrelations-ID", + "grouped": "Grupperad" + }, + "running": "körning", + "interval": { + "decrease": "Minska intervall", + "title": "Automatisk uppdateringsintervall i sekunder", + "increase": "Öka intervall" + }, + "status": { + "inProgress": "Pågår", + "recoveredByRetry": "Återställd genom omförsök", + "goToParent": "Gå till överordnad begäran", + "healedTitle": "Misslyckades, återställd efter {count} försök", + "healed": "läkt", + "failedTitle": "Alla {count} försök misslyckades", + "failed": "misslyckades", + "pinnedTitle": "Modell vald via kontext-cache sessionspinning", + "pinned": "fäst" + }, + "attempts": "försök", + "detail": { + "collapse": "Dölj {title}", + "expand": "Utöka {title}", + "copyTitle": "Kopiera {title}", + "copied": "Kopierad!", + "copy": "Kopiera", + "autoscrollOn": "Autoscroll: på", + "autoscrollOff": "Autoscroll: av", + "payload": { + "clientRawRequest": "Klientens Rå Begäran", + "clientRequest": "Klientförfrågan", + "openaiRequest": "OpenAI Begäran", + "providerRequest": "Leverantörsförfrågan", + "providerResponse": "Leverantörens Svar", + "clientResponse": "Klientens Svar", + "pipelineError": "Pipeline-fel" + }, + "payloadMissing": "Den detaljerade nyttolasten artefakt är inte längre tillgänglig för denna loggpost.", + "payloadCorrupt": "Detaljerad payload-artikel kunde inte tolkas.", + "notAvailable": "N/A", + "semanticCache": "Semantisk (OmniRoute)", + "upstreamCache": "Uppströms (Leverantör)", + "ariaLabel": "Begär loggdetalj", + "completed": "Slutförd", + "upstreamStatus": "Uppströms: {status}", + "statusDiscrepancy": "OmniRoute returnerade {status} även om leverantören returnerade {provider}", + "previousRequest": "Föregående begäran", + "nextRequest": "Nästa begäran", + "close": "Stäng detaljmodalen", + "startedAt": "Startade Vid", + "endedAt": "Avslutad Vid", + "duration": "Varaktighet", + "model": "Modell", + "provider": "Leverantör", + "account": "Konto", + "input": "Inmatning", + "totalIn": "Totalt In: {value}", + "cacheRead": "Cache Läsning: {value}", + "cacheWrite": "Cache Skriv: {value}", + "compressed": "Komprimerad: {from} → {to} ({percent}% sparat)", + "output": "Utdata", + "totalOut": "Total Ut: {value}", + "reasoning": "Resonemang: {value}", + "requestedModel": "Begärd Modell", + "requestProtocol": "Req Protokoll", + "cacheSource": "Cache Källa", + "modelPinning": "Modellpinning", + "activeModelPinning": "Aktiv — modell vald via sessionsfästning", + "rotated": "Rotated: {initial} -> {final}", + "apiKey": "API Nyckel", + "noApiKey": "Ingen API-nyckel", + "combo": "Kombination", + "error": "Fel", + "unblockAll": "Avblockera alla", + "cleared": "Rensad", + "unblock": "Avblockera", + "relatedRequests": "Relaterade Förfrågningar ({count})", + "current": "nuvarande", + "detailStatus": "Detaljstatus", + "loadingDetails": "Laddar begärandedetaljer...", + "providerEventStream": "Leverantörshändelseström", + "clientEventStream": "Klienthändelseström", + "eventStream": "Händelseström", + "responsePayloadLegacy": "Svarspayload (Legacy)", + "requestPayloadLegacy": "Begär Payload (Legacy)", + "noPayload": "Ingen payloaddata tillgänglig för denna loggpost.", + "correlationId": "Korrelations-ID", + "correlationIdValue": "Korrelations-ID: {id}", + "detailedPayloadInfo": "Aktivera detaljerad loggning först om du vill ha den fyrastegs klient/leverantörs payload-vyn för nya förfrågningar." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} inaktiverad", "providerAdded": "{provider} tillagd", "add": "Lägg till", - "manualApiKey": "Använd en manuell API-nyckel" + "manualApiKey": "Använd en manuell API-nyckel", + "createDahlTokenFailed": "Misslyckades med att skapa Dahl-token", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Konfigurera proxy", + "providerProxyTitleConfigured": "Proxy konfigurerad: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-begränsad — granska villkoren", "caution": "Varning — klausuler för personligt bruk / proxy", "ok": "Generellt tillåtande" - } + }, + "allProviders": "Alla leverantörer", + "noApiKeyRequired": "Ingen API-nyckel krävs" }, "providerHealthAutopilot": { "title": "Autopilot för leverantörshälsa", @@ -12390,7 +13047,11 @@ "on": "PÅ", "off": "AV", "availableProviders": "Tillgängliga leverantörer ({count})", - "noProviderOverrides": "Inga åsidosättningar — alla aktiva leverantörer kommer att delta med sina standardmodeller" + "noProviderOverrides": "Inga åsidosättningar — alla aktiva leverantörer kommer att delta med sina standardmodeller", + "resetFailed": "Återställning misslyckades", + "resetSuccess": "Konfiguration återställd till standardinställningar", + "running": "Kör...", + "testFailed": "Testet misslyckades" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) är OmniRoutes grundande open source-vän", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Leverantören stöder inte vision för denna bildförfrågan", "capabilityFilter.toolsMismatch": "Leverantören stöder inte verktygsanrop.", "capabilityFilter.structuredOutputMismatch": "Leverantören stöder inte strukturerad utdata", - "capabilityFilter.contextWindowMismatch": "Begäran överskrider leverantörens kontextfönster" + "capabilityFilter.contextWindowMismatch": "Begäran överskrider leverantörens kontextfönster", + "publicSystem": { + "notFound": { + "title": "Sidan kunde inte hittas", + "description": "Sidan du letar efter finns inte eller har flyttats.", + "dashboardAriaLabel": "Återgå till instrumentpanelen", + "statusAriaLabel": "Öppna systemstatussidan", + "systemStatus": "Systemstatus" + }, + "error": { + "title": "Intern serverfel", + "description": "Något gick fel när din begäran behandlades. Vårt team har blivit informerat och arbetar på en lösning.", + "errorId": "Fel-ID: {id}", + "detailsAriaLabel": "Fel detaljer", + "retryAriaLabel": "Försök ladda om sidan", + "tryAgain": "Försök igen", + "dashboardAriaLabel": "Återgå till instrumentpanelen", + "statusAriaLabel": "Öppna systemstatus", + "systemStatus": "Systemstatus" + }, + "globalError": { + "title": "Något gick fel", + "description": "Ett oväntat fel inträffade. Detta har loggats och vårt team kommer att undersöka det.", + "detailsAriaLabel": "Felinformationer", + "retryAriaLabel": "Försök att ladda om sidan", + "tryAgain": "Försök igen", + "statusAriaLabel": "Öppna systemstatus", + "systemStatus": "Systemstatus" + }, + "offline": { + "title": "Anslutningsproblem", + "description": "OmniRoute kan inte nå nätverket just nu. Kontrollera din internetanslutning, VPN eller proxyinställningar.", + "connectionRestored": "Anslutning återställd", + "offlineModeDetected": "Offline-läge upptäckt", + "retryConnection": "Försök igen att ansluta", + "openStatusPage": "Öppna Statussidan" + }, + "maintenance": { + "title": "Planerat Underhåll", + "description": "Vissa tjänster är tillfälligt otillgängliga medan underhåll pågår. Kärnrouting förblir vanligtvis online, men hanteringsfunktioner kan vara försämrade.", + "suggestion1": "Försök igen om några minuter.", + "suggestion2": "Kontrollera aktuella hälsindikatorer och leverantörens status innan du försöker igen.", + "systemStatus": "Visa Systemstatus", + "healthDashboard": "Öppna Hälsodashboard" + }, + "status": { + "title": "Systemstatus", + "description": "Live operativ ögonblicksbild för OmniRoute kärntjänster.", + "loadingHealth": "Laddar hälsomått...", + "failedToLoad": "Misslyckades med att ladda systemhälsan.", + "unableToReachHealth": "Kunde inte nå hälsoslutpunkten. Kontrollera anslutningen och försök igen.", + "healthCheckFailed": "Hälsokontroll Misslyckades", + "openConnectivityHelp": "Öppen Anslutningshjälp", + "maintenanceInfo": "Underhållsinformation", + "service": "Tjänst", + "unknown": "okänd", + "notAvailable": "n/a", + "providersTracked": "Spåra Leverantörer", + "circuitBreakerState": "Leverantörens Kretsbrytartillstånd", + "lastUpdate": "Senaste uppdatering: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Felaktig Begäran", + "description": "Begärans nyttolast är ogiltig eller ofullständig.", + "suggestion1": "Granska obligatoriska fält och payload-format innan du försöker igen.", + "suggestion2": "Om du använder API:et, validera JSON-schemat lokalt.", + "suggestion3": "Om detta fortsätter att hända, öppna begäran i Translator Playground för att inspektera payloaden.", + "primaryAction": "Öppna Dokumentation", + "secondaryAction": "Öppna Översättare" + }, + "401": { + "title": "Obehörig", + "description": "Autentisering krävs för att få åtkomst till denna resurs.", + "suggestion1": "Logga in igen och försök operationen på nytt.", + "suggestion2": "För API-anrop, bekräfta att Bearer-token är närvarande och giltig.", + "suggestion3": "Om tokenet nyligen har roterats, uppdatera dina klientuppgifter.", + "primaryAction": "Gå till Inloggning", + "secondaryAction": "Hantera API-nycklar" + }, + "403": { + "title": "Förbjuden", + "description": "Din begäran förståddes, men åtkomst nekas av policy.", + "suggestion1": "Kontrollera IP-tillåtelse/blockeringsregler i inställningarna.", + "suggestion2": "Verifiera modell- och budgetpolicyer som tilldelats din API-nyckel.", + "suggestion3": "Be en administratör att ge den nödvändiga behörighetsomfånget.", + "primaryAction": "Öppen Tillgång Hjälp", + "secondaryAction": "Öppna säkerhetsinställningar" + }, + "408": { + "title": "Begäran Timeout", + "description": "Servern fick inte en komplett begäran i tid.", + "suggestion1": "Försök igen med en mindre payload.", + "suggestion2": "Kontrollera din nätverksstabilitet och VPN/proxy-latens.", + "suggestion3": "För långa operationer, aktivera strömning eller dela upp begäran.", + "primaryAction": "Öppna Endpoint-guide", + "secondaryAction": "Kontrollera nätverksstatus" + }, + "429": { + "title": "För många begärningar", + "description": "Gränserna för hastighet överskreds för denna klient, nyckel eller leverantör.", + "suggestion1": "Vänta på nedkylning och försök igen efter det föreslagna intervallet.", + "suggestion2": "Byt till en kombination med fallback-leverantörer.", + "suggestion3": "Justera leverantörens motståndskraft/rate-limit-profiler i inställningarna.", + "primaryAction": "Öppna Resiliensinställningar", + "secondaryAction": "Öppna Combos" + }, + "500": { + "title": "Intern serverfel", + "description": "Ett oväntat serverfel inträffade vid behandling av din begäran.", + "suggestion1": "Försök igen om några sekunder.", + "suggestion2": "Kontrollera hälsotelemetri och serverloggar för korrelerade begärnings-ID:n.", + "suggestion3": "Om problemet kvarstår, rapportera problemet med tidsstämpel och begärningskontext.", + "primaryAction": "Öppna Hälsodashboard", + "secondaryAction": "Öppna loggar" + }, + "502": { + "title": "Dålig Gateway", + "description": "Uppströmsleverantör eller gatewayintegration returnerade ett ogiltigt svar.", + "suggestion1": "Försök igen med en annan leverantör eller aktiv kombinationsrutt.", + "suggestion2": "Kontrollera leverantörens referenser och modellens tillgänglighet.", + "suggestion3": "Inspektera översättarens utdata om formatkonvertering är involverad.", + "primaryAction": "Öppna Leverantörer", + "secondaryAction": "Öppna Översättare" + }, + "503": { + "title": "Tjänsten är inte tillgänglig", + "description": "Tjänsten är tillfälligt otillgänglig på grund av underhåll eller försämrade beroenden.", + "suggestion1": "Vänta ett ögonblick och försök igen.", + "suggestion2": "Kontrollera underhållsmeddelanden och systemstatus.", + "suggestion3": "Använd fallback-leverantörer om din arbetsflöde är känslig för latens.", + "primaryAction": "Underhållsdetaljer", + "secondaryAction": "Systemstatus" + } + } + }, + "kiroAuthModal": { + "title": "Anslut {providerLabel}", + "chooseMethod": "Välj din autentiseringsmetod:", + "builderId": "AWS Builder ID", + "builderDescription": "Rekommenderat för de flesta användare. Logga in med det AWS-konto som är kopplat till {providerLabel}.", + "organization": "Din Organisation (AWS IAM Identitetscenter)", + "organizationDescription": "Använd din företags SSO-start-URL (exempel: {url}).", + "googleAccount": "Google-konto", + "googleDescription": "Logga in med ditt Google-konto.", + "githubAccount": "GitHub-konto", + "githubDescription": "Logga in med ditt GitHub-konto.", + "importToken": "Importera Token", + "importDescription": "Klistra in en uppfrisknings-token exporterad från {providerLabel}.", + "apiKey": "API Nyckel", + "apiKeyDescription": "Klistra in en långlivad {providerLabel} / CodeWhisperer API-nyckel. Den lagras som en bärartoken utan uppdateringstoken; profilupptäckten är bästa möjliga.", + "idcStartUrl": "IDC Start-URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Din organisations AWS IAM Identity Center-URL", + "awsRegion": "AWS-region", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "AWS-region för din Identity Center (standard: us-east-1)", + "continue": "Fortsätt", + "back": "Tillbaka", + "autoDetecting": "Automatiskt upptäckte token...", + "readingCredentials": "Läser {providerLabel} autentiseringsuppgifter från AWS SSO-cache", + "tokenNotDetected": "{providerLabel} token kunde inte auto-detekteras. Vänligen klistra in din uppfriskningstoken manuellt.", + "refreshToken": "Uppdatera Token", + "tokenPlaceholder": "Token kommer att fyllas i automatiskt...", + "importing": "Importerar...", + "apiKeyPlaceholder": "Klistra in din {providerLabel} API-nyckel...", + "apiKeyStoredDescription": "Lagrad krypterad som en långlivad bärartoken. Det finns ingen uppdateringsflöde.", + "apiKeyRegionDescription": "AWS-region för nyckeln (standard: us-east-1)", + "validating": "Validerar...", + "validateAndSaveApiKey": "Validera och Spara API-nyckel", + "errorAutoDetect": "Kunde inte automatiskt upptäcka token", + "errorAutoDetectFailed": "Misslyckades med att automatiskt upptäcka token", + "errorRefreshTokenRequired": "Vänligen ange en uppfrisknings-token", + "errorImportFailed": "Importen misslyckades", + "errorApiKeyRequired": "Vänligen ange en Kiro API-nyckel", + "errorApiKeyImportFailed": "Import av API-nyckel misslyckades", + "errorIdcStartUrlRequired": "Vänligen ange din IDC start-URL" + }, + "kiroSocialOAuthModal": { + "title": "Anslut {providerLabel} via {providerName}", + "errorStartAuthorization": "Misslyckades med att starta auktorisering", + "errorAuthorizationExpired": "Auktorisering har löpt ut. Starta inloggningsflödet igen.", + "errorAuthorizationFailed": "Auktorisering misslyckades", + "initializing": "Initierar...", + "settingUp": "Ställer in {providerName} autentisering", + "openIncognito": "Öppna denna länk i ett inkognitofönster", + "incognitoDescription": "Använd ett inkognito-/privatfönster för att undvika sessionskonflikter med befintliga konton.", + "copyLink": "Kopiera länk", + "verificationCode": "Verifieringskod", + "waiting": "Väntar på auktorisering...", + "cancel": "Avbryt", + "successTitle": "Ansluten Framgångsrikt!", + "successMessage": "Ditt {providerLabel} konto via {providerName} har kopplats.", + "done": "Klart", + "errorTitle": "Anslutning Misslyckades", + "close": "Stäng" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Auktorisering misslyckades", + "errorPopupBlocked": "Popup blockerad — tillåt popup-fönster för denna webbplats, eller klistra in token manuellt nedan.", + "errorPopupClosed": "Autentiseringsfönstret stängdes innan det slutfördes.", + "errorAccessTokenRequired": "Åtkomsttoken krävs.", + "errorImportFailed": "Importen misslyckades", + "title": "Anslut Trae SOLO", + "authorizeDescription": "Auktorisera via trae.ai i en popup. Popup-fönstret stängs automatiskt när token har importerats.", + "authorizeImportant": "Viktigt: du måste vara inloggad på trae.ai i denna webbläsare först. Auktoriseringssidan bekräftar endast en befintlig session — den kan inte logga in dig. Om du ser \"Inloggning misslyckades\", klicka på \"Öppna solo.trae.ai\", logga in och återvänd sedan hit.", + "waitingForAuthorization": "Väntar på trae.ai…", + "authorizeWithBrowser": "Auktorisera med webbläsare", + "openSoloTrae": "Öppna solo.trae.ai", + "orPasteManually": "eller klistra in en token manuellt", + "manualInstructions": "Logga in på solo.trae.ai, öppna DevTools → Nätverk, skicka ett chatmeddelande och kopiera JWT från Authorization: Cloud-IDE-JWT {tokenPlaceholder} begärningshuvudet. JWT-livslängden är ~14 dagar. Valfria identitetsfält kommer från common_params i samma begärningskropp.", + "accessTokenLabel": "Åtkomsttoken (Cloud-IDE-JWT)", + "webId": "Webb-ID", + "optional": "valfri", + "bizUserId": "Biz Användar-ID", + "userUniqueId": "Användarens unika ID", + "scope": "Omfattning", + "tenant": "Hyresgäst", + "region": "Region", + "importing": "Importerar…", + "importToken": "Importera Token", + "cancel": "Avbryt" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Distribuerar...", + "complete": "Fullständig", + "defaultLabel": "Distribuera Proxies" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "avvecklad", + "risk": "risk", + "close": "Stäng", + "model": "Modell", + "key": "Nyckel", + "defaultKey": "standard", + "clearConversation": "Rensa konversation", + "clear": "Rensa", + "tabs": { + "test": "Test", + "logs": "Loggar" + }, + "loadingLogs": "Laddar loggar…", + "failedToLoadLogs": "Misslyckades med att ladda loggar", + "noLogsYet": "Inga loggar än", + "noLogsDescription": "Skicka ett testmeddelande från Test-fliken — loggar för den här leverantören kommer att visas här.", + "openFullLogs": "Öppna hela loggsidan", + "live": "Live", + "tailingLast": "visar de senaste {count}", + "refreshNow": "Uppdatera nu", + "refresh": "Uppdatera", + "unknownRequester": "okänd begäran", + "fields": { + "timestamp": "Tidsstämpel", + "status": "Status", + "duration": "Varaktighet", + "model": "Modell", + "requestedModel": "Begärd modell", + "provider": "Leverantör", + "requester": "Begäran", + "tokens": "Tokener" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy loggdetalj", + "event": "Proxyhändelse", + "close": "Stäng proxydetaljmodalen", + "time": "Tid", + "latency": "Latens", + "clientIp": "Klientens IP", + "proxy": "Proxy", + "direct": "Direkt", + "type": "Typ", + "level": "Nivå", + "provider": "Leverantör", + "tlsFingerprint": "TLS Fingeravtryck", + "directNative": "Direkt", + "targetUrl": "Måladress", + "error": "Fel", + "configuration": "Proxykonfiguration" + }, + "requestTimeline": { + "title": "Begärningens Tidslinje", + "modes": { + "follow": "Följ", + "followDescription": "Axeln rullar åt vänster, NU-linjen stannar på 75%", + "now": "Nu", + "nowDescription": "Hoppa till aktuell tid, NU-linjen återställs till mitten", + "pan": "Panna", + "panDescription": "Dra för att utforska, bakgrunden är fryst" + }, + "reset": "Återställ", + "started": "Startad", + "ended": "Avslutad", + "duration": "Varaktighet", + "status": "Status", + "provider": "Leverantör", + "tokens": "Tokener", + "active": "Aktiv", + "other": "Annat", + "tenMinutes": "10min", + "hour": "timme", + "day": "dag", + "unknownModel": "okänd", + "pending": "väntande" + }, + "metadata": { + "compressionTitle": "Komprimering", + "compressionDescription": "Konfigurera inställningar för kontextkomprimering för att minska användningen av token och kostnader.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Serverless relay proxy-endpunkter för din AI-infrastruktur", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Övervaka LLM-anrop + felsök all applikations HTTPS-trafik" + }, + "conductor": { + "title": "Conductor — CLI-agent flotta", + "subtitle": "OmniConductor hub: körningar, uppgiftskö och råd, live", + "runners": "Löpare", + "tasks": "Uppgifter", + "colName": "Namn", + "colClis": "CLIs", + "colStatus": "Status", + "colTask": "Uppgift", + "colMode": "Läge", + "colRunner": "Runner", + "colSummary": "Sammanfattning", + "online": "online", + "offline": "offline", + "draining": "avvattning", + "hubOffline": "Konduktörshub offline eller inte konfigurerad (CONDUCTOR_HUB_URL) — visar ingenting istället för gammal data.", + "noRunners": "Inga löpare registrerade", + "noTasks": "Inga uppgifter ännu", + "detailTitle": "Uppgiftsdetalj", + "prompt": "Uppmaning", + "branch": "Gren", + "fetchHint": "Hämta resultatet med: git fetch origin {branch}", + "council": "Råd", + "candidates": "Kandidater", + "cancel": "Avbryt uppgift", + "cancelConfirmTitle": "Avbryt denna uppgift?", + "cancelConfirmMessage": "Huben kommer att avbryta körningen på löparen. Detta kan inte ångras.", + "cancelFailed": "Hubbens avbokning avslogs", + "close": "Stäng", + "error": "Fel", + "faroTitle": "Faro — flottans talesperson", + "faroSubtitle": "Chatt och röst, förankrade i verkliga flott-händelser. Destruktiva kommandon ber alltid om bekräftelse.", + "faroEmpty": "Fråga om flottan — t.ex. \"hur är flottan?\"", + "faroPending": "Faro ber om bekräftelse", + "faroPlaceholder": "prata med Faro…", + "faroSend": "skicka", + "faroOffline": "Faro (talesperson) är offline", + "yes": "Ja", + "no": "Nej", + "pushToTalk": "Håll för att prata", + "speakAnswers": "prata svar", + "voiceModels": "Röstmodeller (leverantör/modell av denna OmniRoute)", + "voiceIdle": "prata", + "voiceListening": "lyssnar…", + "voiceThinking": "tänker…", + "voiceSpeaking": "pratar…", + "sttFailed": "Transkription misslyckades (kontrollera STT-modellen/leverantören)", + "ttsFailed": "Tal syntes misslyckades (kontrollera TTS-modellen/leverantören)", + "micDenied": "Mikrofon otillgänglig eller behörighet nekad" + }, + "cliproxyProviderExposure": { + "title": "Leverantörsexponering", + "description": "Exponera CLIProxyAPI-modeller som en routingsdestination under cliproxyapi/ prefixet.", + "label": "Exponera som cliproxyapi/...", + "hint": "När den är aktiverad visas upptäckta modeller i leverantörsvalen över hela OmniRoute.", + "updateFailed": "Misslyckades med att uppdatera (HTTP {status})", + "networkError": "Nätverksfel — kunde inte uppdatera leverantörens exponeringinställning" + } } - diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index 736070dd1c..df594804db 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -172,6 +172,18 @@ "unselectAll": "Ondoa uteuzi", "visibleModels": "zinazoonekana", "selectAllConfirm": "Ongeza modeli {count} kwenye mchanganyiko huu?", + "testSelectedProviders": "Watoa Mtihani", + "testingSelectedProviders": "Kujaribu {done}/{total}...", + "noProvidersSelectedToTest": "Angalia angalau mtoa huduma mmoja hapa chini kwanza", + "noModelsToTestForProviders": "Hakuna mifano ya kujaribu kwa watoa huduma waliochaguliwa", + "testSelectedProvidersResults": "{ok} ya {total} mifano inafanya kazi", + "selectWorkingModels": "Ongeza kazi", + "unselectWorkingModels": "Futa uchaguzi wa kufanya kazi", + "noWorkingModelsToSelect": "Hakuna mifano inayofanya kazi iliyobaki kuongezwa", + "providerTestHint": "Kidokezo: angalia mtoa huduma → Jaribu → Ongeza inayofanya kazi. Bonyeza tena kuondoa uteuzi.", + "selectAllProviders": "Angalia watoa huduma wote", + "clearProviderSelection": "ondoa alama kwenye watoa huduma", + "providersSelectedCount": "watoa {count} waliokaguliwa", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Ukubwa", + "toggleNoAuthProvider": "Geuza mtoa huduma asiye na uthibitisho", + "loadingModels": "Inapakia mifano…", + "selectAModel": "Chagua mfano", + "degraded": "Imepungua", + "zeroConfigBannerTitle": "Inafanya kazi katika hali ya sifuri-mipangilio", + "zeroConfigBannerBody": "OmniRoute ilizalishwa kiotomatiki funguo salama za usimbaji kwenye uzinduzi wa kwanza. Zinahifadhiwa kwenye {dataDir}. Hakuna hatua inayohitajika — data yako imefichwa na salama. Ili kutumia funguo za kawaida, ongeza JWT_SECRET na STORAGE_ENCRYPTION_KEY kwenye faili hiyo.", + "batchRelativeTimeIn": "katika {value}", + "batchRelativeTimeAgo": "{value} zilizopita", + "batchDetailsTitle": "Maelezo ya Kundi", + "batchProgress": "Maendeleo", + "batchCompletedCount": "{count} imekamilika", + "batchFailedCount": "{count} imefeli", + "batchPendingCount": "{count} inasubiri", + "batchTimeline": "Muda", + "batchTimelineInProgress": "Katika Mchakato", + "batchTimelineFinalizing": "Kukamilisha", + "batchTimelineCompleted": "Imekamilika", + "batchTimelineFailed": "Imeshindikana", + "batchTimelineExpires": "Inatisha", + "batchTimelineExpired": "Imeisha", + "batchTimelineCancelling": "Kufuta", + "batchTimelineCancelled": "Imesitishwa", + "batchTokenUsage": "Matumizi ya Token", + "batchMetadata": "Metadata", + "batchFileContents": "Maudhui ya Faili", + "batchFileUsedByCount": "Inatumika na {count, plural, one {# kundi} other {# makundi}}", + "batchFilePreview": "Muonekano", + "batchFilePreviewTruncated": "Kuonyesha mistari ya kwanza {shown} ({total} jumla ya mistari)", + "batchFileDownloadFull": "Pakua Faili Kamili" }, "disabled": "Imezimwa", "featureFlagOmnirouteEmergencyFallbackDescription": "Elekeza maombi yaliyomaliza bajeti kwenye mtoa huduma/muundo wa dharura wa akiba usiolipiwa.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Kigawanyishi", "discovery": "Ugunduzi", "discoverySubtitle": "Changanua watoa huduma kwa ufikiaji wa bure", + "conductor": "Msimamizi", + "conductorSubtitle": "CLI-agent meli", "resilienceConnections": "Uimara wa Muunganisho", "resilienceConnectionsSubtitle": "Kupoa, kivunja mzunguko, hali ya kufuli", "settingsModalityBridge": "Daraja la Modality", - "settingsModalityBridgeSubtitle": "Picha/sauti → maandiko ya akiba kwa mifano ya maandiko pekee" + "settingsModalityBridgeSubtitle": "Picha/sauti → maandiko ya akiba kwa mifano ya maandiko pekee", + "commandPalette": { + "title": "Kichupo cha Amri", + "searchPlaceholder": "Tafuta kurasa, mipangilio, zana...", + "clearSearch": "Futa utafutaji", + "noResults": "Hakuna matokeo", + "navigate": "nenda", + "open": "fungua", + "close": "funga" + }, + "noResults": "Hakuna matokeo" }, "webhooks": { "title": "Viboko vya mtandao", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Usasishaji wa Mipangilio Umeshindikana", "sync.token.created": "Tokeni ya Usawazishaji Imeundwa", "sync.token.revoked": "Tokeni ya Usawazishaji Imebatilishwa" - } + }, + "mcpMetricCalls24h": "Mawasiliano (24h)", + "mcpMetricSuccessRate": "Kiwango cha mafanikio", + "mcpMetricAvgDuration": "Muda wa wastani", + "mcpMetricTopTool": "Zana Bora" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "Inapakia upya ukurasa kiotomatiki...", - "providerTopology": "Topolojia ya mtoaji" + "providerTopology": "Topolojia ya mtoaji", + "downloadDmg": "Pakua DMG (macOS)", + "downloadDmgDescription": "Toleo jipya la programu ya desktop ya OmniRoute linapatikana. Tafadhali pakua na sakinisha msanidi wa DMG wa macOS ili kusasisha (sasa: v{version}).", + "downloadExe": "Pakua EXE (Windows)", + "downloadExeDescription": "Toleo jipya la programu ya desktop ya OmniRoute linapatikana. Tafadhali pakua na sakinisha msanidi wa EXE wa Windows ili kusasisha (sasa: v{version}).", + "downloadAppImage": "Pakua AppImage (Linux)", + "downloadAppImageDescription": "Toleo jipya la programu ya desktop ya OmniRoute linapatikana. Tafadhali pakua kifurushi cha Linux AppImage ili kusasisha (sasa: v{version}).", + "downloadUpdate": "Pakua Sasisho", + "downloadUpdateDescription": "Toleo jipya la programu ya desktop ya OmniRoute linapatikana. Tafadhali pakua muundo husika wa programu kwa mfumo wako ili kusasisha (sasa: v{version}).", + "updateQueued": "Sasisho lililoorodheshwa kwa v{version}.", + "updateDockerRebuilding": "Picha ya Docker inajengwa tena kwa nyuma.", + "updateWaitingRestart": "Inasubiri OmniRoute ianzishe tena na toleo jipya.", + "updateInstalling": "Inaninstall v{version}.", + "updateRunning": "OmniRoute sasa inafanya kazi v{version}.", + "updateCompleted": "OmniRoute imesasishwa hadi v{version}.", + "updateDockerStillRebuilding": "Picha ya Docker bado inajengwa upya kwa v{version}.", + "updateInstallingBackground": "Inasakinisha v{version} kwa nyuma.", + "updateWaitingVersion": "Inasubiri OmniRoute irudi kwenye v{version}.", + "updateDockerStillInProgress": "Ujenzi wa Docker bado unaendelea.", + "updateRestarting": "Upya wa huduma unaendelea. Kusubiri OmniRoute irudi mtandaoni...", + "updateTimeout": "Sasisho limeanza, lakini v{version} haikupatikana kabla ya muda wa kuisha. Fanya upya ukurasa au angalia kumbukumbu za seva.", + "updateTimedOut": "Sasisho la v{version} limepita muda.", + "updateStartFailed": "Imeshindikana kuanzisha sasisho.", + "noResponseStream": "Hakuna mtiririko wa majibu uliopokelewa.", + "updateComplete": "Sasisho limekamilika!", + "updateFailed": "Sasisho limefeli.", + "updateNetworkError": "Kosa la mtandao — muunganisho umepotea wakati wa sasisho.", + "stepInstallPackage": "Sakinisha Kifurushi", + "stepRebuildNativeModules": "Rebuild Moduli Asilia", + "stepRestartService": "Anzisha Upya Huduma", + "stepComplete": "Kamilisha", + "stepError": "Kosa", + "updateCompleteTitle": "Sasisho Kamili!", + "updateFailedTitle": "Sasisho Limeshindwa", + "updatingTitle": "Inasasisha OmniRoute...", + "reloadNotice": "Ukurasa utafunguka upya kiotomatiki ndani ya sekunde chache.", + "retryNotice": "Tafadhali jaribu tena au sasisha kwa mikono kupitia CLI.", + "restartNotice": "Usifunge ukurasa huu. Mfumo utaanzisha upya kiotomatiki.", + "reloadNow": "Reload Sasa", + "closeUpdate": "Funga", + "retryUpdate": "Jaribu Tena", + "updateAvailableTitle": "Sasisho Lipo: v{version}{desktop}", + "desktopAppLabel": "(Programu ya Kompyuta)", + "checkingForUpdates": "Kukagua masasisho...", + "versionAvailableForDownload": "Toleo v{version} linapatikana kwa ajili ya kupakua.", + "downloadingUpdate": "Inapakua sasisho... {percent}% kamili.", + "updateDownloaded": "Sasisho limepakuliwa kwa mafanikio! Bonyeza Restart & Install ili kutekeleza.", + "autoUpdateFailed": "Sasisho la moja kwa moja limefeli: {reason}.", + "unknownUpdateError": "Kosa lisilojulikana", + "versionAvailableDesktop": "Toleo v{version} linapatikana kwa programu ya desktop.", + "manualUpdateRequired": "Sasisho la mkono linahitajika kwa aina hii ya usakinishaji.", + "restartAndInstall": "Anzisha Upya & Sakinisha", + "checkForUpdate": "Angalia Sasisho", + "manualUpdate": "Sasisho la Kiganja", + "directDownloadHint": "Au pakua muundo wa msaidizi husika moja kwa moja:", + "releaseNotes": "Maelezo ya Kutolewa", + "readMore": "Soma Zaidi", + "noAuthLabel": "Hakuna Auth" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Imebainishwa kutoka kwa kumbukumbu za miito zilizohifadhiwa kuhusu ombi hili", "routeRecommendations": "Mapendekezo", "routeLimitations": "Vikwazo", - "routeNoKnownLimitations": "Hakuna vikwazo vinavyojulikana kwa ufafanuzi huu." + "routeNoKnownLimitations": "Hakuna vikwazo vinavyojulikana kwa ufafanuzi huu.", + "searchAnalyticsLoading": "Inapakia uchambuzi wa utafutaji…", + "searchAnalyticsNoData": "Hakuna data ya kutafuta inayopatikana bado.", + "searchAnalyticsNoDataDescription": "Maombi ya utafutaji yataonekana hapa baada ya utafutaji wa kwanza kupitia /v1/search.", + "searchAnalyticsToday": "{count} leo", + "searchAnalyticsCachedRequests": "maombi {count} yaliyohifadhiwa", + "searchAnalyticsApiCosts": "tafuta gharama za API", + "searchAnalyticsErrors": "makosa {count}", + "searchAnalyticsNoErrors": "Hakuna makosa", + "searchAnalyticsProviderBreakdown": "Ufafanuzi wa Mtoa huduma", + "searchAnalyticsQueries": "maswali", + "searchAnalyticsEmptyDescription": "Tumia POST /v1/search kuanza kuelekeza utafutaji wa wavuti.", + "searchAnalyticsFreeTier": "Kiwango cha bure kinapatikana: Serper (2,500/ mwezi), Brave (2,000/ mwezi), Exa (1,000/ mwezi), Tavily (1,000/ mwezi) — jumla ya 6,500+ utafutaji wa bure/ mwezi na kuhamasisha kiotomatiki.", + "autoRoutingNoDataAvailable": "Hakuna uchambuzi wa auto-routing unaopatikana. Fanya maombi ukitumia kiambishi cha auto/ ili kuona vipimo.", + "defaultVariantLabel": "Chaguo La Kawaida", + "freeTierAvailable": "Kipengele cha bure kinapatikana" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "Watoa huduma {count}", "imageToTextBridgeAvailable": "Modality Bridge sasa inaweza kuelezea picha kwa ajili ya mifano ya maandiko pekee. Uwanja wa majaribio wa ndani utapatikana wakati /api/v1/images/understanding itatekelezwa.", "imageToTextBridgeCta": "Sanitize daraja la Picha→Maandishi katika mipangilio ya Daraja la Modality", - "sttBridgeCta": "Sanidi daraja la Hotuba→Maandishi katika mipangilio ya Daraja la Modality" + "sttBridgeCta": "Sanidi daraja la Hotuba→Maandishi katika mipangilio ya Daraja la Modality", + "existingConnection": "Muunganisho uliopo", + "openrouterSttDescription": "Moduli ya sauti hadi maandiko ya OpenRouter yanatumia muunganisho wako wa OpenRouter ulio sanidiwa. Hakuna hati tofauti inayohitajika." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Bandika kwenye:", "copilotReloadInstruction": "Kisha pakia upya VS Code na uweke ufunguo wa API kwenye kidokezo cha kuingiza.", "wireApiChatCompletions": "Kukamilika kwa Gumzo (/kuzungumza/kukamilika)", - "wireApiResponses": "API ya majibu (/majibu)" + "wireApiResponses": "API ya majibu (/majibu)", + "cliproxyapiActionFailed": "Kitendo kimefeli", + "cliproxyapiActionSucceeded": "Kitendo kimefanikiwa", + "cliproxyapiCheckUpdates": "Angalia Sasisho", + "cliproxyapiDescription": "Mkurugenzi wa proxy wa juu (OAuth inayotumia Go)", + "cliproxyapiHealth": "Afya", + "cliproxyapiHealthy": "Afya", + "cliproxyapiInstall": "Sakinisha", + "cliproxyapiNotInstalledValue": "Haijasanidiwa", + "cliproxyapiPort": "Bandari", + "cliproxyapiRequestFailed": "Omba ilishindikana", + "cliproxyapiRestart": "Anzisha Upya", + "cliproxyapiStart": "Anza", + "cliproxyapiStatusError": "Kosa", + "cliproxyapiStatusInstalled": "Imewekwa", + "cliproxyapiStatusNotInstalled": "Haijasanidiwa", + "cliproxyapiStatusRunning": "Kukimbia", + "cliproxyapiStatusStopped": "Imesitishwa", + "cliproxyapiStop": "Acha", + "cliproxyapiUnhealthy": "Isiyo Afya", + "cliproxyapiUnknown": "Haijulikani", + "cliproxyapiUpdate": "Sasisha", + "cliproxyapiUpdateAvailable": "Sasisho linapatikana: v{current} → v{latest}", + "cliproxyapiVersion": "Toleo" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Piga hatua tu wakati kigezo kimeisha", + "fallbackOnlyOnQuotaExhaustionShort": "fallback ya quota pekee", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Kifurushi cha modi na uzani vinabaki hapa; hali ya muda wa utekelezaji wa breaker inabaki kwenye ukurasa wa Health.", "emailVisibilityHint": "Barua pepe za akaunti hapa zinafuata kigeuzi cha faragha cha kimataifa.", "emailVisibilityTooltip": "Tumia ikoni ya jicho ili kufichua au kuficha barua pepe za akaunti kimataifa kwenye mchanganyiko, watoa huduma na skrini za quota.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Hatua kwa hatua (Mtoa → Mfano)", + "builderModeGlobal": "Utafutaji wa mfano wa kimataifa (Mchanganyiko wa kawaida)", + "builderGlobalSearchPlaceholder": "Tafuta mifano katika watoa huduma wote (mfano: opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Ongeza yote", + "builderGlobalShortcuts": "Mifupisho:", + "builderGlobalNoResults": "Hakuna mfano uliopatikana kwa \"{query}\".", + "builderGlobalProviderLabel": "Mtoa huduma:", + "builderGlobalAccountCount": "{count, plural, one {# akaunti} other {# akaunti}}", + "builderGlobalAdded": "Imeongezwa", + "builderGlobalAdd": "Ongeza", "manualModel": "Modeli ya mwongozo", "manualModelInvalid": "Weka modeli kama provider/model.", "manualModelUnknownProvider": "Kiambishi awali cha mtoa huduma kisichojulikana.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Upatikanaji wa Kikao", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Ushikamano umezimwa", "kimiPresetTitle": "Seti ya awali ya Kimi Coding", "kimiPresetDescription": "Kimi K3 kama modeli kuu (Moonshot API), yenye urejesho wa kiotomatiki kwenye miunganisho yako ya Kimi Code (kimi-coding, kimi-web) inaposanidiwa.", - "kimiPresetCta": "Ongeza seti ya awali" + "kimiPresetCta": "Ongeza seti ya awali", + "intelligentComboCount": "{count, plural, one {# mchanganyiko wenye akili} other {# mchanganyiko wenye akili}}", + "providersInScope": "{count, plural, one {mtoa huduma # katika upeo} other {watoa huduma # katika upeo}}", + "savingModePack": "Inahifadhi {pack}…", + "errorTitle": "Imeshindikana kupakia combos", + "errorDescription": "Hatuwezi kupakia data ya combo kwa sasa. Angalia muunganisho wako na ujaribu tena.", + "errorId": "Kosa ID: {id}", + "errorRetry": "Jaribu Tena", + "comboLabel": "Combo" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL ya WebDAV", "obsidianUsername": "Jina la mtumiaji", "obsidianPassword": "Nenosiri", - "obsidianTailscaleHint": "Tumia IP yako ya Tailscale badala ya localhost ikiwa unaunganisha kutoka kwenye simu. Vifaa vyote viwili lazima viwe kwenye mtandao mmoja wa Tailscale." + "obsidianTailscaleHint": "Tumia IP yako ya Tailscale badala ya localhost ikiwa unaunganisha kutoka kwenye simu. Vifaa vyote viwili lazima viwe kwenye mtandao mmoja wa Tailscale.", + "cloudSyncNotConfigured": "Sambaza wingu haijasanidiwa kwenye mfano huu.", + "notionConnect": "unganisho", + "notionConnectFailed": "Imeshindikana kuungana", + "notionConnected": "Imepangwa", + "notionConnectionFailed": "Muunganisho umeshindikana", + "notionDescription": "Tafuta, soma, uliza, na andika kwenye Notion kupitia mifano ya AI iliyopangwa", + "notionDisconnect": "Jitenganishe", + "notionDisconnectFailed": "Imeshindikana kuungana.", + "notionEnterToken": "Tafadhali ingiza tokeni ya ujumuishaji wa Notion", + "notionIntegrationHelp": "Unda Uunganisho wa Ndani katika", + "notionIntegrationToken": "Token ya Msingi wa Ndani wa Notion", + "notionNotConnected": "Haujaunganishwa", + "notionTokenConfigured": "Token imewekwa. Zana za Notion zinapatikana kupitia MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Mtoa huduma / Modeli", "noRemoteProviders": "Hakuna watoa huduma walio na ufunguo wa API uliosanidiwa", "selectProviderModel": "Chagua modeli", + "customBaseUrlLabel": "URL ya msingi ya kawaida (hiari)", + "customModelIdLabel": "Kitambulisho cha mfano maalum (hiari)", + "customEndpointHelp": "Tumia kiungo cha /embeddings kinachofaa kwa OpenAI. Viungo vya ndani vinaruhusiwa; malengo ya metadata ya wingu yamezuiwa.", + "customEndpointSave": "Tumia mwisho wa kawaida", + "customEndpointInvalid": "Ingiza URL ya msingi ya HTTP(S) halali na kitambulisho cha mfano, au acha maeneo yote mawili kuwa tupu.", + "customEndpointSaveFailed": "Nukuu ya kuingiza ya kawaida haiwezi kuhifadhiwa.", "staticEnabledLabel": "Washa Static Potion", "staticEnabledDesc": "Pakua na utumie modeli ya potion-base-8M ndani ya kifaa", "transformersEnabledLabel": "Washa Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Inasafisha...", "cleanNow": "Safisha sasa", "cleanupSuccess": "Pointi {count} zimeondolewa", - "cleanupFailed": "Usafishaji umeshindwa" + "cleanupFailed": "Usafishaji umeshindwa", + "hostLabel": "Mwenyeji", + "collectionLabel": "Mkusanyiko" }, "rerank": { "enableLabel": "Washa Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "Mchoro wa kurudi nyuma wa ngazi 3 wa OmniRoute", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Weka wasambazaji wa bure", + "description": "Chaguo la kuwezesha watoa huduma wasiohitaji usajili. Kagua taarifa za kila mtoa huduma na tovuti kabla ya kuendelea; upatikanaji na mipaka ya viwango vinadhibitiwa na wahusika wengine.", + "loading": "Inapakia watoa huduma bure...", + "loadFailed": "Haiwezekani kupakia watoa huduma wa bure.", + "alreadyConfigured": "Watoa huduma wote wa bure wanaostahili tayari wamewekwa.", + "reviewProviderSite": "Kagua tovuti ya mtoa huduma na masharti", + "confirmation": "Nimekagua watoa huduma hawa wa tatu na nataka OmniRoute kuunda muunganisho uliochaguliwa.", + "setupSelected": "Weka wasambazaji waliochaguliwa", + "settingUp": "Inaanzisha...", + "setupFailed": "Haiwezekani kuweka watoa huduma waliochaguliwa. Hakuna kilichopo kilichobadilishwa.", + "retryFailed": "Jaribu tena watoa huduma waliofeli", + "orUseApiKey": "au ungana na funguo ya API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "imeundwa", + "skipped": "tayari imewekwa", + "failed": "imefeli" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "URL ya Aikoni", "iconUrlHint": "Si lazima. URL ya picha inayoonyeshwa kama aikoni ya mtoa huduma huyu.", + "iconUrlInvalid": "URL ya ikoni si sahihi. Tumia http(s):// au data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Kikao tayari ni cha sasa", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Tumia uthibitishaji", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Bandika ufunguo wa API…", "zedSaving": "Inahifadhi…", "zedImportAction": "Ingiza", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "wezesha upya wa kikao cha Cursor kiotomatiki", + "cursorAgentNudgeBody": "Sakinisha cursor-agent kwa ajili ya upya wa kikao kiotomatiki — bila yake, muunganisho wa Cursor unahitaji kuunganishwa tena kwa mkono mara kwa mara kila masaa 24.", + "cursorAgentNudgeDismiss": "Puuza", "zedManualImportFailed": "Uingizaji wa mwongozo umeshindwa", "zedManualImportSuccess": "Imeingiza tokeni ya {provider} kutoka kwa Zed", "grokImportTitle": "Ingiza Grok Build Auth", @@ -5878,7 +6066,6 @@ "friendliai": "Kiwango cha bure cha makisio yasiyo na seva — hakuna kadi ya mkopo inayohitajika", "gemini": "Bure milele: maombi 1,500/siku kwa Gemini 2.5 Flash — hakuna kadi ya mkopo, pata ufunguo kwenye aistudio.google.com", "gigachat": "Unganisha GigaChat (Sber) kwa kutumia ufunguo wa API.", - "github-models": "Unda PAT ya GitHub yenye upeo wa 'models: read' kwenye github.com/settings/tokens", "gitlab": "Tokeni ya ufikiaji wa kibinafsi ya GitLab kwa ajili ya API ya umma ya Code Suggestions. Sanidi URL ya msingi ya self-hosted wakati hutumii gitlab.com.", "gitlawb-gmi": "Pata ufunguo wako wa API kutoka kwenye dashibodi ya Gitlawb Opengateway.", "gitlawb": "Pata ufunguo wako wa API kutoka kwenye dashibodi ya Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Unganisha Kimi Coding kwa mtiririko uliopo wa OAuth.", "kiro": "Kiwango cha bure: mikopo 50/mwezi (~tokeni 25K–100K). ⚠️ Kiro ToS inakataza matumizi ya proksi/harness ya wahusika wengine.", "codex": "Unganisha OpenAI Codex na mtiririko uliopo wa OAuth.", - "qwen": "Unganisha Qwen Code na mtiririko uliopo wa OAuth." + "qwen": "Unganisha Qwen Code na mtiririko uliopo wa OAuth.", + "github-models": "Unda PAT ya GitHub yenye upeo wa 'models: read' kwenye github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} inakubali vitambulisho vya asili vya mtoa huduma. Ingiza kutoka /miundo au ongeza vitambulisho maalum vya kuelekeza.", "bedrockModelsDescription": "Mitindo ya Amazon Bedrock inatolewa na eneo la AWS. Ingiza kutoka /miundo au ongeza vitambulisho vya muundo wa Bedrock vilivyowezeshwa katika eneo lililochaguliwa.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Wakati muunganisho wote uliowekwa umepita (kikomo, mikopo, au muda wa kumalizika), tumia muda huu kiwango kisicho na funguo cha mtoa huduma huyu. Zima ili kupuuza mtoa huduma huyu badala ya kutuma maombi yasiyo na utambulisho — inapendekezwa wakati kiwango kisicho na funguo kinapokataa maombi hayo (401).", "anonymousFallbackEnabled": "Fallback isiyojulikana imewezeshwa kwa {provider}", "anonymousFallbackDisabled": "Fallback ya kutotambulika imezimwa kwa {provider} — muunganisho uliochoka utaepuka mtoa huduma huyu", - "anonymousFallbackUpdateFailed": "Imeshindikana kuboresha mipangilio ya kurudi nyuma isiyo na jina" + "anonymousFallbackUpdateFailed": "Imeshindikana kuboresha mipangilio ya kurudi nyuma isiyo na jina", + "batchDeleteFailed": "Kuondoa kundi kumeshindikana", + "batchDeleteNetworkError": "Kosa la mtandao wakati wa kufuta kundi", + "batchUpdateFailed": "Sasisho la kundi limefeli", + "batchUpdateNetworkError": "Kosa la mtandao wakati wa sasisho la kundi", + "categoryAudio": "Sauti", + "categoryCloudAgent": "Wakala wa Wingu", + "categoryIde": "IDE", + "categoryLocal": "Mitaa", + "categorySearch": "Tafuta", + "categoryWebCookie": "Keki ya Mtandao", + "claudeExtraUsageBlockingDisabled": "Kuzuia matumizi ya ziada ya Claude kumekataliwa (matumizi ya ziada yanaruhusiwa)", + "claudeExtraUsageBlockingEnabled": "Kuzuia matumizi ya ziada ya Claude kumewashwa (matumizi ya ziada yatazuiwa)", + "claudeRoutingPreferenceDisabled": "Mifano ya Claude isiyo na kiambishi sasa haitafautisha Claude Code", + "claudeRoutingPreferenceEnabled": "Mifano ya Claude isiyo na kiambishi sasa inapendelea Claude Code", + "clearMediaFilter": "Futa", + "cliproxyRoutingDisabled": "Maombi sasa yanatumia OmniRoute asilia (moja kwa moja)", + "cliproxyRoutingEnabled": "Maombi sasa yanapita kupitia CLIProxyAPI (kuiga kwa kina)", + "codexLimitPolicyUpdated": "Sera ya kikomo ya Codex imesasishwa", + "codexServiceModeUpdated": "Hali ya huduma ya Codex imeboreshwa", + "codexServiceTierActive": "Huduma ya Codex {tier} iko hai", + "codexTierFastLabel": "Haraka", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Imeshindikana kutumia Kanuni ya Amri ya uthibitisho", + "commandCodeApplyingApproval": "Kivinjari kimekubaliwa, inatumika…", + "commandCodeApplyingKey": "Inatumia funguo iliyoidhinishwa na kivinjari…", + "commandCodeApprovalInstructions": "Fungua URL ya uthibitishaji, kubali ufikiaji, kisha bandika funguo/JSON/URL iliyorejeshwa hapa chini…", + "commandCodeAuthExpired": "Amri ya Msimbo wa uthibitisho imeisha", + "commandCodeConnected": "Nambari ya Amri imeunganishwa", + "commandCodeConnectionAdded": "Muunganisho wa Nambari ya Amri umeongezwa", + "commandCodeLinkExpired": "Kiungo cha Amri ya Nambari kimeisha muda wake", + "commandCodeOpeningStudio": "Inaanzisha Command Code Studio…", + "commandCodePopupBlocked": "Popup imezuiwa. Tafadhali ruhusu popups na ujaribu Command Code Connect tena.", + "commandCodeStartFailed": "Imeshindikana kuanzisha Command Code auth", + "connectionDeleted": "Muunganisho umefutwa", + "connectionFallback": "muunganisho", + "coolingConnectionsDescription": "Mawasiliano haya yalirudisha 429 (kikomo cha kiwango) kwenye ombi lao la mwisho. OmniRoute itayaepuka hadi kipima muda kikamilike — hakuna kuzima kwa mikono kunahitajika.", + "coolingConnectionsTitle": "Sasa inapoa ({count})", + "failedDeleteAlias": "Imeshindikana kufuta jina la utambulisho", + "failedDeleteConnection": "Imeshindikana kufuta muunganisho", + "failedDistributeProxies": "Imeshindikana kusambaza proxies.", + "failedSaveModelEndpointSettings": "Imeshindikana kuhifadhi mipangilio ya mwisho wa mfano", + "failedUpdateClaudeExtraUsagePolicy": "Imeshindikana kuboresha sera ya matumizi ya ziada ya Claude", + "failedUpdateClaudeRoutingPreference": "Imeshindikana kuboresha upendeleo wa njia ya Claude Code", + "failedUpdateCliproxyRouting": "Imeshindikana kuboresha ushirikiano wa CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Imeshindikana kuboresha sera ya kikomo ya Codex", + "failedUpdateCodexServiceMode": "Imeshindikana kuboresha hali ya huduma ya Codex", + "filterByMedia": "Vyombo vya Habari", + "freeBadge": "Bure", + "kimiCodeApiKeyLabel": "Kimi Code API Funguo", + "modelTestFailed": "Mtihani wa mfano umeshindwa", + "modelTestNetworkError": "Kosa la mtandao kujaribu mfano", + "networkError": "Kosa la mtandao", + "networkErrorDeletingAlias": "Hitilafu ya mtandao katika kufuta jina la utambulisho", + "networkErrorSettingAlias": "Hitilafu ya mtandao kuweka jina la utambulisho", + "noProvidersMatch": "Hakuna watoa huduma wanaolingana na utafutaji wako.", + "noSavedProxies": "Hakuna proxies zilizohifadhiwa zilizopatikana. Ongeza proxies katika Mipangilio → Proxy kwanza.", + "pageLoadErrorDescription": "Hatukuweza kupakia data ya mtoa huduma kwa sasa. Angalia muunganisho wako na ujaribu tena.", + "pageLoadErrorId": "Kosa ID: {id}", + "pageLoadErrorRetry": "Jaribu Tena", + "pageLoadErrorTitle": "Imeshindikana kupakia watoa huduma", + "playgroundTitle": "Uwanja wa Mchezo", + "providerDetailConnectionFlexActive": "Kiwango cha huduma ya Codex flex kimewashwa kwa muunganisho huu", + "providerDetailConnectionPriorityActive": "Daraja la huduma ya kipaumbele la Codex linafanya kazi kwa muunganisho huu", + "providerDetailGlobalFlexActive": "Kiwango cha huduma ya Global Codex flex kimewashwa", + "providerDetailGlobalPriorityActive": "Kiwango cha huduma ya kipaumbele ya Global Codex kimewashwa", + "proxiesDistributed": "Kugawanywa kwa {assigned} kazi za wakala kati ya {tagLabel}{total} muunganisho.", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Mipangilio ya mwisho wa mfano uliohifadhiwa", + "searchByModelAria": "Tafuta kwa mfano", + "selectSupportedEndpoint": "Chagua angalau kiunganishi kimoja kinachoungwa mkono", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "Imeshindwa kupakia orodha ya wanaofuatilia", "toggleFailed": "Imeshindwa kugeuza swichi", "refreshFailed": "Imeshindwa kuonyesha upya", - "deleteFailed": "Imeshindwa kufuta" + "deleteFailed": "Imeshindwa kufuta", + "add": "Ongeza", + "cancel": "Ghairi", + "configure": "Sanidi", + "copyEndpoint": "Nakili Mwisho wa Kuingia", + "coreEndpointHint": "Kiashiria Kuu cha Mwisho", + "coreNodesHint": "Vidokezo vya Msingi wa Nodes", + "create": "Unda", + "deleteConfirm": "Thibitisha Kufuta", + "empty": "Tupu", + "globalModeDescription": "Maelezo ya Hali ya Kimataifa", + "localCoreHint": "Kidokezo cha Msingi wa Mitaa", + "nodeSummary": "Muhtasari wa Node", + "providerRequired": "Mtoa Huduma Anahitajika", + "providerRouting": "Usafirishaji wa Mtoa huduma", + "refresh": "Fanya Upya", + "refreshInterval": "Muda wa Kurekebisha", + "ruleModeDescription": "Maelezo ya Njia ya Kanuni" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Endesha urejesho wa kiotomatiki wa picha-kwenda-maandishi kabla ya kuelekeza maombi ya picha kwenye modeli za maandishi pekee.", "visionBridgeEnabledLabel": "Imewezeshwa", "visionBridgeEnabledDesc": "Geuza daraja la kabla ya simu linalobadilisha sehemu za picha na maandishi yaliyotolewa.", + "visionBridgeRerouteTextOnlyLabel": "Rekebisha mifano ya maandiko pekee", + "visionBridgeRerouteTextOnlyDesc": "Tuma ombi kamili, ikiwa ni pamoja na picha, kwa mfano wa daraja wakati mfano uliochaguliwa huna ingizo la picha.", "visionBridgeModel": "Mfano wa Bridge", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Kitambulisho chochote cha modeli ya OmniRoute kinachosaidia uwezo wa kuona kinaweza kutumika hapa.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "Ufunguo wa API hauna upeo wa manage.", "BYPASS_PREFIX_NOT_ALLOWED": "Kiambishi awali kimoja au zaidi kinalenga njia zenye uwezo wa ku-spawn na haziwezi kupitwa.", "GENERIC": "Imeshindwa kusasisha mipangilio ya authz." - } + }, + "remove": "ondoa" }, "resilienceBaseCooldownLabel": "Upole wa msingi", "scopeLabel": "Upeo", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Kujaribu sauti…", "modalityBridgeAudioTestOk": "Daraja la Sauti Sawa — {count} kipande(kipande) kilichotafsiriwa na {model}", "modalityBridgeAudioTestNoop": "Daraja la Sauti halikufanya kazi (lengo linaweza kusaidia sauti, hakuna mtoa huduma wa STT aliyeunganishwa, au daraja limezuiliwa)", - "modalityBridgeAudioTestError": "Jaribio la sauti limefeli: {message}" + "modalityBridgeAudioTestError": "Jaribio la sauti limefeli: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus models to frontier combo", + "cliproxyapiFallbackCodes": "M codes ya Kuanguka ya Cliproxyapi", + "cliproxyapiFallbackDescription": "Maelezo ya Kurejelea ya Cliproxyapi", + "cliproxyapiHealthLabel": "Cliproxyapi Afya Lebo", + "cliproxyapiImportFailed": "Cliproxyapi Kuagiza Kumeshindikana", + "cliproxyapiImportResult": "Matokeo ya Kuagiza Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL Isiyo Sahihi", + "cliproxyapiLifecycleNoticeAfter": "Taarifa ya Mzunguko wa Cliproxyapi Baada ya", + "cliproxyapiLifecycleNoticeBefore": "Taarifa ya Mzunguko wa Cliproxyapi Kabla", + "cliproxyapiLifecycleNoticeLink": "Kiungo cha Taarifa za Mzunguko wa Maisha ya Cliproxyapi", + "cliproxyapiPortLabel": "Lebo la Bandari ya Cliproxyapi", + "cliproxyapiStatusLabel": "Cliproxyapi Hali Label", + "cliproxyapiVersionLabel": "Cliproxyapi Toleo Lebo", + "collection": "Mkusanyiko", + "errorPage": { + "description": "Hatuwezi kupakia mipangilio kwa sasa. Tafadhali jaribu tena baada ya sekunde chache.", + "errorId": "Kosa ID: {id}", + "retry": "Jaribu Tena", + "title": "Imeshindikana kupakia mipangilio" + }, + "host": "Mwenyeji", + "notInstalled": "Haijasanidiwa", + "oneproxyActions": "Oneproxy Vitendo", + "oneproxyActive": "Oneproxy Inafanya Kazi", + "oneproxyAnonymity": "Oneproxy Uwazi", + "oneproxyCountry": "Nchi ya Oneproxy", + "oneproxyDelete": "Oneproxy Futa", + "oneproxyEmpty": "Oneproxy Haina Maudhui", + "oneproxyHost": "Mwenyeji wa Oneproxy", + "oneproxyLatency": "Muda wa Jibu wa Oneproxy", + "oneproxyProtocol": "Protokali ya Oneproxy", + "oneproxyQuality": "Ubora wa Oneproxy", + "oneproxySyncFailed": "Kusawazisha kumeshindikana: {error}", + "oneproxySyncSuccess": "Imepatana {total} proxies ({added} mpya, {updated} zilizosasishwa)", + "proxyDocumentationSocks5DescAfter": "Hati ya Proxy Socks5 Desc Baada", + "proxyFreePoolAddProxy": "Onyesho Bure la Proxy Ongeza Proxy", + "proxyFreePoolAdding": "Kuongeza Hifadhi Bila Proxy", + "proxyFreePoolSelectProxy": "Chaguo la Proxy Bure Pool Chagua Proxy", + "proxyStatusActive": "Hali ya Proxy Iko Hai", + "proxyStatusInactive": "Hali ya Proxy Haipo", + "routingAddEntry": "Ongeza ingizo", + "settingSaveFailed": "Kuweka Kuokoa Kumeshindikana", + "settingSaved": "Mipangilio Imehifadhiwa", + "skillsmpApiKeyHintAfter": ". Kiwango cha mipaka: {limit} maombi/siku.", + "skillsmpApiKeyHintBefore": "Pata funguo yako ya API kutoka", + "syncFailed": "Sawa haikuwezekana", + "unhealthy": "Isiyofaa", + "oneproxyDescription": "Pata na kuzungusha proxies zilizothibitishwa bure kutoka jukwaa la jamii la 1proxy", + "oneproxySyncing": "Inasawazisha...", + "oneproxySyncNow": "Sasisha Sasa", + "oneproxyClearAll": "Futa Yote", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Futa proxies zote za 1proxy?", + "memorySkillsSkillsmpDescription": "Unganisha na SkillsMP kugundua na kufunga ujuzi kutoka sokoni.", + "memorySkillsActiveProviderDescription": "Chagua mtoa huduma ambaye ukurasa wa Ujuzi unatumia kwa ajili ya kutafuta na kufunga.", + "memorySkillsSkillsmpProviderTitle": "Soko la SkillsMP", + "memorySkillsSkillsmpProviderDescription": "Soko lililoidhinishwa (linatumia funguo yako ya API ya SkillsMP).", + "memorySkillsSkillsshProviderTitle": "skills.sh Katalogi", + "memorySkillsSkillsshProviderDescription": "Mtoa huduma wa saraka ya umma (hakuna funguo za API zinazohitajika).", + "routingCcBridgeCatalogName": "Daraja la CC linalofaa kwa Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Mtoa huduma wa asili wa Claude mwenye alama zilizotolewa na OAuth.", + "routingCcBridgeName": "Daraja la Claude-Code", + "routingCcBridgeDescription": "Relay mwisho kutumia funguo za API (zinazoendana na anthropic-cc-*).", + "routingCustomProviderDescription": "Mtoa huduma wa kawaida.", + "routingUnknownOpKind": "Aina ya op isiyojulikana: {kind}", + "routingInvalidJson": "JSON isiyo sahihi: {error}", + "routingConfigMustBeObject": "Config lazima iwe kitu cha JSON", + "routingEnabledMustBeBoolean": "`enabled` lazima iwe kweli au uongo", + "routingPipelineMustBeArray": "`pipeline` lazima iwe orodha ya ops", + "routingPipelineTooLong": "Pipeline haiwezi kupita ops 50", + "routingOpMissingKind": "Op #{index}: aina inakosekana au si sahihi", + "routingOpUnknownKind": "Op #{index}: aina isiyojulikana \"{kind}\"", + "routingJsonEditorHide": "ficha mhariri wa JSON", + "routingJsonEditorImportExport": "Ingiza / Export JSON", + "routingJsonEditorLabel": "JSON (hariri na tumia, au bandika kuagiza)", + "routingApplyJson": "Tumia JSON", + "routingTransformsFootnote": "Oparatifu zote za kubadilisha ni idempotent kwenye kurudi. Mabadiliko yanaanza kufanya kazi mara moja kwenye ombi linalofuata.", + "cliproxyapiUnknown": "Haijulikani", + "cliproxyapiVersion": "Toleo", + "cliproxyapiHealth": "Afya", + "cliproxyapiPort": "Bandari", + "qdrantHost": "Mwenyeji", + "qdrantCollection": "Mkusanyiko" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Kamili", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Chaguo La Kawaida", + "off": "Zimezimwa", + "lite": "Lite", + "standard": "Kawaida", + "aggressive": "Mwenye Hasira", + "ultra": "Ultra", + "responsesToolOutput": "Zana ya majibu ya pato" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Hufanya kazi mwisho kwenye mrundikano (baada ya RTK/Caveman kusafisha maandishi, OmniGlyph hubadilisha yaliyosalia kuwa picha) na pia hufanya kazi pekee kupitia hali ya omniglyph. Hii ni hakiki na inabaki imezimwa kwa chaguomsingi hadi uthibitishaji wa mwisho hadi mwisho ukamilike.", "saved": "Imehifadhiwa.", "saveFailed": "Imeshindwa kuhifadhi.", - "enableAria": "Wezesha injini ya OmniGlyph" + "enableAria": "Wezesha injini ya OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Huduma Zilizopachikwa", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "Vikosi vyote vina afya", + "needsAttention": "Baadhi ya alama zinahitaji umakini", + "refreshFailures": "Kukosekana kwa ufanisi wa upya token kumegundulika", + "unknown": "Hali ya afya haijulikani" + }, + "systemMonitor": { + "metricsAriaLabel": "Metriki za Mfumo", + "memory": "Kumbukumbu", + "memoryShort": "mem", + "uptime": "Wakati wa Uendeshaji", + "ariaLabel": "Ufuatiliaji wa Mfumo", + "title": "Msimamizi wa Mfumo", + "version": "Toleo", + "connections": "Mawasiliano", + "circuitBreakers": "Vifungo vya Mzunguko", + "open": "{count} wazi", + "memoryUsage": "Matumizi ya kumbukumbu" + }, + "never": "Kamwe", + "justNow": "Sasa hivi", + "minutesAgo": "{count}d zamani", + "hoursAgo": "masaa {count} yaliyopita", + "tokens": "Vikosi", + "costs": "Mifumo", + "autoRefresh": "Ukurasa Unajisasaisha Kiotomatiki ({seconds}s)", + "toggleAutoRefresh": "Geuza upya kiotomatiki", + "activeRequests": "Maombi Yaliyopo", + "totalRequests": "Maombi Yote", + "totalInputTokens": "Jumla ya Token za Kuingiza", + "model": "Mfano", + "provider": "Mtoa huduma", + "requests": "Maombi", + "lastUsed": "Iliyotumika Mwisho", + "inputTokens": "Vifaa vya Kuingiza", + "totalTokens": "Jumla ya Token", + "inputCost": "Gharama ya Kuingiza", + "outputCost": "Gharama ya Kutolea", + "noUsageData": "Hakuna matumizi yaliyorekodiwa bado. Fanya maombi ili kuona data hapa.", + "account": "Akaunti", + "accountLabel": "Akaunti {id}", + "noAccountUsage": "Hakuna matumizi maalum ya akaunti yaliyorekodiwa bado. Fanya maombi kwa kutumia akaunti za OAuth ili kuona data hapa." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Rekebisha kupitia Takwimu za Programu", + "resetViaAppDataDescription": "Futa faili la mipangilio kutoka kwenye saraka ya data ya programu ili kurekebisha nenosiri lako:", + "quitDesktopApp": "Funga programu ya desktop ya OmniRoute kabisa", + "navigateToAppDataDirectory": "Nenda kwenye saraka ya data ya programu:", + "checkSystemAppDataFolder": "(Tazama folda ya data ya programu ya mfumo wako)", + "relaunchDesktopFreshSetup": "Anzisha upya programu ya desktop ya OmniRoute — itaanza usanidi mpya", + "alternativeSetPasswordTitle": "Chaguo Mbadala: Weka Nywila Mpya", + "alternativeSetPasswordDescription": "Weka nenosiri jipya la awali kupitia faili la mazingira ya seva:", + "openServerEnvFilePrefix": "Fungua", + "relaunchDesktopApp": "Anzisha upya programu ya desktop ya OmniRoute", + "codexLinkInvalidOrExpired": "Kiungo hiki si halali au kimeisha muda wake.", + "codexValidationServerError": "Haiwezekani kufikia seva ili kuthibitisha kiungo hiki.", + "codexSaveConnectionError": "Haiwezekani kuokoa muunganisho. Kiungo kinaweza kuwa kimeisha muda.", + "codexDeviceLoginDisabled": "Kuingia kwa kutumia nambari ya kifaa kumekataliwa kwa akaunti hii ya OpenAI. Wezesha katika mipangilio ya usalama ya ChatGPT (au uliza msimamizi wa eneo lako la kazi).", + "codexAuthorizationTimedOut": "Muda wa uthibitisho umekwisha. Bonyeza Anza tena kujaribu.", + "authenticationCancelled": "Uthibitishaji umesitishwa.", + "unexpectedAuthenticationError": "Hitilafu isiyotarajiwa wakati wa uthibitishaji. Tafadhali jaribu tena.", + "connectOpenAiCodexTitle": "Unganisha OpenAI Codex", + "codexConnectDescription": "Thibitisha akaunti ya ChatGPT kumaliza kuweka muunganisho huu.", + "validatingCodexLink": "Inathibitisha kiungo…", + "codexGenerateCodeDescription": "Bonyeza hapa chini ili kuunda msimbo wa mara moja, kisha ingia kwenye OpenAI.", + "startCodexFlow": "Anza", + "requestingOpenAiCode": "Inahitaji msimbo kutoka OpenAI…", + "codexVerificationInstructions": "1. Fungua ukurasa wa uthibitisho wa OpenAI na 2. ingiza msimbo huu. Ukurasa huu unasasishwa kiotomatiki mara tu unapoidhinisha.", + "yourCode": "Nambari yako", + "openVerificationPage": "Fungua ukurasa wa uthibitisho", + "copyUrlShort": "Nakili URL", + "savingConnection": "Inahifadhi muunganisho…", + "codexConnected": "Imekamilika!", + "codexConnectionRegistered": "Akaunti ya Codex imeandikishwa. Unaweza kufunga kichupo hiki.", + "tryAgain": "Jaribu tena", + "traeAuthorizationSuccess": "Idhini ya Trae ✓", + "traeAuthorizationFailed": "Trae ruhusa imekosa", + "closeAuthorizationWindow": "Unaweza kufunga dirisha hili.", + "returnToDashboard": "Rudi kwenye dashibodi.", + "resetViaAppData": "Rekebisha kupitia Takwimu za Programu", + "deleteSettingsToReset": "Futa faili la mipangilio kutoka kwenye saraka ya data ya programu ili kurekebisha nenosiri lako:", + "quitAppCompletely": "Funga programu ya desktop ya OmniRoute kabisa", + "navigateToAppData": "Nenda kwenye saraka ya data ya programu", + "checkAppDataFolder": "Angalia folda ya data ya programu ya mfumo wako", + "deleteSettingsJson": "Futa", + "relaunchAppFresh": "Anzisha upya programu ya desktop ya OmniRoute — itaanza usanidi mpya", + "alternativeSetPassword": "Chaguo Mbadala: Weka Nywila Mpya", + "setNewPasswordViaEnv": "Weka nenosiri jipya la awali kupitia faili la mazingira ya seva:", + "openServerEnv": "Fungua", + "inDataDirectory": "katika saraka ya data", + "addOrUpdate": "Ongeza au sasisha", + "deleteAndRelaunch": "Futa", + "settingsJson": "settings.json", + "fromDataDir": "kutoka kwenye saraka ya data", + "relaunchApp": "Anzisha upya programu ya desktop ya OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "Kampuni", + "pricing": "Bei", + "apiReference": "Marejeo ya API", + "helpCenter": "Kituo cha Msaada", + "about": "Kuhusu", + "blog": "Blogu", + "contact": "Wasiliana", + "terms": "Masharti", + "privacy": "Faragha", + "license": "Leseni", + "footerDescription": "Kiunganishi kilichounganika kwa miundombinu ya kisasa ya AI. Salama, inayoonekana, na inayoweza kupanuka.", + "communityDiscussions": "Majadiliano ya Jamii" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — Nyaraka za OmniRoute", + "metadataDefaultTitle": "Hati ya OmniRoute", + "metadataDescription": "Hati kamili ya lango la OmniRoute AI — usanidi, API, ufinyazi, uwekaji, na zaidi.", + "layoutNavTitle": "Nyaraka za OmniRoute", + "layoutHomeLink": "Nyumbani kwa Nyaraka", + "layoutDashboardLink": "← Rudi kwenye Dashibodi", + "homeTitle": "Hati ya OmniRoute", + "homeMetadataDescription": "Kila kitu unahitaji ili kuelekeza, kubana, na kupanua AI yako — miongozo ya usanidi, rejeleo la API, kubana, kutekeleza, na zaidi.", + "homeTwitterDescription": "Hati kamili za lango la OmniRoute AI", + "homeDescription": "Kila kitu unahitaji ili kuelekeza, kubana, na kupanua AI yako", + "homeSearchHint": "Bonyeza Ctrl K kutafuta hati", + "featuredQuickStartTitle": "Anza Haraka", + "featuredQuickStartDescription": "Pata OmniRoute ikifanya kazi ndani ya dakika 3", + "featuredAutoComboTitle": "Mwongozo wa Auto-Combo", + "featuredAutoComboDescription": "Acha OmniRoute ichague AI bora kwa ajili yako", + "featuredProvidersTitle": "Mwongozo wa Watoa Huduma", + "featuredProvidersDescription": "Unganisha watoa huduma wa AI ndani ya dakika", + "nonTechUsersTitle": "Kwa Watumiaji Wasio Wataalamu", + "nonTechUsersSubtitle": "Anza haraka — hakuna ujuzi wa kiufundi unaohitajika", + "techUsersTitle": "Kwa Watumiaji wa Teknolojia", + "techUsersSubtitle": "Chunguza kwa undani usanifu, APIs, na mambo ya ndani", + "apiExplorerMetadataTitle": "Mchambuzi wa API — Nyaraka za OmniRoute", + "apiExplorerMetadataDescription": "Mchunguzi wa API wa Kihusishi — jaribu mwisho wa OmniRoute moja kwa moja na majibu ya wakati halisi", + "apiExplorerTitle": "Mchambuzi wa API", + "apiExplorerDescription": "jaribu mwisho wa OmniRoute moja kwa moja. Chagua mwisho, weka mipangilio ya ombi lako, na uone jibu katika wakati halisi.", + "apiExplorerSseStarted": "Mtiririko wa SSE umeanzishwa — angalia terminal/devtools kwa matokeo ya wakati halisi.", + "apiExplorerError": "Kosa: {message}", + "apiExplorerAuth": "uthibitisho", + "apiExplorerResponseLabel": "Majibu", + "apiExplorerSelectEndpoint": "Chagua kiunganishi cha kuchunguza", + "apiExplorerChooseApi": "Chagua API kutoka kwenye upande wa kushoto ili kuona maelezo na kujaribu moja kwa moja", + "feedbackThanks": "Asante kwa maoni yako!", + "feedbackQuestion": "Je, ukurasa huu ulikuwa na msaada?", + "pageMetadataTitle": "{title} — Nyaraka za OmniRoute", + "pageMetadataDescription": "Hati za OmniRoute: {title}", + "breadcrumb": "Njia ya Kichwa", + "apiReferenceTable": { + "parameters": "Parameta", + "name": "Jina", + "type": "Aina", + "description": "Maelezo", + "returns": "Inarudisha", + "typePrefix": "Aina:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "Sehemu ya OAuth haijakamilika (inakosa URI ya kurejea au msahihishaji wa msimbo). Anza tena muunganisho na ujaribu tena.", + "errorExchangeFailed": "Kubadilishana kumeshindikana", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Akikosi ya kawaida ya Google OAuth inafanya kazi tu kwenye localhost. Kwa matumizi ya mbali, tengeneza akakosi zako za OAuth kupitia mabadiliko ya mazingira: ANTIGRAVITY_OAUTH_CLIENT_ID na ANTIGRAVITY_OAUTH_CLIENT_SECRET. Tazama sehemu ya README 'OAuth kwenye Seva ya Mbali'.", + "errorSaveFailed": "Hifadhi imekosa", + "errorAuthorizationFailed": "Uidhinishaji umeshindikana", + "errorAuthorizationTimeout": "Muda wa kuidhinisha umekwisha", + "errorRequestFailed": "Omba ilishindikana", + "errorCallbackServerFailed": "Imeshindikana kuanzisha seva ya kurudi nyuma", + "errorBrowserUnavailable": "OAuth ya kivinjari haipatikani kwa mtoa huduma huyu katika mazingira ya sasa. Tumia njia ya uthibitishaji inayoungwa mkono badala yake.", + "errorStateMismatch": "Mismatched OAuth hali. Anza upya muunganisho na ujaribu tena.", + "errorImportAccessToken": "Imeshindikana kuagiza tokeni ya ufikiaji", + "errorSessionNotInitialized": "Mkutano wa OAuth haujaanzishwa. Anza upya mchakato wa muunganisho na ujaribu tena.", + "errorNoAuthorizationCode": "Hakuna nambari ya idhini iliyopatikana. Bandika URL ya kurudi au Nambari ya Uthibitishaji.", + "tabDeviceCode": "Nambari ya Kifaa", + "tabBrowserLogin": "Kuingia Kwenye Kivinjari", + "tabImportAuthJson": "Ingiza auth.json", + "tabPasteApiKey": "Bandika Funguo la API", + "windsurfPasteDescription": "Katika Windsurf / VS Code IDE, endesha amri \"Windsurf: Provide Auth Token\" kutoka kwenye palette ya amri (au bonyeza kitufe cha Jupyter \"Get Windsurf Authentication Token\"), kisha nakili token iliyoonyeshwa na ubandike hapa chini. Kufungua windsurf.com/show-auth-token moja kwa moja kunaonyesha tu ukurasa wa \"Redirecting\" — IDE lazima ianzishe mchakato huo.", + "grokAuthJsonDescription": "Bandika maudhui YOTE ya ~/.grok/auth.json (sio tu uwanja wa JWT \"key\"). JWT tupu haina refresh_token, hivyo muunganisho unakufa baada ya muda wake kumalizika (#7610). Pendelea kidirisha maalum cha Kuagiza auth.json inapopatikana.", + "devinDesktopPasteDescription": "Pasta funguo ya API ya Devin iliyopo kutoka kwa kikao cha Devin kilichothibitishwa. Upatikanaji wa usafirishaji wa funguo na hatua zinatofautiana kulingana na toleo la Devin na akaunti.", + "devinPasteDescription": "Toa WINDSURF_API_KEY yako (iliyopatikana kupitia `devin auth login`, au kupitia amri ya Windsurf IDE \"Windsurf: Provide Auth Token\").", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "Funguo la API / Token", + "saving": "Inahifadhi…", + "saveConnection": "Hifadhi Muunganisho", + "gheDescription": "Ingiza URL ya msingi ya mfano wako wa GitHub Enterprise (mfano: https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL ya GitHub Enterprise", + "gheUrlRequired": "URL ya GitHub Enterprise inahitajika", + "gitlabDuoSetupTitle": "Mipangilio ya GitLab Duo OAuth", + "gitlabDuoSetupMessage": "GitLab Duo OAuth haijasanidiwa. Jisajili programu ya OAuth kwenye {applicationsUrl} na URI ya kurejea {redirectUri} na mipango \"{scopes}\", kisha weka {clientIdEnv} (na hiari {clientSecretEnv}) na uanzishe upya.", + "gitlabDuoSetupDescription": "Baada ya programu kuandikishwa na vigezo vya mazingira kuwekwa kwenye mfano huu wa OmniRoute, bonyeza Endelea kuanza kuingia kwa OAuth.", + "continue": "Endelea" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Pakia Zaidi", - "loadingMore": "Inapakia zaidi..." + "loadingMore": "Inapakia zaidi...", + "correlationId": "Kitambulisho cha Uhusiano", + "group": { + "showAllRows": "Onyesha safu zote", + "showLatestPerCorrelation": "Onyesha ya hivi karibuni kwa kitambulisho cha uhusiano", + "grouped": "Imeunganishwa" + }, + "running": "kukimbia", + "interval": { + "decrease": "Punguza kipindi", + "title": "Kipindi cha kujisafisha kiotomatiki kwa sekunde", + "increase": "Ongeza kipindi" + }, + "status": { + "inProgress": "Inasonga mbele", + "recoveredByRetry": "Imepatikana kwa kujaribu tena", + "goToParent": "Nenda kwa ombi la mzazi", + "healedTitle": "Imeshindikana, imepona baada ya {count} majaribio", + "healed": "amepona", + "failedTitle": "Jaribio zote {count} zimefeli", + "failed": "imeshindwa", + "pinnedTitle": "Mfano umechaguliwa kupitia upanuzi wa muktadha wa kikao", + "pinned": "imefungwa" + }, + "attempts": "jaribio", + "detail": { + "collapse": "Punguza {title}", + "expand": "Panua {title}", + "copyTitle": "Nakili {title}", + "copied": "Imepigwa nakala!", + "copy": "Nakili", + "autoscrollOn": "Autoscroll: on", + "autoscrollOff": "Autoscroll: off", + "payload": { + "clientRawRequest": "Omba Mbichi ya Mteja", + "clientRequest": "Omba Mteja", + "openaiRequest": "Omba wa OpenAI", + "providerRequest": "Omba Mtoa Huduma", + "providerResponse": "Majibu ya Mtoa Huduma", + "clientResponse": "Majibu ya Mteja", + "pipelineError": "Kosa la Pipeline" + }, + "payloadMissing": "Kipande cha maelezo ya mzigo hakipatikani tena kwa ajili ya kipande hiki cha kumbukumbu.", + "payloadCorrupt": "Kipande cha mzigo kilichofafanuliwa hakiwezi kufasiriwa.", + "notAvailable": "N/A", + "semanticCache": "Semantic (OmniRoute)", + "upstreamCache": "Upstream (Mtoa)", + "ariaLabel": "Maelezo ya kumbukumbu ya ombi", + "completed": "Imekamilika", + "upstreamStatus": "Upstream: {status}", + "statusDiscrepancy": "OmniRoute ilirudisha {status} ingawa mtoa huduma alirudisha {provider}", + "previousRequest": "Omba iliyopita", + "nextRequest": "Omba inayofuata", + "close": "Funga kidirisha cha maelezo", + "startedAt": "Ilianza Saa", + "endedAt": "Iliisha Saa", + "duration": "Muda", + "model": "Mfano", + "provider": "Mtoa huduma", + "account": "Akaunti", + "input": "Ingiza", + "totalIn": "Jumla Ndani: {value}", + "cacheRead": "Soma Kache: {value}", + "cacheWrite": "Andika Kumbukumbu: {value}", + "compressed": "Imefinywa: {from} → {to} ({percent}% imehifadhiwa)", + "output": "Matokeo", + "totalOut": "Jumla Ya Kutoka: {value}", + "reasoning": "Sababu: {value}", + "requestedModel": "Mfano Uliyoombwa", + "requestProtocol": "Itifaki ya Req", + "cacheSource": "Chanzo cha Kumbukumbu", + "modelPinning": "Kufunga Mfano", + "activeModelPinning": "Hai — mfano umechaguliwa kupitia pini ya kikao", + "rotated": "Imepinduliwa: {initial} -> {final}", + "apiKey": "Funguo la API", + "noApiKey": "Hakuna funguo ya API", + "combo": "Combo", + "error": "Kosa", + "unblockAll": "Fungua zote", + "cleared": "Imesafishwa", + "unblock": "Fungua Bloku", + "relatedRequests": "Maombi Yanayohusiana ({count})", + "current": "sasa", + "detailStatus": "Hali ya Maelezo", + "loadingDetails": "Inapakia maelezo ya ombi...", + "providerEventStream": "Mtoa Tukio Mtiririko", + "clientEventStream": "Mtiririko wa Tukio la Mteja", + "eventStream": "Mtiririko wa Tukio", + "responsePayloadLegacy": "Mjumbe wa Jibu (Urithi)", + "requestPayloadLegacy": "Ombi la Mzigo (Urithi)", + "noPayload": "Hakuna data ya payload inayopatikana kwa ajili ya ingizo hili la kumbukumbu.", + "correlationId": "Kitambulisho cha Uhusiano", + "correlationIdValue": "Kitambulisho cha Uhusiano: {id}", + "detailedPayloadInfo": "Washa ufuatiliaji wa kina kwanza ikiwa unataka mtazamo wa mzigo wa mteja/mtoa huduma wa hatua nne kwa maombi mapya." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} imelemazwa", "providerAdded": "{provider} imeongezwa", "add": "Ongeza", - "manualApiKey": "Tumia funguo ya API ya mwongozo" + "manualApiKey": "Tumia funguo ya API ya mwongozo", + "createDahlTokenFailed": "Imeshindikana kuunda token ya Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Sanidi proxy", + "providerProxyTitleConfigured": "Proxy imewekwa: {host}" }, "gamification": { "leaderboardScopes": { @@ -12040,7 +12695,7 @@ "description": "Baada ya ulandanishi wa mtoa huduma na mfano, zalisha upya wasifu wa ~/.codex/*.config.toml kutoka kwenye katalogi hai. Hii haibadilishi kamwe usanidi amilifu au wa chaguomsingi wa Codex na imezimwa kwa chaguomsingi." }, "OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES": { - "description": "Baada ya ulandanishi wa mtoa huduma na mfano, zalisha upya wasifu wa ~/.claude/profiles/{name}/settings.json kutoka kwenye katalogi hai. Hii haibadilishi kamwe usanidi amilifu au wa chaguomsingi wa Claude na imezimwa kwa chaguomsingi." + "description": "After provider-model synchronization, regenerate ~/.claude/profiles//settings.json profiles from the live catalog. This never changes the active or default Claude configuration and is off by default." }, "OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK": { "description": "Zima kituo cha mwisho cha ukaguzi wa afya wa mfano wa ndani." @@ -12201,7 +12856,9 @@ "avoid": "Imezuiliwa na ToS — kagua masharti", "caution": "Tahadhari — vifungu vya matumizi ya kibinafsi / proxy", "ok": "Inaruhusu kwa ujumla" - } + }, + "allProviders": "Watoa wote", + "noApiKeyRequired": "Hakuna funguo ya API inayohitajika" }, "providerHealthAutopilot": { "title": "Autopilot ya Afya ya Mtoa Huduma", @@ -12390,7 +13047,11 @@ "on": "IMEWASHWA", "off": "IMEZIMWA", "availableProviders": "Watoa huduma wanaopatikana ({count})", - "noProviderOverrides": "Hakuna ubatilishaji — watoa huduma wote wanaotumika watashiriki na miundo yao chaguomsingi" + "noProviderOverrides": "Hakuna ubatilishaji — watoa huduma wote wanaotumika watashiriki na miundo yao chaguomsingi", + "resetFailed": "Kurejesha kumeshindikana", + "resetSuccess": "Mipangilio imewekwa upya kwa viwango vya kawaida", + "running": "Inakimbia...", + "testFailed": "Jaribio limefeli" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) ni Rafiki Mwanzilishi wa Open Source wa OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Mtoa huduma haitoi msaada wa kuona kwa ombi hili la picha", "capabilityFilter.toolsMismatch": "Mtoa huduma haitoi msaada wa kuita zana", "capabilityFilter.structuredOutputMismatch": "Mtoa huduma haitoi matokeo yaliyoandikwa kwa muundo", - "capabilityFilter.contextWindowMismatch": "Omba inazidi dirisha la muktadha wa mtoa huduma" + "capabilityFilter.contextWindowMismatch": "Omba inazidi dirisha la muktadha wa mtoa huduma", + "publicSystem": { + "notFound": { + "title": "Ukurasa haukupatikana", + "description": "Ukurasa unatafuta haupo au umehamishwa.", + "dashboardAriaLabel": "Rudi kwenye dashibodi", + "statusAriaLabel": "Fungua ukurasa wa hali ya mfumo", + "systemStatus": "Hali ya Mfumo" + }, + "error": { + "title": "Kosa la Ndani la Server", + "description": "Kitu kimeenda vibaya wakati wa kushughulikia ombi lako. Timu yetu imearifiwa na inafanya kazi kwenye suluhisho.", + "errorId": "Kosa ID: {id}", + "detailsAriaLabel": "Maelezo ya kosa", + "retryAriaLabel": "Jaribu kupakia ukurasa tena", + "tryAgain": "Jaribu Tena", + "dashboardAriaLabel": "Rudi kwenye dashibodi", + "statusAriaLabel": "Fungua hali ya mfumo", + "systemStatus": "Hali ya Mfumo" + }, + "globalError": { + "title": "Kitu kimeenda vibaya", + "description": "Kosa lisilotarajiwa limetokea. Hii imeandikwa na timu yetu itachunguza.", + "detailsAriaLabel": "Maelezo ya kosa", + "retryAriaLabel": "jaribu kupakia tena ukurasa", + "tryAgain": "Jaribu Tena", + "statusAriaLabel": "Fungua hali ya mfumo", + "systemStatus": "Hali ya Mfumo" + }, + "offline": { + "title": "Tatizo la Muunganisho", + "description": "OmniRoute haiwezi kufikia mtandao kwa sasa. Angalia intaneti yako, VPN, au mipangilio ya proxy.", + "connectionRestored": "Muunganisho umeimarishwa", + "offlineModeDetected": "Hali ya mtandao wa mbali imegundulika", + "retryConnection": "Jaribu Kuunganisha Tena", + "openStatusPage": "Fungua Ukurasa wa Hali" + }, + "maintenance": { + "title": "Matengenezo ya Ratiba", + "description": "Huduma zingine hazipatikani kwa muda wakati matengenezo yanaendelea. Mwelekeo wa msingi kawaida unabaki mtandaoni, lakini vipengele vya usimamizi vinaweza kuwa na kasoro.", + "suggestion1": "Jaribu tena baada ya dakika chache.", + "suggestion2": "Angalia viashiria vya afya vya sasa na hali ya mtoa huduma kabla ya kujaribu tena.", + "systemStatus": "Tazama Hali ya Mfumo", + "healthDashboard": "Fungua Dashibodi ya Afya" + }, + "status": { + "title": "Hali ya Mfumo", + "description": "Picha halisi ya uendeshaji kwa huduma za msingi za OmniRoute.", + "loadingHealth": "Inapakia metriki za afya...", + "failedToLoad": "Imeshindikana kupakia afya ya mfumo.", + "unableToReachHealth": "Haiwezekani kufikia kiungo cha afya. Angalia muunganisho na jaribu tena.", + "healthCheckFailed": "Ukaguzi wa Afya Umeshindwa", + "openConnectivityHelp": "Fungua Msaada wa Uunganisho", + "maintenanceInfo": "Taarifa za Matengenezo", + "service": "Huduma", + "unknown": "sijulikana", + "notAvailable": "n/a", + "providersTracked": "Watoa Huduma Waliofuatiliwa", + "circuitBreakerState": "Hali ya Kivunja Mzunguko wa Mtoa Huduma", + "lastUpdate": "Sasisho la mwisho: {timestamp}", + "uptimeMinutes": "{minutes}m", + "uptimeHoursMinutes": "{hours}h {minutes}m" + }, + "statusPages": { + "400": { + "title": "Ombi Mbaya", + "description": "Msimbo wa ombi si sahihi au haujakamilika.", + "suggestion1": "Kagua maeneo yanayohitajika na muundo wa payload kabla ya kujaribu tena.", + "suggestion2": "Ikiwa unatumia API, thibitisha muundo wa JSON kwa ndani.", + "suggestion3": "Ikiwa hii inaendelea kutokea, fungua ombi katika Translator Playground ili kukagua mzigo.", + "primaryAction": "Fungua Hati", + "secondaryAction": "Fungua Mtafsiri" + }, + "401": { + "title": "Haujaidhinishwa", + "description": "Uthibitisho unahitajika ili kufikia rasilimali hii.", + "suggestion1": "Ingiza tena na ujaribu operesheni hiyo.", + "suggestion2": "Kwa wito wa API, thibitisha kuwa token ya Bearer ipo na ni halali.", + "suggestion3": "Ikiwa token ilibadilishwa hivi karibuni, sasisha akreditivu zako za mteja.", + "primaryAction": "Nenda Kwenye Kuingia", + "secondaryAction": "Simamia Funguo za API" + }, + "403": { + "title": "Imepigwa marufuku", + "description": "Omba lako limeeleweka, lakini ufikiaji umekataliwa na sera.", + "suggestion1": "Angalia sheria za orodha ya ruhusa/zuia IP katika mipangilio.", + "suggestion2": "Thibitisha sera za mfano na bajeti zilizotolewa kwa funguo yako ya API.", + "suggestion3": "Muulize msimamizi akupatie wigo wa ruhusa unaohitajika.", + "primaryAction": "Fungua Msaada wa Ufikiaji", + "secondaryAction": "Fungua Mipangilio ya Usalama" + }, + "408": { + "title": "Muda wa Ombi Umekwisha", + "description": "Server haikupokea ombi kamili kwa wakati.", + "suggestion1": "Jaribu tena ombi hilo kwa mzigo mdogo.", + "suggestion2": "Angalia uthabiti wa mtandao wako na ucheleweshaji wa VPN/proxy.", + "suggestion3": "Kwa operesheni ndefu, wezesha utiririshaji au gawanya ombi.", + "primaryAction": "Fungua Mwongozo wa Endpoint", + "secondaryAction": "Angalia Hali ya Mtandao" + }, + "429": { + "title": "Maombi Mengi Sana", + "description": "Mipaka ya viwango imezidiwa kwa mteja huyu, ufunguo, au mtoa huduma.", + "suggestion1": "Subiri kwa ajili ya kupumzika na jaribu tena baada ya kipindi kilichopendekezwa.", + "suggestion2": "Switch to a combo with fallback providers.", + "suggestion3": "Panga upya uhimilivu wa mtoa huduma/profili za mipaka ya kiwango katika mipangilio.", + "primaryAction": "Fungua Mipangilio ya Ustahimilivu", + "secondaryAction": "Fungua Mchanganyiko" + }, + "500": { + "title": "Kosa la Ndani la Server", + "description": "Kosa lisilotarajiwa la upande wa seva lilitokea wakati wa kushughulikia ombi lako.", + "suggestion1": "Jaribu tena mara moja baada ya sekunde chache.", + "suggestion2": "Angalia telemetry ya afya na kumbukumbu za seva kwa vitambulisho vya maombi vilivyohusishwa.", + "suggestion3": "Ikiwa inajitokeza mara kwa mara, ripoti tatizo hilo pamoja na alama ya muda na muktadha wa ombi.", + "primaryAction": "Fungua Dashibodi ya Afya", + "secondaryAction": "Fungua Magazeti" + }, + "502": { + "title": "Mlango Mbaya", + "description": "Mtoa huduma wa juu au muunganisho wa lango umerejea jibu lisilo sahihi.", + "suggestion1": "Jaribu tena na mtoa huduma mwingine au njia ya combo inayofanya kazi.", + "suggestion2": "Angalia sifa za mtoa huduma na upatikanaji wa mfano.", + "suggestion3": "Kagua matokeo ya mkalimani ikiwa mabadiliko ya muundo yanahusika.", + "primaryAction": "Fungua Watoa huduma", + "secondaryAction": "Fungua Mfasiri" + }, + "503": { + "title": "Huduma Haipatikani", + "description": "Huduma haipatikani kwa muda kutokana na matengenezo au utegemezi ulioharibika.", + "suggestion1": "Subiri kidogo na jaribu tena.", + "suggestion2": "Angalia taarifa za matengenezo na hali ya mfumo.", + "suggestion3": "Tumia watoa huduma wa akiba ikiwa mchakato wako unahitaji muda wa majibu mfupi.", + "primaryAction": "Maelezo ya Matengenezo", + "secondaryAction": "Hali ya Mfumo" + } + } + }, + "kiroAuthModal": { + "title": "Unganisha {providerLabel}", + "chooseMethod": "Chagua njia yako ya uthibitishaji:", + "builderId": "Kitambulisho cha Mjenzi wa AWS", + "builderDescription": "Inapendekezwa kwa watumiaji wengi. Ingia na akaunti ya AWS iliyoambatanishwa na {providerLabel}.", + "organization": "Shirika Lako (AWS IAM Identity Center)", + "organizationDescription": "Tumia URL ya kuanzia SSO ya kampuni yako (mfano: {url}).", + "googleAccount": "Akaunti ya Google", + "googleDescription": "Ingia na akaunti yako ya Google.", + "githubAccount": "Akaunti ya GitHub", + "githubDescription": "Ingia na akaunti yako ya GitHub.", + "importToken": "Ingiza Token", + "importDescription": "Bandika tokeni ya kufufua iliyosafirishwa kutoka {providerLabel}.", + "apiKey": "Funguo la API", + "apiKeyDescription": "Pasta funguo ya {providerLabel} / CodeWhisperer API inayodumu kwa muda mrefu. Inahifadhiwa kama akidi ya bearer bila token ya kusasisha; ugunduzi wa wasifu ni juhudi bora.", + "idcStartUrl": "IDC Anza URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL ya Kituo cha Utambulisho wa AWS IAM ya shirika lako", + "awsRegion": "Eneo la AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Kanda ya AWS kwa Kituo Chako cha Utambulisho (chaguo-msingi: us-east-1)", + "continue": "Endelea", + "back": "Rudi", + "autoDetecting": "Inagundua token kiotomatiki...", + "readingCredentials": "Kusoma akreditivu za {providerLabel} kutoka kwenye cache ya AWS SSO", + "tokenNotDetected": "{providerLabel} token haikuja kugunduliwa kiotomatiki. Tafadhali bandika token yako ya kuhuisha kwa mikono.", + "refreshToken": "Fungua Tokeni", + "tokenPlaceholder": "Token itajazwa kiotomatiki...", + "importing": "Inakabiliwa na uagizaji...", + "apiKeyPlaceholder": "Bandika funguo yako ya API ya {providerLabel}...", + "apiKeyStoredDescription": "Imehifadhiwa kwa njia ya usimbaji kama akidi ya kubeba inayodumu kwa muda mrefu. Hakuna mchakato wa kusasisha.", + "apiKeyRegionDescription": "Eneo la AWS kwa funguo (chaguo-msingi: us-east-1)", + "validating": "Inathibitisha...", + "validateAndSaveApiKey": "Thibitisha na Hifadhi Funguo la API", + "errorAutoDetect": "Haiwezekani kugundua token kiotomatiki", + "errorAutoDetectFailed": "Imeshindikana kugundua tokeni kiotomatiki", + "errorRefreshTokenRequired": "Tafadhali ingiza tokeni ya kusasisha", + "errorImportFailed": "Uagizaji umeshindikana", + "errorApiKeyRequired": "Tafadhali ingiza funguo ya API ya Kiro", + "errorApiKeyImportFailed": "Uagizaji wa funguo za API umeshindwa", + "errorIdcStartUrlRequired": "Tafadhali ingiza URL yako ya kuanzia ya IDC" + }, + "kiroSocialOAuthModal": { + "title": "Unganisha {providerLabel} kupitia {providerName}", + "errorStartAuthorization": "Imeshindikana kuanzisha uthibitisho", + "errorAuthorizationExpired": "Idhini imeisha. Anza mchakato wa kuingia tena.", + "errorAuthorizationFailed": "Uidhinishaji umeshindikana", + "initializing": "Inaanza...", + "settingUp": "Kuweka uthibitisho wa {providerName}", + "openIncognito": "Fungua kiungo hiki katika dirisha la Incognito", + "incognitoDescription": "Tumia dirisha la Incognito/Private ili kuepuka migongano ya kikao na akaunti zilizopo.", + "copyLink": "Nakili kiungo", + "verificationCode": "Nambari ya uthibitisho", + "waiting": "Inasubiri idhini...", + "cancel": "Ghairi", + "successTitle": "Imepangwa kwa Mafanikio!", + "successMessage": "Akaunti yako ya {providerLabel} kupitia {providerName} imeunganishwa.", + "done": "Imekamilika", + "errorTitle": "Muunganisho Umeshindikana", + "close": "Funga" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Uidhinishaji umeshindikana", + "errorPopupBlocked": "Popup imezuiwa — ruhusu popups kwa tovuti hii, au bandika token kwa mikono hapa chini.", + "errorPopupClosed": "Dirisha la Uidhinishaji lilifungwa kabla ya kukamilisha.", + "errorAccessTokenRequired": "Ishara ya ufikiaji inahitajika.", + "errorImportFailed": "Uagizaji umeshindikana", + "title": "Connect Trae SOLO", + "authorizeDescription": "Thibitisha kupitia trae.ai katika dirisha la popup. Dirisha la popup litajifunga lenyewe mara tu token itakapokuwa imeagizwa.", + "authorizeImportant": "Muhimu: lazima uwe umeingia kwenye trae.ai katika browsa hii kwanza. Ukurasa wa kuidhinisha unathibitisha tu kikao kilichopo — hauwezi kukusaini. Ikiwa unaona \"Kuingia Kumeshindwa\", bonyeza \"Fungua solo.trae.ai\", ingia, kisha rudi hapa.", + "waitingForAuthorization": "Inasubiri trae.ai…", + "authorizeWithBrowser": "Thibitisha kwa Kivinjari", + "openSoloTrae": "Fungua solo.trae.ai", + "orPasteManually": "au bandika token kwa mikono", + "manualInstructions": "Ingia kwenye solo.trae.ai, fungua DevTools → Mtandao, tuma ujumbe wowote wa mazungumzo, na nakili JWT kutoka kwenye Authorization: Cloud-IDE-JWT {tokenPlaceholder} kichwa cha ombi. Muda wa maisha wa JWT ni takriban siku 14. Sehemu za kitambulisho za hiari zinatoka kwenye common_params katika mwili huo huo wa ombi.", + "accessTokenLabel": "Token ya Ufikiaji (Cloud-IDE-JWT)", + "webId": "Kitambulisho cha Mtandao", + "optional": "hiari", + "bizUserId": "Kitambulisho cha Mtumiaji wa Biz", + "userUniqueId": "Kitambulisho Kipekee cha Mtumiaji", + "scope": "Muktadha", + "tenant": "Mpangaji", + "region": "Kanda", + "importing": "Inakabiliwa…", + "importToken": "Ingiza Token", + "cancel": "Ghairi" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Inasambaza...", + "complete": "Kamilisha", + "defaultLabel": "Sambaza Proxies" + } + }, + "providerTest": { + "dialogLabel": "Jaribu {provider}", + "deprecated": "imepitwa na wakati", + "risk": "hatari", + "close": "Funga", + "model": "Mfano", + "key": "Funguo", + "defaultKey": "chaguo-msingi", + "clearConversation": "Futa mazungumzo", + "clear": "Futa", + "tabs": { + "test": "Jaribio", + "logs": "Maktaba" + }, + "loadingLogs": "Inapakia kumbukumbu…", + "failedToLoadLogs": "Imeshindikana kupakia kumbukumbu", + "noLogsYet": "Hakuna kumbukumbu bado", + "noLogsDescription": "Tuma ujumbe wa majaribio kutoka kwenye kichupo cha Jaribio — kumbukumbu za mtoa huduma huyu zitaonekana hapa.", + "openFullLogs": "Fungua ukurasa wa kumbukumbu kamili", + "live": "Moja kwa moja", + "tailingLast": "kuangalia mwisho {count}", + "refreshNow": "Fanya Upya Sasa", + "refresh": "Fanya Upya", + "unknownRequester": "mombaji asiyejulikana", + "fields": { + "timestamp": "Wakati", + "status": "Hali", + "duration": "Muda", + "model": "Mfano", + "requestedModel": "Mfano ulioombwa", + "provider": "Mtoa huduma", + "requester": "Mhitaji", + "tokens": "Vifaa" + } + }, + "proxyLog": { + "detailAriaLabel": "Maelezo ya kumbukumbu ya proxy", + "event": "Tukio la Proxy", + "close": "Funga kidirisha cha maelezo ya proxy", + "time": "Wakati", + "latency": "Uchelewaji", + "clientIp": "Anwani ya IP ya Mteja", + "proxy": "Proxy", + "direct": "Moja kwa moja", + "type": "andika", + "level": "Kiwango", + "provider": "Mtoa huduma", + "tlsFingerprint": "Alama ya TLS", + "directNative": "Moja kwa moja", + "targetUrl": "URL ya Malengo", + "error": "Kosa", + "configuration": "Mipangilio ya Proxy" + }, + "requestTimeline": { + "title": "Muda wa Ombi", + "modes": { + "follow": "Fuata", + "followDescription": "Mhimili unateleza kushoto, mstari wa SASA unabaki kwenye 75%", + "now": "Sasa", + "nowDescription": "Ruka kwa wakati wa sasa, mstari wa SASA unarudi katikati", + "pan": "Pan", + "panDescription": "Buruta ili kuchunguza, nyuma imegandishwa" + }, + "reset": "Rekebisha", + "started": "Imeanzishwa", + "ended": "Imekwisha", + "duration": "Mudao", + "status": "Hali", + "provider": "Mtoa huduma", + "tokens": "Vifungo", + "active": "Haiwezi", + "other": "Nyingine", + "tenMinutes": "10min", + "hour": "saa", + "day": "siku", + "unknownModel": "sijulikana", + "pending": "inasubiriwa" + }, + "metadata": { + "compressionTitle": "Kufinya", + "compressionDescription": "Sanitize mipangilio ya kubana muktadha ili kupunguza matumizi ya tokeni na gharama.", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "Mikondo ya proxy ya relay isiyo na seva kwa miundombinu yako ya AI", + "trafficInspectorTitle": "Mchunguzi wa Trafiki — OmniRoute", + "trafficInspectorDescription": "Fuatilia wito za LLM + debug trafiki ya HTTPS ya programu yoyote" + }, + "conductor": { + "title": "Conductor — meli ya CLI-agent", + "subtitle": "OmniConductor hub: waendesha, foleni ya kazi na baraza, moja kwa moja", + "runners": "Wakimbiaji", + "tasks": "Majukumu", + "colName": "Jina", + "colClis": "CLIs", + "colStatus": "Hali", + "colTask": "Kazi", + "colMode": "Hali", + "colRunner": "Mwanariadha", + "colSummary": "Muhtasari", + "online": "mtandaoni", + "offline": "bila mtandao", + "draining": "kuondoa maji", + "hubOffline": "Conductor hub haipo mtandaoni au haijasanidiwa (CONDUCTOR_HUB_URL) — inaonyesha chochote badala ya data za zamani.", + "noRunners": "Hakuna wanariadha waliojiandikisha", + "noTasks": "Hakuna kazi bado", + "detailTitle": "Maelezo ya kazi", + "prompt": "Maagizo", + "branch": "Tawi", + "fetchHint": "Pata matokeo kwa: git fetch origin {branch}", + "council": "Baraza", + "candidates": "Wagombea", + "cancel": "Ghairi kazi", + "cancelConfirmTitle": "Ghairi kazi hii?", + "cancelConfirmMessage": "Kituo kitaacha utekelezaji kwenye mkimbiaji. Hii haiwezi kubadilishwa.", + "cancelFailed": "Kituo kilikataa kufuta", + "close": "Funga", + "error": "Kosa", + "faroTitle": "Faro — msemaji wa meli", + "faroSubtitle": "Chat na sauti, iliyounganishwa na matukio halisi ya meli. Amri za uharibifu daima huomba uthibitisho.", + "faroEmpty": "Uliza kuhusu meli — mfano: \"hali ya meli ikoje?\"", + "faroPending": "Faro anahitaji uthibitisho", + "faroPlaceholder": "zungumza na Faro…", + "faroSend": "tuma", + "faroOffline": "Faro (msemaji) yuko nje ya mtandao", + "yes": "Ndio", + "no": "Hapana", + "pushToTalk": "Shikilia kuzungumza", + "speakAnswers": "zungumza majibu", + "voiceModels": "Mifano ya sauti (mtoa/modeli wa OmniRoute hii)", + "voiceIdle": "zungumza", + "voiceListening": "kusikiliza…", + "voiceThinking": "fikiria…", + "voiceSpeaking": "kuzungumza…", + "sttFailed": "Uandishi umeshindikana (angalia mfano/mtoa huduma wa STT)", + "ttsFailed": "Uundaji wa sauti umeshindwa (angalia mfano/mtoa huduma wa TTS)", + "micDenied": "Mikrofoni haipatikani au ruhusa imekataliwa" + }, + "cliproxyProviderExposure": { + "title": "Ufunuo wa Mtoa Huduma", + "description": "Fichua mifano ya CLIProxyAPI kama lengo la njia chini ya cliproxyapi/ prefix.", + "label": "Fichua kama cliproxyapi/...", + "hint": "Wakati imewezeshwa, mifano iliyogunduliwa inaonekana katika chaguo za mtoa huduma katika OmniRoute.", + "updateFailed": "Imeshindikana kuboresha (HTTP {status})", + "networkError": "Kosa la mtandao — haiwezekani kuboresha mipangilio ya kufichua mtoa huduma" + } } - diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index 78baa2ef93..b0f05e5fe3 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -172,6 +172,18 @@ "unselectAll": "தேர்வை நீக்கு", "visibleModels": "காணக்கூடியவை", "selectAllConfirm": "இந்தக் கூட்டில் {count} மாதிரிகளைச் சேர்க்கவா?", + "testSelectedProviders": "சோதனை வழங்குநர்கள்", + "testingSelectedProviders": "சோதனை {done}/{total}...", + "noProvidersSelectedToTest": "முதலில் கீழே உள்ள குறைந்தது ஒரு வழங்குநரை சரிபார்க்கவும்", + "noModelsToTestForProviders": "தேர்ந்தெடுக்கப்பட்ட வழங்குநர்களுக்கான சோதனைக்கு மாடல்கள் இல்லை", + "testSelectedProvidersResults": "{ok} {total} மாதிரிகள் வேலை செய்கிறன", + "selectWorkingModels": "செயல்படுத்தவும்", + "unselectWorkingModels": "வேலை செய்யும் தேர்வை நீக்கு", + "noWorkingModelsToSelect": "சேர்க்க க்கான வேலை செய்யும் மாதிரிகள் இல்லை", + "providerTestHint": "குறிப்பு: ஒரு வழங்குநரைச் சரிபார்க்கவும் → சோதனை → செயல்படும் சேர்க்கவும். மீண்டும் கிளிக் செய்யவும் தேர்வை நீக்க.", + "selectAllProviders": "எல்லா வழங்குநர்களையும் சரிபார்க்கவும்", + "clearProviderSelection": "சேவையளர்களை அகற்றவும்", + "providersSelectedCount": "{count} வழங்குநர்கள் சரிபார்க்கப்பட்டனர்", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "அளவு", + "toggleNoAuthProvider": "அங்கீகாரம் இல்லாத வழங்குநரை மாற்றவும்", + "loadingModels": "மாதிரிகளை ஏற்றுகிறது…", + "selectAModel": "ஒரு மாதிரியை தேர்வு செய்யவும்", + "degraded": "குறைந்த நிலை", + "zeroConfigBannerTitle": "சூன்ய-கொன்ஃபிக் முறை இயக்கப்படுகிறது", + "zeroConfigBannerBody": "OmniRoute முதன்மை இயக்கத்தில் தானாக உருவாக்கப்பட்ட பாதுகாப்பான குறியாக்க விசைகள். அவை {dataDir} இல் நிலைத்திருக்கின்றன. எந்த நடவடிக்கையும் தேவை இல்லை — உங்கள் தரவுகள் குறியாக்கம் செய்யப்பட்டு பாதுகாப்பாக உள்ளன. தனிப்பயன் விசைகளை பயன்படுத்த, அந்த கோப்புக்கு JWT_SECRET மற்றும் STORAGE_ENCRYPTION_KEY ஐச் சேர்க்கவும்.", + "batchRelativeTimeIn": "{value} இல்", + "batchRelativeTimeAgo": "{value} முன்பு", + "batchDetailsTitle": "பேட்ச் விவரங்கள்", + "batchProgress": "முன்னேற்றம்", + "batchCompletedCount": "{count} முடிந்தது", + "batchFailedCount": "{count} தோல்வியடைந்தது", + "batchPendingCount": "{count} நிலுவையில் உள்ளவை", + "batchTimeline": "காலவரிசை", + "batchTimelineInProgress": "நடந்து கொண்டிருக்கிறது", + "batchTimelineFinalizing": "முடிவுசெய்யப்படுகிறது", + "batchTimelineCompleted": "முடிந்தது", + "batchTimelineFailed": "வெறுமனே தோல்வி", + "batchTimelineExpires": "காலாவதியானது", + "batchTimelineExpired": "காலாவதியானது", + "batchTimelineCancelling": "ரத்து செய்கிறேன்", + "batchTimelineCancelled": "ரத்து செய்யப்பட்டது", + "batchTokenUsage": "டோக்கன் பயன்பாடு", + "batchMetadata": "மெட்டாடேட்டா", + "batchFileContents": "கோப்பு உள்ளடக்கம்", + "batchFileUsedByCount": "{count, plural, one {# தொகுப்பு} other {# தொகுப்புகள்}}", + "batchFilePreview": "முன்காட்சி", + "batchFilePreviewTruncated": "முதல் {shown} வரிகளை காட்டு ({total} மொத்த வரிகள்)", + "batchFileDownloadFull": "முழு கோப்பை பதிவிறக்கம் செய்க" }, "disabled": "முடக்கப்பட்டது", "featureFlagOmnirouteEmergencyFallbackDescription": "பட்ஜெட் தீர்ந்த கோரிக்கைகளை அவசரகால இலவச ஃபால்பேக் வழங்குநர்/மாடலுக்கு வழிசெலுத்துங்கள்.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "பிரிப்பான்", "discovery": "கண்டறிதல்", "discoverySubtitle": "இலவச அணுகலுக்காக வழங்குநர்களை ஸ்கேன் செய்யவும்", + "conductor": "கட்டுப்படுத்தி", + "conductorSubtitle": "CLI-ஏஜென்ட் படை", "resilienceConnections": "இணைப்பு நெகிழ்திறன்", "resilienceConnectionsSubtitle": "குளிரூட்டல், பிரேக்கர், பூட்டு நிலை", "settingsModalityBridge": "மோடாலிட்டி பாலம்", - "settingsModalityBridgeSubtitle": "படம்/ஒலி → உரை மட்டும் மாதிரிகளுக்கான உரை மாற்று" + "settingsModalityBridgeSubtitle": "படம்/ஒலி → உரை மட்டும் மாதிரிகளுக்கான உரை மாற்று", + "commandPalette": { + "title": "கட்டளை பட்டியல்", + "searchPlaceholder": "பக்கம், அமைப்புகள், கருவிகள் தேடு...", + "clearSearch": "தேடலை அழிக்கவும்", + "noResults": "எந்த முடிவுகளும் இல்லை", + "navigate": "வழி நடத்தவும்", + "open": "திறக்கவும்", + "close": "மூடு" + }, + "noResults": "எந்த முடிவுகளும் இல்லை" }, "webhooks": { "title": "வெப்ஹூக்ஸ்", @@ -1477,7 +1531,11 @@ "settings.update_failed": "அமைப்புகள் புதுப்பிப்பு தோல்வியடைந்தது", "sync.token.created": "ஒத்திசைவு டோக்கன் உருவாக்கப்பட்டது", "sync.token.revoked": "ஒத்திசைவு டோக்கன் திரும்பப் பெறப்பட்டது" - } + }, + "mcpMetricCalls24h": "அழைப்புகள் (24மா)", + "mcpMetricSuccessRate": "வெற்றி வீதம்", + "mcpMetricAvgDuration": "சராசரி காலம்", + "mcpMetricTopTool": "மேலான கருவி" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "தானாக பக்கத்தை மீண்டும் ஏற்றுகிறது...", - "providerTopology": "வழங்குநர் இடவியல்" + "providerTopology": "வழங்குநர் இடவியல்", + "downloadDmg": "DMG ஐ பதிவிறக்கம் செய்யவும் (macOS)", + "downloadDmgDescription": "OmniRoute டெஸ்க்டாப் செயலியின் புதிய பதிப்பு கிடைக்கிறது. தயவுசெய்து புதுப்பிக்க macOS DMG நிறுவுநரை பதிவிறக்கம் செய்து நிறுவவும் (தற்போதைய: v{version}).", + "downloadExe": "EXE பதிவிறக்கம் (Windows)", + "downloadExeDescription": "OmniRoute டெஸ்க்டாப் செயலியின் புதிய பதிப்பு கிடைக்கிறது. தயவுசெய்து புதுப்பிக்க Windows EXE நிறுவலை பதிவிறக்கம் செய்து நிறுவவும் (தற்போதைய: v{version}).", + "downloadAppImage": "AppImage ஐ பதிவிறக்கம் செய்யவும் (Linux)", + "downloadAppImageDescription": "OmniRoute டெஸ்க்டாப் செயலியின் புதிய பதிப்பு கிடைக்கிறது. புதுப்பிக்க Linux AppImage தொகுப்பை பதிவிறக்கம் செய்யவும் (தற்போதைய: v{version}).", + "downloadUpdate": "புதுப்பிப்பு பதிவிறக்கம் செய்க", + "downloadUpdateDescription": "OmniRoute டெஸ்க்டாப் செயலியின் புதிய பதிப்பு கிடைக்கிறது. உங்கள் அமைப்புக்கு உரிய செயலி வடிவத்தை பதிவிறக்கம் செய்து புதுப்பிக்கவும் (தற்போதைய: v{version}).", + "updateQueued": "v{version} க்கு புதுப்பிப்பு வரிசைப்படுத்தப்பட்டது.", + "updateDockerRebuilding": "Docker படத்தை பின்னணி இல் மறுபடியும் கட்டப்படுகிறது.", + "updateWaitingRestart": "புதிய பதிப்புடன் OmniRoute மறுதொடக்கம் ஆக காத்திருக்கிறேன்.", + "updateInstalling": "v{version} ஐ நிறுவுகிறது.", + "updateRunning": "OmniRoute இப்போது v{version} ஐ இயக்குகிறது.", + "updateCompleted": "OmniRoute v{version}க்கு புதுப்பிக்கப்பட்டது.", + "updateDockerStillRebuilding": "Docker படத்தை v{version} க்காக இன்னும் மீண்டும் கட்டப்படுகிறது.", + "updateInstallingBackground": "பின்புறத்தில் v{version} ஐ நிறுவுகிறது.", + "updateWaitingVersion": "v{version} இல் OmniRoute மீண்டும் வருவதற்காக காத்திருக்கிறேன்.", + "updateDockerStillInProgress": "Docker மறுதொகுப்பு இன்னும் நடைபெற்று உள்ளது.", + "updateRestarting": "சேவையை மீண்டும் தொடங்குகிறது. OmniRoute ஆன்லைனுக்கு திரும்ப வருவதற்காக காத்திருக்கிறேன்...", + "updateTimeout": "புதுப்பிப்பு தொடங்கியது, ஆனால் v{version} காலாவதியாகும் முன் கிடைக்கவில்லை. பக்கம் புதுப்பிக்கவும் அல்லது சர்வர் பதிவு சரிபார்க்கவும்.", + "updateTimedOut": "v{version}க்கு புதுப்பிப்பு நேரம் முடிந்தது.", + "updateStartFailed": "புதுப்பிப்பை தொடங்க முடியவில்லை.", + "noResponseStream": "எந்த பதில் ஓட்டம் பெறப்படவில்லை.", + "updateComplete": "புதுப்பிப்பு முடிந்தது!", + "updateFailed": "புதுப்பிப்பு தோல்வியுற்றது.", + "updateNetworkError": "நெட்வொர்க் பிழை — புதுப்பிப்பின் போது இணைப்பு இழக்கப்பட்டது.", + "stepInstallPackage": "பேக்கேஜ் நிறுவவும்", + "stepRebuildNativeModules": "மூலங்களை மீண்டும் கட்டமைக்கவும்", + "stepRestartService": "சேவையை மறுதொடக்கம் செய்", + "stepComplete": "முடிக்கவும்", + "stepError": "பிழை", + "updateCompleteTitle": "புதுப்பிப்பு முடிந்தது!", + "updateFailedTitle": "புதுப்பிப்பு தோல்வியுற்றது", + "updatingTitle": "OmniRoute ஐ புதுப்பிக்கிறேன்...", + "reloadNotice": "பக்கம் சில விநாடிகளில் தானாகவே புதுப்பிக்கப்படும்.", + "retryNotice": "தயவுசெய்து மீண்டும் முயற்சிக்கவும் அல்லது CLI மூலம் கையேடாக புதுப்பிக்கவும்.", + "restartNotice": "இந்த பக்கம் மூட வேண்டாம். அமைப்பு தானாகவே மறுதொடக்கம் ஆகும்.", + "reloadNow": "இப்போது மறுதொடக்கம் செய்க", + "closeUpdate": "மூடு", + "retryUpdate": "மீண்டும் முயற்சி செய்", + "updateAvailableTitle": "புதுப்பிப்பு கிடைக்கிறது: v{version}{desktop}", + "desktopAppLabel": "(டெஸ்க்டாப் பயன்பாடு)", + "checkingForUpdates": "புதுப்பிப்புகளை சரிபார்க்கிறது...", + "versionAvailableForDownload": "பதிப்பு v{version} பதிவிறக்கத்திற்கு கிடைக்கிறது.", + "downloadingUpdate": "புதுப்பிப்பு பதிவிறக்கம் செய்யப்படுகிறது... {percent}% முடிந்தது.", + "updateDownloaded": "புதுப்பிப்பு வெற்றிகரமாக பதிவிறக்கம் செய்யப்பட்டது! செயல்படுத்துவதற்கு மீண்டும் தொடங்கவும் & நிறுவவும் கிளிக் செய்யவும்.", + "autoUpdateFailed": "தானியங்கி புதுப்பிப்பு தோல்வியுற்றது: {reason}.", + "unknownUpdateError": "அறியப்படாத பிழை", + "versionAvailableDesktop": "டெஸ்க்டாப் செயலிக்கு பதிப்பு v{version} கிடைக்கிறது.", + "manualUpdateRequired": "இந்த நிறுவல் வகைக்கு கையேடு புதுப்பிப்பு தேவை.", + "restartAndInstall": "மீண்டும் தொடங்கவும் & நிறுவவும்", + "checkForUpdate": "புதுப்பிப்பை சரிபார்க்கவும்", + "manualUpdate": "கைமுறையீடு", + "directDownloadHint": "அல்லது தொடர்புடைய நிறுவுநர் வடிவத்தை நேரடியாக பதிவிறக்கவும்:", + "releaseNotes": "வெளியீட்டு குறிப்புகள்", + "readMore": "மேலும் வாசிக்க", + "noAuthLabel": "அங்கீகாரம் இல்லை" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "இந்தக் கோரிக்கையைச் சுற்றியுள்ள சேமிக்கப்பட்ட அழைப்புப் பதிவுகளிலிருந்து ஊகிக்கப்பட்டது", "routeRecommendations": "பரிந்துரைகள்", "routeLimitations": "வரம்புகள்", - "routeNoKnownLimitations": "இந்த விளக்கத்திற்கு அறியப்பட்ட வரம்புகள் எதுவும் இல்லை." + "routeNoKnownLimitations": "இந்த விளக்கத்திற்கு அறியப்பட்ட வரம்புகள் எதுவும் இல்லை.", + "searchAnalyticsLoading": "தேடல் பகுப்பாய்வுகளை ஏற்றுகிறது…", + "searchAnalyticsNoData": "இன்னும் தேடல் தரவுகள் கிடைக்கவில்லை.", + "searchAnalyticsNoDataDescription": "முதல் தேடல் /v1/search மூலம் மேற்கொள்ளப்பட்ட பிறகு தேடல் கோரிக்கைகள் இங்கே தோன்றும்.", + "searchAnalyticsToday": "{count} இன்று", + "searchAnalyticsCachedRequests": "{count} கச்சா கோரிக்கைகள்", + "searchAnalyticsApiCosts": "தேடல் API செலவுகள்", + "searchAnalyticsErrors": "{count} பிழைகள்", + "searchAnalyticsNoErrors": "எந்த பிழைகளும் இல்லை", + "searchAnalyticsProviderBreakdown": "சேவையாளர் விவரக்குறிப்பு", + "searchAnalyticsQueries": "வினாக்கள்", + "searchAnalyticsEmptyDescription": "POST /v1/search ஐ இணைய தேடல்களை வழிமொழிக்க தொடங்க பயன்படுத்தவும்.", + "searchAnalyticsFreeTier": "இலவச அடுக்கு கிடைக்கிறது: Serper (2,500/மாதம்), Brave (2,000/மாதம்), Exa (1,000/மாதம்), Tavily (1,000/மாதம்) — மொத்தம் 6,500+ இலவச தேடல்கள்/மாதம் தானாகவே மாற்றம் செய்யப்படும்.", + "autoRoutingNoDataAvailable": "தானியங்கி வழிமுறை பகுப்பாய்வு கிடையாது. அளவீடுகளை காண auto/ முன்னணி பயன்படுத்தி கோரிக்கைகளை செய்யவும்.", + "defaultVariantLabel": "இயல்புநிலை", + "freeTierAvailable": "இலவச அடுக்கு கிடைக்கிறது" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} வழங்குநர்கள்", "imageToTextBridgeAvailable": "மோடாலிட்டி பிரிட்ஜ் இப்போது உரை மட்டுமே மாதிரிகளுக்கான படங்களை விவரிக்க முடியும். /api/v1/images/understanding செயல்படுத்தப்படும் போது inline playground கிடைக்க இருக்கும்.", "imageToTextBridgeCta": "Modality Bridge அமைப்புகளில் Image→Text பாலத்தை கட்டமைக்கவும்", - "sttBridgeCta": "Modality Bridge அமைப்புகளில் Speech→Text பாலத்தை அமைக்கவும்" + "sttBridgeCta": "Modality Bridge அமைப்புகளில் Speech→Text பாலத்தை அமைக்கவும்", + "existingConnection": "இருக்கிற இணைப்பு", + "openrouterSttDescription": "OpenRouter பேச்சு-இலக்கணம் மாதிரிகள் உங்கள் கட்டமைக்கப்பட்ட OpenRouter இணைப்பைப் பயன்படுத்துகின்றன. தனித்துவமான அங்கீகாரம் தேவை இல்லை." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "இதில் ஒட்டவும்:", "copilotReloadInstruction": "பின்னர் VS Code-ஐ மீண்டும் ஏற்றி, உள்ளீட்டு வரியில் API விசையை அமைக்கவும்.", "wireApiChatCompletions": "அரட்டை நிறைவுகள் (/அரட்டை/நிறைவுகள்)", - "wireApiResponses": "பதில்கள் API (/பதில்கள்)" + "wireApiResponses": "பதில்கள் API (/பதில்கள்)", + "cliproxyapiActionFailed": "செயல் தோல்வியுற்றது", + "cliproxyapiActionSucceeded": "செயல் வெற்றிகரமாக நிறைவுற்றது", + "cliproxyapiCheckUpdates": "புதுப்பிப்புகளை சரிபார்க்கவும்", + "cliproxyapiDescription": "மேல்நிலை புரோக்ஸி மீள்பார்வை (Go அடிப்படையிலான OAuth)", + "cliproxyapiHealth": "ஆரோக்கியம்", + "cliproxyapiHealthy": "ஆரோக்கியமான", + "cliproxyapiInstall": "நிறுத்தவும்", + "cliproxyapiNotInstalledValue": "நிறுத்தப்படவில்லை", + "cliproxyapiPort": "போர்ட்", + "cliproxyapiRequestFailed": "கோரிக்கை தோல்வியுற்றது", + "cliproxyapiRestart": "மீண்டும் தொடங்கு", + "cliproxyapiStart": "தொடங்கு", + "cliproxyapiStatusError": "பிழை", + "cliproxyapiStatusInstalled": "நிறுத்தப்பட்டது", + "cliproxyapiStatusNotInstalled": "நிறுத்தப்படவில்லை", + "cliproxyapiStatusRunning": "இயங்குகிறது", + "cliproxyapiStatusStopped": "நிறுத்தப்பட்டது", + "cliproxyapiStop": "நிறுத்து", + "cliproxyapiUnhealthy": "அருகாதாரம்", + "cliproxyapiUnknown": "அறியப்படாதது", + "cliproxyapiUpdate": "புதுப்பிக்கவும்", + "cliproxyapiUpdateAvailable": "புதுப்பிப்பு கிடைக்கிறது: v{current} → v{latest}", + "cliproxyapiVersion": "பதிப்பு" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "கோட்டையின் முடிவுக்கு முன்னே செல்லவும்", + "fallbackOnlyOnQuotaExhaustionShort": "கோட்டா-மட்டுமே மறு நிலை", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "மோட் பேக் மற்றும் எடையிடல் இங்கே இருக்கும்; பிரேக்கர் இயக்க நேர நிலை ஹெல்த் பக்கத்தில் இருக்கும்.", "emailVisibilityHint": "இங்குள்ள கணக்கு மின்னஞ்சல்கள் உலகளாவிய தனியுரிமை மாற்று அமைப்பைப் பின்பற்றுகின்றன.", "emailVisibilityTooltip": "காம்போக்கள், வழங்குநர்கள் மற்றும் ஒதுக்கீட்டுத் திரைகளில் உலகளாவிய ரீதியில் கணக்கு மின்னஞ்சல்களைக் காட்ட அல்லது மறைக்க கண் ஐகானைப் பயன்படுத்தவும்.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "அடுத்தடுத்தமாக (Provider → Model)", + "builderModeGlobal": "உலகளாவிய மாதிரி தேடல் (அனுகூல கலவை)", + "builderGlobalSearchPlaceholder": "எல்லா வழங்குநர்களிலும் மாதிரிகளை தேடுங்கள் (எடுத்துக்காட்டாக opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "அனைத்தையும் சேர்க்கவும்", + "builderGlobalShortcuts": "சுருக்கங்கள்:", + "builderGlobalNoResults": "\"{query}\" க்கான முறைமையை கண்டுபிடிக்க முடியவில்லை.", + "builderGlobalProviderLabel": "முதலீட்டாளர்:", + "builderGlobalAccountCount": "{count, plural, one {# கணக்கு} other {# கணக்குகள்}}", + "builderGlobalAdded": "சேர்க்கப்பட்டது", + "builderGlobalAdd": "சேர்க்கவும்", "manualModel": "கைமுறை மாதிரி", "manualModelInvalid": "வழங்குநர்/மாதிரி என ஒரு மாதிரியை உள்ளிடவும்.", "manualModelUnknownProvider": "அறியப்படாத வழங்குநர் முன்னொட்டு.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "அமைப்புக்கான கிடைக்கும் நேரம்", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "ஒட்டும் தன்மை ஆஃப்", "kimiPresetTitle": "Kimi Coding முன்னமைப்பு", "kimiPresetDescription": "முதன் மாதிரி அமைப்பாக Kimi K3 (Moonshot API), கட்டமைக்கப்படும் போது உங்கள் Kimi Code இணைப்புகளுக்கு (kimi-coding, kimi-web) தானியங்கி மாற்று வழியமைப்புடன்.", - "kimiPresetCta": "முன்னமைப்பைச் சேர்" + "kimiPresetCta": "முன்னமைப்பைச் சேர்", + "intelligentComboCount": "{count, plural, one {# புத்திசாலி கூட்டம்} other {# புத்திசாலி கூட்டங்கள்}}", + "providersInScope": "{count, plural, one {# வழங்குநர் வரம்பில்} other {# வழங்குநர்கள் வரம்பில்}}", + "savingModePack": "சேமிக்கிறது {pack}…", + "errorTitle": "கம்போவை ஏற்றுவதில் தோல்வி அடைந்தது", + "errorDescription": "நாங்கள் தற்போது கம்போ தரவுகளை ஏற்ற முடியவில்லை. உங்கள் இணைப்பை சரிபார்க்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "errorId": "பிழை அடையாளம்: {id}", + "errorRetry": "மீண்டும் முயற்சி செய்", + "comboLabel": "கொம்போ" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "பயனர் பெயர்", "obsidianPassword": "கடவுச்சொல்", - "obsidianTailscaleHint": "மொபைலில் இருந்து இணைக்கிறீர்கள் என்றால், localhost க்கு பதிலாக உங்கள் Tailscale IP ஐப் பயன்படுத்தவும். இரு சாதனங்களும் ஒரே Tailscale நெட்வொர்க்கில் இருக்க வேண்டும்." + "obsidianTailscaleHint": "மொபைலில் இருந்து இணைக்கிறீர்கள் என்றால், localhost க்கு பதிலாக உங்கள் Tailscale IP ஐப் பயன்படுத்தவும். இரு சாதனங்களும் ஒரே Tailscale நெட்வொர்க்கில் இருக்க வேண்டும்.", + "cloudSyncNotConfigured": "இந்த இன்ஸ்டன்ஸில் கிளவுட் ஒத்திசைவு கட்டமைக்கப்படவில்லை.", + "notionConnect": "இணைக்கவும்", + "notionConnectFailed": "இணைக்க முடியவில்லை", + "notionConnected": "இணைக்கப்பட்டுள்ளது", + "notionConnectionFailed": "இணைப்பு தோல்வி அடைந்தது", + "notionDescription": "Notion-ஐ வழிமுறையிட்ட AI மாதிரிகள் மூலம் தேடு, படி, கேள்வி எழுது மற்றும் எழுது", + "notionDisconnect": "இணைப்பை துண்டிக்கவும்", + "notionDisconnectFailed": "இணைப்பை துண்டிக்க முடியவில்லை", + "notionEnterToken": "தயவுசெய்து ஒரு Notion ஒருங்கிணைப்பு டோக்கனை உள்ளிடவும்", + "notionIntegrationHelp": "உள்ளக ஒருங்கிணைப்பை உருவாக்கவும்", + "notionIntegrationToken": "Notion உள்நாட்டு ஒருங்கிணைப்பு டோக்கன்", + "notionNotConnected": "இணைக்கப்படவில்லை", + "notionTokenConfigured": "டோக்கன் கட்டமைக்கப்பட்டுள்ளது. Notion கருவிகள் MCP மூலம் கிடைக்கின்றன." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "வழங்குநர் / மாதிரி", "noRemoteProviders": "கட்டமைக்கப்பட்ட API விசையுடன் கூடிய வழங்குநர்கள் யாரும் இல்லை", "selectProviderModel": "ஒரு மாதிரியைத் தேர்ந்தெடுக்கவும்", + "customBaseUrlLabel": "அனுகூல அடிப்படை URL (விருப்பமானது)", + "customModelIdLabel": "அனுகூல மாடல் ஐடி (விருப்பமாக)", + "customEndpointHelp": "OpenAI-இன் இணக்கமான /embeddings இடைமுகத்தை பயன்படுத்தவும். உள்ளூர் இடைமுகங்கள் அனுமதிக்கப்படுகின்றன; மேக மெட்டாடேட்டா இலக்குகள் தடைக்கப்பட்டுள்ளன.", + "customEndpointSave": "அனுகூலமான இறுதிச் சுட்டியைப் பயன்படுத்தவும்", + "customEndpointInvalid": "சரியான HTTP(S) அடிப்படை URL மற்றும் மாதிரி ID இரண்டையும் உள்ளிடவும், அல்லது இரு புலங்களையும் காலியாக விடவும்.", + "customEndpointSaveFailed": "அனுகூலமான எம்பெட்டிங் எண்ட்பாயிண்ட் சேமிக்க முடியவில்லை.", "staticEnabledLabel": "Static Potion-ஐ இயக்கு", "staticEnabledDesc": "potion-base-8M மாதிரியை உள்ளூரில் பதிவிறக்கி பயன்படுத்தவும்", "transformersEnabledLabel": "Transformers.js-ஐ இயக்கு", @@ -4258,7 +4443,9 @@ "cleaning": "சுத்தம் செய்கிறது...", "cleanNow": "இப்போதே சுத்தம் செய்", "cleanupSuccess": "{count} புள்ளி(கள்) நீக்கப்பட்டன", - "cleanupFailed": "சுத்தம் செய்தல் தோல்வியடைந்தது" + "cleanupFailed": "சுத்தம் செய்தல் தோல்வியடைந்தது", + "hostLabel": "மேடகு", + "collectionLabel": "கலெக்ஷன்" }, "rerank": { "enableLabel": "Rerank-ஐ இயக்கு", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-அடுக்கு ஃபால்பேக் வரைபடம்", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "இலவச வழங்குநர்களை அமைக்கவும்", + "description": "தேர்ந்தெடுக்கப்பட்ட பதிவு செய்யாத வழங்குநர்களை விருப்பமாக செயல்படுத்தவும். தொடர்வதற்கு முன் ஒவ்வொரு வழங்குநரின் அறிவிப்பையும் மற்றும் தளத்தையும் மதிப்பீடு செய்யவும்; கிடைக்கும் மற்றும் விகித வரம்புகள் மூன்றாம் தரப்பினரால் கட்டுப்படுத்தப்படுகின்றன.", + "loading": "இலவச வழங்குநர்களை ஏற்றுகிறது...", + "loadFailed": "இலவச வழங்குநர்களை ஏற்ற முடியவில்லை.", + "alreadyConfigured": "எல்லா தகுதியான இலவச வழங்குநர்கள் ஏற்கனவே கட்டமைக்கப்பட்டுள்ளார்கள்.", + "reviewProviderSite": "சர்வீசாளர் தளம் மற்றும் விதிமுறைகளை மதிப்பீடு செய்க.", + "confirmation": "நான் இந்த மூன்றாம் தரப்பு வழங்குநர்களைப் பரிசீலித்தேன் மற்றும் OmniRoute தேர்ந்தெடுக்கப்பட்ட இணைப்புகளை உருவாக்க விரும்புகிறது.", + "setupSelected": "தேர்ந்தெடுக்கப்பட்ட வழங்குநர்களை அமைக்கவும்", + "settingUp": "அமைக்கிறது...", + "setupFailed": "தேர்ந்தெடுக்கப்பட்ட வழங்குநர்களை அமைக்க முடியவில்லை. ஏற்கனவே உள்ளதிலிருந்து எதுவும் மாற்றப்படவில்லை.", + "retryFailed": "மீண்டும் முயற்சி செய்யவும் தோல்வியுற்ற வழங்குநர்கள்", + "orUseApiKey": "அல்லது API விசையுடன் இணைக்கவும்", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "உருவாக்கப்பட்டது", + "skipped": "முன்னதாக கட்டமைக்கப்பட்டுள்ளது", + "failed": "தோல்வி" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "சின்னத்தின் URL", "iconUrlHint": "விருப்பத்திற்குரியது. இந்த வழங்குநரின் சின்னமாக காட்டப்படும் பட URL.", + "iconUrlInvalid": "தவறான ஐகான் URL. http(s):// அல்லது data:image/*;base64 URL ஐப் பயன்படுத்தவும்.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "இந்த வழங்குநரின் மாதிரிகளை claude/<provider>/<model> மிரர் அடையாளங்களின் கீழ் விளம்பரம் செய்யவும், எனவே Claude Code இன் கேட்வே மாதிரி கண்டுபிடிப்பு அவற்றைப் பட்டியலிடலாம். இயல்பாக அண்மையில் отключено — இதை இயக்குவது அனைத்து கிளையன்டுகளுக்கான பட்டியல் பதிவுகளை இரட்டிப்பாக்குகிறது.", "ccAliasProviderLevelLabel": "முதன்மை வழங்குநர்", "ccAliasModelOverridesLabel": "மாதிரி அடிப்படையில் மீறல்கள்", - "ccAliasModelOverrideAriaLabel": "{name} க்கான மீறல்", + "ccAliasModelOverrideAriaLabel": "{modelId} க்கான மீறல்", "ccAliasStateInherit": "மரபு", "ccAliasStateOn": "இல்", "ccAliasStateOff": "ஆஃப்", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "அந்த அமர்வு ஏற்கனவே நடப்பில் உள்ளது", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "அங்கீகாரத்தைப் பயன்படுத்தவும்", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API கீயை ஒட்டவும்…", "zedSaving": "சேமிக்கப்படுகிறது…", "zedImportAction": "இறக்குமதி செய்", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "தானியங்கி குர்சர் அமர்வு புதுப்பிப்பை செயல்படுத்தவும்", + "cursorAgentNudgeBody": "தானியங்கி அமர்வு புதுப்பிப்பிற்காக cursor-agent ஐ நிறுவவும் — இதன் இல்லையெனில், Cursor இணைப்புகள் சுமார் 24 மணி நேரத்திற்கு ஒருமுறை காலாவதியாக முறைப்படி மீண்டும் இணைக்கப்பட வேண்டும்.", + "cursorAgentNudgeDismiss": "அனுமதிக்கவும்", "zedManualImportFailed": "கைமுறை இறக்குமதி தோல்வியடைந்தது", "zedManualImportSuccess": "Zed-இலிருந்து {provider} டோக்கன் இறக்குமதி செய்யப்பட்டது", "grokImportTitle": "Grok Build Auth-ஐ இறக்குமதி செய்", @@ -5878,7 +6066,6 @@ "friendliai": "சர்வர்லெஸ் இன்ஃபெரன்ஸிற்கான இலவச அடுக்கு — கிரெடிட் கார்டு தேவையில்லை", "gemini": "எப்போதும் இலவசம்: Gemini 2.5 Flash-க்கு ஒரு நாளைக்கு 1,500 கோரிக்கைகள் — கிரெடிட் கார்டு தேவையில்லை, aistudio.google.com இல் விசையைப் பெறவும்", "gigachat": "GigaChat (Sber) ஐ ஒரு API விசையுடன் இணைக்கவும்.", - "github-models": "github.com/settings/tokens இல் 'models: read' வரம்புடன் ஒரு GitHub PAT ஐ உருவாக்கவும்", "gitlab": "பொது குறியீடு பரிந்துரைகள் API க்கான GitLab தனிப்பட்ட அணுகல் டோக்கன். gitlab.com ஐப் பயன்படுத்தாதபோது சுய-ஹோஸ்ட் செய்யப்பட்ட அடிப்படை URL ஐ உள்ளமைக்கவும்.", "gitlawb-gmi": "Gitlawb Opengateway டாஷ்போர்டிலிருந்து உங்கள் API விசையைப் பெறவும்.", "gitlawb": "Gitlawb Opengateway டாஷ்போர்டிலிருந்து உங்கள் API விசையைப் பெறவும்.", @@ -6017,7 +6204,8 @@ "kimi-coding": "ஏற்கனவே உள்ள OAuth flow மூலம் Kimi Coding-ஐ இணைக்கவும்.", "kiro": "இலவச அடுக்கு: 50 கிரெடிட்கள்/மாதம் (~25K–100K டோக்கன்கள்). ⚠️ Kiro ToS மூன்றாம் தரப்பு proxy/harness பயன்பாட்டைத் தடைசெய்கிறது.", "codex": "தற்போதுள்ள OAuth செயல்முறையுடன் OpenAI Codex-ஐ இணைக்கவும்.", - "qwen": "தற்போதுள்ள OAuth செயல்முறையுடன் Qwen Code-ஐ இணைக்கவும்." + "qwen": "தற்போதுள்ள OAuth செயல்முறையுடன் Qwen Code-ஐ இணைக்கவும்.", + "github-models": "github.com/settings/tokens இல் 'models: read' வரம்புடன் ஒரு GitHub PAT ஐ உருவாக்கவும்" }, "passthroughModelsDescription": "{provider} வழங்குநரின் சொந்த மாதிரி ஐடிகளை ஏற்றுக்கொள்கிறது. /மாடல்களில் இருந்து இறக்குமதி செய்யவும் அல்லது ரூட்டிங் செய்ய தனிப்பயன் ஐடிகளைச் சேர்க்கவும்.", "bedrockModelsDescription": "அமேசான் பெட்ராக் மாதிரிகள் AWS பிராந்தியத்தால் ஸ்கோப் செய்யப்படுகின்றன. /மாடல்களில் இருந்து இறக்குமதி செய்யவும் அல்லது தேர்ந்தெடுக்கப்பட்ட பகுதியில் செயல்படுத்தப்பட்ட பெட்ராக் மாடல் ஐடிகளைச் சேர்க்கவும்.", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "பங்குதாரர் இணைப்பு — உங்களுக்கு எந்த கூடுதல் கட்டணமும் இன்றி OmniRoute-ஐ ஆதரிக்கிறது", "anonymousFallbackTitle": "அறியப்படாத மாற்று", "anonymousFallbackDesc": "எல்லா கட்டமைக்கப்பட்ட இணைப்புகள் முடிந்தால் (கோட்டா, கிரெடிட்கள், அல்லது காலாவதி), இந்த வழங்குநரின் விசையில்லா நிலையை தற்காலிகமாக பயன்படுத்தவும். இந்த வழங்குநரை தவிர்க்க மாறி அனான்மா கோரிக்கைகளை அனுப்பாமல் выключить செய்யவும் — விசையில்லா நிலை அவற்றை நிராகரிக்கும் போது (401) பரிந்துரைக்கப்படுகிறது.", - "anonymousFallbackEnabled": "{name} க்கான அங்கீகாரம் இல்லாத மாற்று செயல்படுத்தப்பட்டது", + "anonymousFallbackEnabled": "{provider} க்கான அங்கீகாரம் இல்லாத மாற்று செயல்படுத்தப்பட்டது", "anonymousFallbackDisabled": "{provider} க்கான அங்கீகாரம் இல்லாத மாற்று முடக்கப்பட்டுள்ளது — பூர்த்தியான இணைப்புகள் இந்த வழங்குநரை தவிர்க்கும்", - "anonymousFallbackUpdateFailed": "அறிக்கையற்ற மாற்று அமைப்பை புதுப்பிக்க முடியவில்லை" + "anonymousFallbackUpdateFailed": "அறிக்கையற்ற மாற்று அமைப்பை புதுப்பிக்க முடியவில்லை", + "batchDeleteFailed": "கூட்டமாக அழிக்க முடியவில்லை", + "batchDeleteNetworkError": "பேட்ச் அழிப்பின் போது நெட்வொர்க் பிழை", + "batchUpdateFailed": "கூட்டம் புதுப்பிப்பு தோல்வி அடைந்தது", + "batchUpdateNetworkError": "கூட்டம் புதுப்பிப்பின் போது நெட்வொர்க் பிழை", + "categoryAudio": "ஆடியோ", + "categoryCloudAgent": "கிளவுட் ஏஜென்ட்", + "categoryIde": "IDE", + "categoryLocal": "உள்ளூர்", + "categorySearch": "தேடு", + "categoryWebCookie": "வலைக் குக்கி", + "claudeExtraUsageBlockingDisabled": "Claude கூடுதல் பயன்பாடு தடுப்பு முடக்கப்பட்டது (கூடுதல் பயன்பாடு அனுமதிக்கப்பட்டுள்ளது)", + "claudeExtraUsageBlockingEnabled": "கிளோட் கூடுதல் பயன்பாடு தடுப்பு செயல்படுத்தப்பட்டது (கூடுதல் பயன்பாடு தடுப்பதற்கானது)", + "claudeRoutingPreferenceDisabled": "அனுபவமில்லா கிளோட் மாதிரிகள் இனி கிளோட் குறியீட்டை விரும்பவில்லை", + "claudeRoutingPreferenceEnabled": "முன் பெயரிடப்படாத கிளோட் மாதிரிகள் இப்போது கிளோட் கோடுக்கு முன்னுரிமை அளிக்கின்றன", + "clearMediaFilter": "அழிக்கவும்", + "cliproxyRoutingDisabled": "விண்ணப்பங்கள் இப்போது உள்ளூர் OmniRoute (நேரடி) ஐப் பயன்படுத்துகின்றன.", + "cliproxyRoutingEnabled": "விண்ணப்பங்கள் இப்போது CLIProxyAPI (ஆழமான எமுலேஷன்) மூலம் வழிமொழிகின்றன.", + "codexLimitPolicyUpdated": "Codex வரம்பு கொள்கை புதுப்பிக்கப்பட்டது", + "codexServiceModeUpdated": "Codex சேவையின் முறை புதுப்பிக்கப்பட்டது", + "codexServiceTierActive": "Codex {tier} சேவை நிலை செயல்பாட்டில் உள்ளது", + "codexTierFastLabel": "விரைவான", + "codexTierFlexLabel": "ஃப்ளெக்ஸ்", + "commandCodeApplyFailed": "கமாண்டு குறியீடு அங்கீகாரம் செயல்படுத்துவதில் தோல்வி அடைந்தது", + "commandCodeApplyingApproval": "உலாவி அங்கீகரிக்கப்பட்டது, செயல்படுத்துகிறது…", + "commandCodeApplyingKey": "உலாவி அங்கீகாரம் பெற்ற விசையை பயன்படுத்துகிறது…", + "commandCodeApprovalInstructions": "அங்கீகாரம் URL-ஐ திறந்து, அணுகலை ஒப்புதல் அளித்து, பின்னர் கீழே திரும்பிய key/JSON/URL-ஐ ஒட்டவும்…", + "commandCodeAuthExpired": "கமாண்டு குறியீடு அங்கீகாரம் காலாவதியானது", + "commandCodeConnected": "கமாண்டு குறியீடு இணைக்கப்பட்டது", + "commandCodeConnectionAdded": "கமாண்டு கோட் இணைப்பு சேர்க்கப்பட்டது", + "commandCodeLinkExpired": "கமாண்டு குறியீட்டு இணைப்பு காலாவதியாகியுள்ளது", + "commandCodeOpeningStudio": "கமாண்டு கோட் ஸ்டூடியோவை திறக்கிறது…", + "commandCodePopupBlocked": "பாப்-அப் தடிக்கப்பட்டது. தயவுசெய்து பாப்-அப்களை அனுமதிக்கவும் மற்றும் Command Code Connect ஐ மீண்டும் முயற்சிக்கவும்.", + "commandCodeStartFailed": "Command Code auth ஐ துவங்குவதில் தோல்வி அடைந்தது", + "connectionDeleted": "இணைப்பு நீக்கப்பட்டது", + "connectionFallback": "இணைப்பு", + "coolingConnectionsDescription": "இந்த இணைப்புகள் அவர்களின் கடைசி கோரிக்கையில் 429 (விகித-கட்டுப்பாடு) ஐ திருப்பின. OmniRoute அவற்றைப் புறக்கணிக்கும், நேரம் முடிவடையும்வரை — கைமுறையால் முடக்க தேவையில்லை.", + "coolingConnectionsTitle": "தற்போது குளிர்ச்சி ({count})", + "failedDeleteAlias": "அலியாஸ் நீக்குவதில் தோல்வி அடைந்தது", + "failedDeleteConnection": "இணைப்பை நீக்க முடியவில்லை", + "failedDistributeProxies": "பிராக்ஸிகளை பகிர்வதில் தோல்வி அடைந்தது.", + "failedSaveModelEndpointSettings": "மாதிரி முடிவுக்கு அமைவுகளை சேமிக்க முடியவில்லை", + "failedUpdateClaudeExtraUsagePolicy": "கிளோட் கூடுதல்-பயன்பாட்டு கொள்கையை புதுப்பிக்க முடியவில்லை", + "failedUpdateClaudeRoutingPreference": "Claude Code வழிமுறை விருப்பத்தை புதுப்பிக்க முடியவில்லை", + "failedUpdateCliproxyRouting": "CLIProxyAPI வழிமுறையை புதுப்பிக்க முடியவில்லை", + "failedUpdateCodexLimitPolicy": "Codex வரம்பு கொள்கையை புதுப்பிக்க முடியவில்லை", + "failedUpdateCodexServiceMode": "Codex சேவையின் முறை புதுப்பிக்க முடியவில்லை", + "filterByMedia": "மீடியா", + "freeBadge": "இலவசம்", + "kimiCodeApiKeyLabel": "கிமி கோட் API விசை", + "modelTestFailed": "மாதிரி சோதனை தோல்வியடைந்தது", + "modelTestNetworkError": "நெட்வொர்க் பிழை சோதனை மாதிரி", + "networkError": "நெட்வொர்க் பிழை", + "networkErrorDeletingAlias": "அலியாஸ் நீக்குவதில் நெட்வொர்க் பிழை", + "networkErrorSettingAlias": "அலைவரிசை பிழை பெயரிடுவதில்", + "noProvidersMatch": "உங்கள் தேடலுக்கு பொருந்தும் வழங்குநர்கள் இல்லை.", + "noSavedProxies": "சேமிக்கப்பட்ட புரோக்ஸிகள் எதுவும் கிடைக்கவில்லை. முதலில் அமைப்புகள் → புரோக்ஸியில் புரோக்ஸிகளைச் சேர்க்கவும்.", + "pageLoadErrorDescription": "நாம் தற்போது வழங்குநர் தரவுகளை ஏற்ற முடியவில்லை. உங்கள் இணைப்பை சரிபார்க்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "pageLoadErrorId": "பிழை ஐடி: {id}", + "pageLoadErrorRetry": "மீண்டும் முயற்சி செய்", + "pageLoadErrorTitle": "சேவையாளர் ஏற்றுவதில் தோல்வி ஏற்பட்டது", + "playgroundTitle": "பிளேகிரவுண்ட்", + "providerDetailConnectionFlexActive": "இந்த இணைப்புக்கு Codex flex சேவை நிலை செயல்பாட்டில் உள்ளது", + "providerDetailConnectionPriorityActive": "இந்த இணைப்புக்கு Codex முன்னுரிமை சேவை நிலை செயல்பாட்டில் உள்ளது", + "providerDetailGlobalFlexActive": "உலகளாவிய கோடெக்ஸ் ஃபிளெக்ஸ் சேவைக் கட்டணம் செயல்பாட்டில் உள்ளது", + "providerDetailGlobalPriorityActive": "உலகளாவிய கோடெக்ஸ் முன்னுரிமை சேவை நிலை செயல்பாட்டில் உள்ளது", + "proxiesDistributed": "{tagLabel}{total} இணைப்புகளில் {assigned} பிரிக்கப்பட்ட ப்ராக்சி ஒதுக்கீடு(கள்).", + "rerankEndpoint": "மீட்டெழுத்து", + "savedModelEndpointSettings": "சேமிக்கப்பட்ட மாதிரி முடிவுறுப்பு அமைப்புகள்", + "searchByModelAria": "மாதிரியில் தேடு", + "selectSupportedEndpoint": "குறைந்தது ஒரு ஆதரிக்கப்படும் முடிவுகளைத் தேர்ந்தெடுக்கவும்", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "சந்தா பட்டியலை ஏற்ற முடியவில்லை", "toggleFailed": "சுவிட்சை மாற்றுவதில் தோல்வி", "refreshFailed": "புதுப்பிக்க முடியவில்லை", - "deleteFailed": "நீக்குவதில் தோல்வி" + "deleteFailed": "நீக்குவதில் தோல்வி", + "add": "சேர்க்கவும்", + "cancel": "ரத்து செய்", + "configure": "கட்டமைக்கவும்", + "copyEndpoint": "எண்ட்பாயிண்ட் நகல் செய்", + "coreEndpointHint": "மூல எண்ட்பாயிண்ட் குறிப்பு", + "coreNodesHint": "மூல நொடிகள் குறிப்பு", + "create": "உருவாக்கவும்", + "deleteConfirm": "அழிக்க உறுதிப்படுத்தவும்", + "empty": "காலியாக உள்ளது", + "globalModeDescription": "உலகளாவிய முறை விளக்கம்", + "localCoreHint": "உள்ளூர் கோர் குறிப்பு", + "nodeSummary": "நோட் சுருக்கம்", + "providerRequired": "சேவையாளர் தேவை", + "providerRouting": "சேவையாளர் வழிமுறை", + "refresh": "மீட்டமைக்கவும்", + "refreshInterval": "புதுப்பிப்பு இடைவெளி", + "ruleModeDescription": "வழிமுறை முறை விளக்கம்" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "படக் கோரிக்கைகளை உரை-மட்டும் மாதிரிகளுக்கு வழிநடத்துவதற்கு முன், தானியங்கி பார்வை-க்கு-உரை (vision-to-text) ஃபால்பேக்கை இயக்கவும்.", "visionBridgeEnabledLabel": "செயல்படுத்தப்பட்டது", "visionBridgeEnabledDesc": "படப் பகுதிகளை பிரித்தெடுக்கப்பட்ட உரையுடன் மாற்றும் ப்ரீ-கால் பிரிட்ஜை நிலைமாற்றவும்.", + "visionBridgeRerouteTextOnlyLabel": "உரை மட்டுமே உள்ள மாதிரிகளை மறுசீரமைக்கவும்", + "visionBridgeRerouteTextOnlyDesc": "தேர்ந்தெடுக்கப்பட்ட மாதிரிக்கு பட உள்ளீடு இல்லாத போது, படங்களை உள்ளடக்கிய முழு கோரிக்கையை பாலம் மாதிரிக்கு அனுப்பவும்.", "visionBridgeModel": "பாலம் மாதிரி", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "பார்வையை (vision) ஆதரிக்கும் எந்தவொரு OmniRoute மாதிரி ஐடியையும் (model ID) இங்கு பயன்படுத்தலாம்.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API key-இல் manage scope இல்லை.", "BYPASS_PREFIX_NOT_ALLOWED": "ஒன்று அல்லது அதற்கு மேற்பட்ட முன்னொட்டுகள் ஸ்பான் செய்யக்கூடிய வழிகளை இலக்காகக் கொண்டுள்ளன, மேலும் அவற்றைத் தவிர்க்க முடியாது.", "GENERIC": "authz அமைப்புகளைப் புதுப்பிப்பதில் தோல்வி." - } + }, + "remove": "அழிக்கவும்" }, "resilienceBaseCooldownLabel": "அடிப்படை குளிர்விப்பு", "scopeLabel": "நோக்கம்", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "ஒலியை சோதிக்கிறேன்…", "modalityBridgeAudioTestOk": "ஆடியோ பாலம் சரி — {count} கிளிப்(கள்) {model} மூலம் உரைமாற்றம் செய்யப்பட்டது", "modalityBridgeAudioTestNoop": "ஆடியோ பாலம் செயல்படுத்தப்படவில்லை (இலக்கு ஆடியோவை ஆதரிக்கலாம், STT வழங்குநர் இணைக்கப்படவில்லை, அல்லது பாலம் முடக்கப்பட்டுள்ளது)", - "modalityBridgeAudioTestError": "ஒலி சோதனை தோல்வியடைந்தது: {message}" + "modalityBridgeAudioTestError": "ஒலி சோதனை தோல்வியடைந்தது: {message}", + "modelRoutingDescriptionPlaceholder": "பாதை ஒபஸ் மாதிரிகளை முன்மாதிரி கூட்டத்திற்கு வழி நடத்தவும்", + "cliproxyapiFallbackCodes": "Cliproxyapi மாற்று குறியீடுகள்", + "cliproxyapiFallbackDescription": "கிளிப்ரோக்ஸி ஏபிஐ மாற்று விளக்கம்", + "cliproxyapiHealthLabel": "கிளிப்பிராக்ஸிapi ஆரோக்கியம் குறிச்சொல்", + "cliproxyapiImportFailed": "Cliproxyapi இறக்குமதி தோல்வி அடைந்தது", + "cliproxyapiImportResult": "Cliproxyapi இறக்குமதி முடிவு", + "cliproxyapiInvalidUrl": "Cliproxyapi தவறான URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi வாழ்க்கைச் சுற்று அறிவிப்பு பிறகு", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi வாழ்க்கைச்சுழற்சி அறிவிப்பு முந்தைய", + "cliproxyapiLifecycleNoticeLink": "கிளிப்பிராக்ஸி ஏபிஐ வாழ்க்கைச்சுழற்சி அறிவிப்பு இணைப்பு", + "cliproxyapiPortLabel": "கிளிப்பிராக்ஸி ஏபிஐ போர்ட் லேபிள்", + "cliproxyapiStatusLabel": "கிளிப்ரோக்ஸி ஏபிஐ நிலை குறிச்சொல்", + "cliproxyapiVersionLabel": "கிளிப்பிராக்ஸி ஏபிஐ பதிப்பு லேபிள்", + "collection": "சேகரிப்பு", + "errorPage": { + "description": "நாங்கள் தற்போது அமைப்புகளை ஏற்ற முடியவில்லை. சில விநாடிகளில் மீண்டும் முயற்சிக்கவும்.", + "errorId": "பிழை ஐடி: {id}", + "retry": "மீண்டும் முயற்சிக்கவும்", + "title": "அமைப்புகளை ஏற்ற முடியவில்லை" + }, + "host": "மேசையாளர்", + "notInstalled": "நிறுத்தப்படவில்லை", + "oneproxyActions": "ஒன்ப்ராக்சி நடவடிக்கைகள்", + "oneproxyActive": "Oneproxy செயல்பாட்டில் உள்ளது", + "oneproxyAnonymity": "ஒன்ப்ராக்சி அனோனிமிட்டி", + "oneproxyCountry": "ஒன்பிராக்சி நாடு", + "oneproxyDelete": "Oneproxy நீக்கு", + "oneproxyEmpty": "Oneproxy காலியாக உள்ளது", + "oneproxyHost": "ஒன்பிராக்சி ஹோஸ்ட்", + "oneproxyLatency": "ஒன்ப்ராக்சி தாமதம்", + "oneproxyProtocol": "ஒன்பிராக்சி புரொடோகால்", + "oneproxyQuality": "ஒன்ப்ராக்சி தரம்", + "oneproxySyncFailed": "சிங்க் தோல்வி: {error}", + "oneproxySyncSuccess": "சேர்க்கப்பட்ட {total} புரோக்ஸிகள் ({added} புதிய, {updated} புதுப்பிக்கப்பட்ட)", + "proxyDocumentationSocks5DescAfter": "பிராக்ஸி ஆவணங்கள் Socks5 விளக்கம் பிறகு", + "proxyFreePoolAddProxy": "பிராக்சி இலவச குழு பிராக்சியைச் சேர்க்கவும்", + "proxyFreePoolAdding": "பிராக்சி இலவச குளம் சேர்க்கிறது", + "proxyFreePoolSelectProxy": "பிராக்சி இலவச பூல் தேர்வு பிராக்சி", + "proxyStatusActive": "பிராக்சி நிலை செயல்பாட்டில் உள்ளது", + "proxyStatusInactive": "பிராக்சி நிலை செயலிழந்தது", + "routingAddEntry": "நுழைவு சேர்க்கவும்", + "settingSaveFailed": "அமைப்பு சேமிப்பு தோல்வி", + "settingSaved": "அமைப்பு சேமிக்கப்பட்டது", + "skillsmpApiKeyHintAfter": ". விகிதம் வரம்பு: {limit} கோரிக்கைகள்/நாள்.", + "skillsmpApiKeyHintBefore": "உங்கள் API விசையை பெறவும்", + "syncFailed": "சிங்க் தோல்வி அடைந்தது", + "unhealthy": "அருகாதாரம்", + "oneproxyDescription": "1proxy சமூக தளத்தில் இருந்து இலவசமாக சரிபார்க்கப்பட்ட பிரதிகளை பெறவும் மற்றும் சுழற்றவும்", + "oneproxySyncing": "சிங்க் செய்யப்படுகிறது...", + "oneproxySyncNow": "இப்போது ஒத்திசைக்கவும்", + "oneproxyClearAll": "எல்லாவற்றையும் அழிக்கவும்", + "oneproxyGoogle": "கூகிள்", + "oneproxyClearAllConfirm": "எல்லா 1proxy பிராக்ஸிகளை அழிக்கவா?", + "memorySkillsSkillsmpDescription": "SkillsMP-க்கு இணைந்து சந்தையிலிருந்து திறன்களை கண்டறிந்து நிறுவவும்.", + "memorySkillsActiveProviderDescription": "திறன்கள் பக்கம் தேடல் மற்றும் நிறுவலுக்கு எந்த வழங்குநரை பயன்படுத்த வேண்டும் என்பதை தேர்ந்தெடுக்கவும்.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP சந்தை", + "memorySkillsSkillsmpProviderDescription": "அங்கீகாரம் பெற்ற சந்தை (உங்கள் SkillsMP API விசையைப் பயன்படுத்துகிறது).", + "memorySkillsSkillsshProviderTitle": "skills.sh அடைவு", + "memorySkillsSkillsshProviderDescription": "பொது அடைவு வழங்குநர் (API விசை தேவை இல்லை).", + "routingCcBridgeCatalogName": "அந்த்ரோபிக்-உகந்த CC பாலம்", + "routingClaudeProviderName": "கிளோட் (OAuth)", + "routingClaudeProviderDescription": "OAuth-வழங்கிய டோக்கன்களுடன் உள்ளூர் கிளோட் வழங்குநர்.", + "routingCcBridgeName": "கிளோட்-கோட் பாலம்", + "routingCcBridgeDescription": "API விசைகளைப் பயன்படுத்தி ரிலே எண்ட்பாயிண்ட்கள் (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "அனுகூல வழங்குநர்.", + "routingUnknownOpKind": "அறியப்படாத செயல்பாடு வகை: {kind}", + "routingInvalidJson": "தவறான JSON: {error}", + "routingConfigMustBeObject": "கொன்ஃபிக் ஒரு JSON பொருள் ஆக இருக்க வேண்டும்", + "routingEnabledMustBeBoolean": "`enabled` உண்மையானது அல்லது பொய்யானது ஆக வேண்டும்", + "routingPipelineMustBeArray": "`pipeline` ஒரு ops இன் வரிசையாக இருக்க வேண்டும்", + "routingPipelineTooLong": "பைப்லைன் 50 செயல்களை மீற முடியாது", + "routingOpMissingKind": "Op #{index}: காணவில்லை அல்லது தவறான `kind`", + "routingOpUnknownKind": "Op #{index}: தெரியாத வகை \"{kind}\"", + "routingJsonEditorHide": "JSON தொகுப்பாளர் மறைக்கவும்", + "routingJsonEditorImportExport": "இறக்குமதி / ஏற்றுமதி JSON", + "routingJsonEditorLabel": "JSON (திருத்தவும் மற்றும் பயன்படுத்தவும், அல்லது இறக்குமதி செய்ய ஒட்டவும்)", + "routingApplyJson": "JSON ஐ பயன்படுத்தவும்", + "routingTransformsFootnote": "எல்லா மாற்ற செயல்பாடுகளும் மீண்டும் இயக்கும்போது ஒரே மாதிரியானவை. மாற்றங்கள் அடுத்த கோரிக்கையில் உடனடியாக அமல்படுத்தப்படும்.", + "cliproxyapiUnknown": "அறியப்படாதது", + "cliproxyapiVersion": "பதிப்பு", + "cliproxyapiHealth": "ஆரோக்கியம்", + "cliproxyapiPort": "போர்ட்", + "qdrantHost": "விருந்தினர்", + "qdrantCollection": "கலெக்ஷன்" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "முழுமையானது", "ultra": "அல்ட்ரா" } + }, + "modeOptions": { + "default": "இயல்பு", + "off": "ஆஃப்", + "lite": "லைட்", + "standard": "மாதிரி", + "aggressive": "ஆக்கிரமிப்பான", + "ultra": "உயர்தர", + "responsesToolOutput": "பதில் கருவி வெளியீடு" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "அடுக்கில் கடைசியாக இயங்குகிறது (RTK/Caveman உரையைச் சுத்தப்படுத்திய பிறகு, OmniGlyph எஞ்சியிருப்பதை படங்களாக மாற்றுகிறது) மேலும் omniglyph பயன்முறை மூலமாகவும் தனித்து இயங்குகிறது. இது ஒரு முன்னோட்டமாகும், மேலும் இறுதி-முதல்-இறுதி சரிபார்ப்பு முடியும் வரை இயல்பாகவே முடக்கப்பட்டிருக்கும்.", "saved": "சேமிக்கப்பட்டது.", "saveFailed": "சேமிக்க முடியவில்லை.", - "enableAria": "OmniGlyph இயந்திரத்தை இயக்கு" + "enableAria": "OmniGlyph இயந்திரத்தை இயக்கு", + "title": "OmniGlyph" }, "embeddedServices": { "title": "உட்பொதிக்கப்பட்ட சேவைகள்", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "எல்லா டோக்கன்களும் ஆரோக்கியமாக உள்ளன", + "needsAttention": "சில டோக்கன்களுக்கு கவனம் தேவை", + "refreshFailures": "டோக்கன் புதுப்பிப்பு தோல்விகள் கண்டறியப்பட்டன", + "unknown": "ஆரோக்கிய நிலை தெரியவில்லை" + }, + "systemMonitor": { + "metricsAriaLabel": "அமைப்பு அளவீடுகள்", + "memory": "நினைவகம்", + "memoryShort": "மெம்", + "uptime": "செயல்திறன்", + "ariaLabel": "அமைப்பு கண்காணிப்பு", + "title": "அமைப்பு கண்காணிப்பாளர்", + "version": "பதிப்பு", + "connections": "இணப்புகள்", + "circuitBreakers": "சர்க்யூட் பிரேக்கர்கள்", + "open": "{count} திறந்தது", + "memoryUsage": "நினைவக பயன்பாடு" + }, + "never": "எப்போது கூட இல்லை", + "justNow": "இப்போது மட்டும்", + "minutesAgo": "{count}முன்பு", + "hoursAgo": "{count}மணி நேரம் முன்பு", + "tokens": "டோக்குகள்", + "costs": "செலவுகள்", + "autoRefresh": "தானியங்கி புதுப்பிப்பு ({seconds}s)", + "toggleAutoRefresh": "ஆட்டோ ரீஃபிரெஷ் மாற்றவும்", + "activeRequests": "செயலில் உள்ள கோரிக்கைகள்", + "totalRequests": "மொத்த கோரிக்கைகள்", + "totalInputTokens": "மொத்த உள்ளீட்டு டோக்குகள்", + "model": "மாதிரி", + "provider": "முதலீட்டாளர்", + "requests": "கோரிக்கைகள்", + "lastUsed": "கடைசி பயன்படுத்தப்பட்டது", + "inputTokens": "உள்ளீட்டு டோக்குகள்", + "totalTokens": "மொத்த டோக்குகள்", + "inputCost": "உள்ளீட்டு செலவு", + "outputCost": "வெளியீட்டு செலவு", + "noUsageData": "இன்னும் எந்த பயன்பாடும் பதிவு செய்யப்படவில்லை. இங்கே தரவுகளை காண சில கோரிக்கைகள் செய்யவும்.", + "account": "கணக்கு", + "accountLabel": "கணக்கு {id}", + "noAccountUsage": "இன்னும் கணக்கு-சிறப்பு பயன்பாடு பதிவு செய்யப்படவில்லை. இங்கே தரவுகளை காண OAuth கணக்குகளைப் பயன்படுத்தி கோரிக்கைகள் செய்யவும்." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "அப்ளிகேஷன் தரவின் மூலம் மீட்டமைக்கவும்", + "resetViaAppDataDescription": "அந்த செயலியின் தரவுத்தொகுப்பில் உள்ள அமைப்புகள் கோப்பை நீக்கி உங்கள் கடவுச்சொல்லை மீட்டமைக்கவும்:", + "quitDesktopApp": "OmniRoute டெஸ்க்டாப் செயலியை முற்றிலும் மூடு", + "navigateToAppDataDirectory": "அப்ளிகேஷன் தரவுத்தொகுப்பிற்குச் செல்லவும்:", + "checkSystemAppDataFolder": "(உங்கள் கணினி செயலி தரவுப் பைலைச் சரிபார்க்கவும்)", + "relaunchDesktopFreshSetup": "OmniRoute டெஸ்க்டாப் செயலியை மீண்டும் தொடங்கவும் — இது புதிய அமைப்பை தொடங்கும்", + "alternativeSetPasswordTitle": "மாற்று: புதிய கடவுச்சொல்லை அமைக்கவும்", + "alternativeSetPasswordDescription": "சர்வர் சூழல் கோப்பின் மூலம் புதிய ஆரம்ப கடவுச்சொல்லை அமைக்கவும்:", + "openServerEnvFilePrefix": "திறக்கவும்", + "relaunchDesktopApp": "OmniRoute டெஸ்க்டாப் செயலியை மீண்டும் தொடங்கவும்", + "codexLinkInvalidOrExpired": "இந்த இணைப்பு செல்லுபடியாகவில்லை அல்லது காலாவதியாகிவிட்டது.", + "codexValidationServerError": "இந்த இணைப்பை சரிபார்க்க சேவையகத்தை அடைய முடியவில்லை.", + "codexSaveConnectionError": "இணைப்பை சேமிக்க முடியவில்லை. இணைப்பு காலாவதியாக இருக்கலாம்.", + "codexDeviceLoginDisabled": "இந்த OpenAI கணக்கிற்கான சாதனம் குறியீடு உள்நுழைவு முடக்கப்பட்டுள்ளது. அதை ChatGPT பாதுகாப்பு அமைப்புகளில் செயல்படுத்தவும் (அல்லது உங்கள் வேலைப்பாட்டின் நிர்வாகியை கேளுங்கள்).", + "codexAuthorizationTimedOut": "அங்கீகாரம் காலாவதியாகிவிட்டது. மீண்டும் முயற்சிக்க Start again ஐ கிளிக் செய்யவும்.", + "authenticationCancelled": "அங்கீகாரம் ரத்து செய்யப்பட்டது.", + "unexpectedAuthenticationError": "அனுமதிக்கான போது எதிர்பாராத பிழை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.", + "connectOpenAiCodexTitle": "OpenAI Codex-ஐ இணைக்கவும்", + "codexConnectDescription": "இந்த இணைப்பை அமைப்பதற்காக ChatGPT கணக்கை அங்கீகரிக்கவும்.", + "validatingCodexLink": "இணைப்பை சரிபார்க்கிறேன்…", + "codexGenerateCodeDescription": "கீழே கிளிக் செய்து ஒரே முறை குறியீட்டை உருவாக்கவும், பின்னர் OpenAI இல் உள்நுழைக.", + "startCodexFlow": "தொடங்கு", + "requestingOpenAiCode": "OpenAI இல் இருந்து குறியீட்டை கோருகிறது…", + "codexVerificationInstructions": "1. OpenAI சரிபார்ப்பு பக்கம் திறக்கவும் மற்றும் 2. இந்த குறியீட்டை உள்ளிடவும். நீங்கள் அங்கீகரித்தவுடன் இந்த பக்கம் தானாகவே புதுப்பிக்கப்படும்.", + "yourCode": "உங்கள் குறியீடு", + "openVerificationPage": "சரிபார்ப்பு பக்கம் திறக்கவும்", + "copyUrlShort": "யூஆர்.எல்-ஐ நகலெடுக்கவும்", + "savingConnection": "இணைப்பை சேமிக்கிறது…", + "codexConnected": "இணைக்கப்பட்டுள்ளது!", + "codexConnectionRegistered": "Codex கணக்கு பதிவு செய்யப்பட்டது. நீங்கள் இந்த தாவலை மூடலாம்.", + "tryAgain": "மீண்டும் முயற்சிக்கவும்", + "traeAuthorizationSuccess": "Trae அங்கீகாரம் ✓", + "traeAuthorizationFailed": "Trae அங்கீகாரம் தோல்வி அடைந்தது", + "closeAuthorizationWindow": "நீங்கள் இந்த ஜன்னலை மூடலாம்.", + "returnToDashboard": "டாஷ்போர்டுக்கு திரும்பவும்.", + "resetViaAppData": "அப்ப் தரவின் மூலம் மீட்டமைக்கவும்", + "deleteSettingsToReset": "பாஸ்வேர்டை மீட்டமைக்க செயலியின் தரவுத்தொகுப்பிலிருந்து அமைப்புகள் கோப்பை நீக்கவும்:", + "quitAppCompletely": "OmniRoute டெஸ்க்டாப் செயலியை முற்றிலும் மூடு", + "navigateToAppData": "அப்ளிகேஷன் தரவுத்தொகுப்பிற்குச் செல்லவும்", + "checkAppDataFolder": "உங்கள் அமைப்பு செயலி தரவுப் பைலைச் சரிபார்க்கவும்", + "deleteSettingsJson": "அழிக்கவும்", + "relaunchAppFresh": "OmniRoute டெஸ்க்டாப் செயலியை மீண்டும் தொடங்கவும் — இது புதிய அமைப்பை தொடங்கும்", + "alternativeSetPassword": "மாற்று: புதிய கடவுச்சொல்லை அமைக்கவும்", + "setNewPasswordViaEnv": "சேவையக சூழல் கோப்பின் மூலம் புதிய ஆரம்ப கடவுச்சொல்லை அமைக்கவும்:", + "openServerEnv": "திறக்கவும்", + "inDataDirectory": "தரவுப் பதிவகத்தில்", + "addOrUpdate": "சேர்க்கவும் அல்லது புதுப்பிக்கவும்", + "deleteAndRelaunch": "அழிக்கவும்", + "settingsJson": "settings.json", + "fromDataDir": "தரவுகள் அடைவிலிருந்து", + "relaunchApp": "OmniRoute டெஸ்க்டாப் செயலியை மீண்டும் தொடங்கவும்" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "நிறுவனம்", + "pricing": "விலை நிர்ணயம்", + "apiReference": "API குறிப்பு", + "helpCenter": "உதவி மையம்", + "about": "பற்றி", + "blog": "பிளாக்", + "contact": "தொடர்பு", + "terms": "விதிமுறைகள்", + "privacy": "தனியுரிமை", + "license": "அனுமதி", + "footerDescription": "modern AI அடிப்படைக்கான ஒருங்கிணைந்த இடைமுகம். பாதுகாப்பான, கண்காணிக்கக்கூடிய, மற்றும் அளவிடக்கூடிய.", + "communityDiscussions": "சமூக விவாதங்கள்" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute ஆவணங்கள்", + "metadataDefaultTitle": "OmniRoute ஆவணம்", + "metadataDescription": "OmniRoute AI கேட்‌வேவிற்கான விரிவான ஆவணங்கள் — அமைப்பு, API, சுருக்கம், பரப்புரை, மற்றும் மேலும்.", + "layoutNavTitle": "OmniRoute ஆவணங்கள்", + "layoutHomeLink": "ஆவணங்கள் முகப்பு", + "layoutDashboardLink": "← டாஷ்போர்டுக்கு திரும்பவும்", + "homeTitle": "OmniRoute ஆவணம்", + "homeMetadataDescription": "உங்கள் AI-ஐ வழி நடத்த, சுருக்க, மற்றும் அளவீடு செய்ய தேவையான அனைத்தும் - அமைப்பு வழிகாட்டிகள், API குறிப்பு, சுருக்கம், வெளியீடு, மற்றும் மேலும்.", + "homeTwitterDescription": "OmniRoute AI கேட்‌வேவுக்கான விரிவான ஆவணங்கள்", + "homeDescription": "உங்கள் AI-ஐ வழி நடத்த, சுருக்க, மற்றும் அளவிட தேவையான அனைத்தும்", + "homeSearchHint": "เCtrl K அழுத்தவும் ஆவணங்களை தேடவும்", + "featuredQuickStartTitle": "விரைவு தொடக்கம்", + "featuredQuickStartDescription": "3 நிமிடங்களில் OmniRoute ஐ இயக்கவும்", + "featuredAutoComboTitle": "ஆட்டோ-கொம்போ வழிகாட்டி", + "featuredAutoComboDescription": "OmniRoute உங்களுக்கு சிறந்த AI ஐ தேர்வு செய்ய அனுமதிக்கவும்", + "featuredProvidersTitle": "முதலாளிகள் வழிகாட்டி", + "featuredProvidersDescription": "நிமிடங்களில் AI வழங்குநர்களை இணைக்கவும்", + "nonTechUsersTitle": "தொழில்நுட்பம் அறிந்தவர்களுக்கு அல்லாத பயனர்களுக்கான", + "nonTechUsersSubtitle": "விரைவில் தொடங்குங்கள் — தொழில்நுட்ப பின்னணி தேவை இல்லை", + "techUsersTitle": "தொழில்நுட்ப பயனர்களுக்கான", + "techUsersSubtitle": "கட்டமைப்பு, APIs, மற்றும் உள்ளகங்களில் ஆழமாக ஆராயுங்கள்", + "apiExplorerMetadataTitle": "API ஆராய்ச்சி — OmniRoute ஆவணங்கள்", + "apiExplorerMetadataDescription": "இணைய செயல்பாட்டு API ஆராய்ச்சி — உண்மையான நேரத்தில் பதில்களுடன் OmniRoute முடிவுகளை நேரில் முயற்சிக்கவும்", + "apiExplorerTitle": "API ஆராய்ச்சி கருவி", + "apiExplorerDescription": "OmniRoute இடங்களை நேரில் முயற்சிக்கவும். ஒரு இடத்தை தேர்ந்தெடுக்கவும், உங்கள் கோரிக்கையை அமைக்கவும், மற்றும் நேரில் பதிலை காணவும்.", + "apiExplorerSseStarted": "SSE ஓட்டம் தொடங்கியது — நேர்முக வெளியீட்டிற்காக டெர்மினல்/டெவ் டூல்களை சரிபார்க்கவும்.", + "apiExplorerError": "பிழை: {message}", + "apiExplorerAuth": "அங்கீகாரம்", + "apiExplorerResponseLabel": "பதில்", + "apiExplorerSelectEndpoint": "ஆராய்வுக்கு ஒரு முடிவை தேர்ந்தெடுக்கவும்", + "apiExplorerChooseApi": "பக்கவாட்டில் உள்ள API ஐ தேர்ந்தெடுத்து விவரங்களை காணவும் மற்றும் அதை நேரில் முயற்சிக்கவும்", + "feedbackThanks": "உங்கள் கருத்துக்கு நன்றி!", + "feedbackQuestion": "இந்த பக்கம் உதவியாயிற்றா?", + "pageMetadataTitle": "{title} — OmniRoute ஆவணங்கள்", + "pageMetadataDescription": "OmniRoute ஆவணங்கள்: {title}", + "breadcrumb": "பாதை குறிச்சொல்", + "apiReferenceTable": { + "parameters": "அளவுருக்கள்", + "name": "பெயர்", + "type": "எழுது", + "description": "விளக்கம்", + "returns": "திரும்புகிறது", + "typePrefix": "எழுது:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth அமர்வு முழுமையல்ல (மறுவழி URI அல்லது குறியீட்டு சரிபார்ப்பாளர் காணவில்லை). இணைப்பை மீண்டும் தொடங்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "errorExchangeFailed": "மாற்றம் தோல்வியுற்றது", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: இயல்பான Google OAuth அங்கீகாரங்கள் localhost இல் மட்டுமே செயல்படுகிறது. தொலைதூர பயன்பாட்டிற்காக, உங்கள் சொந்த OAuth அங்கீகாரங்களை சூழல் மாறிலிகள் மூலம் கட்டமைக்கவும்: ANTIGRAVITY_OAUTH_CLIENT_ID மற்றும் ANTIGRAVITY_OAUTH_CLIENT_SECRET. 'தொலைதூர சேவையகத்தில் OAuth' என்ற README பிரிவைப் பார்க்கவும்.", + "errorSaveFailed": "சேமிப்பு தோல்வி அடைந்தது", + "errorAuthorizationFailed": "அங்கீகாரம் தோல்வி அடைந்தது", + "errorAuthorizationTimeout": "அங்கீகாரம் காலாவதியானது", + "errorRequestFailed": "கோரிக்கை தோல்வியுற்றது", + "errorCallbackServerFailed": "கால் பேக் சேவையகம் தொடங்குவதில் தோல்வி அடைந்தது", + "errorBrowserUnavailable": "இந்த வழங்ககருக்கான உலாவி OAuth தற்போதைய சூழலில் கிடைக்கவில்லை. அதற்குப் பதிலாக ஆதரிக்கப்படும் அங்கீகார முறையைப் பயன்படுத்தவும்.", + "errorStateMismatch": "OAuth மாநிலம் பொருந்தவில்லை. இணைப்பை மீண்டும் தொடங்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "errorImportAccessToken": "அணுகல் டோக்கனை இறக்குமதி செய்ய முடியவில்லை", + "errorSessionNotInitialized": "OAuth அமர்வு தொடங்கப்படவில்லை. இணைப்பு ஓட்டத்தை மீண்டும் தொடங்கி முயற்சிக்கவும்.", + "errorNoAuthorizationCode": "அனுமதி குறியீடு கண்டுபிடிக்கப்படவில்லை. மீள்பார்வை URL அல்லது அங்கீகார குறியீட்டை ஒட்டவும்.", + "tabDeviceCode": "கருவி குறியீடு", + "tabBrowserLogin": "உலாவி உள்நுழைவு", + "tabImportAuthJson": "auth.json ஐ இறக்குமதி செய்", + "tabPasteApiKey": "API விசையை ஒட்டவும்", + "windsurfPasteDescription": "Windsurf / VS Code IDE இல், கட்டளை பட்டியலில் இருந்து \"Windsurf: Provide Auth Token\" கட்டளையை இயக்கவும் (அல்லது Jupyter \"Get Windsurf Authentication Token\" பொத்தானை கிளிக் செய்யவும்), பின்னர் காட்டப்படும் டோக்கனை நகலெடுத்து கீழே ஒட்டவும். windsurf.com/show-auth-token ஐ நேரடியாக திறக்கும்போது \"Redirecting\" பக்கம் மட்டுமே காட்டு — IDE இன் மூலம் செயல்முறை தொடங்கப்பட வேண்டும்.", + "grokAuthJsonDescription": "~/.grok/auth.json இன் முழு உள்ளடக்கத்தை ஒட்டவும் (JWT \"key\" புலத்தை மட்டும் அல்ல). ஒரு அடிப்படை JWT இல் refresh_token இல்லை, எனவே காலாவதியான பிறகு இணைப்பு இறக்கிறது (#7610). கிடைக்கும்போது, குறிப்பிட்ட Import auth.json மொடல் பயன்படுத்தவும்.", + "devinDesktopPasteDescription": "ஒரு அங்கீகாரம் பெற்ற Devin அமர்வில் இருந்து உள்ள ஒரு Devin API விசையை ஒட்டவும். விசை ஏற்றுமதி கிடைக்கும் மற்றும் படிகள் Devin பதிப்பு மற்றும் கணக்கினால் மாறுபடுகின்றன.", + "devinPasteDescription": "உங்கள் WINDSURF_API_KEY ஐ வழங்கவும் (இது `devin auth login` மூலம் பெறப்பட்டது, அல்லது Windsurf IDE இல் \"Windsurf: Provide Auth Token\" கட்டளையின் மூலம்).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API விசை / டோக்கன்", + "saving": "சேமிக்கிறது…", + "saveConnection": "இணைப்பை சேமிக்கவும்", + "gheDescription": "உங்கள் GitHub Enterprise நிகழ்வின் அடிப்படை URL ஐ உள்ளிடவும் (எடுத்துக்காட்டு: https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL தேவைப்படுகிறது", + "gitlabDuoSetupTitle": "GitLab Duo OAuth அமைப்பு", + "gitlabDuoSetupMessage": "GitLab Duo OAuth அமைக்கப்படவில்லை. {applicationsUrl} இல் ஒரு OAuth பயன்பாட்டை பதிவு செய்யவும், மறுபடியும் URI {redirectUri} மற்றும் அளவைகள் \"{scopes}\" உடன், பின்னர் {clientIdEnv} (மற்றும் விருப்பமாக {clientSecretEnv}) ஐ அமைத்து மீண்டும் தொடங்கவும்.", + "gitlabDuoSetupDescription": "அப்ப்ளிகேஷன் பதிவு செய்யப்பட்ட பிறகு மற்றும் இந்த OmniRoute instance இல் env vars அமைக்கப்பட்ட பிறகு, OAuth உள்நுழைவுக்கு தொடங்க Continue ஐ கிளிக் செய்யவும்.", + "continue": "தொடர்ந்து" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "மேலும் ஏற்றுக", - "loadingMore": "மேலும் ஏற்றப்படுகிறது..." + "loadingMore": "மேலும் ஏற்றப்படுகிறது...", + "correlationId": "இணைப்பு ஐடி", + "group": { + "showAllRows": "எல்லா வரிசைகளையும் காண்க", + "showLatestPerCorrelation": "குறிப்பீட்டு அடையாளத்திற்கு சமீபத்தியதை காண்க", + "grouped": "குழுவாக்கப்பட்டது" + }, + "running": "ஊர்வலம்", + "interval": { + "decrease": "குறைந்த இடைவெளி", + "title": "விளக்கத்தை தானாக புதுப்பிக்கும் இடைவெளி விநாடிகளில்", + "increase": "இருப்பினை அதிகரிக்கவும்" + }, + "status": { + "inProgress": "நடந்து கொண்டிருக்கிறது", + "recoveredByRetry": "மீண்டும் முயற்சியால் மீட்டது", + "goToParent": "பெற்றோர் கோரிக்கைக்கு செல்லவும்", + "healedTitle": "தவறானது, {count} முறை முயற்சிக்குப் பிறகு மீட்டது", + "healed": "மருத்துவமடைந்தது", + "failedTitle": "எல்லா {count} முயற்சிகளும் தோல்வியடைந்தன", + "failed": "தோல்வி", + "pinnedTitle": "சூழல்-கேஷ் அமர்வு பின்வட்டம் மூலம் தேர்ந்தெடுக்கப்பட்ட மாதிரி", + "pinned": "பின்வைக்கப்பட்டது" + }, + "attempts": "முயற்சிகள்", + "detail": { + "collapse": "{title} ஐ சுருக்கவும்", + "expand": "{title} விரிவாக்கவும்", + "copyTitle": "நகலெடுக்க {title}", + "copied": "பகிர்ந்துகொண்டது!", + "copy": "பதிப்பேற்றவும்", + "autoscrollOn": "ஆட்டோஸ்கிரோல்: இயக்கம்", + "autoscrollOff": "ஆட்டோஸ்க்ரோல்: அணைப்பு", + "payload": { + "clientRawRequest": "கிளையனின் கச்சா கோரிக்கை", + "clientRequest": "கிளையனின் கோரிக்கை", + "openaiRequest": "OpenAI கோரிக்கை", + "providerRequest": "சேவையாளர் கோரிக்கை", + "providerResponse": "முதலாளி பதில்", + "clientResponse": "கிளையனின் பதில்", + "pipelineError": "பைப்லைன் பிழை" + }, + "payloadMissing": "இந்த பதிவு நுழைவுக்கு விரிவான payload கலைப்பொருள் இனி கிடைக்கவில்லை.", + "payloadCorrupt": "விவரமான payload கலைப்பொருள் பகுப்பாய்வு செய்ய முடியவில்லை.", + "notAvailable": "N/A", + "semanticCache": "அர்த்தமிக்க (OmniRoute)", + "upstreamCache": "மேல்நிலை (வழங்குநர்)", + "ariaLabel": "கோரிக்கை பதிவு விவரம்", + "completed": "முடிந்தது", + "upstreamStatus": "மேல்நிலை: {status}", + "statusDiscrepancy": "OmniRoute {provider} வழங்கிய {status} ஐ திருப்பியது", + "previousRequest": "முந்தைய கோரிக்கை", + "nextRequest": "அடுத்த கோரிக்கை", + "close": "விவரம் மாடலை மூடு", + "startedAt": "ஆரம்பிக்கப்பட்டது", + "endedAt": "முடிந்தது அன்று", + "duration": "கால அளவு", + "model": "மாதிரி", + "provider": "வழங்குநர்", + "account": "கணக்கு", + "input": "உள்ளீடு", + "totalIn": "மொத்தம் உள்ளது: {value}", + "cacheRead": "கேஷ் வாசிப்பு: {value}", + "cacheWrite": "கேஷ் எழுதுதல்: {value}", + "compressed": "சுருக்கம்: {from} → {to} ({percent}% சேமிக்கப்பட்டது)", + "output": "வெளியீடு", + "totalOut": "மொத்த வெளியீடு: {value}", + "reasoning": "காரணம்: {value}", + "requestedModel": "கோரிய மாடல்", + "requestProtocol": "அவசியம் நெறிமுறை", + "cacheSource": "கேஷ் மூலத்திடம்", + "modelPinning": "மாதிரி பின்வாங்குதல்", + "activeModelPinning": "செயலில் — அமர்வு பின்வட்டம் மூலம் தேர்ந்தெடுக்கப்பட்ட மாதிரி", + "rotated": "மாற்றப்பட்டது: {initial} -> {final}", + "apiKey": "API விசை", + "noApiKey": "API விசை இல்லை", + "combo": "கொம்போ", + "error": "தவறு", + "unblockAll": "எல்லாவற்றையும் அனுமதிக்கவும்", + "cleared": "அழிக்கப்பட்டது", + "unblock": "தடை நீக்கு", + "relatedRequests": "சம்பந்தப்பட்ட கோரிக்கைகள் ({count})", + "current": "தற்போதைய", + "detailStatus": "விவரம் நிலை", + "loadingDetails": "கோரிக்கை விவரங்களை ஏற்றுகிறது...", + "providerEventStream": "சேவையாளர் நிகழ்வு ஓட்டம்", + "clientEventStream": "கிளையன்ட் நிகழ்வு ஓட்டம்", + "eventStream": "நிகழ்வு ஓட்டம்", + "responsePayloadLegacy": "பதில் பைலோடு (பழைய)", + "requestPayloadLegacy": "கோரிக்கை பைலோடு (பழைய)", + "noPayload": "இந்த பதிவு உள்ளீட்டிற்கு எந்த பைலோடு தரவும் கிடையாது.", + "correlationId": "குறுக்கீட்டு ஐடி", + "correlationIdValue": "உறுப்பு அடையாளம்: {id}", + "detailedPayloadInfo": "முதலில் விரிவான பதிவு செயல்படுத்தவும், புதிய கோரிக்கைகளுக்கான நான்கு கட்டம் கிளையன்ட்/முதலீட்டாளர் payload காட்சி வேண்டும் என்றால்." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} முடக்கப்பட்டது", "providerAdded": "{provider} சேர்க்கப்பட்டது", "add": "சேர்க்கவும்", - "manualApiKey": "ஒரு கையேடு API விசையை பயன்படுத்தவும்" + "manualApiKey": "ஒரு கையேடு API விசையை பயன்படுத்தவும்", + "createDahlTokenFailed": "Dahl டோக்கன் உருவாக்குவதில் தோல்வி அடைந்தது", + "providerProxy": "பிராக்சி", + "providerProxyConfigureHint": "பிராக்ஸியை கட்டமைக்கவும்", + "providerProxyTitleConfigured": "பிராக்ஸி அமைக்கப்பட்டுள்ளது: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-கட்டுப்படுத்தப்பட்டது — விதிமுறைகளை மதிப்பாய்வு செய்யவும்", "caution": "எச்சரிக்கை — தனிப்பட்ட பயன்பாடு / ப்ராக்ஸி பிரிவுகள்", "ok": "பொதுவாக அனுமதிக்கக்கூடியது" - } + }, + "allProviders": "எல்லா வழங்குநர்கள்", + "noApiKeyRequired": "API விசை தேவையில்லை" }, "providerHealthAutopilot": { "title": "வழங்குநர் ஆரோக்கிய ஆட்டோபைலட்", @@ -12390,7 +13047,11 @@ "on": "ஆன்", "off": "ஆஃப்", "availableProviders": "கிடைக்கக்கூடிய வழங்குநர்கள் ({count})", - "noProviderOverrides": "மேலெழுதல்கள் இல்லை — அனைத்து செயலில் உள்ள வழங்குநர்களும் தங்களின் இயல்புநிலை மாடல்களுடன் பங்கேற்பார்கள்" + "noProviderOverrides": "மேலெழுதல்கள் இல்லை — அனைத்து செயலில் உள்ள வழங்குநர்களும் தங்களின் இயல்புநிலை மாடல்களுடன் பங்கேற்பார்கள்", + "resetFailed": "மீட்டமைப்பு தோல்வியுற்றது", + "resetSuccess": "கட்டமைப்பு இயல்புநிலைக்கு மீட்டமைக்கப்பட்டது", + "running": "ஏற்றுகிறது...", + "testFailed": "சோதனை தோல்வியடைந்தது" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) என்பது OmniRoute-இன் நிறுவனர் ஓப்பன் சோர்ஸ் நண்பர்", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "இந்த படக் கோரிக்கைக்கு வழங்குநர் கண்ணோட்டத்தை ஆதரிக்கவில்லை", "capabilityFilter.toolsMismatch": "சேவையாளர் கருவி அழைப்பை ஆதரிக்கவில்லை", "capabilityFilter.structuredOutputMismatch": "சேவையாளர் கட்டமைக்கப்பட்ட வெளியீட்டை ஆதரிக்கவில்லை", - "capabilityFilter.contextWindowMismatch": "விண்ணப்பம் வழங்குநர் சூழல் ஜன்னலை மீறுகிறது" + "capabilityFilter.contextWindowMismatch": "விண்ணப்பம் வழங்குநர் சூழல் ஜன்னலை மீறுகிறது", + "publicSystem": { + "notFound": { + "title": "பக்கம் கிடைக்கவில்லை", + "description": "நீங்கள் தேடும் பக்கம் இல்லை அல்லது மாற்றப்பட்டுள்ளது.", + "dashboardAriaLabel": "டாஷ்போர்டுக்கு திரும்பவும்", + "statusAriaLabel": "கணினி நிலை பக்கம் திறக்கவும்", + "systemStatus": "அமைப்பு நிலை" + }, + "error": { + "title": "உள்ளக சேவையகம் பிழை", + "description": "உங்கள் கோரிக்கையை செயலாக்குவதில் ஏதோ தவறு ஏற்பட்டது. எங்கள் குழு அறிவிக்கப்பட்டுள்ளது மற்றும் ஒரு சரிசெய்யும் பணியில் உள்ளது.", + "errorId": "பிழை ஐடி: {id}", + "detailsAriaLabel": "பிழை விவரங்கள்", + "retryAriaLabel": "பக்கம் மீண்டும் ஏற்ற முயற்சிக்கவும்", + "tryAgain": "மீண்டும் முயற்சிக்கவும்", + "dashboardAriaLabel": "டாஷ்போர்டுக்கு திரும்பவும்", + "statusAriaLabel": "அமைப்பு நிலையை திறக்கவும்", + "systemStatus": "அமைப்பு நிலை" + }, + "globalError": { + "title": "ஏதோ தவறு ஏற்பட்டது", + "description": "ஒரு எதிர்பாராத பிழை ஏற்பட்டது. இது பதிவு செய்யப்பட்டுள்ளது மற்றும் எங்கள் குழு ஆராயும்.", + "detailsAriaLabel": "பிழை விவரங்கள்", + "retryAriaLabel": "பக்கம் மீண்டும் ஏற்ற முயற்சிக்கவும்", + "tryAgain": "மீண்டும் முயற்சி செய்", + "statusAriaLabel": "அமைப்பு நிலையை திறக்கவும்", + "systemStatus": "அமைப்பு நிலை" + }, + "offline": { + "title": "இணைப்பு சிக்கல்", + "description": "OmniRoute தற்போது நெட்வொர்க்கை அடைய முடியவில்லை. உங்கள் இணையம், VPN, அல்லது ப்ராக்ஸி அமைப்புகளை சரிபார்க்கவும்.", + "connectionRestored": "இணைப்பு மீண்டும் உருவாக்கப்பட்டது", + "offlineModeDetected": "ஆஃப்லைன் முறை கண்டறியப்பட்டது", + "retryConnection": "மீண்டும் இணைக்க முயற்சிக்கவும்", + "openStatusPage": "ஸ்திதி பக்கம் திறக்கவும்" + }, + "maintenance": { + "title": "அமைக்கப்பட்ட பராமரிப்பு", + "description": "சில சேவைகள் பராமரிப்பு நடைபெறும் போது தற்காலிகமாக கிடைக்கவில்லை. மைய வழிமுறை பொதுவாக ஆன்லைனில் இருக்கும், ஆனால் மேலாண்மை அம்சங்கள் குறைவாக இருக்கலாம்.", + "suggestion1": "சில நிமிடங்களில் மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "மீண்டும் முயற்சிக்கும்முன் தற்போதைய ஆரோக்கிய குறியீடுகள் மற்றும் வழங்குநர் நிலையை சரிபார்க்கவும்.", + "systemStatus": "அமைப்பு நிலையைப் பார்வையிடவும்", + "healthDashboard": "ஆரோக்கிய டாஷ்போர்டு திறக்கவும்" + }, + "status": { + "title": "அமைப்பு நிலை", + "description": "OmniRoute மைய சேவைகளுக்கான நேரடி செயல்பாட்டு புகைப்படம்.", + "loadingHealth": "ஆரோக்கிய அளவீடுகளை ஏற்றுகிறது...", + "failedToLoad": "அமைப்பு ஆரோக்கியத்தை ஏற்றுவதில் தோல்வி.", + "unableToReachHealth": "ஆரோக்கிய எண்ட்பாயிண்ட்டை அடைய முடியவில்லை. இணைப்பை சரிபார்க்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "healthCheckFailed": "ஆரோக்கிய சோதனை தோல்வியடைந்தது", + "openConnectivityHelp": "ஓபன் கனெக்டிவிட்டி உதவி", + "maintenanceInfo": "பராமரிப்பு தகவல்", + "service": "சேவை", + "unknown": "அறியப்படாத", + "notAvailable": "n/a", + "providersTracked": "முடிவுகள் கண்காணிக்கப்பட்டன", + "circuitBreakerState": "சேவையாளர் சுற்று முறிவு மாநிலம்", + "lastUpdate": "கடைசி புதுப்பிப்பு: {timestamp}", + "uptimeMinutes": "{minutes}மி", + "uptimeHoursMinutes": "{hours}மணி {minutes}நிமிடம்" + }, + "statusPages": { + "400": { + "title": "தவறான கோரிக்கை", + "description": "கோரிக்கை payload தவறானது அல்லது முழுமையற்றது.", + "suggestion1": "மீண்டும் முயற்சிக்கும்முன் தேவையான புலங்கள் மற்றும் payload வடிவத்தை மதிப்பீடு செய்யவும்.", + "suggestion2": "நீங்கள் API ஐப் பயன்படுத்தினால், JSON வடிவமைப்பை உள்ளூர் level இல் சரிபார்க்கவும்.", + "suggestion3": "இது தொடர்ந்து நடந்தால், payload ஐ ஆய்வு செய்ய Translator Playground இல் கோரிக்கையை திறக்கவும்.", + "primaryAction": "ஆவணங்களை திறக்கவும்", + "secondaryAction": "மொழிபெயர்ப்பாளர் திறக்கவும்" + }, + "401": { + "title": "அங்கீகாரம் இல்லை", + "description": "இந்த வளத்தை அணுகுவதற்கு அங்கீகாரம் தேவை.", + "suggestion1": "மீண்டும் உள்நுழைந்து செயல்பாட்டை மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "API அழைப்புகளுக்கு, Bearer டோக்கன் உள்ளதா மற்றும் செல்லுபடியாகவா என்பதை உறுதிப்படுத்தவும்.", + "suggestion3": "என்றால், டோக்கன் சமீபத்தில் மாற்றப்பட்டிருந்தால், உங்கள் கிளையண்ட் சான்றிதழ்களை புதுப்பிக்கவும்.", + "primaryAction": "உள்நுழைய செல்லவும்", + "secondaryAction": "API விசைகளை நிர்வகிக்கவும்" + }, + "403": { + "title": "தடைசெய்யப்பட்டது", + "description": "உங்கள் கோரிக்கை புரிந்தது, ஆனால் கொள்கையால் அணுகல் மறுக்கப்பட்டுள்ளது.", + "suggestion1": "அமைப்புகளில் IP அனுமதியியல்/தடுக்கப்பட்ட பட்டியல் விதிகளை சரிபார்க்கவும்.", + "suggestion2": "உங்கள் API விசைக்கு ஒதுக்கப்பட்ட மாதிரி மற்றும் பட்ஜெட் கொள்கைகளை சரிபார்க்கவும்.", + "suggestion3": "ஒரு நிர்வாகியை தேவையான அனுமதி அளவுருவை வழங்க கேளுங்கள்.", + "primaryAction": "ஓபன் அணுகல் உதவி", + "secondaryAction": "பாதுகாப்பு அமைப்புகளை திறக்கவும்" + }, + "408": { + "title": "கோரிக்கை காலாவதியாகிறது", + "description": "சேவையகம் முழுமையான கோரிக்கையை நேரத்தில் பெறவில்லை.", + "suggestion1": "சிறிய payload உடன் கோரிக்கையை மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "உங்கள் நெட்வொர்க் நிலைத்தன்மை மற்றும் VPN/பிராக்ஸி தாமதத்தை சரிபார்க்கவும்.", + "suggestion3": "நீண்ட செயல்பாடுகளுக்காக, ஸ்ட்ரீமிங் செயல்படுத்தவும் அல்லது கோரிக்கையை பிரிக்கவும்.", + "primaryAction": "எழுதப்பட்ட இடைமுக வழிகாட்டி", + "secondaryAction": "நெட்வொர்க் நிலையை சரிபார்க்கவும்" + }, + "429": { + "title": "அதிகமான கோரிக்கைகள்", + "description": "இந்த கிளையண்ட், விசை, அல்லது வழங்குநருக்கான மதிப்பீட்டு வரம்புகள் மீறப்பட்டன.", + "suggestion1": "கூல்டவுன் காத்திருங்கள் மற்றும் பரிந்துரைக்கப்பட்ட இடைவெளிக்குப் பிறகு மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "Fallback வழங்குநர்களுடன் ஒரு கம்போவுக்கு மாறவும்.", + "suggestion3": "அமைப்புகளில் வழங்குநர் நிலைத்தன்மை/விகித-கட்டுப்பாடு சித்திரங்களை சரிசெய்யவும்.", + "primaryAction": "மறுசீரமைப்பு அமைப்புகளை திறக்கவும்", + "secondaryAction": "ஓபன் காம்போஸ்" + }, + "500": { + "title": "உள்ளக சேவையகம் பிழை", + "description": "உங்கள் கோரிக்கையை செயலாக்கும் போது எதிர்பாராத சர்வர் பக்கம் பிழை ஏற்பட்டது.", + "suggestion1": "சில விநாடிகளில் மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "ஆரோக்கிய தொலைபேசி மற்றும் சர்வர் பதிவுகளை தொடர்புடைய கோரிக்கை ஐடியோக்களுக்கு சரிபார்க்கவும்.", + "suggestion3": "நிலையானதாக இருந்தால், நேரம் மற்றும் கோரிக்கை சூழ்நிலையுடன் பிரச்சினையை புகாரளிக்கவும்.", + "primaryAction": "ஆரோக்கிய டாஷ்போர்டு திறக்கவும்", + "secondaryAction": "லாக்களை திறக்கவும்" + }, + "502": { + "title": "கெட்ட கேட்‌வேய்", + "description": "மேல்நிலை வழங்குநர் அல்லது கேட்‌வே இணைப்பு தவறான பதிலை வழங்கியது.", + "suggestion1": "மறு முயற்சி செய்யவும் மற்றொரு வழங்குநர் அல்லது செயல்பாட்டுக் கூட்டமைப்புப் பாதை.", + "suggestion2": "சர்வீசாளர் சான்றிதழ்கள் மற்றும் மாதிரி கிடைக்கும் நிலையை சரிபார்க்கவும்.", + "suggestion3": "மாற்று வடிவம் தொடர்பானது என்றால் மொழிபெயர்ப்பாளர் வெளியீட்டை ஆய்வு செய்யவும்.", + "primaryAction": "பிரதியோகிகளை திறக்கவும்", + "secondaryAction": "மொழிபெயர்ப்பாளர் திறக்கவும்" + }, + "503": { + "title": "சேவை கிடைக்கவில்லை", + "description": "சேவையை பராமரிப்பு அல்லது குறைந்த தரமான சார்புகளால் தற்காலிகமாக கிடைக்கவில்லை.", + "suggestion1": "ஒரு நிமிடம் காத்திருக்கவும் மற்றும் மீண்டும் முயற்சிக்கவும்.", + "suggestion2": "பராமரிப்பு அறிவிப்புகள் மற்றும் அமைப்பு நிலையை சரிபார்க்கவும்.", + "suggestion3": "உங்கள் வேலைப்பாட்டில் தாமதம் உணர்வுப்பூர்வமாக இருந்தால், மாற்று வழங்குநர்களைப் பயன்படுத்தவும்.", + "primaryAction": "பராமரிப்பு விவரங்கள்", + "secondaryAction": "அமைப்பு நிலை" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel} ஐ இணைக்கவும்", + "chooseMethod": "உங்கள் அங்கீகார முறை தேர்ந்தெடுக்கவும்:", + "builderId": "AWS கட்டமைப்பாளர் ஐடி", + "builderDescription": "அதிகமான பயனர்களுக்காக பரிந்துரைக்கப்படுகிறது. {providerLabel} உடன் இணைக்கப்பட்ட AWS கணக்கில் உள்நுழைக.", + "organization": "உங்கள் அமைப்பு (AWS IAM அடையாள மையம்)", + "organizationDescription": "உங்கள் நிறுவன SSO தொடக்கம் URL ஐப் பயன்படுத்தவும் (உதாரணம்: {url}).", + "googleAccount": "கூகிள் கணக்கு", + "googleDescription": "உங்கள் Google கணக்குடன் உள்நுழைக.", + "githubAccount": "GitHub கணக்கு", + "githubDescription": "உங்கள் GitHub கணக்குடன் உள்நுழைக.", + "importToken": "இறக்குமதி டோக்கன்", + "importDescription": "{providerLabel} இல் இருந்து ஏற்றுமதி செய்யப்பட்ட புதுப்பிப்பு டோக்கனை ஒட்டவும்.", + "apiKey": "API விசை", + "apiKeyDescription": "ஒரு நீண்டகால {providerLabel} / CodeWhisperer API விசையை ஒட்டவும். இது புதுப்பிப்பு டோக்கன் இல்லாமல் ஒரு பேயர் கிரெடென்ஷியலாக சேமிக்கப்படுகிறது; சுயவிவர கண்டுபிடிப்பு சிறந்த முயற்சியாகும்.", + "idcStartUrl": "IDC தொடக்க URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "உங்கள் நிறுவனத்தின் AWS IAM அடையாள மைய URL", + "awsRegion": "AWS பகுதி", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "உங்கள் அடையாள மையத்திற்கான AWS பகுதி (இயல்புநிலை: us-east-1)", + "continue": "தொடருங்கள்", + "back": "மீண்டும்", + "autoDetecting": "தானியங்கி அடையாளம் காணும் டோக்கன்...", + "readingCredentials": "AWS SSO கச்சே இருந்து {providerLabel} அங்கீகாரங்களை வாசிக்கிறது", + "tokenNotDetected": "{providerLabel} டோக்கன் தானாக கண்டறியப்படவில்லை. தயவுசெய்து உங்கள் ரீஃபிரெஷ் டோக்கனை கையால் ஒட்டவும்.", + "refreshToken": "புதுப்பிப்பு டோக்கன்", + "tokenPlaceholder": "டோக்கன் தானாகவே நிரப்பப்படும்...", + "importing": "இறக்குமதி செய்கிறேன்...", + "apiKeyPlaceholder": "உங்கள் {providerLabel} API விசையை ஒட்டவும்...", + "apiKeyStoredDescription": "நீண்டகாலம் வாழும் பேயர் அங்கீகாரமாக காப்பு செய்யப்பட்ட குறியாக்கம். புதுப்பிப்பு ஓட்டம் இல்லை.", + "apiKeyRegionDescription": "கீக்கான AWS பகுதி (இயல்புநிலை: us-east-1)", + "validating": "சரிபார்க்கப்படுகிறது...", + "validateAndSaveApiKey": "சரிபார்க்கவும் மற்றும் API விசையை சேமிக்கவும்", + "errorAutoDetect": "கோடியை தானாக கண்டறிய முடியவில்லை", + "errorAutoDetectFailed": "டோக்கனை தானாக கண்டறிய முடியவில்லை", + "errorRefreshTokenRequired": "தயவுசெய்து ஒரு புதுப்பிப்பு டோக்கனை உள்ளிடவும்", + "errorImportFailed": "இறக்குமதி தோல்வியுற்றது", + "errorApiKeyRequired": "தயவுசெய்து Kiro API விசையை உள்ளிடவும்", + "errorApiKeyImportFailed": "API விசை இறக்குமதி தோல்வி அடைந்தது", + "errorIdcStartUrlRequired": "தயவுசெய்து உங்கள் IDC தொடக்கம் URL ஐ உள்ளிடவும்" + }, + "kiroSocialOAuthModal": { + "title": "{providerName} மூலம் {providerLabel} ஐ இணைக்கவும்", + "errorStartAuthorization": "அங்கீகாரம் தொடங்குவதில் தோல்வி ஏற்பட்டது", + "errorAuthorizationExpired": "அங்கீகாரம் காலாவதியாகிவிட்டது. மீண்டும் உள்நுழைவு செயல்முறையை தொடங்குங்கள்.", + "errorAuthorizationFailed": "அங்கீகாரம் தோல்வி அடைந்தது", + "initializing": "தொடக்கம்...", + "settingUp": "{providerName} அங்கீகாரம் அமைத்தல்", + "openIncognito": "இந்த இணைப்பை Incognito சாளரத்தில் திறக்கவும்", + "incognitoDescription": "உள்ள கணக்குகளுடன் அமர்வு மோதல்களை தவிர்க்க Incognito/Private சாளரத்தைப் பயன்படுத்தவும்.", + "copyLink": "இணைப்பை நகலெடுக்கவும்", + "verificationCode": "சரிபார்ப்பு குறியீடு", + "waiting": "அனுமதிக்காக காத்திருக்கிறேன்...", + "cancel": "ரத்து செய்", + "successTitle": "வெற்றிகரமாக இணைக்கப்பட்டது!", + "successMessage": "உங்கள் {providerLabel} கணக்கு {providerName} மூலம் இணைக்கப்பட்டுள்ளது.", + "done": "செய்யப்பட்டது", + "errorTitle": "இணைப்பு தோல்வி அடைந்தது", + "close": "மூடு" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "அங்கீகாரம் தோல்வி அடைந்தது", + "errorPopupBlocked": "பாப்-அப் தடிக்கப்பட்டது — இந்த தளத்திற்கு பாப்-அப்களை அனுமதிக்கவும், அல்லது கீழே உள்ள டோக்கனை கையேடு மூலம் ஒட்டவும்.", + "errorPopupClosed": "அங்கீகாரம் சாளரம் முடிக்கப்படுவதற்கு முன் மூடப்பட்டது.", + "errorAccessTokenRequired": "அணுகல் டோக்கன் தேவை.", + "errorImportFailed": "இறக்குமதி தோல்வியுற்றது", + "title": "Connect Trae SOLO", + "authorizeDescription": "trae.ai மூலம் ஒரு பாப்அப் மூலம் அங்கீகாரம் அளிக்கவும். டோக்கன் இறக்குமதி செய்யப்பட்டவுடன் பாப்அப் தானாகவே மூடப்படும்.", + "authorizeImportant": "முக்கியம்: நீங்கள் முதலில் trae.ai இல் இந்த உலாவியில் உள்நுழைந்திருக்க வேண்டும். அங்கீகாரம் பக்கம் ஏற்கனவே உள்ள அமர்வை மட்டுமே உறுதிப்படுத்துகிறது — இது உங்களை உள்நுழைக்க முடியாது. \"உள்நுழைவு தோல்வி\" எனக் காண்பித்தால், \"Open solo.trae.ai\" என்பதைக் கிளிக் செய்து, உள்நுழைந்து, பின்னர் இங்கு திரும்பவும் வரவும்.", + "waitingForAuthorization": "trae.ai க்காக காத்திருக்கிறது…", + "authorizeWithBrowser": "உலாவியுடன் அங்கீகாரம் அளிக்கவும்", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "அல்லது ஒரு டோக்கனை கையால் ஒட்டவும்", + "manualInstructions": "solo.trae.ai இல் உள்நுழைக, DevTools → Network ஐ திறக்கவும், எந்த உரையாடல் செய்தியையும் அனுப்பவும், மற்றும் Authorization: Cloud-IDE-JWT {tokenPlaceholder} கோரிக்கை தலைப்பில் இருந்து JWT ஐ நகலெடுக்கவும். JWT வாழ்நாள் ~14 நாட்கள். விருப்ப அடையாள புலங்கள் ஒரே கோரிக்கை உடலில் உள்ள common_params இல் இருந்து வருகின்றன.", + "accessTokenLabel": "அணுகல் டோக்கன் (Cloud-IDE-JWT)", + "webId": "வலை ஐடி", + "optional": "விருப்பமான", + "bizUserId": "வணிக பயனர் ஐடி", + "userUniqueId": "பயனர் தனித்துவ அடையாளம்", + "scope": "வட்டாரம்", + "tenant": "குத்தகையாளர்", + "region": "பிராந்தியம்", + "importing": "இறக்குமதி செய்கிறேன்…", + "importToken": "அறிக்கையிடு டோக்கன்", + "cancel": "ரத்து செய்" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "வகுக்கிறது...", + "complete": "முடித்தது", + "defaultLabel": "பிராக்ஸிகளை பகிரவும்" + } + }, + "providerTest": { + "dialogLabel": "சோதனை {provider}", + "deprecated": "பழமையானது", + "risk": "ஆபத்து", + "close": "மூடு", + "model": "மாதிரி", + "key": "முக்கியம்", + "defaultKey": "இயல்புநிலை", + "clearConversation": "உரையாடலை அழிக்கவும்", + "clear": "அழிக்கவும்", + "tabs": { + "test": "சோதனை", + "logs": "லாக்கள்" + }, + "loadingLogs": "பதிவுகளை ஏற்றுகிறது…", + "failedToLoadLogs": "பதிவுகளை ஏற்றுவதில் தோல்வி அடைந்தது", + "noLogsYet": "என்னுடைய பதிவு இல்லை", + "noLogsDescription": "Test தாவலிலிருந்து ஒரு சோதனை செய்தியை அனுப்பவும் — இந்த வழங்குநருக்கான பதிவு இங்கே தோன்றும்.", + "openFullLogs": "முழு பதிவு பக்கம் திறக்கவும்", + "live": "உயிர்", + "tailingLast": "கடைசி {count} ஐ tailing செய்கிறேன்", + "refreshNow": "இப்போது புதுப்பிக்கவும்", + "refresh": "மீட்டமைக்கவும்", + "unknownRequester": "அறியப்படாத கோரியாளர்", + "fields": { + "timestamp": "காலமுத்திரை", + "status": "நிலை", + "duration": "கால அளவு", + "model": "மாதிரி", + "requestedModel": "கோரிய மாடல்", + "provider": "முதலீட்டாளர்", + "requester": "கோரிக்கைதாரர்", + "tokens": "டோக்குகள்" + } + }, + "proxyLog": { + "detailAriaLabel": "பிராக்சி பதிவு விவரம்", + "event": "பிராக்சி நிகழ்வு", + "close": "பிராக்சி விவரம் மாடலை மூடு", + "time": "காலம்", + "latency": "தாமதம்", + "clientIp": "கிளையன்ட் ஐபி", + "proxy": "பிராக்சி", + "direct": "நேரடி", + "type": "எழுது", + "level": "அடுக்கு", + "provider": "முதலீட்டாளர்", + "tlsFingerprint": "TLS கைமுத்திரை", + "directNative": "நேரடி (native)", + "targetUrl": "இலக்கு URL", + "error": "பிழை", + "configuration": "பிராக்சி கட்டமைப்பு" + }, + "requestTimeline": { + "title": "கோரிக்கை காலக்கெடு", + "modes": { + "follow": "பின்தொடர்க", + "followDescription": "அச்சு இடதுபுறமாக உருண்டுகிறது, இப்போது வரி 75% இல் இருக்கும்", + "now": "இப்போது", + "nowDescription": "தற்போதைய நேரத்திற்கு குதிக்கவும், இப்போது வரி மையத்திற்கு மீட்டமைக்கப்படுகிறது", + "pan": "பான்", + "panDescription": "வழி மாற்றி ஆராய, பின்னணி உறைந்துள்ளது" + }, + "reset": "மீட்டமைக்கவும்", + "started": "தொடங்கியது", + "ended": "முடிந்தது", + "duration": "கால அளவு", + "status": "நிலை", + "provider": "முதலீட்டாளர்", + "tokens": "டோக்குகள்", + "active": "செயலில் உள்ளது", + "other": "மற்றவை", + "tenMinutes": "10மி.நி.", + "hour": "மணி நேரம்", + "day": "நாள்", + "unknownModel": "அறியப்படாத", + "pending": "காத்திருக்கிறது" + }, + "metadata": { + "compressionTitle": "சுருக்கம்", + "compressionDescription": "குறி பயன்பாடு மற்றும் செலவுகளை குறைக்க உள்ளடக்கம் அழுத்த அமைப்புகளை கட்டமைக்கவும்.", + "relayTitle": "OmniRoute — ரிலே ப்ராக்ஸிகள்", + "relayDescription": "உங்கள் AI அடிப்படைக்கான சர்வர் இல்லா ரிலே ப்ராக்ஸி எண்ட்பாயிண்ட்கள்", + "trafficInspectorTitle": "டிராபிக் இன்ஸ்பெக்டர் — ஒம்னி ரவுட்", + "trafficInspectorDescription": "LLM அழைப்புகளை கண்காணிக்கவும் + எந்த செயல application's HTTPS போக்குவரத்தை பிழைத்திருத்தவும்" + }, + "conductor": { + "title": "கண்டக்டர் — CLI-ஏஜெண்ட் படை", + "subtitle": "OmniConductor மையம்: ஓட்டுநர்கள், பணியாளர் வரிசை மற்றும் கவுன்சில்கள், நேரலை", + "runners": "ஓட்டக்காரர்கள்", + "tasks": "பணிகள்", + "colName": "பெயர்", + "colClis": "CLIs", + "colStatus": "நிலை", + "colTask": "பணி", + "colMode": "முறை", + "colRunner": "ஓட்டுநர்", + "colSummary": "சுருக்கம்", + "online": "ஆன்லைன்", + "offline": "ஆஃப்லைன்", + "draining": "கழிக்கிறது", + "hubOffline": "கொண்டக்டர் ஹப் ஆஃப்லைன் அல்லது கட்டமைக்கப்படவில்லை (CONDUCTOR_HUB_URL) — பழைய தரவுகளை காட்டுவதற்கு பதிலாக எதுவும் காட்டவில்லை.", + "noRunners": "பதிவு செய்யப்பட்ட ஓட்டுநர்கள் இல்லை", + "noTasks": "இன்னும் எந்த பணிகளும் இல்லை", + "detailTitle": "பணி விவரம்", + "prompt": "குறிப்பு", + "branch": "கிளை", + "fetchHint": "முடிவுகளை பெற: git fetch origin {branch}", + "council": "குழு", + "candidates": "முடிவுகள்", + "cancel": "பணியை ரத்து செய்", + "cancelConfirmTitle": "இந்த பணியை ரத்து செய்யவா?", + "cancelConfirmMessage": "ஹப் ரன்னரில் செயல்பாட்டை நிறுத்தும். இதை திரும்ப பெற முடியாது.", + "cancelFailed": "ஹப் ரத்து செய்வதை நிராகரித்தது", + "close": "மூடு", + "error": "பிழை", + "faroTitle": "பாரோ — கப்பல் பேச்சாளர்", + "faroSubtitle": "சாட் மற்றும் ஒலி, உண்மையான படகுகள் நிகழ்வுகளில் அடிப்படையாகக் கொண்டது. அழிக்கும் கட்டளைகள் எப்போதும் உறுதிப்படுத்தலுக்காக கேட்கின்றன.", + "faroEmpty": "கப்பல்களைப் பற்றி கேளுங்கள் — உதாரணமாக \"கப்பல்கள் எப்படி இருக்கின்றன?\"", + "faroPending": "Faro உறுதிப்படுத்தலுக்காக கேட்கிறது", + "faroPlaceholder": "Faro-வுடன் பேசுங்கள்…", + "faroSend": "அனுப்பவும்", + "faroOffline": "Faro (பேச்சாளர்) ஆன்லைனில் இல்லை", + "yes": "ஆம்", + "no": "இல்லை", + "pushToTalk": "பேசுவதற்கு பிடிக்கவும்", + "speakAnswers": "பதில் பேசுங்கள்", + "voiceModels": "ஒலி மாதிரிகள் (இந்த OmniRoute இன் வழங்குநர்/மாதிரி)", + "voiceIdle": "பேசு", + "voiceListening": "கேட்கிறது…", + "voiceThinking": "சிந்திக்கிறேன்…", + "voiceSpeaking": "பேசுகிறேன்…", + "sttFailed": "பதிவேற்றம் தோல்வியுற்றது (STT மாதிரி/சேவையாளர் சரிபார்க்கவும்)", + "ttsFailed": "உரை உருவாக்குதல் தோல்வியுற்றது (TTS மாதிரி/சேவையகத்தை சரிபார்க்கவும்)", + "micDenied": "மைக்ரோபோன் கிடைக்கவில்லை அல்லது அனுமதி மறுக்கப்பட்டது" + }, + "cliproxyProviderExposure": { + "title": "சேவையாளர் வெளிப்பாடு", + "description": "cliproxyapi/ முன்னணி கீழ் CLIProxyAPI மாதிரிகளை வழிமுறை இலக்காக வெளிப்படுத்தவும்.", + "label": "cliproxyapi/... என வெளிப்படுத்தவும்", + "hint": "இது செயல்படுத்தப்பட்டால், கண்டறியப்பட்ட மாதிரிகள் OmniRoute இல் வழங்குநர் தேர்வுகளில் தோன்றும்.", + "updateFailed": "புதுப்பிக்க முடியவில்லை (HTTP {status})", + "networkError": "நெட்வொர்க் பிழை — வழங்குநர் வெளிப்பாடு அமைப்பை புதுப்பிக்க முடியவில்லை" + } } - diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index 866d4264a4..fc6171ccde 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -172,6 +172,18 @@ "unselectAll": "ఎంపికను తీసివేయండి", "visibleModels": "కనిపిస్తున్నవి", "selectAllConfirm": "ఈ కాంబోకు {count} మోడళ్లను జోడించాలా?", + "testSelectedProviders": "పరీక్షా ప్రదాతలు", + "testingSelectedProviders": "పరీక్షించడం {done}/{total}...", + "noProvidersSelectedToTest": "క్రింద కనీసం ఒక ప్రొవైడర్‌ను మొదట తనిఖీ చేయండి", + "noModelsToTestForProviders": "ఎంచుకున్న ప్రొవైడర్ల కోసం పరీక్షించడానికి మోడల్స్ లేవు", + "testSelectedProvidersResults": "{ok} యొక్క {total} మోడళ్ల పని చేస్తున్నాయి", + "selectWorkingModels": "చేయడం చేర్చండి", + "unselectWorkingModels": "అనుసంధానం రద్దు చేయడం", + "noWorkingModelsToSelect": "చేర్చడానికి పని చేసే మోడళ్లను మిగిలి లేదు", + "providerTestHint": "సూచన: ఒక ప్రొవైడర్‌ను తనిఖీ చేయండి → పరీక్ష → పనిచేస్తున్నది జోడించండి. మళ్లీ క్లిక్ చేయండి అన్‌సెలెక్ట్ చేయడానికి.", + "selectAllProviders": "అన్ని ప్రొవైడర్లను తనిఖీ చేయండి", + "clearProviderSelection": "ప్రొవైడర్లను అన్‌చెక్ చేయండి", + "providersSelectedCount": "{count} ప్రొవైడర్లు తనిఖీ చేయబడ్డారు", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "పరిమాణం", + "toggleNoAuthProvider": "నో-ఆథ్ ప్రొవైడర్‌ను టోగుల్ చేయండి", + "loadingModels": "మోడల్స్ లోడ్ అవుతున్నాయి…", + "selectAModel": "మోడల్‌ను ఎంచుకోండి", + "degraded": "తగ్గించబడింది", + "zeroConfigBannerTitle": "జీరో-కన్ఫిగరేషన్ మోడ్‌లో నడుస్తోంది", + "zeroConfigBannerBody": "OmniRoute మొదటి ప్రారంభంలో ఆటో-సృష్టించబడిన సురక్షిత ఎన్‌క్రిప్షన్ కీలు. అవి {dataDir} కు నిల్వ చేయబడతాయి. ఎటువంటి చర్య అవసరం లేదు — మీ డేటా ఎన్‌క్రిప్ట్ చేయబడింది మరియు సురక్షితంగా ఉంది. కస్టమ్ కీలు ఉపయోగించాలంటే, ఆ ఫైలుకు JWT_SECRET మరియు STORAGE_ENCRYPTION_KEY ను జోడించండి.", + "batchRelativeTimeIn": "{value} లో", + "batchRelativeTimeAgo": "{value} క్రితం", + "batchDetailsTitle": "బ్యాచ్ వివరాలు", + "batchProgress": "ప్రగతి", + "batchCompletedCount": "{count} పూర్తయింది", + "batchFailedCount": "{count} విఫలమైంది", + "batchPendingCount": "{count} పెండింగ్", + "batchTimeline": "కాలరేఖ", + "batchTimelineInProgress": "చర్యలో ఉంది", + "batchTimelineFinalizing": "చివరిగా నిర్ణయించడం", + "batchTimelineCompleted": "పూర్తి అయింది", + "batchTimelineFailed": "అసఫలమైంది", + "batchTimelineExpires": "కాలం ముగుస్తుంది", + "batchTimelineExpired": "కాలం ముగిసింది", + "batchTimelineCancelling": "రద్దు చేస్తున్నది", + "batchTimelineCancelled": "రద్దు చేయబడింది", + "batchTokenUsage": "టోకెన్ వినియోగం", + "batchMetadata": "మెటాడేటా", + "batchFileContents": "ఫైల్ కంటెంట్‌లు", + "batchFileUsedByCount": "{count, plural, one {# బ్యాచ్} other {# బ్యాచ్లు}}", + "batchFilePreview": "పరిశీలన", + "batchFilePreviewTruncated": "మొదటి {shown} పంక్తులు చూపిస్తున్నాయి ({total} మొత్తం పంక్తులు)", + "batchFileDownloadFull": "పూర్తి ఫైల్ డౌన్‌లోడ్ చేయండి" }, "disabled": "నిలిపివేయబడింది", "featureFlagOmnirouteEmergencyFallbackDescription": "బడ్జెట్ ముగిసిపోయిన అభ్యర్థనలను అత్యవసర ఉచిత ఫాల్‌బ్యాక్ ప్రొవైడర్/మోడల్‌కు రూట్ చేయండి.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "సెపరేటర్", "discovery": "డిస్కవరీ", "discoverySubtitle": "ఉచిత యాక్సెస్ కోసం ప్రొవైడర్లను స్కాన్ చేయండి", + "conductor": "కండక్టర్", + "conductorSubtitle": "CLI-ఏజెంట్ ఫ్లీట్", "resilienceConnections": "కనెక్షన్ స్థితిస్థాపకత", "resilienceConnectionsSubtitle": "కూల్‌డౌన్, బ్రేకర్, లాక్‌అవుట్ స్థితి", "settingsModalityBridge": "మోడాలిటీ బ్రిడ్జ్", - "settingsModalityBridgeSubtitle": "చిత్రం/ఆడియో → టెక్స్ట్ మాత్రమే మోడళ్ల కోసం టెక్స్ట్ ఫాల్బ్యాక్" + "settingsModalityBridgeSubtitle": "చిత్రం/ఆడియో → టెక్స్ట్ మాత్రమే మోడళ్ల కోసం టెక్స్ట్ ఫాల్బ్యాక్", + "commandPalette": { + "title": "కమాండ్ ప్యాలెట్", + "searchPlaceholder": "పేజీలు, సెట్టింగులు, సాధనాలు శోధించండి...", + "clearSearch": "శోధనను క్లియర్ చేయండి", + "noResults": "ఫలితాలు లేవు", + "navigate": "నావిగేట్", + "open": "తిరిగి తెరువు", + "close": "మూసివేయండి" + }, + "noResults": "ఫలితాలు లేవు" }, "webhooks": { "title": "వెబ్‌బూక్స్", @@ -1477,7 +1531,11 @@ "settings.update_failed": "సెట్టింగ్‌ల నవీకరణ విఫలమైంది", "sync.token.created": "సింక్ టోకెన్ సృష్టించబడింది", "sync.token.revoked": "సింక్ టోకెన్ రద్దు చేయబడింది" - } + }, + "mcpMetricCalls24h": "కాల్‌లు (24గంటలు)", + "mcpMetricSuccessRate": "విజయ రేటు", + "mcpMetricAvgDuration": "సగటు వ్యవధి", + "mcpMetricTopTool": "టాప్ టూల్" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "పేజీని స్వయంచాలకంగా రీలోడ్ చేస్తోంది...", - "providerTopology": "ప్రొవైడర్ టోపాలజీ" + "providerTopology": "ప్రొవైడర్ టోపాలజీ", + "downloadDmg": "DMG డౌన్‌లోడ్ చేయండి (macOS)", + "downloadDmgDescription": "ఒక కొత్త సంచిక OmniRoute డెస్క్‌టాప్ యాప్ అందుబాటులో ఉంది. దయచేసి నవీకరించడానికి macOS DMG ఇన్‌స్టాలర్‌ను డౌన్‌లోడ్ చేసి ఇన్‌స్టాల్ చేయండి (ప్రస్తుత: v{version}).", + "downloadExe": "EXE డౌన్‌లోడ్ చేయండి (విండోస్)", + "downloadExeDescription": "ఒక కొత్త సంచిక OmniRoute డెస్క్‌టాప్ యాప్ అందుబాటులో ఉంది. దయచేసి నవీకరించడానికి Windows EXE ఇన్‌స్టాలర్‌ను డౌన్‌లోడ్ చేసి ఇన్‌స్టాల్ చేయండి (ప్రస్తుత: v{version}).", + "downloadAppImage": "అప్‌ఇమేజ్‌ను డౌన్‌లోడ్ చేయండి (లినక్స్)", + "downloadAppImageDescription": "OmniRoute డెస్క్‌టాప్ యాప్ యొక్క కొత్త వెర్షన్ అందుబాటులో ఉంది. నవీకరించడానికి Linux AppImage ప్యాకేజీని డౌన్‌లోడ్ చేయండి (ప్రస్తుత: v{version}).", + "downloadUpdate": "అప్‌డేట్‌ను డౌన్‌లోడ్ చేయండి", + "downloadUpdateDescription": "ఒక కొత్త సంచిక OmniRoute డెస్క్‌టాప్ యాప్ అందుబాటులో ఉంది. మీ వ్యవస్థకు అనుగుణమైన యాప్ ఫార్మాట్‌ను డౌన్‌లోడ్ చేసి నవీకరించండి (ప్రస్తుత: v{version}).", + "updateQueued": "v{version} కు అప్‌డేట్ క్యూలో ఉంది.", + "updateDockerRebuilding": "Docker ఇమేజ్ బ్యాక్‌గ్రౌండ్‌లో పునఃనిర్మించబడుతోంది.", + "updateWaitingRestart": "కొత్త సంచికతో OmniRoute పునఃప్రారంభం కావడానికి ఎదురుచూస్తున్నాము.", + "updateInstalling": "v{version}ని ఇన్‌స్టాల్ చేస్తున్నది.", + "updateRunning": "OmniRoute ఇప్పుడు v{version} నడుస్తోంది.", + "updateCompleted": "OmniRoute v{version} కు నవీకరించబడింది.", + "updateDockerStillRebuilding": "Docker చిత్రం ఇంకా v{version} కోసం పునర్నిర్మాణం అవుతోంది.", + "updateInstallingBackground": "నేపథ్యంలో v{version} ఇన్‌స్టాల్ చేస్తున్నాము.", + "updateWaitingVersion": "v{version} లో OmniRoute తిరిగి రావడానికి ఎదురుచూస్తున్నాము.", + "updateDockerStillInProgress": "Docker పునర్నిర్మాణం ఇంకా కొనసాగుతోంది.", + "updateRestarting": "సేవ పునఃప్రారంభం జరుగుతోంది. OmniRoute తిరిగి ఆన్‌లోకి రానున్నది కోసం వేచి ఉన్నాము...", + "updateTimeout": "అప్‌డేట్ ప్రారంభమైంది, కానీ v{version} టైమ్‌ఔట్‌కు ముందు అందుబాటులో రాలేదు. పేజీని రిఫ్రెష్ చేయండి లేదా సర్వర్ లాగ్‌లను తనిఖీ చేయండి.", + "updateTimedOut": "v{version} కు నవీకరణ సమయం ముగిసింది.", + "updateStartFailed": "అప్‌డేట్‌ను ప్రారంభించడంలో విఫలమైంది.", + "noResponseStream": "ప్రత్యుత్తర ప్రవాహం అందలేదు.", + "updateComplete": "అప్‌డేట్ పూర్తి!", + "updateFailed": "అప్‌డేట్ విఫలమైంది.", + "updateNetworkError": "నెట్‌వర్క్ లోపం — నవీకరణ సమయంలో కనెక్షన్ కోల్పోయింది.", + "stepInstallPackage": "ప్యాకేజీని ఇన్‌స్టాల్ చేయండి", + "stepRebuildNativeModules": "నేటివ్ మాడ్యూల్స్‌ను పునర్నిర్మించండి", + "stepRestartService": "సేవను పునఃప్రారంభించండి", + "stepComplete": "పూర్తి", + "stepError": "తప్పు", + "updateCompleteTitle": "అప్‌డేట్ పూర్తి!", + "updateFailedTitle": "అప్‌డేట్ విఫలమైంది", + "updatingTitle": "OmniRouteని నవీకరించడం...", + "reloadNotice": "ఈ పేజీ కొన్ని సెకన్లలో ఆటోమేటిక్‌గా రీలోడ్ అవుతుంది.", + "retryNotice": "దయచేసి మళ్లీ ప్రయత్నించండి లేదా CLI ద్వారా చేతితో నవీకరించండి.", + "restartNotice": "ఈ పేజీని మూసివేయకండి. వ్యవస్థ స్వయంచాలకంగా పునఃప్రారంభమవుతుంది.", + "reloadNow": "ఇప్పుడు పునఃలోడ్ చేయండి", + "closeUpdate": "మూసివేయి", + "retryUpdate": "మళ్లీ ప్రయత్నించండి", + "updateAvailableTitle": "అప్‌డేట్ అందుబాటులో ఉంది: v{version}{desktop}", + "desktopAppLabel": "(డెస్క్‌టాప్ యాప్)", + "checkingForUpdates": "అప్‌డేట్‌లను తనిఖీ చేస్తున్నాము...", + "versionAvailableForDownload": "వర్షన్ v{version} డౌన్‌లోడ్ కోసం అందుబాటులో ఉంది.", + "downloadingUpdate": "అప్‌డేట్ డౌన్‌లోడ్ అవుతోంది... {percent}% పూర్తి.", + "updateDownloaded": "డౌన్‌లోడ్ విజయవంతంగా నవీకరించబడింది! అమలు చేయడానికి పునఃప్రారంభించండి & ఇన్‌స్టాల్‌పై క్లిక్ చేయండి.", + "autoUpdateFailed": "ఆటో-అప్‌డేట్ విఫలమైంది: {reason}.", + "unknownUpdateError": "అజ్ఞాత లోపం", + "versionAvailableDesktop": "డెస్క్‌టాప్ యాప్ కోసం వర్షన్ v{version} అందుబాటులో ఉంది.", + "manualUpdateRequired": "ఈ ఇన్‌స్టాలేషన్ రకానికి మాన్యువల్ నవీకరణ అవసరం.", + "restartAndInstall": "మళ్లీ ప్రారంభించండి & ఇన్‌స్టాల్ చేయండి", + "checkForUpdate": "అప్‌డేట్ కోసం తనిఖీ చేయండి", + "manualUpdate": "చేతనవీకరణ నవీకరణ", + "directDownloadHint": "లేదా సంబంధిత ఇన్స్టాలర్ ఫార్మాట్‌ను నేరుగా డౌన్‌లోడ్ చేయండి:", + "releaseNotes": "విడుదల గమనికలు", + "readMore": "మరింత చదవండి", + "noAuthLabel": "ఎలాంటి ప్రమాణీకరణ లేదు" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "ఈ అభ్యర్థన చుట్టూ ఉన్న నిలిపి ఉంచిన కాల్ లాగ్‌ల నుండి ఊహించబడింది", "routeRecommendations": "సిఫార్సులు", "routeLimitations": "పరిమితులు", - "routeNoKnownLimitations": "ఈ వివరణకు ఎటువంటి తెలిసిన పరిమితులు లేవు." + "routeNoKnownLimitations": "ఈ వివరణకు ఎటువంటి తెలిసిన పరిమితులు లేవు.", + "searchAnalyticsLoading": "శోధన విశ్లేషణలు లోడ్ అవుతోంది…", + "searchAnalyticsNoData": "ఇంకా శోధన డేటా అందుబాటులో లేదు.", + "searchAnalyticsNoDataDescription": "మొదటి శోధన తర్వాత శోధన అభ్యర్థనలు ఇక్కడ కనిపిస్తాయి /v1/search.", + "searchAnalyticsToday": "{count} ఈ రోజు", + "searchAnalyticsCachedRequests": "{count} కాష్డ్ అభ్యర్థనలు", + "searchAnalyticsApiCosts": "శోధన API ఖర్చులు", + "searchAnalyticsErrors": "{count} తప్పులు", + "searchAnalyticsNoErrors": "ఏ తప్పులు లేవు", + "searchAnalyticsProviderBreakdown": "ప్రొవైడర్ విభజన", + "searchAnalyticsQueries": "క్వెరీస్", + "searchAnalyticsEmptyDescription": "POST /v1/search ఉపయోగించి వెబ్ శోధనలను ప్రారంభించండి.", + "searchAnalyticsFreeTier": "ఉచిత స్థాయి అందుబాటులో ఉంది: Serper (2,500/నెల), Brave (2,000/నెల), Exa (1,000/నెల), Tavily (1,000/నెల) — మొత్తం 6,500+ ఉచిత శోధనలు/నెల ఆటోమేటిక్ ఫెయిలోవర్‌తో.", + "autoRoutingNoDataAvailable": "ఆటో-రూటింగ్ విశ్లేషణలు అందుబాటులో లేవు. మీకు మెట్రిక్‌లను చూడటానికి auto/ ప్రిఫిక్స్‌ను ఉపయోగించి అభ్యర్థనలు చేయండి.", + "defaultVariantLabel": "డిఫాల్ట్", + "freeTierAvailable": "ఉచిత స్థాయి అందుబాటులో ఉంది" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} ప్రొవైడర్లు", "imageToTextBridgeAvailable": "మోడాలిటీ బ్రిడ్జ్ ఇప్పుడు టెక్స్ట్-మాత్రం మోడల్స్ కోసం చిత్రాలను వివరిస్తుంది. /api/v1/images/understanding అమలు చేయబడినప్పుడు ఇన్‌లైన్ ప్లేగ్రౌండ్ అందుబాటులో ఉంటుంది.", "imageToTextBridgeCta": "Modality Bridge సెట్టింగ్స్‌లో Image→Text బ్రిడ్జ్‌ను కాన్ఫిగర్ చేయండి", - "sttBridgeCta": "Modality Bridge సెట్టింగ్స్‌లో Speech→Text బ్రిడ్జ్‌ను కాన్ఫిగర్ చేయండి" + "sttBridgeCta": "Modality Bridge సెట్టింగ్స్‌లో Speech→Text బ్రిడ్జ్‌ను కాన్ఫిగర్ చేయండి", + "existingConnection": "ఉన్న కనెక్షన్", + "openrouterSttDescription": "OpenRouter స్పీచ్-టు-టెక్స్ట్ మోడల్స్ మీ కాన్ఫిగర్ చేసిన OpenRouter కనెక్షన్‌ను ఉపయోగిస్తాయి. ప్రత్యేకమైన క్రెడెన్షియల్ అవసరం లేదు." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "దీనిలో అతికించండి:", "copilotReloadInstruction": "ఆపై VS Codeని రీలోడ్ చేసి, ఇన్‌పుట్ ప్రాంప్ట్‌లో API కీని సెట్ చేయండి.", "wireApiChatCompletions": "చాట్ పూర్తిలు (/చాట్/పూర్తి)", - "wireApiResponses": "ప్రతిస్పందనల API (/స్పందనలు)" + "wireApiResponses": "ప్రతిస్పందనల API (/స్పందనలు)", + "cliproxyapiActionFailed": "చర్య విఫలమైంది", + "cliproxyapiActionSucceeded": "చర్య విజయవంతమైంది", + "cliproxyapiCheckUpdates": "అప్‌డేట్స్‌ను తనిఖీ చేయండి", + "cliproxyapiDescription": "అప్‌స్ట్రీమ్ ప్రాక్సీ ఫాల్బ్యాక్ (గో ఆధారిత OAuth)", + "cliproxyapiHealth": "ఆరోగ్యం", + "cliproxyapiHealthy": "ఆరోగ్యకరమైన", + "cliproxyapiInstall": "ఇన్స్టాల్", + "cliproxyapiNotInstalledValue": "ఇన్‌స్టాల్ చేయబడలేదు", + "cliproxyapiPort": "పోర్ట్", + "cliproxyapiRequestFailed": "అభ్యర్థన విఫలమైంది", + "cliproxyapiRestart": "మళ్లీ ప్రారంభించు", + "cliproxyapiStart": "ప్రారంభించు", + "cliproxyapiStatusError": "లోపం", + "cliproxyapiStatusInstalled": "ఇన్స్టాల్ చేయబడింది", + "cliproxyapiStatusNotInstalled": "ఇన్‌స్టాల్ చేయబడలేదు", + "cliproxyapiStatusRunning": "నడుస్తోంది", + "cliproxyapiStatusStopped": "ఆపివేయబడింది", + "cliproxyapiStop": "ఆపండి", + "cliproxyapiUnhealthy": "అస్వస్థం", + "cliproxyapiUnknown": "తెలియదు", + "cliproxyapiUpdate": "అప్‌డేట్", + "cliproxyapiUpdateAvailable": "అప్‌డేట్ అందుబాటులో ఉంది: v{current} → v{latest}", + "cliproxyapiVersion": "సంవత్సరం" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "కేవలం క్వోటా ముగిసినప్పుడు మాత్రమే ముందుకు సాగండి", + "fallbackOnlyOnQuotaExhaustionShort": "కోటా-మాత్రం బ్యాకప్", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "మోడ్ ప్యాక్ మరియు వెయిటింగ్ ఇక్కడే ఉంటాయి; బ్రేకర్ రన్‌టైమ్ స్థితి Health పేజీలో ఉంటుంది.", "emailVisibilityHint": "ఇక్కడ ఉన్న ఖాతా ఇమెయిల్‌లు గ్లోబల్ గోప్యతా టోగుల్‌ను అనుసరిస్తాయి.", "emailVisibilityTooltip": "కాంబోలు, ప్రొవైడర్‌లు మరియు కోటా స్క్రీన్‌లలో ఖాతా ఇమెయిల్‌లను గ్లోబల్‌గా చూపించడానికి లేదా దాచడానికి కంటి చిహ్నాన్ని ఉపయోగించండి.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "దశల వారీగా (ప్రొవైడర్ → మోడల్)", + "builderModeGlobal": "గ్లోబల్ మోడల్ శోధన (కస్టమ్ కాంబో)", + "builderGlobalSearchPlaceholder": "అన్ని ప్రొవైడర్లలో మోడళ్లను శోధించండి (ఉదా: opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "అన్ని చేర్చండి", + "builderGlobalShortcuts": "షార్ట్‌కట్‌లు:", + "builderGlobalNoResults": "\"{query}\" కోసం మోడల్ కనుగొనబడలేదు.", + "builderGlobalProviderLabel": "ప్రొవైడర్:", + "builderGlobalAccountCount": "{count, plural, one {# ఖాతా} other {# ఖాతాలు}}", + "builderGlobalAdded": "చేర్చబడింది", + "builderGlobalAdd": "చేర్చు", "manualModel": "మాన్యువల్ మోడల్", "manualModelInvalid": "మోడల్‌ను provider/model రూపంలో నమోదు చేయండి.", "manualModelUnknownProvider": "తెలియని ప్రొవైడర్ ప్రిఫిక్స్.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "సెషన్ అందుబాటులో ఉంది", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "స్టిక్కీనెస్ ఆఫ్", "kimiPresetTitle": "Kimi Coding ప్రీసెట్", "kimiPresetDescription": "ప్రాథమిక మోడల్‌గా Kimi K3 (Moonshot API), కాన్ఫిగర్ చేసినప్పుడు మీ Kimi Code కనెక్షన్‌లకు (kimi-coding, kimi-web) ఆటోమేటిక్ ఫాల్‌బ్యాక్‌తో.", - "kimiPresetCta": "ప్రీసెట్‌ను జోడించు" + "kimiPresetCta": "ప్రీసెట్‌ను జోడించు", + "intelligentComboCount": "{count, plural, one {# తెలివైన కాంబో} other {# తెలివైన కాంబోలు}}", + "providersInScope": "{count, plural, one {# ప్రొవైడర్ పరిధిలో} other {# ప్రొవైడర్లు పరిధిలో}}", + "savingModePack": "{pack}ని సేవ్ చేస్తున్నది…", + "errorTitle": "కాంబోలు లోడ్ చేయడంలో విఫలమైంది", + "errorDescription": "మేము ప్రస్తుతం కాంబో డేటాను లోడ్ చేయలేకపోయాము. మీ కనెక్షన్‌ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.", + "errorId": "లోపం ID: {id}", + "errorRetry": "మరలా ప్రయత్నించండి", + "comboLabel": "కాంబో" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "యూజర్‌నేమ్", "obsidianPassword": "పాస్‌వర్డ్", - "obsidianTailscaleHint": "మొబైల్ నుండి కనెక్ట్ చేస్తుంటే localhost బదులుగా మీ Tailscale IPని ఉపయోగించండి. రెండు పరికరాలు ఒకే Tailscale నెట్‌వర్క్‌లో ఉండాలి." + "obsidianTailscaleHint": "మొబైల్ నుండి కనెక్ట్ చేస్తుంటే localhost బదులుగా మీ Tailscale IPని ఉపయోగించండి. రెండు పరికరాలు ఒకే Tailscale నెట్‌వర్క్‌లో ఉండాలి.", + "cloudSyncNotConfigured": "ఈ ఉదాహరణలో క్లౌడ్ సమకాలీకరణ కాన్ఫిగర్ చేయబడలేదు.", + "notionConnect": "కనెక్ట్", + "notionConnectFailed": "కనెక్ట్ కావడంలో విఫలమైంది", + "notionConnected": "కనెక్ట్ అయినది", + "notionConnectionFailed": "కనెక్షన్ విఫలమైంది", + "notionDescription": "Notion కు మార్గదర్శక AI మోడల్స్ ద్వారా శోధించండి, చదవండి, ప్రశ్నించండి మరియు రాయండి", + "notionDisconnect": "అనుసంధానం తొలగించు", + "notionDisconnectFailed": "డిస్కనెక్ట్ చేయడంలో విఫలమైంది", + "notionEnterToken": "దయచేసి Notion ఇంటిగ్రేషన్ టోకెన్‌ను నమోదు చేయండి", + "notionIntegrationHelp": "లో ఒక అంతర్గత సమీకరణను సృష్టించండి", + "notionIntegrationToken": "Notion అంతర్గత ఇంటిగ్రేషన్ టోకెన్", + "notionNotConnected": "కనెక్ట్ కాలేదు", + "notionTokenConfigured": "టోకెన్ కాన్ఫిగర్ చేయబడింది. Notion టూల్స్ MCP ద్వారా అందుబాటులో ఉన్నాయి." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "ప్రొవైడర్ / మోడల్", "noRemoteProviders": "కాన్ఫిగర్ చేసిన API కీతో ఎటువంటి ప్రొవైడర్లు లేరు", "selectProviderModel": "ఒక మోడల్‌ను ఎంచుకోండి", + "customBaseUrlLabel": "అనుకూల బేస్ URL (ఐచ్ఛికం)", + "customModelIdLabel": "అనుకూల మోడల్ ID (ఐచ్ఛికం)", + "customEndpointHelp": "ఒక OpenAI-సంబంధిత /embeddings ఎండ్‌పాయింట్‌ను ఉపయోగించండి. స్థానిక ఎండ్‌పాయింట్లు అనుమతించబడ్డాయి; క్లౌడ్ మెటాడేటా లక్ష్యాలు అడ్డుకోబడ్డాయి.", + "customEndpointSave": "కస్టమ్ ఎండ్‌పాయింట్‌ను వర్తింపజేయండి", + "customEndpointInvalid": "చాలా HTTP(S) ప్రాథమిక URL మరియు మోడల్ ID ను నమోదు చేయండి, లేదా రెండు ఫీల్డ్స్ ను ఖాళీగా ఉంచండి.", + "customEndpointSaveFailed": "కస్టమ్ ఎంబెడింగ్ ఎండ్‌పాయింట్‌ను సేవ్ చేయడం సాధ్యం కాలేదు.", "staticEnabledLabel": "స్టాటిక్ పోషన్ (Static Potion) ని ప్రారంభించండి", "staticEnabledDesc": "potion-base-8M మోడల్‌ను లోకల్‌గా డౌన్‌లోడ్ చేసి ఉపయోగించండి", "transformersEnabledLabel": "Transformers.js ని ప్రారంభించండి", @@ -4258,7 +4443,9 @@ "cleaning": "క్లీన్ చేస్తోంది...", "cleanNow": "ఇప్పుడే క్లీన్ చేయండి", "cleanupSuccess": "{count} పాయింట్(లు) తీసివేయబడ్డాయి", - "cleanupFailed": "క్లీనప్ విఫలమైంది" + "cleanupFailed": "క్లీనప్ విఫలమైంది", + "hostLabel": "హోస్ట్", + "collectionLabel": "సేకరణ" }, "rerank": { "enableLabel": "Rerank ని ప్రారంభించండి", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3-టైర్ ఫాల్‌బ్యాక్ రేఖాచిత్రం", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "ఉచిత ప్రొవైడర్లను సెటప్ చేయండి", + "description": "ఎంపికగా ఎంచుకున్న నో-సైన్‌అప్ ప్రొవైడర్లను ప్రారంభించండి. కొనసాగించడానికి ముందు ప్రతి ప్రొవైడర్ యొక్క నోటీసు మరియు సైట్‌ను సమీక్షించండి; అందుబాటులో ఉండటం మరియు రేటు పరిమితులు మూడవ పక్షాల ద్వారా నియంత్రించబడతాయి.", + "loading": "ఉచిత ప్రొవైడర్లను లోడ్ చేస్తున్నది...", + "loadFailed": "ఉచిత ప్రొవైడర్లను లోడ్ చేయలేకపోయింది.", + "alreadyConfigured": "అన్ని అర్హత కలిగిన ఉచిత ప్రొవైడర్లు ఇప్పటికే కాన్ఫిగర్ చేయబడ్డాయి.", + "reviewProviderSite": "ప్రొవైడర్ సైట్ మరియు నిబంధనలు సమీక్షించండి", + "confirmation": "నేను ఈ మూడవ పక్ష ప్రదాతలను సమీక్షించాను మరియు OmniRoute ఎంపిక చేసిన కనెక్షన్లను సృష్టించాలని కోరుకుంటున్నాను.", + "setupSelected": "ఎంచుకున్న ప్రొవైడర్లను సెటప్ చేయండి", + "settingUp": "సెట్టింగ్ అప్...", + "setupFailed": "ఎంచుకున్న ప్రొవైడర్లను సెట్ చేయలేకపోయాము. ఏదీ మారలేదు.", + "retryFailed": "పునరాయనమైన విఫలమైన ప్రొవైడర్లు", + "orUseApiKey": "లేదా API కీతో కనెక్ట్ అవ్వండి", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "సృష్టించబడింది", + "skipped": "ఇప్పటికే కాన్ఫిగర్ చేయబడింది", + "failed": "ఫెయిల్డ్" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "ఐకాన్ URL", "iconUrlHint": "ఐచ్ఛికం. ఈ ప్రొవైడర్ ఐకాన్‌గా చూపబడే చిత్రం URL.", + "iconUrlInvalid": "చెల్లని ఐకాన్ URL. http(s):// లేదా data:image/*;base64 URL ఉపయోగించండి.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "ఈ ప్రొవైడర్ యొక్క మోడళ్లను claude/<provider>/<model> మిర్రర్ ఐడీల క్రింద ప్రచారం చేయండి, కాబట్టి Claude Code యొక్క గేట్వే మోడల్ డిస్కవరీ వాటిని జాబితా చేయగలదు. డిఫాల్ట్‌గా ఆఫ్ - దీన్ని ప్రారంభించడం అన్ని క్లయింట్ల కోసం కాటలాగ్ ఎంట్రీలను రెండింతలు చేస్తుంది.", "ccAliasProviderLevelLabel": "ప్రదాత డిఫాల్ట్", "ccAliasModelOverridesLabel": "ప్రతి మోడల్ కోసం ఓవర్‌రైడ్స్", - "ccAliasModelOverrideAriaLabel": "{name} కోసం ఓవర్‌రైడ్", + "ccAliasModelOverrideAriaLabel": "{modelId} కోసం ఓవర్‌రైడ్", "ccAliasStateInherit": "వారసత్వం", "ccAliasStateOn": "పై", "ccAliasStateOff": "ఆఫ్", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "సెషన్ ఇప్పటికే ప్రస్తుతమైంది", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "ప్రమాణాన్ని వర్తింపజేయండి", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API కీని పేస్ట్ చేయండి…", "zedSaving": "సేవ్ చేస్తోంది…", "zedImportAction": "దిగుమతి చేయండి", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "ఆటోమేటిక్ కర్సర్ సెషన్ పునరుద్ధరణను ప్రారంభించండి", + "cursorAgentNudgeBody": "స్వయంచాలక సెషన్ పునరుద్ధరణ కోసం cursor-agent ను ఇన్‌స్టాల్ చేయండి — దీనివల్ల, Cursor కనెక్షన్లు సుమారు 24 గంటలకు ఒకసారి మాన్యువల్ పునఃకనెక్ట్ చేయడం అవసరం.", + "cursorAgentNudgeDismiss": "తిరస్కరించు", "zedManualImportFailed": "మాన్యువల్ దిగుమతి విఫలమైంది", "zedManualImportSuccess": "Zed నుండి {provider} టోకెన్ దిగుమతి చేయబడింది", "grokImportTitle": "Grok Build Authని దిగుమతి చేయండి", @@ -5878,7 +6066,6 @@ "friendliai": "సర్వర్‌లెస్ ఇన్ఫరెన్స్ కోసం ఉచిత టైర్ — క్రెడిట్ కార్డ్ అవసరం లేదు", "gemini": "ఎప్పటికీ ఉచితం: Gemini 2.5 Flash కోసం రోజుకు 1,500 అభ్యర్థనలు — క్రెడిట్ కార్డ్ అవసరం లేదు, aistudio.google.com వద్ద కీని పొందండి", "gigachat": "API కీతో GigaChat (Sber) ని కనెక్ట్ చేయండి.", - "github-models": "github.com/settings/tokens వద్ద 'models: read' స్కోప్‌తో GitHub PATని సృష్టించండి", "gitlab": "పబ్లిక్ Code Suggestions API కోసం GitLab వ్యక్తిగత యాక్సెస్ టోకెన్. gitlab.com ని ఉపయోగించనప్పుడు సెల్ఫ్-హోస్టెడ్ బేస్ URLని కాన్ఫిగర్ చేయండి.", "gitlawb-gmi": "Gitlawb Opengateway డ్యాష్‌బోర్డ్ నుండి మీ API కీని పొందండి.", "gitlawb": "Gitlawb Opengateway డ్యాష్‌బోర్డ్ నుండి మీ API కీని పొందండి.", @@ -6017,7 +6204,8 @@ "kimi-coding": "ఇప్పటికే ఉన్న OAuth ఫ్లోతో Kimi Codingని కనెక్ట్ చేయండి.", "kiro": "ఉచిత శ్రేణి: 50 క్రెడిట్‌లు/నెల (~25K–100K టోకెన్‌లు). ⚠️ Kiro ToS థర్డ్-పార్టీ ప్రాక్సీ/హార్నెస్ వినియోగాన్ని నిషేధిస్తుంది.", "codex": "ప్రస్తుత OAuth flowతో OpenAI Codexని కనెక్ట్ చేయండి.", - "qwen": "ప్రస్తుత OAuth flowతో Qwen Codeని కనెక్ట్ చేయండి." + "qwen": "ప్రస్తుత OAuth flowతో Qwen Codeని కనెక్ట్ చేయండి.", + "github-models": "github.com/settings/tokens వద్ద 'models: read' స్కోప్‌తో GitHub PATని సృష్టించండి" }, "passthroughModelsDescription": "{provider} ప్రొవైడర్-స్థానిక మోడల్ IDలను అంగీకరిస్తుంది. /మోడల్స్ నుండి దిగుమతి చేయండి లేదా రూటింగ్ కోసం అనుకూల IDలను జోడించండి.", "bedrockModelsDescription": "అమెజాన్ బెడ్‌రాక్ మోడల్‌లు AWS ప్రాంతం ద్వారా స్కోప్ చేయబడ్డాయి. /మోడల్స్ నుండి దిగుమతి చేయండి లేదా ఎంచుకున్న ప్రాంతంలో ప్రారంభించబడిన బెడ్‌రాక్ మోడల్ IDలను జోడించండి.", @@ -6074,9 +6262,80 @@ "kimiPartnerLinkNote": "భాగస్వామి లింక్ — మీకు ఎటువంటి అదనపు ఖర్చు లేకుండా OmniRouteకు మద్దతు ఇస్తుంది", "anonymousFallbackTitle": "అనామక ఫాల్బ్యాక్", "anonymousFallbackDesc": "అన్ని కాన్ఫిగర్ చేసిన కనెక్షన్లు ముగిసినప్పుడు (కోటా, క్రెడిట్స్, లేదా కాలం ముగిసినప్పుడు), తాత్కాలికంగా ఈ ప్రొవైడర్ యొక్క కీ లెస్ టియర్‌ను ఉపయోగించండి. అనామక అభ్యర్థనలను పంపించకుండా ఈ ప్రొవైడర్‌ను దాటించడానికి ఆపివేయండి — కీ లెస్ టియర్ వాటిని తిరస్కరించినప్పుడు (401) సిఫారసు చేయబడింది.", - "anonymousFallbackEnabled": "{name} కోసం అనామక ఫాల్బ్యాక్ ప్రారంభించబడింది", + "anonymousFallbackEnabled": "{provider} కోసం అనామక ఫాల్బ్యాక్ ప్రారంభించబడింది", "anonymousFallbackDisabled": "{provider} కోసం అనామక ఫాల్బ్యాక్ అक्षमించబడింది — ఖర్చైన కనెక్షన్లు ఈ ప్రొవైడర్‌ను దాటిస్తాయి", - "anonymousFallbackUpdateFailed": "అనామిక ఫాల్బాక్ సెట్టింగ్‌ను నవీకరించడంలో విఫలమైంది" + "anonymousFallbackUpdateFailed": "అనామిక ఫాల్బాక్ సెట్టింగ్‌ను నవీకరించడంలో విఫలమైంది", + "batchDeleteFailed": "బ్యాచ్ తొలగింపు విఫలమైంది", + "batchDeleteNetworkError": "బ్యాచ్ తొలగింపు సమయంలో నెట్‌వర్క్ లోపం", + "batchUpdateFailed": "బ్యాచ్ నవీకరణ విఫలమైంది", + "batchUpdateNetworkError": "బ్యాచ్ నవీకరణ సమయంలో నెట్‌వర్క్ లోపం", + "categoryAudio": "ఆడియో", + "categoryCloudAgent": "క్లౌడ్ ఏజెంట్", + "categoryIde": "ఐడీఈ", + "categoryLocal": "స్థానిక", + "categorySearch": "శోధన", + "categoryWebCookie": "వెబ్ కుకీ", + "claudeExtraUsageBlockingDisabled": "Claude అదనపు వినియోగం అడ్డుకోవడం నిలిపివేయబడింది (అదనపు వినియోగం అనుమతించబడింది)", + "claudeExtraUsageBlockingEnabled": "క్లాడ్ అదనపు వినియోగం అడ్డుకోవడం ప్రారంభించబడింది (అదనపు వినియోగం అడ్డించబడుతుంది)", + "claudeRoutingPreferenceDisabled": "అనుబంధం లేని క్లాడ్ మోడల్స్ ఇక క్లాడ్ కోడ్‌ను ప్రాధాన్యం ఇవ్వవు", + "claudeRoutingPreferenceEnabled": "అనుబంధం లేకుండా ఉన్న క్లాడ్ మోడల్స్ ఇప్పుడు క్లాడ్ కోడ్‌ను ప్రాధాన్యం ఇస్తున్నాయి", + "clearMediaFilter": "తొలగించు", + "cliproxyRoutingDisabled": "అభ్యర్థనలు ఇప్పుడు స్థానిక OmniRoute (ప్రత్యక్ష) ను ఉపయోగిస్తాయి", + "cliproxyRoutingEnabled": "ఇప్పుడు అభ్యర్థనలు CLIProxyAPI (తీవ్ర ఎమ్యులేషన్) ద్వారా మార్గం తీసుకుంటాయి", + "codexLimitPolicyUpdated": "Codex పరిమితి విధానం నవీకరించబడింది", + "codexServiceModeUpdated": "Codex సేవా మోడ్ నవీకరించబడింది", + "codexServiceTierActive": "Codex {tier} సేవా స్థాయి చెల్లుబాటు ఉంది", + "codexTierFastLabel": "త్వరిత", + "codexTierFlexLabel": "ఫ్లెక్స్", + "commandCodeApplyFailed": "Command Code auth ను వర్తింపజేయడంలో విఫలమైంది", + "commandCodeApplyingApproval": "బ్రౌజర్ ఆమోదించబడింది, వర్తింపజేస్తోంది…", + "commandCodeApplyingKey": "బ్రౌజర్-అనుమతించిన కీని వర్తింపజేస్తోంది…", + "commandCodeApprovalInstructions": "అధికార URLని తెరవండి, యాక్సెస్‌ను ఆమోదించండి, తరువాత కింద ఇచ్చిన కీ/JSON/URLని పేస్ట్ చేయండి…", + "commandCodeAuthExpired": "కమాండ్ కోడ్ ఆథ్ కాలం ముగిసింది", + "commandCodeConnected": "కమాండ్ కోడ్ కనెక్ట్ అయ్యింది", + "commandCodeConnectionAdded": "కమాండ్ కోడ్ కనెక్షన్ జోడించబడింది", + "commandCodeLinkExpired": "కమాండ్ కోడ్ లింక్ కాలం ముగిసింది", + "commandCodeOpeningStudio": "కమాండ్ కోడ్ స్టూడియోని తెరవడం…", + "commandCodePopupBlocked": "పాప్‌అప్‌ అడ్డుకోబడింది. దయచేసి పాప్‌అప్‌లను అనుమతించండి మరియు Command Code Connectని మళ్లీ ప్రయత్నించండి.", + "commandCodeStartFailed": "Command Code auth ప్రారంభించడంలో విఫలమైంది", + "connectionDeleted": "కనెక్షన్ తొలగించబడింది", + "connectionFallback": "కనెక్షన్", + "coolingConnectionsDescription": "ఈ కనెక్షన్లు వారి చివరి అభ్యర్థనపై 429 (రేట్-లిమిట్) ను తిరిగి ఇచ్చాయి. OmniRoute సమయ పరిమితి ముగిసే వరకు వాటిని దాటిస్తుంది — మాన్యువల్ డిసేబుల్ అవసరం లేదు.", + "coolingConnectionsTitle": "ప్రస్తుతం కూలింగ్ ({count})", + "failedDeleteAlias": "అలియాస్‌ను తొలగించడంలో విఫలమైంది", + "failedDeleteConnection": "కనెక్షన్ తొలగించడంలో విఫలమైంది", + "failedDistributeProxies": "ప్రాక్సీలను పంపిణీ చేయడంలో విఫలమైంది.", + "failedSaveModelEndpointSettings": "మోడల్ ఎండ్‌పాయింట్ సెట్టింగ్స్ సేవ్ చేయడంలో విఫలమైంది", + "failedUpdateClaudeExtraUsagePolicy": "Claude అదనపు వినియోగ విధానాన్ని నవీకరించడంలో విఫలమైంది", + "failedUpdateClaudeRoutingPreference": "Claude కోడ్ మార్గదర్శక ప్రాధాన్యతను నవీకరించడంలో విఫలమైంది", + "failedUpdateCliproxyRouting": "CLIProxyAPI మార్గనిర్దేశాన్ని నవీకరించడంలో విఫలమైంది", + "failedUpdateCodexLimitPolicy": "Codex పరిమితి విధానాన్ని నవీకరించడంలో విఫలమైంది", + "failedUpdateCodexServiceMode": "Codex సేవా మోడ్‌ను నవీకరించడంలో విఫలమైంది", + "filterByMedia": "మీడియా", + "freeBadge": "ఉచిత", + "kimiCodeApiKeyLabel": "కిమి కోడ్ API కీ", + "modelTestFailed": "మోడల్ పరీక్ష విఫలమైంది", + "modelTestNetworkError": "నెట్‌వర్క్ లోపం పరీక్షా మోడల్", + "networkError": "నెట్‌వర్క్ లోపం", + "networkErrorDeletingAlias": "అలియాస్ తొలగించడంలో నెట్‌వర్క్ లోపం", + "networkErrorSettingAlias": "అలియాస్ సెట్ చేయడంలో నెట్‌వర్క్ లోపం", + "noProvidersMatch": "మీ శోధనకు సరిపోయే ఎలాంటి ప్రొవైడర్లు లేవు.", + "noSavedProxies": "సేవ్ చేసిన ప్రాక్సీలు కనుగొనబడలేదు. మొదట సెట్టింగ్స్ → ప్రాక్సీ లో ప్రాక్సీలను జోడించండి.", + "pageLoadErrorDescription": "ప్రస్తుతం ప్రొవైడర్ డేటాను లోడ్ చేయలేకపోయాము. మీ కనెక్షన్‌ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.", + "pageLoadErrorId": "లోపం ID: {id}", + "pageLoadErrorRetry": "మరలా ప్రయత్నించండి", + "pageLoadErrorTitle": "ప్రదాతలను లోడ్ చేయడంలో విఫలమైంది", + "playgroundTitle": "ప్లేగ్రౌండ్", + "providerDetailConnectionFlexActive": "ఈ కనెక్షన్ కోసం కోడెక్స్ ఫ్లెక్స్ సేవా స్థాయి చలనం లో ఉంది", + "providerDetailConnectionPriorityActive": "Codex ప్రాధమిక సేవా స్థాయి ఈ కనెక్షన్ కోసం చురుకుగా ఉంది", + "providerDetailGlobalFlexActive": "గ్లోబల్ కోడెక్స్ ఫ్లెక్స్ సేవా స్థాయి చలనం లో ఉంది", + "providerDetailGlobalPriorityActive": "గ్లోబల్ కోడెక్స్ ప్రాధమిక సేవా స్థాయి చలనం లో ఉంది", + "proxiesDistributed": "{tagLabel}{total} కనెక్షన్‌లలో {assigned} ప్రాక్సీ కేటాయింపులను పంపిణీ చేయబడింది.", + "rerankEndpoint": "మరలా ర్యాంక్ చేయండి", + "savedModelEndpointSettings": "సేవ్ చేసిన మోడల్ ఎండ్‌పాయింట్ సెట్టింగ్స్", + "searchByModelAria": "మోడల్ ద్వారా శోధించండి", + "selectSupportedEndpoint": "కమిషన్ చేయబడిన కనెక్ట్ చేయబడిన ఎండ్‌పాయింట్‌లలో కనీసం ఒకటి ఎంచుకోండి", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "చందా జాబితాను లోడ్ చేయడంలో విఫలమైంది", "toggleFailed": "స్విచ్ టోగుల్ చేయడంలో విఫలమైంది", "refreshFailed": "రిఫ్రెష్ చేయడంలో విఫలమైంది", - "deleteFailed": "తొలగించడంలో విఫలమైంది" + "deleteFailed": "తొలగించడంలో విఫలమైంది", + "add": "చేర్చు", + "cancel": "రద్దు చేయండి", + "configure": "కన్ఫిగర్", + "copyEndpoint": "ఎండ్పాయింట్ కాపీ చేయండి", + "coreEndpointHint": "కోర్ ఎండ్‌పాయింట్ హింట్", + "coreNodesHint": "కోర్ నోడ్స్ సూచన", + "create": "సృష్టించు", + "deleteConfirm": "తొలగింపు నిర్ధారణ", + "empty": "ఖాళీ", + "globalModeDescription": "గ్లోబల్ మోడ్ వివరణ", + "localCoreHint": "స్థానిక కోర్ సూచన", + "nodeSummary": "నోడ్ సారాంశం", + "providerRequired": "ప్రొవైడర్ అవసరం", + "providerRouting": "ప్రొవైడర్ రూటింగ్", + "refresh": "తాజా చేయండి", + "refreshInterval": "రీఫ్రెష్ ఇంటర్వల్", + "ruleModeDescription": "నియమ మోడ్ వివరణ" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "చిత్ర అభ్యర్థనలను టెక్స్ట్-ఓన్లీ మోడల్‌లకు రూట్ చేయడానికి ముందు ఆటోమేటిక్ విజన్-టు-టెక్స్ట్ ఫాల్‌బ్యాక్‌ను అమలు చేయండి.", "visionBridgeEnabledLabel": "ఎనేబుల్ చేయబడింది", "visionBridgeEnabledDesc": "చిత్ర భాగాలను సంగ్రహించిన టెక్స్ట్‌తో భర్తీ చేసే ప్రీ-కాల్ బ్రిడ్జ్‌ను టోగుల్ చేయండి.", + "visionBridgeRerouteTextOnlyLabel": "టెక్స్ట్-మాత్రం మోడళ్లను పునఃమార్గం చేయండి", + "visionBridgeRerouteTextOnlyDesc": "ఎంచుకున్న మోడల్‌కు చిత్రాల ఇన్‌పుట్ లేకపోతే, పూర్తి అభ్యర్థనను, చిత్రాలను సహా, బ్రిడ్జ్ మోడల్‌కు పంపండి.", "visionBridgeModel": "వంతెన నమూనా", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "విజన్‌కు మద్దతు ఇచ్చే ఏదైనా OmniRoute మోడల్ IDని ఇక్కడ ఉపయోగించవచ్చు.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API కీకి manage స్కోప్ లేదు.", "BYPASS_PREFIX_NOT_ALLOWED": "ఒకటి లేదా అంతకంటే ఎక్కువ ప్రిఫిక్స్లు స్పాన్ చేయగల రూట్లను లక్ష్యంగా చేసుకున్నాయి మరియు వాటిని దాటవేయడం సాధ్యం కాదు.", "GENERIC": "authz సెట్టింగ్‌లను అప్‌డేట్ చేయడం విఫలమైంది." - } + }, + "remove": "తొలగించు" }, "resilienceBaseCooldownLabel": "బేస్ కూల్‌డౌన్", "scopeLabel": "పరిధి", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "ఆడియోని పరీక్షిస్తున్నాము…", "modalityBridgeAudioTestOk": "ఆడియో బ్రిడ్జ్ బాగుంది — {count} క్లిప్(లు) {model} ద్వారా ట్రాన్స్‌క్రైబ్ చేయబడ్డాయి", "modalityBridgeAudioTestNoop": "ఆడియో బ్రిడ్జ్ చెల్లించబడలేదు (లక్ష్యము ఆడియోను మద్దతు ఇవ్వవచ్చు, ఎలాంటి STT ప్రొవైడర్ కనెక్ట్ చేయబడలేదు, లేదా బ్రిడ్జ్ అచేతనంగా ఉంది)", - "modalityBridgeAudioTestError": "ఆడియో పరీక్ష విఫలమైంది: {message}" + "modalityBridgeAudioTestError": "ఆడియో పరీక్ష విఫలమైంది: {message}", + "modelRoutingDescriptionPlaceholder": "ఫ్రంట్‌యిర్ కాంబోకు రూట్ ఒపస్ మోడల్స్", + "cliproxyapiFallbackCodes": "క్లిప్రాక్సీAPI ఫాల్బాక్ కోడ్స్", + "cliproxyapiFallbackDescription": "క్లిప్రాక్సీAPI ఫాల్బ్యాక్ వివరణ", + "cliproxyapiHealthLabel": "క్లిప్రాక్సీAPI ఆరోగ్య లేబుల్", + "cliproxyapiImportFailed": "Cliproxyapi దిగుమతి విఫలమైంది", + "cliproxyapiImportResult": "క్లిప్రాక్సీAPI దిగుమతి ఫలితం", + "cliproxyapiInvalidUrl": "Cliproxyapi చెల్లని URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi జీవనచక్రం నోటీసు తర్వాత", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi జీవితచక్రం నోటీసు ముందు", + "cliproxyapiLifecycleNoticeLink": "క్లిప్రాక్సీAPI జీవితచక్రం నోటీసు లింక్", + "cliproxyapiPortLabel": "క్లిప్రాక్సీఏపీ పోర్ట్ లేబుల్", + "cliproxyapiStatusLabel": "క్లిప్రాక్సీAPI స్థితి లేబుల్", + "cliproxyapiVersionLabel": "క్లిప్రాక్సీఏపీ వెర్షన్ లేబుల్", + "collection": "సేకరణ", + "errorPage": { + "description": "మేము ప్రస్తుతం సెట్టింగ్స్‌ను లోడ్ చేయలేకపోయాము. దయచేసి కొన్ని సెకన్ల తర్వాత మళ్లీ ప్రయత్నించండి.", + "errorId": "తప్పు ID: {id}", + "retry": "మరలా ప్రయత్నించండి", + "title": "సెట్టింగ్స్ లోడ్ చేయడంలో విఫలమైంది" + }, + "host": "హోస్ట్", + "notInstalled": "ఇన్‌స్టాల్ చేయబడలేదు", + "oneproxyActions": "ఒకప్రాక్సీ చర్యలు", + "oneproxyActive": "ఒకప్రాక్సీ చలనం లో ఉంది", + "oneproxyAnonymity": "ఒకప్రాక్సీ అనామికత", + "oneproxyCountry": "ఒకప్రాక్సీ దేశం", + "oneproxyDelete": "Oneproxy తొలగించు", + "oneproxyEmpty": "Oneproxy ఖాళీగా ఉంది", + "oneproxyHost": "ఒకప్రాక్సీ హోస్ట్", + "oneproxyLatency": "ఒకప్రాక్సీ ఆలస్యం", + "oneproxyProtocol": "ఒకప్రాక్సీ ప్రోటోకాల్", + "oneproxyQuality": "ఒకప్రాక్సీ నాణ్యత", + "oneproxySyncFailed": "సింక్ విఫలమైంది: {error}", + "oneproxySyncSuccess": "సంకలిత {total} ప్రాక్సీలు ({added} కొత్త, {updated} నవీకరించబడిన)", + "proxyDocumentationSocks5DescAfter": "ప్రాక్సీ డాక్యుమెంటేషన్ సాక్స్5 వివరణ తరువాత", + "proxyFreePoolAddProxy": "ప్రాక్సీ ఫ్రీ పూల్ ప్రాక్సీ జోడించండి", + "proxyFreePoolAdding": "ప్రాక్సీ ఫ్రీ పూల్ జోడించడం", + "proxyFreePoolSelectProxy": "ప్రాక్సీ ఫ్రీ పూల్ ప్రాక్సీని ఎంచుకోండి", + "proxyStatusActive": "ప్రాక్సీ స్థితి చురుకుగా ఉంది", + "proxyStatusInactive": "ప్రాక్సీ స్థితి చొప్పించబడలేదు", + "routingAddEntry": "ప్రవేశాన్ని జోడించండి", + "settingSaveFailed": "సెట్టింగ్ సేవ్ విఫలమైంది", + "settingSaved": "సెట్టింగ్‌లు సేవ్ చేయబడ్డాయి", + "skillsmpApiKeyHintAfter": ". రేటు పరిమితి: {limit} అభ్యర్థనలు/రోజు.", + "skillsmpApiKeyHintBefore": "మీ API కీని పొందండి", + "syncFailed": "సింక్ విఫలమైంది", + "unhealthy": "అస్వస్థం", + "oneproxyDescription": "1proxy కమ్యూనిటీ ప్లాట్‌ఫారమ్ నుండి ఉచితంగా ధృవీకరించబడిన ప్రాక్సీలను పొందండి మరియు రొటేట్ చేయండి", + "oneproxySyncing": "సంక్రియామవుతోంది...", + "oneproxySyncNow": "ఇప్పుడు సమకాలీకరించండి", + "oneproxyClearAll": "అన్ని క్లియర్ చేయండి", + "oneproxyGoogle": "గూగుల్", + "oneproxyClearAllConfirm": "అన్ని 1proxy ప్రాక్సీలు క్లియర్ చేయాలా?", + "memorySkillsSkillsmpDescription": "SkillsMP కు కనెక్ట్ అవ్వండి మరియు మార్కెట్ నుండి నైపుణ్యాలను కనుగొనండి మరియు ఇన్‌స్టాల్ చేయండి.", + "memorySkillsActiveProviderDescription": "Skills పేజీ శోధన మరియు ఇన్‌స్టాల్‌ కోసం ఏ ప్రొవైడర్‌ను ఉపయోగించాలో ఎంచుకోండి.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP మార్కెట్‌ప్లేస్", + "memorySkillsSkillsmpProviderDescription": "ప్రామాణీకరించిన మార్కెట్‌ప్లేస్ (మీ SkillsMP API కీని ఉపయోగిస్తుంది).", + "memorySkillsSkillsshProviderTitle": "skills.sh డైరెక్టరీ", + "memorySkillsSkillsshProviderDescription": "పబ్లిక్ డైరెక్టరీ ప్రొవైడర్ (API కీ అవసరం లేదు).", + "routingCcBridgeCatalogName": "ఆంత్రోపిక్-సామర్థ్యమైన CC బ్రిడ్జ్", + "routingClaudeProviderName": "క్లాడ్ (OAuth)", + "routingClaudeProviderDescription": "OAuth-చే జారీ చేసిన టోకెన్లతో నేటివ్ క్లాడ్ ప్రొవైడర్.", + "routingCcBridgeName": "క్లాడ్-కోడ్ బ్రిడ్జ్", + "routingCcBridgeDescription": "API కీలు ఉపయోగించి రీలే ఎండ్‌పాయింట్లు (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "కస్టమ్ ప్రొవైడర్.", + "routingUnknownOpKind": "Unknown op kind: {kind}", + "routingInvalidJson": "చెల్లని JSON: {error}", + "routingConfigMustBeObject": "కాన్ఫిగరేషన్ ఒక JSON వస్తువు కావాలి", + "routingEnabledMustBeBoolean": "`enabled` నిజం లేదా అబద్ధం కావాలి", + "routingPipelineMustBeArray": "`pipeline` ఒక ops యొక్క శ్రేణి కావాలి", + "routingPipelineTooLong": "పైప్‌లైన్ 50 ఆపరేషన్లను మించకూడదు", + "routingOpMissingKind": "Op #{index}: కనుగొనబడలేదు లేదా చెల్లని `kind`", + "routingOpUnknownKind": "Op #{index}: తెలియని రకం \"{kind}\"", + "routingJsonEditorHide": "JSON ఎడిటర్‌ను దాచండి", + "routingJsonEditorImportExport": "ఇంపోర్ట్ / ఎక్స్‌పోర్ట్ JSON", + "routingJsonEditorLabel": "JSON (సవరించండి మరియు వర్తించండి, లేదా దిగుమతి చేసుకోవడానికి పేస్ట్ చేయండి)", + "routingApplyJson": "JSON ను వర్తించండి", + "routingTransformsFootnote": "అన్ని ట్రాన్స్‌ఫార్మ్ ఆపరేషన్లు మళ్లీ అమలు చేసినప్పుడు ఐడెంపొటెంట్‌గా ఉంటాయి. మార్పులు తదుపరి అభ్యర్థనపై వెంటనే అమలవుతాయి.", + "cliproxyapiUnknown": "తెలియదు", + "cliproxyapiVersion": "సంవత్సరం", + "cliproxyapiHealth": "ఆరోగ్యం", + "cliproxyapiPort": "పోర్ట్", + "qdrantHost": "హోస్ట్", + "qdrantCollection": "సేకరణ" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "పూర్తి", "ultra": "అల్ట్రా" } + }, + "modeOptions": { + "default": "డిఫాల్ట్", + "off": "ఆఫ్", + "lite": "లైట్", + "standard": "ప్రామాణిక", + "aggressive": "ఆగ్రహంగా", + "ultra": "అతిపెద్ద", + "responsesToolOutput": "ప్రతిస్పందనలు సాధనం అవుట్‌పుట్" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "స్టాక్‌లో చివరిగా రన్ అవుతుంది (RTK/Caveman వచనాన్ని క్లీన్ చేసిన తర్వాత, OmniGlyph మిగిలిన భాగాన్ని చిత్రాలుగా మారుస్తుంది) మరియు omniglyph మోడ్ ద్వారా స్వతంత్రంగా కూడా రన్ అవుతుంది. ఇది ప్రివ్యూ మరియు ఎండ్-టు-ఎండ్ ధ్రువీకరణ పూర్తయ్యే వరకు డిఫాల్ట్‌గా ఆఫ్‌లోనే ఉంటుంది.", "saved": "సేవ్ చేయబడింది.", "saveFailed": "సేవ్ చేయడం సాధ్యపడలేదు.", - "enableAria": "OmniGlyph ఇంజిన్‌ను ఎనేబుల్ చేయండి" + "enableAria": "OmniGlyph ఇంజిన్‌ను ఎనేబుల్ చేయండి", + "title": "OmniGlyph" }, "embeddedServices": { "title": "ఎంబెడెడ్ సేవలు", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "అన్ని టోకెన్లు ఆరోగ్యంగా ఉన్నాయి", + "needsAttention": "కొన్ని టోకెన్లు శ్రద్ధ అవసరం", + "refreshFailures": "టోకెన్ పునరుద్ధరణ విఫలమయ్యాయి", + "unknown": "ఆరోగ్య స్థితి తెలియదు" + }, + "systemMonitor": { + "metricsAriaLabel": "సిస్టమ్ మెట్రిక్స్", + "memory": "మెమరీ", + "memoryShort": "మెమ్", + "uptime": "అప్రమత్తత", + "ariaLabel": "సిస్టమ్ మానిటరింగ్", + "title": "సిస్టమ్ మానిటర్", + "version": "సంవత్సరం", + "connections": "సంబంధాలు", + "circuitBreakers": "సర్క్యూట్ బ్రేకర్లు", + "open": "{count} తెరిచి", + "memoryUsage": "మెమరీ వినియోగం" + }, + "never": "ఎప్పుడూ కాదు", + "justNow": "ఇప్పుడు మాత్రమే", + "minutesAgo": "{count}నిమిషాల క్రితం", + "hoursAgo": "{count}గంటల క్రితం", + "tokens": "టోకెన్లు", + "costs": "ఖర్చులు", + "autoRefresh": "ఆటో రిఫ్రెష్ ({seconds}s)", + "toggleAutoRefresh": "ఆటో రిఫ్రెష్‌ను టోగుల్ చేయండి", + "activeRequests": "సక్రియమైన అభ్యర్థనలు", + "totalRequests": "మొత్తం అభ్యర్థనలు", + "totalInputTokens": "మొత్తం ఇన్‌పుట్ టోకెన్లు", + "model": "మోడల్", + "provider": "ప్రదాత", + "requests": "అభ్యర్థనలు", + "lastUsed": "చివరిగా ఉపయోగించినది", + "inputTokens": "ఇన్‌పుట్ టోకెన్స్", + "totalTokens": "మొత్తం టోకెన్లు", + "inputCost": "ఇన్‌పుట్ ఖర్చు", + "outputCost": "అవుట్‌పుట్ ఖర్చు", + "noUsageData": "ఇంకా ఉపయోగం నమోదు చేయబడలేదు. ఇక్కడ డేటా చూడటానికి కొన్ని అభ్యర్థనలు చేయండి.", + "account": "ఖాతా", + "accountLabel": "ఖాతా {id}", + "noAccountUsage": "ఇంకా ఖాతా-సంబంధిత వినియోగం నమోదు చేయబడలేదు. ఇక్కడ డేటా చూడటానికి OAuth ఖాతాలను ఉపయోగించి అభ్యర్థనలు చేయండి." }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "యాప్ డేటా ద్వారా పునఃసెట్టింగ్", + "resetViaAppDataDescription": "మీ పాస్వర్డ్ను పునఃసెట్ చేయడానికి యాప్ డేటా డైరెక్టరీ నుండి సెట్టింగ్స్ ఫైల్‌ను తొలగించండి:", + "quitDesktopApp": "OmniRoute డెస్క్‌టాప్ యాప్‌ను పూర్తిగా మూసివేయండి", + "navigateToAppDataDirectory": "అప్లికేషన్ డేటా డైరెక్టరీకి వెళ్లండి:", + "checkSystemAppDataFolder": "(మీ సిస్టమ్ యాప్ డేటా ఫోల్డర్‌ను తనిఖీ చేయండి)", + "relaunchDesktopFreshSetup": "OmniRoute డెస్క్‌టాప్ యాప్‌ను మళ్లీ ప్రారంభించండి — ఇది కొత్త సెటప్‌ను ప్రారంభిస్తుంది", + "alternativeSetPasswordTitle": "వికల్పం: కొత్త పాస్‌వర్డ్‌ను సెట్ చేయండి", + "alternativeSetPasswordDescription": "సర్వర్ వాతావరణ ఫైల్ ద్వారా కొత్త ప్రారంభ పాస్‌వర్డ్‌ను సెట్ చేయండి:", + "openServerEnvFilePrefix": "తిరిగి తెరువు", + "relaunchDesktopApp": "OmniRoute డెస్క్‌టాప్ యాప్‌ను మళ్లీ ప్రారంభించండి", + "codexLinkInvalidOrExpired": "ఈ లింక్ చెల్లదు లేదా కాలం ముగిసింది.", + "codexValidationServerError": "ఈ లింక్‌ను ధృవీకరించడానికి సర్వర్‌ను చేరれలేకపోయాము.", + "codexSaveConnectionError": "కనెక్షన్‌ను సేవ్ చేయలేకపోయాం. లింక్ కాలం ముగిసినట్లుగా ఉండవచ్చు.", + "codexDeviceLoginDisabled": "ఈ OpenAI ఖాతా కోసం పరికరం కోడ్ లాగిన్ అक्षमించబడింది. దాన్ని ChatGPT భద్రతా సెట్టింగ్స్‌లో ప్రారంభించండి (లేదా మీ వర్క్‌స్పేస్ అడ్మిన్‌ను అడగండి).", + "codexAuthorizationTimedOut": "అనుమతి కాలం ముగిసింది. మళ్లీ ప్రయత్నించడానికి Start again పై క్లిక్ చేయండి.", + "authenticationCancelled": "ప్రామాణీకరణ రద్దు చేయబడింది.", + "unexpectedAuthenticationError": "ప్రామాణీకరణ సమయంలో అప్రత్యాశిత దోషం. దయచేసి మళ్లీ ప్రయత్నించండి.", + "connectOpenAiCodexTitle": "OpenAI కోడెక్స్‌ను కనెక్ట్ చేయండి", + "codexConnectDescription": "ఈ కనెక్షన్‌ను పూర్తి చేయడానికి ChatGPT ఖాతాను ఆమోదించండి.", + "validatingCodexLink": "లింక్‌ను ధృవీకరించడం…", + "codexGenerateCodeDescription": "క్రింద క్లిక్ చేసి ఒకసారి ఉపయోగించుకునే కోడ్‌ను రూపొందించండి, తరువాత OpenAIలో సైన్ ఇన్ చేయండి.", + "startCodexFlow": "ప్రారంభించు", + "requestingOpenAiCode": "OpenAI నుండి కోడ్‌ను అభ్యర్థిస్తున్నది…", + "codexVerificationInstructions": "1. OpenAI ధృవీకరణ పేజీని తెరువు మరియు 2. ఈ కోడ్‌ను నమోదు చేయండి. మీరు అనుమతించిన తర్వాత ఈ పేజీ ఆటోమేటిక్‌గా నవీకరించబడుతుంది.", + "yourCode": "మీ కోడ్", + "openVerificationPage": "సत्यాపన పేజీని తెరవండి", + "copyUrlShort": "యుఆర్‌ఎల్‌ను కాపీ చేయండి", + "savingConnection": "కనెక్షన్ సేవ్ చేస్తున్నది…", + "codexConnected": "కనెక్ట్ అయ్యింది!", + "codexConnectionRegistered": "Codex ఖాతా నమోదు చేయబడింది. మీరు ఈ టాబ్‌ను మూసివేయవచ్చు.", + "tryAgain": "మరలా ప్రయత్నించండి", + "traeAuthorizationSuccess": "Trae అనుమతి ✓", + "traeAuthorizationFailed": "Trae అనుమతి విఫలమైంది", + "closeAuthorizationWindow": "మీరు ఈ విండోను మూసివేయవచ్చు.", + "returnToDashboard": "డాష్‌బోర్డుకు తిరిగి వెళ్లండి.", + "resetViaAppData": "యాప్ డేటా ద్వారా పునఃసెట్టింగ్", + "deleteSettingsToReset": "మీ పాస్వర్డ్ను పునఃసెట్ చేయడానికి యాప్ డేటా డైరెక్టరీ నుండి సెట్టింగ్స్ ఫైల్‌ను తొలగించండి:", + "quitAppCompletely": "OmniRoute డెస్క్‌టాప్ యాప్‌ను పూర్తిగా మూసివేయండి", + "navigateToAppData": "అప్లికేషన్ డేటా డైరెక్టరీకి వెళ్లండి", + "checkAppDataFolder": "మీ సిస్టమ్ యాప్ డేటా ఫోల్డర్‌ను తనిఖీ చేయండి", + "deleteSettingsJson": "తొలగించు", + "relaunchAppFresh": "OmniRoute డెస్క్‌టాప్ యాప్‌ను మళ్లీ ప్రారంభించండి — ఇది కొత్త సెటప్‌ను ప్రారంభిస్తుంది", + "alternativeSetPassword": "వికల్పం: కొత్త పాస్‌వర్డ్‌ను సెట్ చేయండి", + "setNewPasswordViaEnv": "సర్వర్ పర్యావరణ ఫైల్ ద్వారా కొత్త ప్రారంభ పాస్వర్డ్‌ను సెట్ చేయండి:", + "openServerEnv": "తిరిగి తెరువు", + "inDataDirectory": "డేటా డైరెక్టరీలో", + "addOrUpdate": "చేర్చండి లేదా నవీకరించండి", + "deleteAndRelaunch": "తొలగించు", + "settingsJson": "settings.json", + "fromDataDir": "డేటా డైరెక్టరీ నుండి", + "relaunchApp": "OmniRoute డెస్క్‌టాప్ యాప్‌ను మళ్లీ ప్రారంభించండి" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "కంపెనీ", + "pricing": "ధరలు", + "apiReference": "API సూచిక", + "helpCenter": "సహాయ కేంద్రం", + "about": "గురించి", + "blog": "బ్లాగ్", + "contact": "సంప్రదించండి", + "terms": "నిబంధనలు", + "privacy": "గోప్యత", + "license": "లైసెన్స్", + "footerDescription": "ఆధునిక AI మౌలిక వసతుల కోసం ఏకీకృత ఇంటర్ఫేస్. భద్రత, పర్యవేక్షణ మరియు విస్తరణకు అనుకూలమైనది.", + "communityDiscussions": "సమాజ చర్చలు" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute డాక్స్", + "metadataDefaultTitle": "ఒమ్నిరూట్ డాక్యుమెంటేషన్", + "metadataDescription": "OmniRoute AI గేట్వే కోసం సమగ్ర డాక్యుమెంటేషన్ — సెటప్, API, కంప్రెషన్, డిప్లాయ్‌మెంట్, మరియు మరింత.", + "layoutNavTitle": "OmniRoute డాక్స్", + "layoutHomeLink": "డాక్స్ హోమ్", + "layoutDashboardLink": "← డాష్‌బోర్డుకు తిరిగి", + "homeTitle": "ఒమ్నిరూట్ డాక్యుమెంటేషన్", + "homeMetadataDescription": "మీ AIని రూట్ చేయడానికి, కంప్రెస్ చేయడానికి మరియు స్కేల్ చేయడానికి మీకు అవసరమైన అన్ని విషయాలు — సెటప్ గైడ్స్, API సూచిక, కంప్రెషన్, డిప్లాయ్‌మెంట్ మరియు మరింత.", + "homeTwitterDescription": "OmniRoute AI గేట్వేకు సమగ్ర డాక్స్", + "homeDescription": "మీ AIని మార్గనిర్దేశం చేయడానికి, సంకోచించడానికి మరియు స్కేల్ చేయడానికి మీకు అవసరమైన అన్ని విషయాలు", + "homeSearchHint": "డాక్యుమెంట్లను శోధించడానికి Ctrl K నొక్కండి", + "featuredQuickStartTitle": "త్వరిత ప్రారంభం", + "featuredQuickStartDescription": "3 నిమిషాల్లో OmniRoute ప్రారంభించండి", + "featuredAutoComboTitle": "ఆటో-కాంబో గైడ్", + "featuredAutoComboDescription": "OmniRoute మీ కోసం ఉత్తమ AIని ఎంచుకోనివ్వండి", + "featuredProvidersTitle": "ప్రొవైడర్ల గైడ్", + "featuredProvidersDescription": "నిమిషాల్లో AI ప్రొవైడర్లను కనెక్ట్ చేయండి", + "nonTechUsersTitle": "సాంకేతికేతర వినియోగదారుల కోసం", + "nonTechUsersSubtitle": "త్వరగా ప్రారంభించండి — సాంకేతిక నేపథ్యం అవసరం లేదు", + "techUsersTitle": "టెక్ వినియోగదారుల కోసం", + "techUsersSubtitle": "ఆర్కిటెక్చర్, APIs, మరియు అంతర్గతాలపై లోతుగా పరిశీలన చేయండి", + "apiExplorerMetadataTitle": "API అన్వేషకుడు — OmniRoute డాక్స్", + "apiExplorerMetadataDescription": "ఇంటరాక్టివ్ API అన్వేషకుడు — నిజమైన సమాధానాలతో OmniRoute ఎండ్‌పాయింట్‌లను ప్రత్యక్షంగా ప్రయత్నించండి", + "apiExplorerTitle": "API అన్వేషకుడు", + "apiExplorerDescription": "OmniRoute ఎండ్‌పాయింట్‌లను ప్రత్యక్షంగా ప్రయత్నించండి. ఒక ఎండ్‌పాయింట్‌ను ఎంచుకోండి, మీ అభ్యర్థనను కాన్ఫిగర్ చేయండి, మరియు ప్రత్యక్షంగా ప్రతిస్పందనను చూడండి.", + "apiExplorerSseStarted": "SSE స్ట్రీమ్ ప్రారంభమైంది — నిజ సమయ అవుట్‌పుట్ కోసం టెర్మినల్/డెవ్‌టూల్స్‌ను తనిఖీ చేయండి.", + "apiExplorerError": "లోపం: {message}", + "apiExplorerAuth": "అధికారికత", + "apiExplorerResponseLabel": "ప్రతిస్పందన", + "apiExplorerSelectEndpoint": "అన్వేషించడానికి ఒక ఎండ్‌పాయింట్‌ను ఎంచుకోండి", + "apiExplorerChooseApi": "సైడ్‌బార్ నుండి ఒక APIని ఎంచుకోండి, వివరాలను చూడండి మరియు ప్రత్యక్షంగా ప్రయత్నించండి", + "feedbackThanks": "మీ అభిప్రాయానికి ధన్యవాదాలు!", + "feedbackQuestion": "ఈ పేజీ సహాయకరమా?", + "pageMetadataTitle": "{title} — OmniRoute డాక్స్", + "pageMetadataDescription": "OmniRoute డాక్యుమెంటేషన్: {title}", + "breadcrumb": "బ్రెడ్‌క్రంబ్", + "apiReferenceTable": { + "parameters": "పరామితులు", + "name": "పేరు", + "type": "టైప్", + "description": "వివరణ", + "returns": "తిరిగి వస్తుంది", + "typePrefix": "రకం:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth సెషన్ అసంపూర్ణం (రీడైరెక్ట్ URI లేదా కోడ్ వేరిఫైయర్ మిస్సింగ్). కనెక్షన్‌ను పునఃప్రారంభించి మళ్లీ ప్రయత్నించండి.", + "errorExchangeFailed": "మార్పిడి విఫలమైంది", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: డిఫాల్ట్ Google OAuth క్రెడెన్షియల్స్ కేవలం localhost పై మాత్రమే పనిచేస్తాయి. దూరంలో ఉపయోగించడానికి, మీ స్వంత OAuth క్రెడెన్షియల్స్‌ను పర్యావరణ చొరవల ద్వారా కాన్ఫిగర్ చేయండి: ANTIGRAVITY_OAUTH_CLIENT_ID మరియు ANTIGRAVITY_OAUTH_CLIENT_SECRET. 'ఒక దూర సర్వర్‌పై OAuth' అనే README విభాగాన్ని చూడండి.", + "errorSaveFailed": "సేవ్ విఫలమైంది", + "errorAuthorizationFailed": "అనుమతి విఫలమైంది", + "errorAuthorizationTimeout": "అధికారికత కాలం ముగిసింది", + "errorRequestFailed": "అభ్యర్థన విఫలమైంది", + "errorCallbackServerFailed": "కాల్‌బ్యాక్ సర్వర్ ప్రారంభించడంలో విఫలమైంది", + "errorBrowserUnavailable": "ప్రస్తుత వాతావరణంలో ఈ ప్రొవైడర్ కోసం బ్రౌజర్ OAuth అందుబాటులో లేదు. దయచేసి మద్దతు పొందిన ఆథ్ పద్ధతిని ఉపయోగించండి.", + "errorStateMismatch": "OAuth రాష్ట్రం సరిపోలడం లేదు. కనెక్షన్‌ను పునఃప్రారంభించి మళ్లీ ప్రయత్నించండి.", + "errorImportAccessToken": "ప్రవేశ టోకెన్‌ను దిగుమతి చేయడంలో విఫలమైంది", + "errorSessionNotInitialized": "OAuth సెషన్ ప్రారంభించబడలేదు. కనెక్షన్ ప్రవాహాన్ని పునఃప్రారంభించి మళ్లీ ప్రయత్నించండి.", + "errorNoAuthorizationCode": "అనుమతి కోడ్ కనుగొనబడలేదు. కాల్‌బ్యాక్ URL లేదా ఆథెంటికేషన్ కోడ్‌ను పేస్ట్ చేయండి.", + "tabDeviceCode": "డివైస్ కోడ్", + "tabBrowserLogin": "బ్రౌజర్ లాగిన్", + "tabImportAuthJson": "auth.jsonని దిగుమతి చేసుకోండి", + "tabPasteApiKey": "API కీని పేస్ట్ చేయండి", + "windsurfPasteDescription": "Windsurf / VS Code IDEలో, కమాండ్ ప్యాలెట్ నుండి \"Windsurf: Provide Auth Token\" కమాండ్‌ను నడపండి (లేదా Jupyter \"Get Windsurf Authentication Token\" బటన్‌ను క్లిక్ చేయండి), తరువాత చూపించిన టోకెన్‌ను కాపీ చేసి క్రింద పేస్ట్ చేయండి. windsurf.com/show-auth-tokenని నేరుగా తెరవడం \"Redirecting\" పేజీని మాత్రమే చూపిస్తుంది — IDE ప్రవాహాన్ని ప్రారంభించాలి.", + "grokAuthJsonDescription": "~/.grok/auth.json యొక్క పూర్తి కంటెంట్‌ను పేస్ట్ చేయండి (JWT \"కీ\" ఫీల్డ్ మాత్రమే కాదు). ఒక నికర JWT కు refresh_token లేదు, కాబట్టి కనెక్షన్ కాలం ముగిసిన తర్వాత మృతమవుతుంది (#7610). అందుబాటులో ఉన్నప్పుడు ప్రత్యేకమైన Import auth.json మోడల్‌ను ప్రాధాన్యం ఇవ్వండి.", + "devinDesktopPasteDescription": "ఒక ధృవీకరించిన Devin సెషన్ నుండి ఉన్న Devin API కీని పేస్ట్ చేయండి. కీ ఎగుమతి అందుబాటులో ఉండడం మరియు దశలు Devin వెర్షన్ మరియు ఖాతా ప్రకారం మారవచ్చు.", + "devinPasteDescription": "మీ WINDSURF_API_KEYని అందించండి (ఇది `devin auth login` ద్వారా లేదా Windsurf IDEలో \"Windsurf: Provide Auth Token\" ఆదేశం ద్వారా పొందవచ్చు).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API కీ / టోకెన్", + "saving": "సేవ్ చేస్తున్నది…", + "saveConnection": "సంబంధాన్ని సేవ్ చేయండి", + "gheDescription": "మీ GitHub Enterprise ఉదాహరణ యొక్క ప్రాథమిక URL ను నమోదు చేయండి (ఉదాహరణకు https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub ఎంటర్‌ప్రైజ్ URL", + "gheUrlRequired": "GitHub ఎంటర్‌ప్రైజ్ URL అవసరం", + "gitlabDuoSetupTitle": "GitLab డ్యూ OAuth సెటప్", + "gitlabDuoSetupMessage": "GitLab Duo OAuth కాన్ఫిగర్ చేయబడలేదు. {applicationsUrl} వద్ద ఒక OAuth అప్లికేషన్ నమోదు చేయండి, దిశా URI {redirectUri} మరియు స్కోప్స్ \"{scopes}\" తో, తరువాత {clientIdEnv} (మరియు ఐచ్ఛికంగా {clientSecretEnv}) సెట్ చేసి పునఃప్రారంభించండి.", + "gitlabDuoSetupDescription": "అప్లికేషన్ నమోదు చేసిన తర్వాత మరియు ఈ OmniRoute ఉదాహరణపై env vars సెట్ చేసిన తర్వాత, OAuth లాగిన్ ప్రారంభించడానికి కొనసాగించు పై క్లిక్ చేయండి.", + "continue": "కొనసాగించు" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "మరిన్ని లోడ్ చేయండి", - "loadingMore": "మరిన్ని లోడ్ అవుతున్నాయి..." + "loadingMore": "మరిన్ని లోడ్ అవుతున్నాయి...", + "correlationId": "సంబంధిత ID", + "group": { + "showAllRows": "అన్ని వరుసలను చూపించండి", + "showLatestPerCorrelation": "కరలేషన్ ID ప్రకారం తాజా చూపించండి", + "grouped": "గుంపు చేయబడింది" + }, + "running": "నడుస్తున్నది", + "interval": { + "decrease": "అవధిని తగ్గించు", + "title": "సెకన్లలో ఆటో-రిఫ్రెష్ అంతరాలం", + "increase": "ఇంటర్వల్ పెంచండి" + }, + "status": { + "inProgress": "చర్యలో ఉంది", + "recoveredByRetry": "మళ్లీ ప్రయత్నించడం ద్వారా పునరుద్ధరించబడింది", + "goToParent": "తల్లి అభ్యర్థనకు వెళ్లండి", + "healedTitle": "అసఫలమైంది, {count} ప్రయత్నాల తర్వాత పునరుద్ధరించబడింది", + "healed": "చికిత్స పొందింది", + "failedTitle": "అన్ని {count} ప్రయత్నాలు విఫలమయ్యాయి", + "failed": "అసఫలమైంది", + "pinnedTitle": "సందర్భ-కాష్ సెషన్ పిన్నింగ్ ద్వారా మోడల్ ఎంపిక చేయబడింది", + "pinned": "పిన్చబడింది" + }, + "attempts": "ప్రయత్నాలు", + "detail": { + "collapse": "{title} కుదించు", + "expand": "{title}ని విస్తరించండి", + "copyTitle": "కాపీ {title}", + "copied": "కాపీ చేయబడింది!", + "copy": "కాపీ", + "autoscrollOn": "ఆటోస్క్రోల్: ఆన్", + "autoscrollOff": "ఆటోస్క్రోల్: ఆఫ్", + "payload": { + "clientRawRequest": "క్లయింట్ రా అభ్యర్థన", + "clientRequest": "క్లయింట్ అభ్యర్థన", + "openaiRequest": "OpenAI అభ్యర్థన", + "providerRequest": "ప్రొవైడర్ అభ్యర్థన", + "providerResponse": "ప్రదాత స్పందన", + "clientResponse": "క్లయింట్ ప్రతిస్పందన", + "pipelineError": "పైప్‌లైన్ లో పొరపాటు" + }, + "payloadMissing": "ఈ లాగ్ ఎంట్రీకి సంబంధించి వివరమైన పేమెంట్ ఆర్టిఫాక్ట్ అందుబాటులో లేదు.", + "payloadCorrupt": "వివరమైన పేమెంట్ ఆర్టిఫాక్ట్‌ను పార్స్ చేయలేకపోయింది.", + "notAvailable": "N/A", + "semanticCache": "సెమాంటిక్ (OmniRoute)", + "upstreamCache": "అప్‌స్ట్రీమ్ (ప్రొవైడర్)", + "ariaLabel": "అభ్యర్థన లాగ్ వివరాలు", + "completed": "పూర్తి అయ్యింది", + "upstreamStatus": "అప్‌స్ట్రీమ్: {status}", + "statusDiscrepancy": "OmniRoute {provider} అందించినప్పటికీ {status} తిరిగి ఇచ్చింది", + "previousRequest": "మునుపటి అభ్యర్థన", + "nextRequest": "తదుపరి అభ్యర్థన", + "close": "వివరాల మోడల్‌ను మూసివేయండి", + "startedAt": "ప్రారంభించబడింది", + "endedAt": "ముగిసింది వద్ద", + "duration": "కాలవ్యవధి", + "model": "మోడల్", + "provider": "ప్రదాత", + "account": "ఖాతా", + "input": "ఇన్‌పుట్", + "totalIn": "మొత్తం లో: {value}", + "cacheRead": "క్యాష్ చదవండి: {value}", + "cacheWrite": "క్యాష్ రైట్: {value}", + "compressed": "సంకోచితం: {from} → {to} ({percent}% సేవ్ చేయబడింది)", + "output": "అవుట్‌పుట్", + "totalOut": "మొత్తం అవుట్: {value}", + "reasoning": "కారణం: {value}", + "requestedModel": "అభ్యర్థించిన మోడల్", + "requestProtocol": "రిక్వెస్ట్ ప్రోటోకాల్", + "cacheSource": "క్యాష్ మూలం", + "modelPinning": "మోడల్ పిన్నింగ్", + "activeModelPinning": "సక్రియ — సెషన్ పిన్నింగ్ ద్వారా ఎంపిక చేసిన మోడల్", + "rotated": "మలుపు: {initial} -> {final}", + "apiKey": "API కీ", + "noApiKey": "ఏదీ API కీ లేదు", + "combo": "కాంబో", + "error": "తప్పు", + "unblockAll": "అన్ని అన్‌బ్లాక్ చేయండి", + "cleared": "తొలగించబడింది", + "unblock": "అన్బ్లాక్ చేయండి", + "relatedRequests": "సంబంధిత అభ్యర్థనలు ({count})", + "current": "ప్రస్తుతము", + "detailStatus": "వివరాల స్థితి", + "loadingDetails": "కోరిక వివరాలను లోడ్ చేస్తున్నది...", + "providerEventStream": "ప్రొవైడర్ ఈవెంట్ స్ట్రీమ్", + "clientEventStream": "క్లయింట్ ఈవెంట్ స్ట్రీమ్", + "eventStream": "ఈవెంట్ స్ట్రీమ్", + "responsePayloadLegacy": "ప్రతిస్పందన పేమెంట్ (లెగసీ)", + "requestPayloadLegacy": "అభ్యర్థన పేమెంట్ (పాత)", + "noPayload": "ఈ లాగ్ ఎంట్రీకి అందుబాటులో ఉన్న పేమెంట్ డేటా లేదు.", + "correlationId": "సంబంధం ID", + "correlationIdValue": "సంబంధిత ID: {id}", + "detailedPayloadInfo": "కొత్త అభ్యర్థనల కోసం నాలుగు దశల క్లయింట్/ప్రొవైడర్ పేమెంట్ వీక్షణను కావాలంటే, మొదట వివరణాత్మక లాగింగ్‌ను ప్రారంభించండి." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} నిలిపివేయబడింది", "providerAdded": "{provider} చేర్చబడింది", "add": "చేర్చు", - "manualApiKey": "మాన్యువల్ API కీని ఉపయోగించండి" + "manualApiKey": "మాన్యువల్ API కీని ఉపయోగించండి", + "createDahlTokenFailed": "Dahl టోకెన్ సృష్టించడంలో విఫలమైంది", + "providerProxy": "ప్రాక్సీ", + "providerProxyConfigureHint": "ప్రాక్సీని కాన్ఫిగర్ చేయండి", + "providerProxyTitleConfigured": "ప్రాక్సీ కాన్ఫిగర్ చేయబడింది: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-పరిమితం — నిబంధనలను సమీక్షించండి", "caution": "హెచ్చరిక — వ్యక్తిగత-వినియోగం / ప్రాక్సీ నిబంధనలు", "ok": "సాధారణంగా అనుమతించదగినది" - } + }, + "allProviders": "అన్ని ప్రొవైడర్లు", + "noApiKeyRequired": "ఏపీ ఐ కీ అవసరం లేదు" }, "providerHealthAutopilot": { "title": "ప్రొవైడర్ హెల్త్ ఆటోపైలట్", @@ -12390,7 +13047,11 @@ "on": "ఆన్", "off": "ఆఫ్", "availableProviders": "అందుబాటులో ఉన్న ప్రొవైడర్‌లు ({count})", - "noProviderOverrides": "ఓవర్‌రైడ్‌లు లేవు — యాక్టివ్‌గా ఉన్న అన్ని ప్రొవైడర్‌లు వాటి డిఫాల్ట్ మోడల్‌లతో పాల్గొంటాయి" + "noProviderOverrides": "ఓవర్‌రైడ్‌లు లేవు — యాక్టివ్‌గా ఉన్న అన్ని ప్రొవైడర్‌లు వాటి డిఫాల్ట్ మోడల్‌లతో పాల్గొంటాయి", + "resetFailed": "పునఃసెట్టింగ్ విఫలమైంది", + "resetSuccess": "కాన్ఫిగరేషన్ డిఫాల్ట్‌లకు తిరిగి సెట్ చేయబడింది", + "running": "నడుస్తోంది...", + "testFailed": "పరీక్ష విఫలమైంది" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) అనేది OmniRoute యొక్క వ్యవస్థాపక ఓపెన్ సోర్స్ మిత్రుడు", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "ఈ చిత్రం అభ్యర్థనకు ప్రొవైడర్ దృష్టిని మద్దతు ఇవ్వడం లేదు", "capabilityFilter.toolsMismatch": "ప్రొవైడర్ టూల్ కాలింగ్‌ను మద్దతు ఇవ్వదు", "capabilityFilter.structuredOutputMismatch": "ప్రొవైడర్ నిర్మిత అవుట్‌పుట్‌ను మద్దతు ఇవ్వదు", - "capabilityFilter.contextWindowMismatch": "అనువర్తన ప్రదాత యొక్క సందర్భం కిటికీని మించు కోరింపు" + "capabilityFilter.contextWindowMismatch": "అనువర్తన ప్రదాత యొక్క సందర్భం కిటికీని మించు కోరింపు", + "publicSystem": { + "notFound": { + "title": "పేజీ కనుగొనబడలేదు", + "description": "మీరు చూస్తున్న పేజీ లేదు లేదా అది మారింది.", + "dashboardAriaLabel": "డాష్‌బోర్డుకు తిరిగి వెళ్లండి", + "statusAriaLabel": "సిస్టమ్ స్థితి పేజీని తెరవండి", + "systemStatus": "సిస్టమ్ స్థితి" + }, + "error": { + "title": "అంతర్గత సర్వర్ లోపం", + "description": "మీ అభ్యర్థనను ప్రాసెస్ చేస్తుండగా ఏదో తప్పు జరిగింది. మా బృందానికి సమాచారం అందించబడింది మరియు వారు ఒక పరిష్కారం పై పని చేస్తున్నారు.", + "errorId": "లోపం ID: {id}", + "detailsAriaLabel": "లోపం వివరాలు", + "retryAriaLabel": "పేజీని మళ్లీ లోడ్ చేయండి", + "tryAgain": "మరలా ప్రయత్నించండి", + "dashboardAriaLabel": "డాష్‌బోర్డుకు తిరిగి వెళ్లండి", + "statusAriaLabel": "సిస్టమ్ స్థితిని తెరవండి", + "systemStatus": "సిస్టమ్ స్థితి" + }, + "globalError": { + "title": "ఏదో తప్పైంది", + "description": "ఒక అప్రత్యాశిత దోషం జరిగింది. ఇది నమోదు చేయబడింది మరియు మా బృందం పరిశీలిస్తుంది.", + "detailsAriaLabel": "లోపం వివరాలు", + "retryAriaLabel": "పేజీని మళ్లీ లోడ్ చేయండి", + "tryAgain": "మరలా ప్రయత్నించండి", + "statusAriaLabel": "సిస్టమ్ స్థితిని తెరవండి", + "systemStatus": "సిస్టమ్ స్థితి" + }, + "offline": { + "title": "కనెక్టివిటీ సమస్య", + "description": "OmniRoute ప్రస్తుతం నెట్‌వర్క్‌ను చేరుకోలేకపోతుంది. మీ ఇంటర్నెట్, VPN, లేదా ప్రాక్సీ సెట్టింగ్‌లను తనిఖీ చేయండి.", + "connectionRestored": "కనెక్షన్ పునరుద్ధరించబడింది", + "offlineModeDetected": "ఆఫ్‌లైన్ మోడ్ గుర్తించబడింది", + "retryConnection": "కనెక్షన్‌ను మళ్లీ ప్రయత్నించండి", + "openStatusPage": "స్థితి పేజీని తెరువు" + }, + "maintenance": { + "title": "నిర్దేశిత నిర్వహణ", + "description": "కొన్ని సేవలు నిర్వహణ జరుగుతున్నప్పుడు తాత్కాలికంగా అందుబాటులో ఉండవు. కోర్ రూటింగ్ సాధారణంగా ఆన్‌లైన్‌లో ఉంటుంది, కానీ నిర్వహణ లక్షణాలు తగ్గించబడవచ్చు.", + "suggestion1": "కొన్ని నిమిషాల తర్వాత మళ్లీ ప్రయత్నించండి.", + "suggestion2": "మరలా ప్రయత్నించడానికి ముందు ప్రస్తుత ఆరోగ్య సూచికలు మరియు ప్రదాత స్థితిని తనిఖీ చేయండి.", + "systemStatus": "సిస్టమ్ స్థితిని చూడండి", + "healthDashboard": "ఆరోగ్య డాష్‌బోర్డు తెరవండి" + }, + "status": { + "title": "సిస్టమ్ స్థితి", + "description": "OmniRoute కోర్ సేవల కోసం ప్రత్యక్ష కార్యకలాపాల స్నాప్‌షాట్.", + "loadingHealth": "ఆరోగ్య మేట్రిక్‌లు లోడ్ అవుతున్నాయి...", + "failedToLoad": "సిస్టమ్ ఆరోగ్యాన్ని లోడ్ చేయడంలో విఫలమైంది.", + "unableToReachHealth": "ఆరోగ్య ఎండ్‌పాయింట్‌కి చేరれలేకపోయారు. కనెక్టివిటీని తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.", + "healthCheckFailed": "ఆరోగ్య తనిఖీ విఫలమైంది", + "openConnectivityHelp": "ఓపెన్ కనెక్టివిటీ సహాయం", + "maintenanceInfo": "నిర్వహణ సమాచారం", + "service": "సేవా", + "unknown": "అజ్ఞాత", + "notAvailable": "n/a", + "providersTracked": "ప్రొవైడర్లు ట్రాక్ చేయబడ్డారు", + "circuitBreakerState": "ప్రొవైడర్ సర్క్యూట్ బ్రేకర్ స్థితి", + "lastUpdate": "చివరి నవీకరణ: {timestamp}", + "uptimeMinutes": "{minutes}మ", + "uptimeHoursMinutes": "{hours}గం {minutes}నిమి" + }, + "statusPages": { + "400": { + "title": "చెడు అభ్యర్థన", + "description": "కోరిక పేమెంట్ చెల్లుబాటు కానిది లేదా అసంపూర్ణంగా ఉంది.", + "suggestion1": "మరలా ప్రయత్నించే ముందు అవసరమైన ఫీల్డ్స్ మరియు పేమ్‌లోడ్ ఫార్మాట్‌ను సమీక్షించండి.", + "suggestion2": "మీరు APIని ఉపయోగిస్తున్నట్లయితే, JSON స్కీమాను స్థానికంగా ధృవీకరించండి.", + "suggestion3": "ఇది కొనసాగితే, పేమెంట్‌ను పరిశీలించడానికి ట్రాన్స్‌లేటర్ ప్లేగ్రౌండ్‌లో అభ్యర్థనను తెరవండి.", + "primaryAction": "డాక్యుమెంటేషన్ తెరవండి", + "secondaryAction": "అనువాదకాన్ని తెరువు" + }, + "401": { + "title": "అనుమతి లేని", + "description": "ఈ వనరును యాక్సెస్ చేయడానికి ప్రమాణీకరణ అవసరం.", + "suggestion1": "మరలా సైన్ ఇన్ చేసి ఆ కార్యకలాపాన్ని పునరుద్ధరించండి.", + "suggestion2": "API కాల్స్ కోసం, బేరర్ టోకెన్ ఉనికిలో ఉందని మరియు చెల్లుబాటు అయ్యిందని నిర్ధారించండి.", + "suggestion3": "మీ టోకెన్ ఇటీవల తిరగబడితే, మీ క్లయింట్ క్రెడెన్షియల్స్‌ను నవీకరించండి.", + "primaryAction": "లాగిన్‌కు వెళ్లండి", + "secondaryAction": "API కీలు నిర్వహించండి" + }, + "403": { + "title": "నిషేధించబడింది", + "description": "మీ అభ్యర్థనను అర్థం చేసుకున్నారు, కానీ విధానంతో యాక్సెస్ నిరాకరించబడింది.", + "suggestion1": "సెట్టింగ్స్‌లో IP అనుమతించబడిన జాబితా/అడ్డుబాట్లు నియమాలను తనిఖీ చేయండి.", + "suggestion2": "మీ API కీకి కేటాయించిన మోడల్ మరియు బడ్జెట్ విధానాలను ధృవీకరించండి.", + "suggestion3": "ఒక నిర్వాహకుడిని అవసరమైన అనుమతి పరిధిని మంజూరు చేయమని అడగండి.", + "primaryAction": "ఓపెన్ యాక్సెస్ సహాయం", + "secondaryAction": "సెక్యూరిటీ సెట్టింగ్స్‌ను తెరవండి" + }, + "408": { + "title": "అభ్యర్థన సమయం ముగిసింది", + "description": "సర్వర్ సమయానికి పూర్తి అభ్యర్థనను అందుకోలేదు.", + "suggestion1": "చిన్న payload తో అభ్యర్థనను మళ్లీ ప్రయత్నించండి.", + "suggestion2": "మీ నెట్‌వర్క్ స్థిరత్వం మరియు VPN/ప్రాక్సీ ఆలస్యం తనిఖీ చేయండి.", + "suggestion3": "దీర్ఘ కార్యకలాపాల కోసం, స్ట్రీమింగ్‌ను ప్రారంభించండి లేదా అభ్యర్థనను విభజించండి.", + "primaryAction": "ఎండ్పాయింట్ గైడ్‌ను తెరవండి", + "secondaryAction": "నెట్‌వర్క్ స్థితిని తనిఖీ చేయండి" + }, + "429": { + "title": "చాలా ఎక్కువ అభ్యర్థనలు", + "description": "ఈ క్లయింట్, కీ లేదా ప్రొవైడర్ కోసం రేట్ పరిమితులు మించిపోయాయి.", + "suggestion1": "కూల్‌డౌన్ కోసం వేచి ఉండండి మరియు సూచించిన కాలంలో మళ్లీ ప్రయత్నించండి.", + "suggestion2": "ఫాల్బ్యాక్ ప్రొవైడర్లతో కాంబోకు మారండి.", + "suggestion3": "సెట్టింగ్స్‌లో ప్రొవైడర్ రెసిలియన్స్/రేట్-లిమిట్ ప్రొఫైల్స్‌ను సర్దుబాటు చేయండి.", + "primaryAction": "రెసిలియన్స్ సెట్టింగ్స్‌ను తెరవండి", + "secondaryAction": "ఓపెన్ కాంబోలు" + }, + "500": { + "title": "అంతర్గత సర్వర్ లోపం", + "description": "మీ అభ్యర్థనను ప్రాసెస్ చేస్తున్నప్పుడు అనుకోని సర్వర్-వైపు లోపం జరిగింది.", + "suggestion1": "కొన్ని సెకండ్లలో ఒకసారి మళ్లీ ప్రయత్నించండి.", + "suggestion2": "ఆరోగ్య టెలిమెట్రీ మరియు సర్వర్ లాగ్‌లను సంబంధిత అభ్యర్థన IDల కోసం తనిఖీ చేయండి.", + "suggestion3": "ఒక నిరంతరంగా ఉంటే, సమయముద్ర మరియు అభ్యర్థన సందర్భంతో సమస్యను నివేదించండి.", + "primaryAction": "ఆరోగ్య డాష్‌బోర్డు తెరవండి", + "secondaryAction": "లాగ్‌లను తెరవండి" + }, + "502": { + "title": "చెడు గేట్వే", + "description": "అప్‌స్ట్రీమ్ ప్రొవైడర్ లేదా గేట్‌వే ఇంటిగ్రేషన్ చెల్లని ప్రతిస్పందనను తిరిగి ఇచ్చింది.", + "suggestion1": "ఇంకొక ప్రొవైడర్ లేదా చురుకైన కాంబో మార్గంతో మళ్లీ ప్రయత్నించండి.", + "suggestion2": "ప్రదాత యొక్క క్రెడెన్షియల్స్ మరియు మోడల్ అందుబాటులో ఉన్నదా అని తనిఖీ చేయండి.", + "suggestion3": "ఫార్మాట్ మార్పిడి ఉంటే అనువాదకుడి అవుట్‌పుట్‌ను తనిఖీ చేయండి.", + "primaryAction": "ప్రొవైడర్లను తెరవండి", + "secondaryAction": "అనువాదకాన్ని తెరువు" + }, + "503": { + "title": "సేవ అందుబాటులో లేదు", + "description": "సేవ తాత్కాలికంగా అందుబాటులో లేదు, ఇది నిర్వహణ లేదా దిగుమతి అయిన ఆధారాల కారణంగా ఉంది.", + "suggestion1": "ఒక క్షణం వేచి ఉండి మళ్లీ ప్రయత్నించండి.", + "suggestion2": "రక్షణ సమాచారం మరియు వ్యవస్థ స్థితిని తనిఖీ చేయండి.", + "suggestion3": "మీ వర్క్‌ఫ్లో లేటెన్సీ-సెన్సిటివ్ అయితే ఫాల్బాక్ ప్రొవైడర్లను ఉపయోగించండి.", + "primaryAction": "నిర్వహణ వివరాలు", + "secondaryAction": "సిస్టమ్ స్థితి" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel}ని కనెక్ట్ చేయండి", + "chooseMethod": "మీ ఆవాస పద్ధతిని ఎంచుకోండి:", + "builderId": "AWS బిల్డర్ ID", + "builderDescription": "అధిక సంఖ్యలో వినియోగదారులకు సిఫారసు చేయబడింది. {providerLabel} కు అనుసంధానించిన AWS ఖాతాతో సైన్ ఇన్ చేయండి.", + "organization": "మీ సంస్థ (AWS IAM ఐడెంటిటీ సెంటర్)", + "organizationDescription": "మీ కంపెనీ SSO ప్రారంభ URLని ఉపయోగించండి (ఉదాహరణ: {url}).", + "googleAccount": "గూగుల్ ఖాతా", + "googleDescription": "మీ Google ఖాతాతో లాగిన్ అవ్వండి.", + "githubAccount": "గిట్‌హబ్ ఖాతా", + "githubDescription": "మీ GitHub ఖాతాతో లాగిన్ అవ్వండి.", + "importToken": "టోకెన్ దిగుమతి చేయండి", + "importDescription": "{providerLabel} నుండి ఎగుమతి చేసిన రిఫ్రెష్ టోకెన్‌ను పేస్ట్ చేయండి.", + "apiKey": "API కీ", + "apiKeyDescription": "ఒక దీర్ఘకాలిక {providerLabel} / CodeWhisperer API కీని పేస్ట్ చేయండి. ఇది రిఫ్రెష్ టోకెన్ లేకుండా బేర్ క్రెడెన్షియల్‌గా నిల్వ చేయబడింది; ప్రొఫైల్ కనుగొనడం ఉత్తమ ప్రయత్నం.", + "idcStartUrl": "IDC ప్రారంభ URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "మీ సంస్థ యొక్క AWS IAM ఐడెంటిటీ సెంటర్ URL", + "awsRegion": "AWS ప్రాంతం", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "మీ ఐడెంటిటీ సెంటర్ కోసం AWS ప్రాంతం (డిఫాల్ట్: us-east-1)", + "continue": "కొనసాగించు", + "back": "తిరిగి", + "autoDetecting": "టోకెన్‌ను ఆటో-డిటెక్ట్ చేస్తున్నది...", + "readingCredentials": "AWS SSO కాష్ నుండి {providerLabel} క్రెడెన్షియల్స్ చదువుతున్నది", + "tokenNotDetected": "{providerLabel} టోకెన్ ఆటో-డిటెక్ట్ చేయబడలేదు. దయచేసి మీ రిఫ్రెష్ టోకెన్‌ను చేతితో పేస్ట్ చేయండి.", + "refreshToken": "రీఫ్రెష్ టోకెన్", + "tokenPlaceholder": "టోకెన్ ఆటో-ఫిల్ అవుతుంది...", + "importing": "ఆమోదిస్తున్నాం...", + "apiKeyPlaceholder": "మీ {providerLabel} API కీని పేస్ట్ చేయండి...", + "apiKeyStoredDescription": "దీర్ఘకాలిక బేరర్ క్రెడెన్షియల్‌గా సంకేతీకరించబడింది. పునరుద్ధరణ ప్రవాహం లేదు.", + "apiKeyRegionDescription": "కీ కోసం AWS ప్రాంతం (డిఫాల్ట్: us-east-1)", + "validating": "చూసుకుంటున్నాం...", + "validateAndSaveApiKey": "API కీని ధృవీకరించండి మరియు సేవ్ చేయండి", + "errorAutoDetect": "టోకెన్‌ను ఆటో-డిటెక్ట్ చేయలేకపోయింది", + "errorAutoDetectFailed": "టోకెన్‌ను ఆటో-డిటెక్ట్ చేయడంలో విఫలమైంది", + "errorRefreshTokenRequired": "దయచేసి ఒక రిఫ్రెష్ టోకెన్ నమోదు చేయండి", + "errorImportFailed": "ఆయా దిగుమతి విఫలమైంది", + "errorApiKeyRequired": "దయచేసి Kiro API కీని నమోదు చేయండి", + "errorApiKeyImportFailed": "API కీ దిగుమతి విఫలమైంది", + "errorIdcStartUrlRequired": "దయచేసి మీ IDC ప్రారంభ URL ను నమోదు చేయండి" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel}ని {providerName} ద్వారా కనెక్ట్ చేయండి", + "errorStartAuthorization": "అనుమతి ప్రారంభించడంలో విఫలమైంది", + "errorAuthorizationExpired": "అనుమతి కాలం ముగిసింది. మళ్లీ లాగిన్ ప్రవాహాన్ని ప్రారంభించండి.", + "errorAuthorizationFailed": "అనుమతి విఫలమైంది", + "initializing": "ప్రారంభించడం...", + "settingUp": "{providerName} ప్రమాణీకరణను ఏర్పాటు చేయడం", + "openIncognito": "ఈ లింక్‌ను ఇన్‌కాగ్నిటో విండోలో తెరువు", + "incognitoDescription": "ఇప్పటికే ఉన్న ఖాతాలతో సెషన్ ఘర్షణలను నివారించడానికి ఇన్‌కాగ్నిటో/ప్రైవేట్ విండోను ఉపయోగించండి.", + "copyLink": "లింక్ కాపీ చేయండి", + "verificationCode": "సत्यాపన కోడ్", + "waiting": "అనుమతి కోసం ఎదురుచూస్తోంది...", + "cancel": "రద్దు చేయండి", + "successTitle": "సంప్రదింపులు విజయవంతంగా జరిగాయి!", + "successMessage": "మీ {providerLabel} ఖాతా {providerName} ద్వారా కనెక్ట్ చేయబడింది.", + "done": "చేయబడింది", + "errorTitle": "కనెక్షన్ విఫలమైంది", + "close": "మూసివేయి" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "అనుమతి విఫలమైంది", + "errorPopupBlocked": "పాప్‌అప్‌లు అడ్డుకోబడ్డాయి — ఈ సైట్‌కి పాప్‌అప్‌లను అనుమతించండి, లేదా కింద టోకెన్‌ను చేతితో పేస్ట్ చేయండి.", + "errorPopupClosed": "అనుమతి విండో పూర్తి కాకముందు మూసివేయబడింది.", + "errorAccessTokenRequired": "ప్రవేశ టోకెన్ అవసరం.", + "errorImportFailed": "ఆయన దిగుమతి విఫలమైంది", + "title": "ట్రే సోలోను కనెక్ట్ చేయండి", + "authorizeDescription": "trae.ai ద్వారా పాప్‌అప్‌లో ఆమోదించండి. టోకెన్ దిగుమతి చేసుకున్న తర్వాత పాప్‌అప్ స్వయంగా మూసివేయబడుతుంది.", + "authorizeImportant": "ముఖ్యమైనది: మీరు మొదట trae.aiలో బ్రౌజర్‌లో లాగిన్ అయి ఉండాలి. అధికారం పేజీ కేవలం ఒక ఉన్న సెషన్‌ను నిర్ధారిస్తుంది — ఇది మీకు లాగిన్ చేయలదు. మీరు \"లాగిన్ విఫలమైంది\" అని చూస్తే, \"Open solo.trae.ai\" పై క్లిక్ చేయండి, లాగిన్ అవ్వండి, తరువాత ఇక్కడ తిరిగి రండి.", + "waitingForAuthorization": "trae.ai కోసం ఎదురుచూస్తున్నాం…", + "authorizeWithBrowser": "బ్రౌజర్‌తో ఆమోదించండి", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "లేదా ఒక టోకెన్‌ను చేతితో పేస్ట్ చేయండి", + "manualInstructions": "solo.trae.ai లో సైన్ ఇన్ అవ్వండి, DevTools → Network ను తెరవండి, ఏదైనా చాట్ సందేశాన్ని పంపండి, మరియు Authorization: Cloud-IDE-JWT {tokenPlaceholder} అభ్యర్థన శీర్షిక నుండి JWT ను కాపీ చేయండి. JWT జీవితకాలం ~14 రోజులు. ఐచ్ఛిక గుర్తింపు ఫీల్డ్స్ అదే అభ్యర్థన శరీరంలో common_params నుండి వస్తాయి.", + "accessTokenLabel": "అక్సెస్ టోకెన్ (క్లౌడ్-ఐడీఈ-జేడబ్ల్యూటీ)", + "webId": "వెబ్ ID", + "optional": "ఐచ్ఛికం", + "bizUserId": "బిజ్ యూజర్ ఐడీ", + "userUniqueId": "వాడుకరి ప్రత్యేక ID", + "scope": "వ్యాప్తి", + "tenant": "అద్దెదారు", + "region": "ప్రాంతం", + "importing": "ఆమోదిస్తున్న…", + "importToken": "టోకెన్ దిగుమతి చేసుకోండి", + "cancel": "రద్దు చేయండి" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "విభజిస్తున్న...", + "complete": "పూర్తి", + "defaultLabel": "ప్రాక్సీలను పంపిణీ చేయండి" + } + }, + "providerTest": { + "dialogLabel": "పరీక్ష {provider}", + "deprecated": "వాడుకలో లేని", + "risk": "ఆపద", + "close": "మూసివేయి", + "model": "మోడల్", + "key": "కీ", + "defaultKey": "డిఫాల్ట్", + "clearConversation": "సంభాషణను క్లియర్ చేయండి", + "clear": "తొలగించు", + "tabs": { + "test": "పరీక్ష", + "logs": "లాగ్‌లు" + }, + "loadingLogs": "లాగ్‌లు లోడ్ అవుతున్నాయి…", + "failedToLoadLogs": "లాగ్‌లు లోడ్ చేయడంలో విఫలమయ్యాయి", + "noLogsYet": "ఇంకా లాగ్‌లు లేవు", + "noLogsDescription": "Test ట్యాబ్ నుండి ఒక పరీక్షా సందేశాన్ని పంపండి — ఈ ప్రొవైడర్ కోసం లాగ్‌లు ఇక్కడ కనిపిస్తాయి.", + "openFullLogs": "పూర్తి లాగ్‌లు పేజీని తెరువు", + "live": "ప్రత్యక్షంగా", + "tailingLast": "చివరి {count}ని తేలుస్తోంది", + "refreshNow": "ఇప్పుడు రిఫ్రెష్ చేయండి", + "refresh": "తాజా చేయండి", + "unknownRequester": "అజ్ఞాత అభ్యర్థి", + "fields": { + "timestamp": "టైమ్‌స్టాంప్", + "status": "స్థితి", + "duration": "కాలం", + "model": "మోడల్", + "requestedModel": "కోరిన మోడల్", + "provider": "ప్రొవైడర్", + "requester": "అభ్యర్థి", + "tokens": "టోకెన్లు" + } + }, + "proxyLog": { + "detailAriaLabel": "ప్రాక్సీ లాగ్ వివరాలు", + "event": "ప్రాక్సీ ఈవెంట్", + "close": "ప్రాక్సీ వివరాల మోడల్‌ను మూసివేయండి", + "time": "సమయం", + "latency": "లేటెన్సీ", + "clientIp": "క్లయింట్ IP", + "proxy": "ప్రాక్సీ", + "direct": "ప్రత్యక్షంగా", + "type": "రకం", + "level": "స్థాయి", + "provider": "ప్రొవైడర్", + "tlsFingerprint": "TLS ఫింగర్‌ప్రింట్", + "directNative": "ప్రత్యక్ష (నేటివ్)", + "targetUrl": "లక్ష్య URL", + "error": "లోపం", + "configuration": "ప్రాక్సీ కాన్ఫిగరేషన్" + }, + "requestTimeline": { + "title": "అభ్యర్థన సమయరేఖ", + "modes": { + "follow": "అనుసరించండి", + "followDescription": "అక్షం ఎడమకు కదులుతుంది, NOW పంక్తి 75% వద్ద ఉంటుంది", + "now": "ఇప్పుడు", + "nowDescription": "ప్రస్తుత సమయానికి దూకండి, NOW పంక్తి కేంద్రానికి పునఃసెట్ అవుతుంది", + "pan": "పాన్", + "panDescription": "అన్వేషించడానికి డ్రాగ్ చేయండి, నేపథ్యం కట్టుబడింది" + }, + "reset": "మళ్లీ సెట్ చేయండి", + "started": "ప్రారంభించారు", + "ended": "ముగిసింది", + "duration": "కాలం", + "status": "స్థితి", + "provider": "ప్రదాత", + "tokens": "టోకెన్లు", + "active": "సక్రియమైన", + "other": "ఇతర", + "tenMinutes": "10నిమిషాలు", + "hour": "గంట", + "day": "రోజు", + "unknownModel": "అజ్ఞాత", + "pending": "ప్రతిష్టితమైన" + }, + "metadata": { + "compressionTitle": "సంకోచనం", + "compressionDescription": "సందర్భం సంకోచన సెట్టింగులను కాన్ఫిగర్ చేయండి, టోకెన్ వినియోగం మరియు ఖర్చులను తగ్గించడానికి.", + "relayTitle": "OmniRoute — రీలే ప్రాక్సీలు", + "relayDescription": "మీ AI మౌలిక సదుపాయాల కోసం సర్వర్‌లెస్ రీలే ప్రాక్సీ ఎండ్‌పాయింట్లు", + "trafficInspectorTitle": "ట్రాఫిక్ ఇన్‌స్పెక్టర్ — ఒమ్నిరూట్", + "trafficInspectorDescription": "LLM కాల్‌లను పర్యవేక్షించండి + ఏదైనా అప్లికేషన్ యొక్క HTTPS ట్రాఫిక్‌ను డీబగ్ చేయండి" + }, + "conductor": { + "title": "కండక్టర్ — CLI-ఏజెంట్ ఫ్లీట్", + "subtitle": "OmniConductor హబ్: రన్నర్లు, టాస్క్ క్యూలు మరియు కౌన్సిల్స్, ప్రత్యక్షంగా", + "runners": "రన్నర్స్", + "tasks": "పనులు", + "colName": "పేరు", + "colClis": "CLIs", + "colStatus": "స్థితి", + "colTask": "పని", + "colMode": "మోడ్", + "colRunner": "రన్నర్", + "colSummary": "సారాంశం", + "online": "ఆన్‌లైన్", + "offline": "ఆఫ్‌లైన్", + "draining": "నిష్క్రమణం", + "hubOffline": "కండక్టర్ హబ్ ఆఫ్‌లైన్ లేదా కాన్ఫిగర్ చేయబడలేదు (CONDUCTOR_HUB_URL) — పాత డేటా కంటే ఏమీ చూపించడం లేదు.", + "noRunners": "రన్నర్లు నమోదు చేయలేదు", + "noTasks": "ఇంకా పనులు లేవు", + "detailTitle": "పనికి సంబంధించిన వివరాలు", + "prompt": "ప్రాంప్ట్", + "branch": "శాఖ", + "fetchHint": "ఫలితాన్ని పొందండి: git fetch origin {branch}", + "council": "కౌన్సిల్", + "candidates": "అర్హులు", + "cancel": "పనిని రద్దు చేయండి", + "cancelConfirmTitle": "ఈ పనిని రద్దు చేయాలా?", + "cancelConfirmMessage": "హబ్ రన్నర్‌పై అమలును నిలిపివేస్తుంది. ఇది తిరిగి చేయలేరు.", + "cancelFailed": "హబ్ రద్దును తిరస్కరించింది", + "close": "మూసివేయి", + "error": "తప్పు", + "faroTitle": "ఫారో — నావికా ప్రతినిధి", + "faroSubtitle": "చాట్ మరియు శబ్దం, నిజమైన ఫ్లీట్ సంఘటనలలో అంకితమైంది. ధ్వంసకరమైన ఆదేశాలు ఎప్పుడూ నిర్ధారణ కోసం అడుగుతాయి.", + "faroEmpty": "ఫ్లీట్ను గురించి అడగండి — ఉదాహరణకు \"ఫ్లీట్ ఎలా ఉంది?\"", + "faroPending": "ఫారో నిర్ధారణ కోరుతున్నాడు", + "faroPlaceholder": "Faro తో మాట్లాడండి…", + "faroSend": "అయా", + "faroOffline": "ఫారో (ప్రవక్త) ఆఫ్‌లైన్‌లో ఉంది", + "yes": "అవును", + "no": "లేదు", + "pushToTalk": "మాట్లాడడానికి పట్టుకోండి", + "speakAnswers": "సమాధానాలను మాట్లాడండి", + "voiceModels": "వాయిస్ మోడల్స్ (ప్రొవైడర్/మోడల్ ఈ OmniRoute యొక్క)", + "voiceIdle": "మాట్లాడు", + "voiceListening": "కోసం వినడం…", + "voiceThinking": "చింతిస్తున్నాను…", + "voiceSpeaking": "మాట్లాడుతున్న…", + "sttFailed": "ట్రాన్స్‌క్రిప్షన్ విఫలమైంది (STT మోడల్/ప్రొవైడర్‌ను తనిఖీ చేయండి)", + "ttsFailed": "స్పీచ్ సింథసిస్ విఫలమైంది (TTS మోడల్/ప్రొవైడర్‌ను తనిఖీ చేయండి)", + "micDenied": "మైక్రోఫోన్ అందుబాటులో లేదు లేదా అనుమతి నిరాకరించబడింది" + }, + "cliproxyProviderExposure": { + "title": "ప్రొవైడర్ ఎక్స్‌పోజర్", + "description": "cliproxyapi/ ప్రిఫిక్స్ కింద రౌటింగ్ లక్ష్యంగా CLIProxyAPI మోడల్స్‌ను ఎక్స్‌పోజ్ చేయండి.", + "label": "cliproxyapi/...ని బయటకు తీసి ఉంచండి", + "hint": "చాలా సులభంగా, కనుగొనబడిన మోడల్స్ OmniRoute లో ప్రొవైడర్ ఎంపికలలో కనిపిస్తాయి.", + "updateFailed": "అప్‌డేట్ చేయడంలో విఫలమైంది (HTTP {status})", + "networkError": "నెట్‌వర్క్ లోపం — ప్రొవైడర్ ఎక్స్‌పోజర్ సెటింగ్‌ను నవీకరించలేకపోయింది" + } } - diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 87f7327e7e..d3582d42e8 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -172,6 +172,18 @@ "unselectAll": "ยกเลิกการเลือกทั้งหมด", "visibleModels": "ที่แสดง", "selectAllConfirm": "เพิ่ม {count} โมเดลลงในคอมโบนี้ไหม", + "testSelectedProviders": "ผู้ให้บริการทดสอบ", + "testingSelectedProviders": "กำลังทดสอบ {done}/{total}...", + "noProvidersSelectedToTest": "กรุณาตรวจสอบผู้ให้บริการอย่างน้อยหนึ่งรายด้านล่างก่อน", + "noModelsToTestForProviders": "ไม่มีโมเดลให้ทดสอบสำหรับผู้ให้บริการที่เลือก", + "testSelectedProvidersResults": "{ok} จาก {total} โมเดลที่ทำงานอยู่", + "selectWorkingModels": "เพิ่มการทำงาน", + "unselectWorkingModels": "ยกเลิกการเลือกทำงาน", + "noWorkingModelsToSelect": "ไม่มีโมเดลที่ใช้งานได้เหลือให้เพิ่ม", + "providerTestHint": "เคล็ดลับ: ตรวจสอบผู้ให้บริการ → ทดสอบ → เพิ่มการทำงาน คลิกอีกครั้งเพื่อยกเลิกการเลือก.", + "selectAllProviders": "ตรวจสอบผู้ให้บริการทั้งหมด", + "clearProviderSelection": "ยกเลิกการเลือกผู้ให้บริการ", + "providersSelectedCount": "ตรวจสอบผู้ให้บริการ {count} ราย", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "ขนาด", + "toggleNoAuthProvider": "สลับผู้ให้บริการที่ไม่มีการรับรองตัวตน", + "loadingModels": "กำลังโหลดโมเดล…", + "selectAModel": "เลือกโมเดล", + "degraded": "ลดคุณภาพ", + "zeroConfigBannerTitle": "ทำงานในโหมดที่ไม่ต้องการการกำหนดค่า", + "zeroConfigBannerBody": "OmniRoute สร้างคีย์การเข้ารหัสที่ปลอดภัยโดยอัตโนมัติเมื่อเริ่มใช้งานครั้งแรก คีย์เหล่านี้จะถูกเก็บไว้ที่ {dataDir} ไม่ต้องดำเนินการใดๆ — ข้อมูลของคุณถูกเข้ารหัสและปลอดภัยแล้ว หากต้องการใช้คีย์ที่กำหนดเอง ให้เพิ่ม JWT_SECRET และ STORAGE_ENCRYPTION_KEY ลงในไฟล์นั้น", + "batchRelativeTimeIn": "ใน {value}", + "batchRelativeTimeAgo": "เมื่อ {value} ที่แล้ว", + "batchDetailsTitle": "รายละเอียดชุดงาน", + "batchProgress": "ความก้าวหน้า", + "batchCompletedCount": "{count} เสร็จสิ้น", + "batchFailedCount": "{count} ล้มเหลว", + "batchPendingCount": "{count} รอดำเนินการ", + "batchTimeline": "ไทม์ไลน์", + "batchTimelineInProgress": "กำลังดำเนินการ", + "batchTimelineFinalizing": "การสรุปขั้นสุดท้าย", + "batchTimelineCompleted": "เสร็จสิ้น", + "batchTimelineFailed": "ล้มเหลว", + "batchTimelineExpires": "หมดอายุ", + "batchTimelineExpired": "หมดอายุ", + "batchTimelineCancelling": "กำลังยกเลิก", + "batchTimelineCancelled": "ยกเลิกแล้ว", + "batchTokenUsage": "การใช้โทเค็น", + "batchMetadata": "ข้อมูลเมตา", + "batchFileContents": "เนื้อหาของไฟล์", + "batchFileUsedByCount": "ใช้โดย {count, plural, one {# ชุด} other {# ชุด}}", + "batchFilePreview": "ตัวอย่าง", + "batchFilePreviewTruncated": "แสดง {shown} บรรทัดแรก ({total} บรรทัดรวม)", + "batchFileDownloadFull": "ดาวน์โหลดไฟล์ทั้งหมด" }, "disabled": "ปิดใช้งาน", "featureFlagOmnirouteEmergencyFallbackDescription": "กำหนดเส้นทางคำขอที่งบประมาณหมดไปยังผู้ให้บริการ/โมเดลสำรองฟรีในกรณีฉุกเฉิน", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "ตัวคั่น", "discovery": "การค้นพบ", "discoverySubtitle": "สแกนผู้ให้บริการเพื่อเข้าใช้งานฟรี", + "conductor": "ตัวนำ", + "conductorSubtitle": "ฝูงเรือ CLI-agent", "resilienceConnections": "ความยืดหยุ่นของการเชื่อมต่อ", "resilienceConnectionsSubtitle": "คูลดาวน์ เบรกเกอร์ สถานะการล็อกเอาต์", "settingsModalityBridge": "สะพานโมดัลิตี้", - "settingsModalityBridgeSubtitle": "การแปลงภาพ/เสียง → ข้อความสำหรับโมเดลที่มีเฉพาะข้อความ" + "settingsModalityBridgeSubtitle": "การแปลงภาพ/เสียง → ข้อความสำหรับโมเดลที่มีเฉพาะข้อความ", + "commandPalette": { + "title": "แผงคำสั่ง", + "searchPlaceholder": "ค้นหาหน้า, การตั้งค่า, เครื่องมือ...", + "clearSearch": "ล้างการค้นหา", + "noResults": "ไม่มีผลลัพธ์", + "navigate": "นำทาง", + "open": "เปิด", + "close": "ปิด" + }, + "noResults": "ไม่มีผลลัพธ์" }, "webhooks": { "title": "เว็บฮุค", @@ -1477,7 +1531,11 @@ "settings.update_failed": "อัปเดตการตั้งค่าล้มเหลว", "sync.token.created": "สร้างโทเค็นการซิงค์แล้ว", "sync.token.revoked": "เพิกถอนโทเค็นการซิงค์แล้ว" - } + }, + "mcpMetricCalls24h": "การโทร (24 ชม.)", + "mcpMetricSuccessRate": "อัตราความสำเร็จ", + "mcpMetricAvgDuration": "ระยะเวลาเฉลี่ย", + "mcpMetricTopTool": "เครื่องมือชั้นนำ" }, "themesPage": { "title": "ธีมส์", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "มีเวอร์ชันใหม่ให้ใช้งานแล้ว คลิกเพื่ออัปเดต", "updateStarted": "เริ่มการอัพเดต...", "reloadingPageAutomatically": "กำลังโหลดหน้าซ้ำโดยอัตโนมัติ...", - "providerTopology": "โทโพโลยีของผู้ให้บริการ" + "providerTopology": "โทโพโลยีของผู้ให้บริการ", + "downloadDmg": "ดาวน์โหลด DMG (macOS)", + "downloadDmgDescription": "มีเวอร์ชันใหม่ของแอปเดสก์ท็อป OmniRoute พร้อมใช้งาน กรุณาดาวน์โหลดและติดตั้งตัวติดตั้ง macOS DMG เพื่อทำการอัปเดต (ปัจจุบัน: v{version}).", + "downloadExe": "ดาวน์โหลด EXE (Windows)", + "downloadExeDescription": "มีเวอร์ชันใหม่ของแอปเดสก์ท็อป OmniRoute พร้อมใช้งาน กรุณาดาวน์โหลดและติดตั้งโปรแกรมติดตั้ง Windows EXE เพื่อทำการอัปเดต (ปัจจุบัน: v{version}).", + "downloadAppImage": "ดาวน์โหลด AppImage (Linux)", + "downloadAppImageDescription": "มีเวอร์ชันใหม่ของแอป OmniRoute สำหรับเดสก์ท็อปพร้อมใช้งาน กรุณาดาวน์โหลดแพ็กเกจ Linux AppImage เพื่อติดตั้งการอัปเดต (ปัจจุบัน: v{version}).", + "downloadUpdate": "ดาวน์โหลดการอัปเดต", + "downloadUpdateDescription": "มีเวอร์ชันใหม่ของแอปเดสก์ท็อป OmniRoute พร้อมใช้งาน กรุณาดาวน์โหลดรูปแบบแอปที่เหมาะสมสำหรับระบบของคุณเพื่อทำการอัปเดต (ปัจจุบัน: v{version}).", + "updateQueued": "รอการอัปเดตเป็น v{version}.", + "updateDockerRebuilding": "กำลังสร้างภาพ Docker ใหม่ในพื้นหลัง.", + "updateWaitingRestart": "รอให้ OmniRoute เริ่มต้นใหม่ด้วยเวอร์ชันใหม่.", + "updateInstalling": "กำลังติดตั้ง v{version}.", + "updateRunning": "OmniRoute กำลังทำงานอยู่ในเวอร์ชัน v{version}.", + "updateCompleted": "OmniRoute ได้รับการอัปเดตเป็น v{version}.", + "updateDockerStillRebuilding": "Docker image กำลังสร้างใหม่สำหรับ v{version}.", + "updateInstallingBackground": "กำลังติดตั้ง v{version} ในพื้นหลัง.", + "updateWaitingVersion": "รอให้ OmniRoute กลับมาใช้งานได้อีกครั้งใน v{version}.", + "updateDockerStillInProgress": "Docker กำลังสร้างใหม่อยู่ในขณะนี้.", + "updateRestarting": "กำลังรีสตาร์ทบริการ รอให้ OmniRoute กลับมาออนไลน์...", + "updateTimeout": "เริ่มการอัปเดตแล้ว แต่ v{version} ไม่สามารถใช้งานได้ก่อนหมดเวลา กรุณารีเฟรชหน้าเว็บหรือเช็คบันทึกเซิร์ฟเวอร์", + "updateTimedOut": "การอัปเดตเป็น v{version} ใช้เวลานานเกินไป.", + "updateStartFailed": "ไม่สามารถเริ่มการอัปเดตได้.", + "noResponseStream": "ไม่ได้รับสตรีมการตอบกลับ.", + "updateComplete": "อัปเดตเสร็จสิ้นแล้ว!", + "updateFailed": "การอัปเดตล้มเหลว.", + "updateNetworkError": "ข้อผิดพลาดของเครือข่าย — การเชื่อมต่อขาดหายระหว่างการอัปเดต.", + "stepInstallPackage": "ติดตั้งแพ็กเกจ", + "stepRebuildNativeModules": "สร้างโมดูลเนทีฟใหม่", + "stepRestartService": "เริ่มบริการใหม่", + "stepComplete": "เสร็จสมบูรณ์", + "stepError": "ข้อผิดพลาด", + "updateCompleteTitle": "อัปเดตเสร็จสิ้น!", + "updateFailedTitle": "การอัปเดตล้มเหลว", + "updatingTitle": "กำลังอัปเดต OmniRoute...", + "reloadNotice": "หน้าจะโหลดใหม่โดยอัตโนมัติในไม่กี่วินาที", + "retryNotice": "กรุณาลองอีกครั้งหรืออัปเดตด้วยตนเองผ่าน CLI.", + "restartNotice": "อย่าปิดหน้านี้ ระบบจะเริ่มต้นใหม่โดยอัตโนมัติ.", + "reloadNow": "โหลดใหม่ตอนนี้", + "closeUpdate": "ปิด", + "retryUpdate": "ลองใหม่", + "updateAvailableTitle": "มีการอัปเดต: v{version}{desktop}", + "desktopAppLabel": "(แอปพลิเคชันเดสก์ท็อป)", + "checkingForUpdates": "กำลังตรวจสอบการอัปเดต...", + "versionAvailableForDownload": "เวอร์ชัน v{version} พร้อมให้ดาวน์โหลดแล้ว。", + "downloadingUpdate": "กำลังดาวน์โหลดการอัปเดต... {percent}% เสร็จสมบูรณ์.", + "updateDownloaded": "ดาวน์โหลดอัปเดตสำเร็จแล้ว! คลิก รีสตาร์ท & ติดตั้ง เพื่อใช้งาน.", + "autoUpdateFailed": "การอัปเดตอัตโนมัติล้มเหลว: {reason}.", + "unknownUpdateError": "ข้อผิดพลาดที่ไม่รู้จัก", + "versionAvailableDesktop": "มีเวอร์ชัน v{version} สำหรับแอปเดสก์ท็อปแล้ว", + "manualUpdateRequired": "ต้องการการอัปเดตด้วยตนเองสำหรับประเภทการติดตั้งนี้.", + "restartAndInstall": "เริ่มต้นใหม่ & ติดตั้ง", + "checkForUpdate": "ตรวจสอบการอัปเดต", + "manualUpdate": "การอัปเดตด้วยตนเอง", + "directDownloadHint": "หรือดาวน์โหลดรูปแบบติดตั้งที่เกี่ยวข้องโดยตรง:", + "releaseNotes": "หมายเหตุการปล่อย", + "readMore": "อ่านเพิ่มเติม", + "noAuthLabel": "ไม่มีการตรวจสอบสิทธิ์" }, "analytics": { "title": "การวิเคราะห์", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "อนุมานจากบันทึกการเรียกที่เก็บไว้อย่างถาวรในช่วงเวลาของคำขอนี้", "routeRecommendations": "คำแนะนำ", "routeLimitations": "ข้อจำกัด", - "routeNoKnownLimitations": "ไม่มีข้อจำกัดที่ทราบสำหรับคำอธิบายนี้." + "routeNoKnownLimitations": "ไม่มีข้อจำกัดที่ทราบสำหรับคำอธิบายนี้.", + "searchAnalyticsLoading": "กำลังโหลดการวิเคราะห์การค้นหา…", + "searchAnalyticsNoData": "ยังไม่มีข้อมูลการค้นหาในขณะนี้.", + "searchAnalyticsNoDataDescription": "คำขอค้นหาจะปรากฏที่นี่หลังจากการค้นครั้งแรกผ่าน /v1/search.", + "searchAnalyticsToday": "{count} วันนี้", + "searchAnalyticsCachedRequests": "คำขอที่เก็บไว้ {count} รายการ", + "searchAnalyticsApiCosts": "ค้นหาค่าใช้จ่าย API", + "searchAnalyticsErrors": "{count} ข้อผิดพลาด", + "searchAnalyticsNoErrors": "ไม่มีข้อผิดพลาด", + "searchAnalyticsProviderBreakdown": "การแยกประเภทผู้ให้บริการ", + "searchAnalyticsQueries": "การค้นหา", + "searchAnalyticsEmptyDescription": "ใช้ POST /v1/search เพื่อเริ่มการค้นหาเว็บ。", + "searchAnalyticsFreeTier": "มีระดับฟรีให้บริการ: Serper (2,500/เดือน), Brave (2,000/เดือน), Exa (1,000/เดือน), Tavily (1,000/เดือน) — รวม 6,500+ การค้นหาฟรี/เดือน พร้อมการเปลี่ยนเส้นทางอัตโนมัติ.", + "autoRoutingNoDataAvailable": "ไม่มีการวิเคราะห์การจัดเส้นทางอัตโนมัติให้บริการ โปรดทำการร้องขอโดยใช้ auto/ นำหน้าสำหรับดูเมตริก", + "defaultVariantLabel": "ค่าเริ่มต้น", + "freeTierAvailable": "มีระดับฟรีให้บริการ" }, "apiManager": { "title": "คีย์ API", @@ -2348,7 +2478,9 @@ "providerCount": "{count} ผู้ให้บริการ", "imageToTextBridgeAvailable": "Modality Bridge สามารถอธิบายภาพสำหรับโมเดลที่เป็นข้อความเท่านั้นได้แล้ว ขณะนี้พื้นที่เล่นแบบในบรรทัดจะพร้อมใช้งานเมื่อ /api/v1/images/understanding ถูกนำไปใช้.", "imageToTextBridgeCta": "กำหนดค่าสะพานภาพ→ข้อความในการตั้งค่าสะพานโมดัลิตี้", - "sttBridgeCta": "กำหนดค่าสะพาน Speech→Text ในการตั้งค่า Modality Bridge" + "sttBridgeCta": "กำหนดค่าสะพาน Speech→Text ในการตั้งค่า Modality Bridge", + "existingConnection": "การเชื่อมต่อที่มีอยู่", + "openrouterSttDescription": "โมเดลแปลงเสียงเป็นข้อความของ OpenRouter ใช้การเชื่อมต่อ OpenRouter ที่คุณกำหนดไว้ ไม่มีการรับรองความถูกต้องแยกต่างหากที่จำเป็น." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "วางลงใน:", "copilotReloadInstruction": "จากนั้นโหลด VS Code ใหม่ และตั้งค่าคีย์ API ในช่องป้อนข้อมูล", "wireApiChatCompletions": "เสร็จสิ้นการแชท (/แชท/เสร็จสิ้น)", - "wireApiResponses": "API การตอบกลับ (/การตอบกลับ)" + "wireApiResponses": "API การตอบกลับ (/การตอบกลับ)", + "cliproxyapiActionFailed": "การดำเนินการล้มเหลว", + "cliproxyapiActionSucceeded": "ดำเนินการสำเร็จ", + "cliproxyapiCheckUpdates": "ตรวจสอบการอัปเดต", + "cliproxyapiDescription": "การสำรองพร็อกซีอัพสตรีม (OAuth ที่ใช้ Go)", + "cliproxyapiHealth": "สุขภาพ", + "cliproxyapiHealthy": "สุขภาพดี", + "cliproxyapiInstall": "ติดตั้ง", + "cliproxyapiNotInstalledValue": "ยังไม่ได้ติดตั้ง", + "cliproxyapiPort": "พอร์ต", + "cliproxyapiRequestFailed": "คำขอไม่สำเร็จ", + "cliproxyapiRestart": "เริ่มต้นใหม่", + "cliproxyapiStart": "เริ่มต้น", + "cliproxyapiStatusError": "ข้อผิดพลาด", + "cliproxyapiStatusInstalled": "ติดตั้งแล้ว", + "cliproxyapiStatusNotInstalled": "ยังไม่ได้ติดตั้ง", + "cliproxyapiStatusRunning": "กำลังทำงาน", + "cliproxyapiStatusStopped": "หยุดแล้ว", + "cliproxyapiStop": "หยุด", + "cliproxyapiUnhealthy": "ไม่ดีต่อสุขภาพ", + "cliproxyapiUnknown": "ไม่ทราบ", + "cliproxyapiUpdate": "อัปเดต", + "cliproxyapiUpdateAvailable": "มีการอัปเดต: v{current} → v{latest}", + "cliproxyapiVersion": "เวอร์ชัน" }, "combos": { "title": "คอมโบ", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "เฉพาะเมื่อโควต้าหมดเท่านั้น", + "fallbackOnlyOnQuotaExhaustionShort": "การสำรองข้อมูลเฉพาะโควต้า", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "แพ็คโหมดและการกำหนดน้ำหนักจะอยู่ที่นี่ ส่วนสถานะรันไทม์ของเบรกเกอร์จะอยู่ที่หน้าสถานะการทำงาน (Health)", "emailVisibilityHint": "อีเมลบัญชีที่นี่จะเป็นไปตามการตั้งค่าความเป็นส่วนตัวส่วนกลาง", "emailVisibilityTooltip": "ใช้ไอคอนรูปตาเพื่อแสดงหรือซ่อนอีเมลบัญชีทั่วทั้งระบบในคอมโบ ผู้ให้บริการ และหน้าจอโควตา", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "ทีละขั้นตอน (ผู้ให้บริการ → โมเดล)", + "builderModeGlobal": "การค้นหาโมเดลทั่วโลก (การรวมแบบกำหนดเอง)", + "builderGlobalSearchPlaceholder": "ค้นหารูปแบบจากผู้ให้บริการทั้งหมด (เช่น opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "เพิ่มทั้งหมด", + "builderGlobalShortcuts": "ทางลัด:", + "builderGlobalNoResults": "ไม่พบโมเดลสำหรับ \"{query}\".", + "builderGlobalProviderLabel": "ผู้ให้บริการ:", + "builderGlobalAccountCount": "{count, plural, one {# บัญชี} other {# บัญชี}}", + "builderGlobalAdded": "เพิ่มแล้ว", + "builderGlobalAdd": "เพิ่ม", "manualModel": "โมเดลแบบป้อนเอง", "manualModelInvalid": "ป้อนโมเดลในรูปแบบ provider/model", "manualModelUnknownProvider": "ไม่รู้จักคำนำหน้าผู้ให้บริการ", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "ความพร้อมใช้งานของเซสชัน", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "ปิดการยึดติดเซสชัน", "kimiPresetTitle": "ค่าที่ตั้งไว้ล่วงหน้า Kimi Coding", "kimiPresetDescription": "Kimi K3 เป็นโมเดลหลัก (Moonshot API) พร้อมการสลับสายอัตโนมัติไปยังการเชื่อมต่อ Kimi Code ของคุณ (kimi-coding, kimi-web) เมื่อกำหนดค่าไว้", - "kimiPresetCta": "เพิ่มค่าที่ตั้งไว้ล่วงหน้า" + "kimiPresetCta": "เพิ่มค่าที่ตั้งไว้ล่วงหน้า", + "intelligentComboCount": "{count, plural, one {# คอมโบอัจฉริยะ} other {# คอมโบอัจฉริยะ}}", + "providersInScope": "{count, plural, one {ผู้ให้บริการ # ในขอบเขต} other {ผู้ให้บริการ # รายในขอบเขต}}", + "savingModePack": "กำลังบันทึก {pack}…", + "errorTitle": "ไม่สามารถโหลดคอมโบได้", + "errorDescription": "ไม่สามารถโหลดข้อมูลคอมโบได้ในขณะนี้ กรุณาตรวจสอบการเชื่อมต่อของคุณและลองอีกครั้ง.", + "errorId": "รหัสข้อผิดพลาด: {id}", + "errorRetry": "ลองอีกครั้ง", + "comboLabel": "คอมโบ" }, "costs": { "title": "ค่าใช้จ่าย", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "ชื่อผู้ใช้", "obsidianPassword": "รหัสผ่าน", - "obsidianTailscaleHint": "ใช้ Tailscale IP ของคุณแทน localhost หากเชื่อมต่อจากมือถือ อุปกรณ์ทั้งสองเครื่องต้องอยู่ในเครือข่าย Tailscale เดียวกัน" + "obsidianTailscaleHint": "ใช้ Tailscale IP ของคุณแทน localhost หากเชื่อมต่อจากมือถือ อุปกรณ์ทั้งสองเครื่องต้องอยู่ในเครือข่าย Tailscale เดียวกัน", + "cloudSyncNotConfigured": "การซิงค์คลาวด์ยังไม่ได้รับการกำหนดค่าในอินสแตนซ์นี้.", + "notionConnect": "เชื่อมต่อ", + "notionConnectFailed": "ไม่สามารถเชื่อมต่อได้", + "notionConnected": "เชื่อมต่อแล้ว", + "notionConnectionFailed": "การเชื่อมต่อล้มเหลว", + "notionDescription": "ค้นหา อ่าน สอบถาม และเขียนไปยัง Notion ผ่านโมเดล AI ที่กำหนดเส้นทาง", + "notionDisconnect": "ตัดการเชื่อมต่อ", + "notionDisconnectFailed": "ไม่สามารถตัดการเชื่อมต่อได้", + "notionEnterToken": "กรุณาใส่โทเค็นการรวม Notion", + "notionIntegrationHelp": "สร้างการรวมภายในที่", + "notionIntegrationToken": "โทเค็นการรวมภายใน Notion", + "notionNotConnected": "ไม่ได้เชื่อมต่อ", + "notionTokenConfigured": "กำหนดค่าโทเค็นแล้ว เครื่องมือ Notion สามารถใช้งานได้ผ่าน MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "ผู้ให้บริการ / โมเดล", "noRemoteProviders": "ไม่มีผู้ให้บริการที่กำหนดค่าคีย์ API ไว้", "selectProviderModel": "เลือกโมเดล", + "customBaseUrlLabel": "URL ฐานที่กำหนดเอง (ไม่บังคับ)", + "customModelIdLabel": "รหัสโมเดลที่กำหนดเอง (ไม่บังคับ)", + "customEndpointHelp": "ใช้จุดสิ้นสุด /embeddings ที่เข้ากันได้กับ OpenAI ได้ จุดสิ้นสุดในท้องถิ่นได้รับอนุญาต; เป้าหมายข้อมูลเมตาของคลาวด์ถูกบล็อก.", + "customEndpointSave": "ใช้จุดสิ้นสุดที่กำหนดเอง", + "customEndpointInvalid": "กรุณาใส่ URL ฐาน HTTP(S) ที่ถูกต้องและ ID โมเดล หรือปล่อยให้ทั้งสองช่องว่าง.", + "customEndpointSaveFailed": "ไม่สามารถบันทึกจุดสิ้นสุดการฝังแบบกำหนดเองได้。", "staticEnabledLabel": "เปิดใช้งาน Static Potion", "staticEnabledDesc": "ดาวน์โหลดและใช้โมเดล potion-base-8M ภายในเครื่อง", "transformersEnabledLabel": "เปิดใช้งาน Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "กำลังล้างข้อมูล...", "cleanNow": "ล้างข้อมูลทันที", "cleanupSuccess": "ลบ {count} พอยต์แล้ว", - "cleanupFailed": "การล้างข้อมูลล้มเหลว" + "cleanupFailed": "การล้างข้อมูลล้มเหลว", + "hostLabel": "โฮสต์", + "collectionLabel": "การรวบรวม" }, "rerank": { "enableLabel": "เปิดใช้งาน Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "แผนภาพทางเลือก OmniRoute 3 ระดับ", "apiKeyMgmt": "การจัดการคีย์ API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "ตั้งค่าผู้ให้บริการฟรี", + "description": "สามารถเปิดใช้งานผู้ให้บริการที่เลือกได้โดยไม่ต้องลงทะเบียน หากต้องการโปรดตรวจสอบประกาศและเว็บไซต์ของแต่ละผู้ให้บริการก่อนดำเนินการต่อ; ความพร้อมใช้งานและขีดจำกัดอัตราจะถูกควบคุมโดยบุคคลที่สาม.", + "loading": "กำลังโหลดผู้ให้บริการฟรี...", + "loadFailed": "ไม่สามารถโหลดผู้ให้บริการฟรีได้。", + "alreadyConfigured": "ผู้ให้บริการฟรีที่มีสิทธิ์ทั้งหมดได้รับการกำหนดค่าแล้ว.", + "reviewProviderSite": "ตรวจสอบเว็บไซต์ผู้ให้บริการและข้อกำหนด", + "confirmation": "ฉันได้ตรวจสอบผู้ให้บริการภายนอกเหล่านี้และต้องการให้ OmniRoute สร้างการเชื่อมต่อที่เลือกไว้", + "setupSelected": "ตั้งค่าผู้ให้บริการที่เลือก", + "settingUp": "กำลังตั้งค่า...", + "setupFailed": "ไม่สามารถตั้งค่าผู้ให้บริการที่เลือกได้ ไม่มีการเปลี่ยนแปลงสิ่งที่มีอยู่", + "retryFailed": "ลองใหม่ผู้ให้บริการที่ล้มเหลว", + "orUseApiKey": "หรือเชื่อมต่อด้วย API key", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "สร้างแล้ว", + "skipped": "กำหนดค่าเรียบร้อยแล้ว", + "failed": "ล้มเหลว" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "จำเป็น URL ฐาน API ของผู้ให้บริการ", "iconUrlLabel": "URL ไอคอน", "iconUrlHint": "ไม่บังคับ URL รูปภาพที่จะแสดงเป็นไอคอนของผู้ให้บริการรายนี้", + "iconUrlInvalid": "URL ไอคอนไม่ถูกต้อง ใช้ http(s):// หรือ data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-ผลิตภัณฑ์", "openaiPrefixPlaceholder": "oc-ผลิตภัณฑ์", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} เข้ากันได้ (ผลิตภัณฑ์)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "เซสชันปัจจุบันอยู่แล้ว", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "ใช้การรับรองความถูกต้อง", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "วาง API key…", "zedSaving": "กำลังบันทึก…", "zedImportAction": "นำเข้า", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "เปิดใช้งานการต่ออายุเซสชันเคอร์เซอร์อัตโนมัติ", + "cursorAgentNudgeBody": "ติดตั้ง cursor-agent สำหรับการต่ออายุเซสชันอัตโนมัติ — หากไม่มีมัน การเชื่อมต่อ Cursor จะต้องเชื่อมต่อใหม่ด้วยตนเองเป็นระยะๆ ประมาณทุก 24 ชั่วโมง.", + "cursorAgentNudgeDismiss": "ปฏิเสธ", "zedManualImportFailed": "การนำเข้าด้วยตนเองล้มเหลว", "zedManualImportSuccess": "นำเข้าโทเค็น {provider} จาก Zed แล้ว", "grokImportTitle": "นำเข้า Grok Build Auth", @@ -5878,7 +6066,6 @@ "friendliai": "ระดับการใช้งานฟรีสำหรับการอนุมานแบบ Serverless — ไม่ต้องใช้บัตรเครดิต", "gemini": "ฟรีตลอดชีพ: 1,500 คำขอ/วันสำหรับ Gemini 2.5 Flash — ไม่ต้องใช้บัตรเครดิต รับคีย์ได้ที่ aistudio.google.com", "gigachat": "เชื่อมต่อ GigaChat (Sber) ด้วยคีย์ API", - "github-models": "สร้าง GitHub PAT ที่มีขอบเขต 'models: read' ที่ github.com/settings/tokens", "gitlab": "โทเค็นการเข้าถึงส่วนตัวของ GitLab สำหรับ Code Suggestions API สาธารณะ กำหนดค่า URL ฐานแบบโฮสต์เองเมื่อไม่ได้ใช้งาน gitlab.com", "gitlawb-gmi": "รับคีย์ API ของคุณจากแดชบอร์ด Gitlawb Opengateway", "gitlawb": "รับคีย์ API ของคุณจากแดชบอร์ด Gitlawb Opengateway", @@ -6017,7 +6204,8 @@ "kimi-coding": "เชื่อมต่อ Kimi Coding ด้วยโฟลว์ OAuth ที่มีอยู่", "kiro": "ระดับฟรี: 50 เครดิต/เดือน (~25K–100K โทเค็น) ⚠️ ToS ของ Kiro ห้ามใช้พร็อกซี/harness ของบุคคลที่สาม", "codex": "เชื่อมต่อ OpenAI Codex ด้วยโฟลว์ OAuth ที่มีอยู่", - "qwen": "เชื่อมต่อ Qwen Code ด้วยโฟลว์ OAuth ที่มีอยู่" + "qwen": "เชื่อมต่อ Qwen Code ด้วยโฟลว์ OAuth ที่มีอยู่", + "github-models": "สร้าง GitHub PAT ที่มีขอบเขต 'models: read' ที่ github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} ยอมรับ ID โมเดลดั้งเดิมของผู้ให้บริการ นำเข้าจาก /models หรือเพิ่ม ID ที่กำหนดเองสำหรับการกำหนดเส้นทาง", "bedrockModelsDescription": "โมเดล Amazon Bedrock มีการกำหนดขอบเขตตามภูมิภาค AWS นำเข้าจาก /models หรือเพิ่มรหัสรุ่น Bedrock ที่เปิดใช้งานในภูมิภาคที่เลือก", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "เมื่อการเชื่อมต่อที่กำหนดทั้งหมดหมดลง (โควตา, เครดิต, หรือหมดอายุ) ให้ใช้ชั้นที่ไม่มีคีย์ของผู้ให้บริการนี้ชั่วคราว ปิดเพื่อข้ามผู้ให้บริการนี้แทนที่จะส่งคำขอแบบไม่ระบุชื่อ — แนะนำเมื่อชั้นที่ไม่มีคีย์ปฏิเสธคำขอเหล่านั้น (401).", "anonymousFallbackEnabled": "เปิดใช้งานการสำรองข้อมูลแบบไม่ระบุชื่อสำหรับ {provider}", "anonymousFallbackDisabled": "ปิดการใช้งานการสำรองข้อมูลแบบไม่ระบุชื่อสำหรับ {provider} — การเชื่อมต่อที่หมดจะข้ามผู้ให้บริการนี้", - "anonymousFallbackUpdateFailed": "ไม่สามารถอัปเดตการตั้งค่าการสำรองข้อมูลที่ไม่ระบุชื่อได้" + "anonymousFallbackUpdateFailed": "ไม่สามารถอัปเดตการตั้งค่าการสำรองข้อมูลที่ไม่ระบุชื่อได้", + "batchDeleteFailed": "การลบชุดล้มเหลว", + "batchDeleteNetworkError": "เกิดข้อผิดพลาดเครือข่ายระหว่างการลบชุด", + "batchUpdateFailed": "การอัปเดตแบบกลุ่มล้มเหลว", + "batchUpdateNetworkError": "เกิดข้อผิดพลาดเครือข่ายระหว่างการอัปเดตแบบกลุ่ม", + "categoryAudio": "เสียง", + "categoryCloudAgent": "คลาวด์เอเจนต์", + "categoryIde": "IDE", + "categoryLocal": "ท้องถิ่น", + "categorySearch": "ค้นหา", + "categoryWebCookie": "เว็บคุกกี้", + "claudeExtraUsageBlockingDisabled": "การบล็อกการใช้งานพิเศษของ Claude ถูกปิดใช้งาน (อนุญาตให้ใช้งานพิเศษได้)", + "claudeExtraUsageBlockingEnabled": "การบล็อกการใช้งานเพิ่มเติมของ Claude เปิดใช้งานแล้ว (การใช้งานเพิ่มเติมจะถูกบล็อก)", + "claudeRoutingPreferenceDisabled": "โมเดล Claude ที่ไม่มีคำนำหน้าไม่ชอบ Claude Code อีกต่อไป", + "claudeRoutingPreferenceEnabled": "โมเดล Claude ที่ไม่มีคำนำหน้าตอนนี้ชอบ Claude Code", + "clearMediaFilter": "ล้าง", + "cliproxyRoutingDisabled": "คำขอใช้ OmniRoute (โดยตรง) แบบเนทีฟแล้ว", + "cliproxyRoutingEnabled": "คำขอจะถูกส่งผ่าน CLIProxyAPI (การจำลองที่ลึกขึ้น)", + "codexLimitPolicyUpdated": "นโยบายขีดจำกัด Codex ได้รับการปรับปรุงแล้ว", + "codexServiceModeUpdated": "โหมดบริการ Codex ได้รับการปรับปรุงแล้ว", + "codexServiceTierActive": "ระดับบริการ Codex {tier} กำลังใช้งานอยู่", + "codexTierFastLabel": "เร็ว", + "codexTierFlexLabel": "ฟเล็กซ์", + "commandCodeApplyFailed": "ไม่สามารถใช้รหัสคำสั่ง auth ได้", + "commandCodeApplyingApproval": "เบราว์เซอร์ได้รับการอนุมัติ กำลังนำไปใช้…", + "commandCodeApplyingKey": "กำลังใช้คีย์ที่ได้รับการอนุมัติจากเบราว์เซอร์…", + "commandCodeApprovalInstructions": "เปิด URL การตรวจสอบสิทธิ์ อนุมัติการเข้าถึง จากนั้นวางคีย์/JSON/URL ที่ส่งกลับด้านล่าง…", + "commandCodeAuthExpired": "รหัสคำสั่งหมดอายุ", + "commandCodeConnected": "คำสั่งรหัสเชื่อมต่อแล้ว", + "commandCodeConnectionAdded": "เพิ่มการเชื่อมต่อรหัสคำสั่ง", + "commandCodeLinkExpired": "ลิงก์รหัสคำสั่งหมดอายุ", + "commandCodeOpeningStudio": "กำลังเปิด Command Code Studio…", + "commandCodePopupBlocked": "ป๊อปอัพถูกบล็อก กรุณาอนุญาตป๊อปอัพและลองใช้ Command Code Connect อีกครั้ง.", + "commandCodeStartFailed": "ไม่สามารถเริ่มคำสั่ง Code auth ได้", + "connectionDeleted": "การเชื่อมต่อถูกลบแล้ว", + "connectionFallback": "การเชื่อมต่อ", + "coolingConnectionsDescription": "การเชื่อมต่อเหล่านี้ส่งคืน 429 (อัตราการจำกัด) ในคำขอครั้งสุดท้ายของพวกเขา OmniRoute จะข้ามพวกเขาจนกว่าจะหมดเวลา — ไม่ต้องปิดการใช้งานด้วยตนเอง", + "coolingConnectionsTitle": "กำลังทำความเย็นอยู่ ({count})", + "failedDeleteAlias": "ไม่สามารถลบชื่อเล่นได้", + "failedDeleteConnection": "ไม่สามารถลบการเชื่อมต่อได้", + "failedDistributeProxies": "ไม่สามารถแจกจ่ายพร็อกซี่ได้。", + "failedSaveModelEndpointSettings": "ไม่สามารถบันทึกการตั้งค่า endpoint ของโมเดลได้", + "failedUpdateClaudeExtraUsagePolicy": "ไม่สามารถอัปเดตนโยบายการใช้งานพิเศษของ Claude ได้", + "failedUpdateClaudeRoutingPreference": "ไม่สามารถอัปเดตการตั้งค่าการจัดเส้นทางของ Claude Code ได้", + "failedUpdateCliproxyRouting": "ไม่สามารถอัปเดตการกำหนดเส้นทาง CLIProxyAPI ได้", + "failedUpdateCodexLimitPolicy": "ไม่สามารถอัปเดตนโยบายขีดจำกัด Codex ได้", + "failedUpdateCodexServiceMode": "ไม่สามารถอัปเดตโหมดบริการ Codex ได้", + "filterByMedia": "สื่อ", + "freeBadge": "ฟรี", + "kimiCodeApiKeyLabel": "คีย์ API ของ Kimi Code", + "modelTestFailed": "การทดสอบโมเดลล้มเหลว", + "modelTestNetworkError": "การทดสอบโมเดลข้อผิดพลาดเครือข่าย", + "networkError": "ข้อผิดพลาดของเครือข่าย", + "networkErrorDeletingAlias": "เกิดข้อผิดพลาดเครือข่ายในการลบชื่อเล่น", + "networkErrorSettingAlias": "เกิดข้อผิดพลาดเครือข่ายในการตั้งชื่อเล่น", + "noProvidersMatch": "ไม่มีผู้ให้บริการที่ตรงกับการค้นหาของคุณ.", + "noSavedProxies": "ไม่พบพร็อกซีที่บันทึกไว้ เพิ่มพร็อกซีในการตั้งค่า → พร็อกซี ก่อน.", + "pageLoadErrorDescription": "ไม่สามารถโหลดข้อมูลผู้ให้บริการได้ในขณะนี้ กรุณาตรวจสอบการเชื่อมต่อของคุณและลองอีกครั้ง.", + "pageLoadErrorId": "รหัสข้อผิดพลาด: {id}", + "pageLoadErrorRetry": "ลองอีกครั้ง", + "pageLoadErrorTitle": "ไม่สามารถโหลดผู้ให้บริการได้", + "playgroundTitle": "สนามเด็กเล่น", + "providerDetailConnectionFlexActive": "ระดับบริการ Codex flex เปิดใช้งานสำหรับการเชื่อมต่อนี้", + "providerDetailConnectionPriorityActive": "ระดับบริการลำดับความสำคัญของ Codex เปิดใช้งานสำหรับการเชื่อมต่อนี้", + "providerDetailGlobalFlexActive": "ระดับบริการ Global Codex flex เปิดใช้งานอยู่", + "providerDetailGlobalPriorityActive": "ระดับบริการลำดับความสำคัญของ Global Codex เปิดใช้งานอยู่", + "proxiesDistributed": "การมอบหมายพร็อกซี {assigned} แบบกระจายไปยังการเชื่อมต่อ {tagLabel}{total} รายการ", + "rerankEndpoint": "จัดอันดับใหม่", + "savedModelEndpointSettings": "การตั้งค่า endpoint ของโมเดลที่บันทึกไว้", + "searchByModelAria": "ค้นหาตามรุ่น", + "selectSupportedEndpoint": "เลือกจุดสิ้นสุดที่รองรับอย่างน้อยหนึ่งจุด", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "การตั้งค่า", @@ -6460,7 +6719,24 @@ "loadFailed": "โหลดรายการสมัครสมาชิกไม่สำเร็จ", "toggleFailed": "ไม่สามารถสลับสวิตช์ได้", "refreshFailed": "รีเฟรชไม่สำเร็จ", - "deleteFailed": "ลบไม่สำเร็จ" + "deleteFailed": "ลบไม่สำเร็จ", + "add": "เพิ่ม", + "cancel": "ยกเลิก", + "configure": "กำหนดค่า", + "copyEndpoint": "คัดลอก Endpoint", + "coreEndpointHint": "คำแนะนำจุดสิ้นสุดหลัก", + "coreNodesHint": "เคล็ดลับเกี่ยวกับโหนดหลัก", + "create": "สร้าง", + "deleteConfirm": "ยืนยันการลบ", + "empty": "ว่างเปล่า", + "globalModeDescription": "คำอธิบายโหมดทั่วโลก", + "localCoreHint": "คำแนะนำ Core ท้องถิ่น", + "nodeSummary": "สรุปโหนด", + "providerRequired": "ต้องระบุผู้ให้บริการ", + "providerRouting": "การจัดเส้นทางผู้ให้บริการ", + "refresh": "รีเฟรช", + "refreshInterval": "ช่วงเวลาการรีเฟรช", + "ruleModeDescription": "คำอธิบายโหมดกฎ" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "รันการทำงานสำรองแบบแปลงรูปภาพเป็นข้อความ (vision-to-text) โดยอัตโนมัติ ก่อนที่จะกำหนดเส้นทางคำขอรูปภาพไปยังโมเดลแบบข้อความเท่านั้น", "visionBridgeEnabledLabel": "เปิดใช้งานแล้ว", "visionBridgeEnabledDesc": "สลับการใช้งานบริดจ์ก่อนการเรียกใช้ (pre-call bridge) ที่จะแทนที่ส่วนของรูปภาพด้วยข้อความที่แยกออกมา", + "visionBridgeRerouteTextOnlyLabel": "เปลี่ยนเส้นทางโมเดลเฉพาะข้อความ", + "visionBridgeRerouteTextOnlyDesc": "ส่งคำขอทั้งหมด รวมถึงภาพ ไปยังโมเดลบริดจ์เมื่อโมเดลที่เลือกไม่มีการป้อนภาพ", "visionBridgeModel": "โมเดลสะพาน", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "สามารถใช้ ID โมเดล OmniRoute ใดก็ได้ที่รองรับการมองเห็น (vision) ที่นี่", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "คีย์ API ไม่มีขอบเขต manage", "BYPASS_PREFIX_NOT_ALLOWED": "คำนำหน้าอย่างน้อยหนึ่งรายการกำหนดเป้าหมายไปยังเส้นทางที่รองรับการ Spawn และไม่สามารถข้ามได้", "GENERIC": "อัปเดตการตั้งค่า authz ไม่สำเร็จ" - } + }, + "remove": "ลบ" }, "resilienceBaseCooldownLabel": "คูลดาวน์พื้นฐาน", "scopeLabel": "ขอบเขต", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "กำลังทดสอบเสียง…", "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} คลิป(ส์) ถูกถอดความโดย {model}", "modalityBridgeAudioTestNoop": "Audio Bridge ไม่ได้เปิดใช้งาน (เป้าหมายอาจรองรับเสียง, ไม่มีผู้ให้บริการ STT ที่เชื่อมต่ออยู่, หรือสะพานถูกปิดใช้งาน)", - "modalityBridgeAudioTestError": "การทดสอบเสียงล้มเหลว: {message}" + "modalityBridgeAudioTestError": "การทดสอบเสียงล้มเหลว: {message}", + "modelRoutingDescriptionPlaceholder": "จัดเส้นทางโมเดล Opus ไปยังคอมโบ Frontier", + "cliproxyapiFallbackCodes": "รหัสสำรอง Cliproxyapi", + "cliproxyapiFallbackDescription": "คำอธิบายการสำรองของ Cliproxyapi", + "cliproxyapiHealthLabel": "คลิปพร็อกซีเอพีไอ สถานะสุขภาพ", + "cliproxyapiImportFailed": "Cliproxyapi นำเข้าล้มเหลว", + "cliproxyapiImportResult": "ผลการนำเข้า Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi URL ไม่ถูกต้อง", + "cliproxyapiLifecycleNoticeAfter": "ประกาศเกี่ยวกับวงจรชีวิตของ Cliproxyapi หลังจาก", + "cliproxyapiLifecycleNoticeBefore": "ประกาศเกี่ยวกับวงจรชีวิตของ Cliproxyapi ก่อน", + "cliproxyapiLifecycleNoticeLink": "ลิงก์ประกาศวงจรชีวิต Cliproxyapi", + "cliproxyapiPortLabel": "ป้ายพอร์ต Cliproxyapi", + "cliproxyapiStatusLabel": "สถานะ Cliproxyapi", + "cliproxyapiVersionLabel": "ป้ายเวอร์ชัน Cliproxyapi", + "collection": "การรวบรวม", + "errorPage": { + "description": "ไม่สามารถโหลดการตั้งค่าได้ในขณะนี้ กรุณาลองอีกครั้งในอีกไม่กี่วินาที", + "errorId": "รหัสข้อผิดพลาด: {id}", + "retry": "ลองอีกครั้ง", + "title": "ไม่สามารถโหลดการตั้งค่าได้" + }, + "host": "โฮสต์", + "notInstalled": "ยังไม่ได้ติดตั้ง", + "oneproxyActions": "Oneproxy การดำเนินการ", + "oneproxyActive": "Oneproxy เปิดใช้งาน", + "oneproxyAnonymity": "Oneproxy ความเป็นนิรนาม", + "oneproxyCountry": "Oneproxy ประเทศ", + "oneproxyDelete": "ลบ Oneproxy", + "oneproxyEmpty": "Oneproxy ว่างเปล่า", + "oneproxyHost": "Oneproxy โฮสต์", + "oneproxyLatency": "ความหน่วงของ Oneproxy", + "oneproxyProtocol": "Oneproxy โปรโตคอล", + "oneproxyQuality": "คุณภาพ Oneproxy", + "oneproxySyncFailed": "การซิงค์ล้มเหลว: {error}", + "oneproxySyncSuccess": "ซิงค์พร็อกซี่ {total} ตัว ({added} ใหม่, {updated} ที่อัปเดต)", + "proxyDocumentationSocks5DescAfter": "เอกสารประกอบ Proxy Socks5 คำอธิบายหลัง", + "proxyFreePoolAddProxy": "เพิ่มพร็อกซีในพูลพร็อกซีฟรี", + "proxyFreePoolAdding": "การเพิ่มพูลพร็อกซีฟรี", + "proxyFreePoolSelectProxy": "เลือกพร็อกซี่จากพูลที่ไม่มีค่าใช้จ่าย", + "proxyStatusActive": "สถานะพร็อกซีใช้งานอยู่", + "proxyStatusInactive": "สถานะพร็อกซีไม่ทำงาน", + "routingAddEntry": "เพิ่มรายการ", + "settingSaveFailed": "การบันทึกการตั้งค่าไม่สำเร็จ", + "settingSaved": "บันทึกการตั้งค่าแล้ว", + "skillsmpApiKeyHintAfter": ". จำกัดอัตรา: {limit} คำขอ/วัน.", + "skillsmpApiKeyHintBefore": "รับ API key ของคุณจาก", + "syncFailed": "การซิงค์ล้มเหลว", + "unhealthy": "ไม่ดีต่อสุขภาพ", + "oneproxyDescription": "ดึงและหมุนพร็อกซีที่ได้รับการตรวจสอบฟรีจากแพลตฟอร์มชุมชน 1proxy", + "oneproxySyncing": "กำลังซิงค์...", + "oneproxySyncNow": "ซิงค์ตอนนี้", + "oneproxyClearAll": "ล้างทั้งหมด", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "ลบพร็อกซี 1proxy ทั้งหมด?", + "memorySkillsSkillsmpDescription": "เชื่อมต่อกับ SkillsMP เพื่อค้นหาและติดตั้งทักษะจากตลาด.", + "memorySkillsActiveProviderDescription": "เลือกผู้ให้บริการที่หน้า Skills ใช้สำหรับการค้นหาและติดตั้ง", + "memorySkillsSkillsmpProviderTitle": "SkillsMP ตลาดกลาง", + "memorySkillsSkillsmpProviderDescription": "ตลาดที่ได้รับการตรวจสอบสิทธิ์ (ใช้คีย์ API SkillsMP ของคุณ)", + "memorySkillsSkillsshProviderTitle": "ไดเรกทอรี skills.sh", + "memorySkillsSkillsshProviderDescription": "ผู้ให้บริการไดเรกทอรีสาธารณะ (ไม่ต้องใช้ API key)", + "routingCcBridgeCatalogName": "สะพาน CC ที่เข้ากันได้กับ Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "ผู้ให้บริการ Native Claude ที่มีโทเค็นที่ออกโดย OAuth.", + "routingCcBridgeName": "Claude-Code สะพาน", + "routingCcBridgeDescription": "ส่งต่อจุดสิ้นสุดโดยใช้ API keys (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "ผู้ให้บริการที่กำหนดเอง.", + "routingUnknownOpKind": "ประเภท op ที่ไม่รู้จัก: {kind}", + "routingInvalidJson": "JSON ไม่ถูกต้อง: {error}", + "routingConfigMustBeObject": "การตั้งค่าต้องเป็นวัตถุ JSON", + "routingEnabledMustBeBoolean": "`enabled` ต้องเป็น true หรือ false", + "routingPipelineMustBeArray": "`pipeline` ต้องเป็นอาร์เรย์ของ ops", + "routingPipelineTooLong": "Pipeline ไม่สามารถเกิน 50 ops ได้", + "routingOpMissingKind": "Op #{index}: ขาดหรือไม่ถูกต้อง `kind`", + "routingOpUnknownKind": "Op #{index}: ประเภทที่ไม่รู้จัก \"{kind}\"", + "routingJsonEditorHide": "ซ่อนตัวแก้ไข JSON", + "routingJsonEditorImportExport": "นำเข้า / ส่งออก JSON", + "routingJsonEditorLabel": "JSON (แก้ไขและนำไปใช้ หรือวางเพื่อทำการนำเข้า)", + "routingApplyJson": "ใช้ JSON", + "routingTransformsFootnote": "การดำเนินการแปลงทั้งหมดเป็นอิดempotent เมื่อทำซ้ำ การเปลี่ยนแปลงจะมีผลทันทีในคำขอถัดไป", + "cliproxyapiUnknown": "ไม่ทราบ", + "cliproxyapiVersion": "เวอร์ชัน", + "cliproxyapiHealth": "สุขภาพ", + "cliproxyapiPort": "พอร์ต", + "qdrantHost": "โฮสต์", + "qdrantCollection": "การรวบรวม" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "ค่าเริ่มต้น", + "off": "ปิด", + "lite": "ไลท์", + "standard": "มาตรฐาน", + "aggressive": "ก้าวร้าว", + "ultra": "อัลตร้า", + "responsesToolOutput": "ผลลัพธ์ของเครื่องมือ Responses" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "ทำงานเป็นลำดับสุดท้ายในสแตก (หลังจาก RTK/Caveman คลีนข้อความ และ OmniGlyph แปลงส่วนที่เหลือเป็นรูปภาพ) และยังทำงานแบบสแตนด์อโลนผ่านโหมด omniglyph นี่เป็นเวอร์ชันพรีวิวและจะยังคงปิดใช้งานไว้เป็นค่าเริ่มต้นจนกว่าการตรวจสอบความถูกต้องแบบครบวงจร (end-to-end) จะเสร็จสิ้น", "saved": "บันทึกแล้ว", "saveFailed": "ไม่สามารถบันทึกได้", - "enableAria": "เปิดใช้งานเอนจิน OmniGlyph" + "enableAria": "เปิดใช้งานเอนจิน OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "บริการแบบฝัง", @@ -9127,7 +9500,49 @@ "unableToLoad": "ไม่สามารถโหลดเมตริกของระบบได้", "product": "สินค้า", "resources": "ทรัพยากร", - "company": "บริษัท" + "company": "บริษัท", + "tokenHealthTooltips": { + "allHealthy": "โทเค็นทั้งหมดอยู่ในสภาพดี", + "needsAttention": "บางโทเค็นต้องการความสนใจ", + "refreshFailures": "ตรวจพบความล้มเหลวในการรีเฟรชโทเค็น", + "unknown": "สถานะสุขภาพไม่ทราบ" + }, + "systemMonitor": { + "metricsAriaLabel": "เมตริกระบบ", + "memory": "หน่วยความจำ", + "memoryShort": "หน่วยความจำ", + "uptime": "เวลาออนไลน์", + "ariaLabel": "การตรวจสอบระบบ", + "title": "ตัวติดตามระบบ", + "version": "เวอร์ชัน", + "connections": "การเชื่อมต่อ", + "circuitBreakers": "เบรกเกอร์วงจร", + "open": "{count} เปิดอยู่", + "memoryUsage": "การใช้งานหน่วยความจำ" + }, + "never": "ไม่เคย", + "justNow": "เพิ่งตอนนี้", + "minutesAgo": "เมื่อ {count} นาทีที่แล้ว", + "hoursAgo": "เมื่อ {count} ชั่วโมงที่แล้ว", + "tokens": "โทเค็น", + "costs": "ค่าใช้จ่าย", + "autoRefresh": "รีเฟรชอัตโนมัติ ({seconds}s)", + "toggleAutoRefresh": "เปิด/ปิดการรีเฟรชอัตโนมัติ", + "activeRequests": "คำขอที่ใช้งานอยู่", + "totalRequests": "จำนวนคำขอทั้งหมด", + "totalInputTokens": "จำนวนโทเค็นที่ป้อนทั้งหมด", + "model": "โมเดล", + "provider": "ผู้ให้บริการ", + "requests": "คำขอ", + "lastUsed": "ใช้งานล่าสุด", + "inputTokens": "โทเค็นนำเข้า", + "totalTokens": "จำนวนโทเค็นทั้งหมด", + "inputCost": "ต้นทุนการนำเข้า", + "outputCost": "ต้นทุนการส่งออก", + "noUsageData": "ยังไม่มีการบันทึกการใช้งาน โปรดทำการร้องขอบางอย่างเพื่อดูข้อมูลที่นี่", + "account": "บัญชี", + "accountLabel": "บัญชี {id}", + "noAccountUsage": "ยังไม่มีการบันทึกการใช้งานเฉพาะบัญชี โปรดทำการร้องขอโดยใช้บัญชี OAuth เพื่อดูข้อมูลที่นี่" }, "auth": { "welcome": "ยินดีต้อนรับ", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "รีเซ็ตผ่านข้อมูลแอป", + "resetViaAppDataDescription": "ลบไฟล์การตั้งค่าจากไดเรกทอรีข้อมูลแอปเพื่อรีเซ็ตรหัสผ่านของคุณ:", + "quitDesktopApp": "ออกจากแอปเดสก์ท็อป OmniRoute อย่างสมบูรณ์", + "navigateToAppDataDirectory": "ไปที่ไดเรกทอรีข้อมูลแอป:", + "checkSystemAppDataFolder": "(ตรวจสอบโฟลเดอร์ข้อมูลแอปของระบบของคุณ)", + "relaunchDesktopFreshSetup": "เริ่มต้นแอปเดสก์ท็อป OmniRoute ใหม่ — จะเริ่มการตั้งค่าใหม่", + "alternativeSetPasswordTitle": "ทางเลือก: ตั้งรหัสผ่านใหม่", + "alternativeSetPasswordDescription": "ตั้งรหัสผ่านเริ่มต้นใหม่ผ่านไฟล์สภาพแวดล้อมของเซิร์ฟเวอร์:", + "openServerEnvFilePrefix": "เปิด", + "relaunchDesktopApp": "เปิดแอปเดสก์ท็อป OmniRoute ใหม่อีกครั้ง", + "codexLinkInvalidOrExpired": "ลิงก์นี้ไม่ถูกต้องหรือหมดอายุแล้ว。", + "codexValidationServerError": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์เพื่อตรวจสอบลิงก์นี้ได้.", + "codexSaveConnectionError": "ไม่สามารถบันทึกการเชื่อมต่อได้ ลิงก์อาจหมดอายุแล้ว", + "codexDeviceLoginDisabled": "การเข้าสู่ระบบด้วยรหัสอุปกรณ์ถูกปิดใช้งานสำหรับบัญชี OpenAI นี้ เปิดใช้งานในการตั้งค่าความปลอดภัยของ ChatGPT (หรือติดต่อผู้ดูแลระบบของคุณ)", + "codexAuthorizationTimedOut": "การอนุญาตหมดเวลา คลิก เริ่มใหม่ เพื่อลองอีกครั้ง.", + "authenticationCancelled": "การตรวจสอบสิทธิ์ถูกยกเลิกแล้ว.", + "unexpectedAuthenticationError": "เกิดข้อผิดพลาดที่ไม่คาดคิดระหว่างการตรวจสอบสิทธิ์ กรุณาลองอีกครั้ง.", + "connectOpenAiCodexTitle": "เชื่อมต่อ OpenAI Codex", + "codexConnectDescription": "อนุญาตให้บัญชี ChatGPT เพื่อเสร็จสิ้นการตั้งค่าการเชื่อมต่อนี้。", + "validatingCodexLink": "กำลังตรวจสอบลิงก์…", + "codexGenerateCodeDescription": "คลิกด้านล่างเพื่อสร้างรหัสใช้ครั้งเดียว จากนั้นลงชื่อเข้าใช้ OpenAI.", + "startCodexFlow": "เริ่มต้น", + "requestingOpenAiCode": "กำลังขอรหัสจาก OpenAI…", + "codexVerificationInstructions": "1. เปิดหน้าการตรวจสอบ OpenAI และ 2. ป้อนรหัสนี้ หน้านี้จะอัปเดตโดยอัตโนมัติเมื่อคุณอนุญาต.", + "yourCode": "โค้ดของคุณ", + "openVerificationPage": "เปิดหน้าการตรวจสอบ", + "copyUrlShort": "คัดลอก URL", + "savingConnection": "กำลังบันทึกการเชื่อมต่อ…", + "codexConnected": "เชื่อมต่อแล้ว!", + "codexConnectionRegistered": "บัญชี Codex ได้ลงทะเบียนแล้ว คุณสามารถปิดแท็บนี้ได้.", + "tryAgain": "ลองอีกครั้ง", + "traeAuthorizationSuccess": "การอนุญาต Trae ✓", + "traeAuthorizationFailed": "การอนุญาต Trae ล้มเหลว", + "closeAuthorizationWindow": "คุณสามารถปิดหน้าต่างนี้ได้แล้ว", + "returnToDashboard": "กลับไปที่แดชบอร์ด.", + "resetViaAppData": "รีเซ็ตผ่านข้อมูลแอป", + "deleteSettingsToReset": "ลบไฟล์การตั้งค่าจากไดเรกทอรีข้อมูลแอปเพื่อรีเซ็ตรหัสผ่านของคุณ:", + "quitAppCompletely": "ออกจากแอปเดสก์ท็อป OmniRoute อย่างสมบูรณ์", + "navigateToAppData": "ไปที่ไดเรกทอรีข้อมูลแอป", + "checkAppDataFolder": "ตรวจสอบโฟลเดอร์ข้อมูลแอปของระบบของคุณ", + "deleteSettingsJson": "ลบ", + "relaunchAppFresh": "เริ่มต้นแอปเดสก์ท็อป OmniRoute ใหม่ — จะเริ่มการตั้งค่าใหม่", + "alternativeSetPassword": "ทางเลือก: ตั้งรหัสผ่านใหม่", + "setNewPasswordViaEnv": "ตั้งรหัสผ่านเริ่มต้นใหม่ผ่านไฟล์สภาพแวดล้อมของเซิร์ฟเวอร์:", + "openServerEnv": "เปิด", + "inDataDirectory": "ในไดเรกทอรีข้อมูล", + "addOrUpdate": "เพิ่มหรือปรับปรุง", + "deleteAndRelaunch": "ลบ", + "settingsJson": "settings.json", + "fromDataDir": "จากไดเรกทอรีข้อมูล", + "relaunchApp": "เปิดแอปเดสก์ท็อป OmniRoute ใหม่อีกครั้ง" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "พร้อมที่จะลดความซับซ้อนของโครงสร้างพื้นฐาน AI ของคุณแล้วหรือยัง?", "ctaDescription": "เข้าร่วมกับนักพัฒนาที่กำลังปรับปรุงการบูรณาการ AI กับ OmniRoute โอเพ่นซอร์สและเริ่มต้นได้ฟรี", "startFree": "เริ่มฟรี", - "readDocumentation": "อ่านเอกสารประกอบ" + "readDocumentation": "อ่านเอกสารประกอบ", + "company": "บริษัท", + "pricing": "ราคา", + "apiReference": "เอกสารอ้างอิง API", + "helpCenter": "ศูนย์ช่วยเหลือ", + "about": "เกี่ยวกับ", + "blog": "บล็อก", + "contact": "ติดต่อ", + "terms": "ข้อกำหนด", + "privacy": "ความเป็นส่วนตัว", + "license": "ใบอนุญาต", + "footerDescription": "อินเทอร์เฟซที่รวมกันสำหรับโครงสร้างพื้นฐาน AI สมัยใหม่ ปลอดภัย สังเกตได้ และขยายขนาดได้", + "communityDiscussions": "การสนทนาของชุมชน" }, "docs": { "title": "เอกสารประกอบ", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "ลงทะเบียนและจัดการตัวแทนผ่านทะเบียน ACP สำหรับการสื่อสารระหว่างตัวแทนและการแบ่งปันเครื่องมือ", "protocolAcpStep1": "ไปที่แดชบอร์ด → ตัวแทนเพื่อดูตัวแทน ACP ที่ลงทะเบียน", "protocolAcpStep2": "ลงทะเบียนตัวแทนใหม่ด้วยความสามารถและการกำหนดค่าอุปกรณ์ปลายทาง", - "protocolAcpStep3": "ใช้เครื่องมือ CLI เพื่อกำหนดค่าช่องทางการสื่อสารของตัวแทน" + "protocolAcpStep3": "ใช้เครื่องมือ CLI เพื่อกำหนดค่าช่องทางการสื่อสารของตัวแทน", + "metadataTitleTemplate": "%s — เอกสาร OmniRoute", + "metadataDefaultTitle": "เอกสาร OmniRoute", + "metadataDescription": "เอกสารที่ครอบคลุมสำหรับ OmniRoute AI gateway — การตั้งค่า, API, การบีบอัด, การปรับใช้, และอื่นๆ.", + "layoutNavTitle": "เอกสาร OmniRoute", + "layoutHomeLink": "หน้าเอกสาร", + "layoutDashboardLink": "← กลับไปที่แดชบอร์ด", + "homeTitle": "เอกสาร OmniRoute", + "homeMetadataDescription": "ทุกสิ่งที่คุณต้องการในการจัดเส้นทาง บีบอัด และขยาย AI ของคุณ — คู่มือการตั้งค่า, เอกสารอ้างอิง API, การบีบอัด, การปรับใช้ และอื่นๆ.", + "homeTwitterDescription": "เอกสารที่ครอบคลุมสำหรับ OmniRoute AI gateway", + "homeDescription": "ทุกสิ่งที่คุณต้องการในการจัดเส้นทาง บีบอัด และปรับขนาด AI ของคุณ", + "homeSearchHint": "กด Ctrl K เพื่อค้นหาเอกสาร", + "featuredQuickStartTitle": "เริ่มต้นอย่างรวดเร็ว", + "featuredQuickStartDescription": "เริ่มใช้งาน OmniRoute ใน 3 นาที", + "featuredAutoComboTitle": "คู่มือออโต้คอมโบ", + "featuredAutoComboDescription": "ให้ OmniRoute เลือก AI ที่ดีที่สุดสำหรับคุณ", + "featuredProvidersTitle": "คู่มือผู้ให้บริการ", + "featuredProvidersDescription": "เชื่อมต่อผู้ให้บริการ AI ในไม่กี่นาที", + "nonTechUsersTitle": "สำหรับผู้ใช้ที่ไม่ใช่เทคโนโลยี", + "nonTechUsersSubtitle": "เริ่มต้นได้อย่างรวดเร็ว — ไม่ต้องมีพื้นฐานทางเทคนิค", + "techUsersTitle": "สำหรับผู้ใช้เทคโนโลยี", + "techUsersSubtitle": "เจาะลึกสถาปัตยกรรม, APIs, และส่วนภายใน", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Docs", + "apiExplorerMetadataDescription": "เครื่องมือสำรวจ API แบบโต้ตอบ — ลองใช้จุดสิ้นสุด OmniRoute แบบสดพร้อมการตอบสนองแบบเรียลไทม์", + "apiExplorerTitle": "API Explorer", + "apiExplorerDescription": "ลองใช้จุดสิ้นสุด OmniRoute แบบสด เลือกจุดสิ้นสุด กำหนดค่าคำขอของคุณ และดูการตอบสนองแบบเรียลไทม์", + "apiExplorerSseStarted": "เริ่มการสตรีม SSE — ตรวจสอบเทอร์มินัล/devtools สำหรับผลลัพธ์แบบเรียลไทม์.", + "apiExplorerError": "ข้อผิดพลาด: {message}", + "apiExplorerAuth": "การตรวจสอบสิทธิ์", + "apiExplorerResponseLabel": "การตอบสนอง", + "apiExplorerSelectEndpoint": "เลือกจุดสิ้นสุดเพื่อสำรวจ", + "apiExplorerChooseApi": "เลือก API จากแถบด้านข้างเพื่อดูรายละเอียดและลองใช้งานสด", + "feedbackThanks": "ขอบคุณสำหรับข้อเสนอแนะของคุณ!", + "feedbackQuestion": "หน้านี้มีประโยชน์หรือไม่?", + "pageMetadataTitle": "{title} — เอกสาร OmniRoute", + "pageMetadataDescription": "เอกสาร OmniRoute: {title}", + "breadcrumb": "เส้นทางนำทาง", + "apiReferenceTable": { + "parameters": "พารามิเตอร์", + "name": "ชื่อ", + "type": "ประเภท", + "description": "คำอธิบาย", + "returns": "คืนสินค้า", + "typePrefix": "ประเภท:" + } }, "legal": { "privacyPolicy": "นโยบายความเป็นส่วนตัว", @@ -9957,7 +10479,42 @@ "successMessage": "บัญชี {providerName} ของคุณได้รับการเชื่อมต่อแล้ว", "done": "เสร็จแล้ว", "error": "การเชื่อมต่อล้มเหลว", - "tryAgain": "ลองอีกครั้ง" + "tryAgain": "ลองอีกครั้ง", + "errorSessionIncomplete": "เซสชัน OAuth ไม่สมบูรณ์ (ขาด URI เปลี่ยนเส้นทางหรือรหัสยืนยัน) กรุณาเริ่มการเชื่อมต่อใหม่และลองอีกครั้ง.", + "errorExchangeFailed": "การแลกเปลี่ยนล้มเหลว", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: ข้อมูลรับรอง Google OAuth เริ่มต้นใช้ได้เฉพาะใน localhost เท่านั้น สำหรับการใช้งานระยะไกล ให้กำหนดข้อมูลรับรอง OAuth ของคุณเองผ่านตัวแปรสภาพแวดล้อม: ANTIGRAVITY_OAUTH_CLIENT_ID และ ANTIGRAVITY_OAUTH_CLIENT_SECRET ดูส่วน README 'OAuth บนเซิร์ฟเวอร์ระยะไกล'", + "errorSaveFailed": "บันทึกไม่สำเร็จ", + "errorAuthorizationFailed": "การอนุญาตล้มเหลว", + "errorAuthorizationTimeout": "หมดเวลาอนุญาต", + "errorRequestFailed": "คำขอไม่สำเร็จ", + "errorCallbackServerFailed": "ไม่สามารถเริ่มเซิร์ฟเวอร์ callback ได้", + "errorBrowserUnavailable": "การรับรองความถูกต้องของเบราว์เซอร์ไม่สามารถใช้ได้สำหรับผู้ให้บริการนี้ในสภาพแวดล้อมปัจจุบัน กรุณาใช้วิธีการรับรองความถูกต้องที่รองรับแทน", + "errorStateMismatch": "เกิดข้อผิดพลาดในการจับคู่สถานะ OAuth กรุณาเริ่มการเชื่อมต่อใหม่และลองอีกครั้ง.", + "errorImportAccessToken": "ไม่สามารถนำเข้าท็อกเก็ตการเข้าถึงได้", + "errorSessionNotInitialized": "เซสชัน OAuth ยังไม่ได้เริ่มต้น กรุณาเริ่มกระบวนการเชื่อมต่อใหม่และลองอีกครั้ง.", + "errorNoAuthorizationCode": "ไม่พบรหัสการอนุญาต กรุณาวาง URL การเรียกกลับหรือรหัสการตรวจสอบสิทธิ์", + "tabDeviceCode": "รหัสอุปกรณ์", + "tabBrowserLogin": "การเข้าสู่ระบบเบราว์เซอร์", + "tabImportAuthJson": "นำเข้า auth.json", + "tabPasteApiKey": "วาง API Key", + "windsurfPasteDescription": "ใน Windsurf / VS Code IDE ให้รันคำสั่ง \"Windsurf: Provide Auth Token\" จาก command palette (หรือลงคลิกปุ่ม Jupyter \"Get Windsurf Authentication Token\") จากนั้นคัดลอกโทเค็นที่แสดงและวางไว้ด้านล่าง การเปิด windsurf.com/show-auth-token โดยตรงจะแสดงหน้า \"Redirecting\" เท่านั้น — IDE ต้องเริ่มต้นกระบวนการนี้", + "grokAuthJsonDescription": "วางเนื้อหาทั้งหมดของ ~/.grok/auth.json (ไม่ใช่แค่ฟิลด์ \"key\" ของ JWT) JWT ที่เปลือยเปล่าจะไม่มี refresh_token ดังนั้นการเชื่อมต่อจะตายหลังจากหมดอายุ (#7610) แนะนำให้ใช้โมดัลนำเข้า auth.json ที่มีให้เมื่อมี.", + "devinDesktopPasteDescription": "วางคีย์ API ของ Devin ที่มีอยู่จากเซสชัน Devin ที่ได้รับการตรวจสอบสิทธิ์ ค่าคีย์ที่สามารถส่งออกได้และขั้นตอนจะแตกต่างกันไปตามเวอร์ชันและบัญชีของ Devin.", + "devinPasteDescription": "กรุณาให้ WINDSURF_API_KEY ของคุณ (ที่ได้รับจาก `devin auth login` หรือจากคำสั่ง \"Windsurf: Provide Auth Token\" ใน Windsurf IDE)", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "คีย์ API / โทเค็น", + "saving": "กำลังบันทึก…", + "saveConnection": "บันทึกการเชื่อมต่อ", + "gheDescription": "กรุณาใส่ URL หลักของ GitHub Enterprise ของคุณ (เช่น https://ghe.yourcompany.com)", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL ของ GitHub Enterprise", + "gheUrlRequired": "ต้องระบุ URL ของ GitHub Enterprise", + "gitlabDuoSetupTitle": "การตั้งค่า Duo OAuth สำหรับ GitLab", + "gitlabDuoSetupMessage": "GitLab Duo OAuth ยังไม่ได้รับการกำหนดค่า ลงทะเบียนแอปพลิเคชัน OAuth ที่ {applicationsUrl} โดยใช้ URI การเปลี่ยนเส้นทาง {redirectUri} และขอบเขต \"{scopes}\" จากนั้นตั้งค่า {clientIdEnv} (และอาจจะ {clientSecretEnv}) และเริ่มต้นใหม่อีกครั้ง.", + "gitlabDuoSetupDescription": "หลังจากที่แอปพลิเคชันลงทะเบียนและตั้งค่า env vars บนอินสแตนซ์ OmniRoute นี้แล้ว ให้คลิก Continue เพื่อเริ่มการเข้าสู่ระบบ OAuth.", + "continue": "ดำเนินการต่อ" }, "cursorAuthModal": { "title": "เชื่อมต่อเคอร์เซอร์ IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "โหลดเพิ่มเติม", - "loadingMore": "กำลังโหลดเพิ่มเติม..." + "loadingMore": "กำลังโหลดเพิ่มเติม...", + "correlationId": "รหัสการเชื่อมโยง", + "group": { + "showAllRows": "แสดงทุกแถว", + "showLatestPerCorrelation": "แสดงล่าสุดตามรหัสการสัมพันธ์", + "grouped": "กลุ่ม" + }, + "running": "กำลังทำงาน", + "interval": { + "decrease": "ลดช่วงเวลา", + "title": "ช่วงเวลาการรีเฟรชอัตโนมัติเป็นวินาที", + "increase": "เพิ่มช่วงเวลา" + }, + "status": { + "inProgress": "กำลังดำเนินการ", + "recoveredByRetry": "กู้คืนโดยการลองใหม่", + "goToParent": "ไปที่คำขอหลัก", + "healedTitle": "ล้มเหลว, ฟื้นตัวหลังจาก {count} ครั้งที่ลองใหม่", + "healed": "หายแล้ว", + "failedTitle": "การพยายามทั้งหมด {count} ครั้งล้มเหลว", + "failed": "ล้มเหลว", + "pinnedTitle": "โมเดลที่เลือกผ่านการตรึงเซสชัน context-cache", + "pinned": "ปักหมุด" + }, + "attempts": "ความพยายาม", + "detail": { + "collapse": "ย่อ {title}", + "expand": "ขยาย {title}", + "copyTitle": "คัดลอก {title}", + "copied": "คัดลอกแล้ว!", + "copy": "คัดลอก", + "autoscrollOn": "เลื่อนอัตโนมัติ: เปิดใช้งาน", + "autoscrollOff": "เลื่อนอัตโนมัติ: ปิด", + "payload": { + "clientRawRequest": "คำขอดิบของลูกค้า", + "clientRequest": "คำขอของลูกค้า", + "openaiRequest": "คำขอ OpenAI", + "providerRequest": "คำขอผู้ให้บริการ", + "providerResponse": "การตอบสนองของผู้ให้บริการ", + "clientResponse": "การตอบสนองของลูกค้า", + "pipelineError": "ข้อผิดพลาดของ Pipeline" + }, + "payloadMissing": "ข้อมูลรายละเอียดของ payload artifact ไม่สามารถใช้งานได้อีกต่อไปสำหรับรายการบันทึกนี้.", + "payloadCorrupt": "ไม่สามารถแยกวิเคราะห์ข้อมูลพารามิเตอร์ที่ละเอียดได้。", + "notAvailable": "ไม่สามารถใช้ได้", + "semanticCache": "เซมานติก (OmniRoute)", + "upstreamCache": "ต้นน้ำ (ผู้ให้บริการ)", + "ariaLabel": "รายละเอียดบันทึกคำขอ", + "completed": "เสร็จสิ้น", + "upstreamStatus": "ต้นน้ำ: {status}", + "statusDiscrepancy": "OmniRoute คืนค่า {status} แม้ว่าผู้ให้บริการจะคืนค่า {provider}", + "previousRequest": "คำขอที่แล้ว", + "nextRequest": "คำขอถัดไป", + "close": "ปิดโมดัลรายละเอียด", + "startedAt": "เริ่มที่", + "endedAt": "สิ้นสุดที่", + "duration": "ระยะเวลา", + "model": "โมเดล", + "provider": "ผู้ให้บริการ", + "account": "บัญชี", + "input": "ข้อมูลนำเข้า", + "totalIn": "รวมทั้งหมด: {value}", + "cacheRead": "แคชอ่าน: {value}", + "cacheWrite": "เขียนแคช: {value}", + "compressed": "บีบอัด: {from} → {to} ({percent}% ประหยัด)", + "output": "ผลลัพธ์", + "totalOut": "ยอดรวมที่ออก: {value}", + "reasoning": "เหตุผล: {value}", + "requestedModel": "โมเดลที่ร้องขอ", + "requestProtocol": "โปรโตคอล Req", + "cacheSource": "แหล่งข้อมูลแคช", + "modelPinning": "การตรึงโมเดล", + "activeModelPinning": "ใช้งาน — โมเดลที่เลือกผ่านการตรึงเซสชัน", + "rotated": "หมุน: {initial} -> {final}", + "apiKey": "คีย์ API", + "noApiKey": "ไม่มี API key", + "combo": "คอมโบ", + "error": "ข้อผิดพลาด", + "unblockAll": "ยกเลิกการบล็อกทั้งหมด", + "cleared": "เคลียร์แล้ว", + "unblock": "ปลดบล็อก", + "relatedRequests": "คำขอที่เกี่ยวข้อง ({count})", + "current": "ปัจจุบัน", + "detailStatus": "สถานะรายละเอียด", + "loadingDetails": "กำลังโหลดรายละเอียดคำขอ...", + "providerEventStream": "สตรีมเหตุการณ์ผู้ให้บริการ", + "clientEventStream": "สตรีมเหตุการณ์ของลูกค้า", + "eventStream": "สตรีมเหตุการณ์", + "responsePayloadLegacy": "ข้อมูลการตอบกลับ (รุ่นเก่า)", + "requestPayloadLegacy": "ข้อมูลที่ส่ง (รุ่นเก่า)", + "noPayload": "ไม่มีข้อมูล payload สำหรับรายการบันทึกนี้.", + "correlationId": "รหัสความสัมพันธ์", + "correlationIdValue": "รหัสความสัมพันธ์: {id}", + "detailedPayloadInfo": "โปรดเปิดใช้งานการบันทึกข้อมูลอย่างละเอียดก่อนหากคุณต้องการดูข้อมูลการส่งข้อมูลของไคลเอนต์/ผู้ให้บริการแบบสี่ขั้นตอนสำหรับคำขอใหม่" + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "ปิดใช้งาน {provider} แล้ว", "providerAdded": "{provider} ถูกเพิ่มแล้ว", "add": "เพิ่ม", - "manualApiKey": "ใช้คีย์ API แบบแมนนวล" + "manualApiKey": "ใช้คีย์ API แบบแมนนวล", + "createDahlTokenFailed": "ไม่สามารถสร้างโทเค็น Dahl ได้", + "providerProxy": "พร็อกซี", + "providerProxyConfigureHint": "กำหนดค่าพร็อกซี", + "providerProxyTitleConfigured": "กำหนดพร็อกซีแล้ว: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "จำกัดตาม ToS — โปรดตรวจสอบข้อกำหนด", "caution": "ข้อควรระวัง — ข้อกำหนดการใช้งานส่วนบุคคล / พร็อกซี", "ok": "อนุญาตโดยทั่วไป" - } + }, + "allProviders": "ผู้ให้บริการทั้งหมด", + "noApiKeyRequired": "ไม่ต้องใช้ API key" }, "providerHealthAutopilot": { "title": "Autopilot ตรวจสอบสถานะผู้ให้บริการ", @@ -12390,7 +13047,11 @@ "on": "เปิด", "off": "ปิด", "availableProviders": "ผู้ให้บริการที่พร้อมใช้งาน ({count})", - "noProviderOverrides": "ไม่มีการเขียนทับ — ผู้ให้บริการที่เปิดใช้งานทั้งหมดจะเข้าร่วมด้วยโมเดลเริ่มต้นของตน" + "noProviderOverrides": "ไม่มีการเขียนทับ — ผู้ให้บริการที่เปิดใช้งานทั้งหมดจะเข้าร่วมด้วยโมเดลเริ่มต้นของตน", + "resetFailed": "การรีเซ็ตล้มเหลว", + "resetSuccess": "รีเซ็ตการตั้งค่าเป็นค่าเริ่มต้น", + "running": "กำลังดำเนินการ...", + "testFailed": "การทดสอบล้มเหลว" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) คือเพื่อนโอเพนซอร์สผู้ก่อตั้งของ OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "ผู้ให้บริการไม่รองรับการมองเห็นสำหรับคำขอภาพนี้", "capabilityFilter.toolsMismatch": "ผู้ให้บริการไม่รองรับการเรียกเครื่องมือ", "capabilityFilter.structuredOutputMismatch": "ผู้ให้บริการไม่รองรับการส่งออกแบบมีโครงสร้าง", - "capabilityFilter.contextWindowMismatch": "คำขอเกินขอบเขตบริบทของผู้ให้บริการ" + "capabilityFilter.contextWindowMismatch": "คำขอเกินขอบเขตบริบทของผู้ให้บริการ", + "publicSystem": { + "notFound": { + "title": "ไม่พบหน้า", + "description": "หน้าที่คุณกำลังมองหาไม่มีอยู่จริงหรือถูกย้ายไปแล้ว.", + "dashboardAriaLabel": "กลับไปที่แดชบอร์ด", + "statusAriaLabel": "เปิดหน้าสถานะระบบ", + "systemStatus": "สถานะระบบ" + }, + "error": { + "title": "ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน", + "description": "เกิดข้อผิดพลาดขณะประมวลผลคำขอของคุณ ทีมงานของเราได้รับการแจ้งเตือนและกำลังทำงานเพื่อแก้ไขปัญหาอยู่", + "errorId": "รหัสข้อผิดพลาด: {id}", + "detailsAriaLabel": "รายละเอียดข้อผิดพลาด", + "retryAriaLabel": "ลองโหลดหน้าอีกครั้ง", + "tryAgain": "ลองอีกครั้ง", + "dashboardAriaLabel": "กลับไปที่แดชบอร์ด", + "statusAriaLabel": "เปิดสถานะระบบ", + "systemStatus": "สถานะระบบ" + }, + "globalError": { + "title": "เกิดข้อผิดพลาดบางอย่าง", + "description": "เกิดข้อผิดพลาดที่ไม่คาดคิดขึ้น ข้อมูลนี้ได้ถูกบันทึกไว้และทีมงานของเราจะทำการตรวจสอบ", + "detailsAriaLabel": "รายละเอียดข้อผิดพลาด", + "retryAriaLabel": "ลองโหลดหน้าอีกครั้ง", + "tryAgain": "ลองอีกครั้ง", + "statusAriaLabel": "เปิดสถานะระบบ", + "systemStatus": "สถานะระบบ" + }, + "offline": { + "title": "ปัญหาการเชื่อมต่อ", + "description": "OmniRoute ไม่สามารถเชื่อมต่อกับเครือข่ายได้ในขณะนี้ กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต, VPN หรือการตั้งค่า proxy ของคุณ.", + "connectionRestored": "การเชื่อมต่อถูกกู้คืนแล้ว", + "offlineModeDetected": "ตรวจพบโหมดออฟไลน์", + "retryConnection": "ลองเชื่อมต่ออีกครั้ง", + "openStatusPage": "เปิดหน้าสถานะ" + }, + "maintenance": { + "title": "การบำรุงรักษาที่กำหนดเวลา", + "description": "บริการบางอย่างไม่สามารถใช้งานได้ชั่วคราวในขณะที่กำลังดำเนินการบำรุงรักษา การจัดการเส้นทางหลักมักจะยังออนไลน์อยู่ แต่ฟีเจอร์การจัดการอาจมีการลดประสิทธิภาพลง", + "suggestion1": "ลองใหม่อีกครั้งในอีกไม่กี่นาที.", + "suggestion2": "ตรวจสอบตัวชี้วัดสุขภาพปัจจุบันและสถานะผู้ให้บริการก่อนที่จะลองอีกครั้ง.", + "systemStatus": "ดูสถานะระบบ", + "healthDashboard": "เปิดแดชบอร์ดสุขภาพ" + }, + "status": { + "title": "สถานะระบบ", + "description": "ภาพรวมการดำเนินงานแบบสดสำหรับบริการหลักของ OmniRoute.", + "loadingHealth": "กำลังโหลดข้อมูลสุขภาพ...", + "failedToLoad": "ไม่สามารถโหลดสถานะระบบได้。", + "unableToReachHealth": "ไม่สามารถเข้าถึงจุดสิ้นสุดสุขภาพได้ โปรดตรวจสอบการเชื่อมต่อและลองอีกครั้ง.", + "healthCheckFailed": "การตรวจสอบสุขภาพล้มเหลว", + "openConnectivityHelp": "เปิดความช่วยเหลือการเชื่อมต่อ", + "maintenanceInfo": "ข้อมูลการบำรุงรักษา", + "service": "บริการ", + "unknown": "ไม่ทราบ", + "notAvailable": "n/a", + "providersTracked": "ผู้ให้บริการที่ติดตาม", + "circuitBreakerState": "สถานะวงจรตัดของผู้ให้บริการ", + "lastUpdate": "อัปเดตล่าสุด: {timestamp}", + "uptimeMinutes": "{minutes}นาที", + "uptimeHoursMinutes": "{hours}ชั่วโมง {minutes}นาที" + }, + "statusPages": { + "400": { + "title": "คำขอไม่ถูกต้อง", + "description": "ข้อมูลที่ส่งในคำขอไม่ถูกต้องหรือไม่สมบูรณ์", + "suggestion1": "โปรดตรวจสอบฟิลด์ที่จำเป็นและรูปแบบข้อมูลก่อนที่จะลองอีกครั้ง.", + "suggestion2": "หากคุณกำลังใช้ API ให้ตรวจสอบ JSON schema ในเครื่องของคุณ", + "suggestion3": "ถ้าสิ่งนี้เกิดขึ้นต่อไป ให้เปิดคำขอใน Translator Playground เพื่อตรวจสอบข้อมูลที่ส่งไป.", + "primaryAction": "เปิดเอกสารประกอบ", + "secondaryAction": "เปิดตัวแปลภาษา" + }, + "401": { + "title": "ไม่ได้รับอนุญาต", + "description": "ต้องการการตรวจสอบสิทธิ์เพื่อเข้าถึงทรัพยากรนี้.", + "suggestion1": "ลงชื่อเข้าใช้อีกครั้งและลองทำการดำเนินการอีกครั้ง.", + "suggestion2": "สำหรับการเรียก API โปรดยืนยันว่า Bearer token มีอยู่และถูกต้อง", + "suggestion3": "หากโทเค็นถูกหมุนเวียนเมื่อเร็ว ๆ นี้ ให้ปรับปรุงข้อมูลรับรองของไคลเอนต์ของคุณ.", + "primaryAction": "ไปที่เข้าสู่ระบบ", + "secondaryAction": "จัดการคีย์ API" + }, + "403": { + "title": "ห้ามเข้าถึง", + "description": "คำขอของคุณถูกเข้าใจแล้ว แต่การเข้าถึงถูกปฏิเสธตามนโยบาย.", + "suggestion1": "ตรวจสอบกฎ allowlist/blocklist IP ในการตั้งค่า.", + "suggestion2": "ตรวจสอบนโยบายโมเดลและงบประมาณที่กำหนดให้กับคีย์ API ของคุณ.", + "suggestion3": "ขอให้ผู้ดูแลระบบมอบขอบเขตสิทธิ์ที่จำเป็น", + "primaryAction": "เปิดการเข้าถึงความช่วยเหลือ", + "secondaryAction": "เปิดการตั้งค่าความปลอดภัย" + }, + "408": { + "title": "หมดเวลาการร้องขอ", + "description": "เซิร์ฟเวอร์ไม่ได้รับคำขอที่สมบูรณ์ในเวลาที่กำหนด.", + "suggestion1": "ลองส่งคำขออีกครั้งด้วยข้อมูลที่มีขนาดเล็กลง.", + "suggestion2": "ตรวจสอบความเสถียรของเครือข่ายและความหน่วงของ VPN/proxy。", + "suggestion3": "สำหรับการดำเนินการที่ยาวนาน ให้เปิดใช้งานการสตรีมหรือแบ่งคำขอออกเป็นส่วน ๆ", + "primaryAction": "เปิดคู่มือ Endpoint", + "secondaryAction": "ตรวจสอบสถานะเครือข่าย" + }, + "429": { + "title": "มีการร้องขอมากเกินไป", + "description": "เกินขีดจำกัดการใช้งานสำหรับลูกค้า, คีย์, หรือผู้ให้บริการนี้แล้ว.", + "suggestion1": "รอให้หมดเวลาคูลดาวน์และลองอีกครั้งหลังจากช่วงเวลาที่แนะนำ", + "suggestion2": "เปลี่ยนไปใช้คอมโบที่มีผู้ให้บริการสำรอง", + "suggestion3": "ปรับแต่งโปรไฟล์ความทนทาน/การจำกัดอัตราของผู้ให้บริการในการตั้งค่า.", + "primaryAction": "เปิดการตั้งค่าความยืดหยุ่น", + "secondaryAction": "เปิดคอมโบ" + }, + "500": { + "title": "ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน", + "description": "เกิดข้อผิดพลาดที่ไม่คาดคิดบนเซิร์ฟเวอร์ขณะประมวลผลคำขอของคุณ.", + "suggestion1": "ลองอีกครั้งในอีกไม่กี่วินาที.", + "suggestion2": "ตรวจสอบข้อมูลการตรวจสุขภาพและบันทึกเซิร์ฟเวอร์สำหรับ ID การร้องขอที่สัมพันธ์กัน", + "suggestion3": "หากยังคงเกิดขึ้น ให้รายงานปัญหาพร้อมกับเวลาที่เกิดเหตุและบริบทการร้องขอ", + "primaryAction": "เปิดแดชบอร์ดสุขภาพ", + "secondaryAction": "เปิดบันทึก" + }, + "502": { + "title": "ประตูทางเข้าที่ไม่ดี", + "description": "ผู้ให้บริการ upstream หรือการรวมเกตเวย์ส่งคืนการตอบสนองที่ไม่ถูกต้อง.", + "suggestion1": "ลองอีกครั้งกับผู้ให้บริการอื่นหรือเส้นทางคอมโบที่ใช้งานอยู่.", + "suggestion2": "ตรวจสอบข้อมูลประจำตัวของผู้ให้บริการและความพร้อมใช้งานของโมเดล.", + "suggestion3": "ตรวจสอบผลลัพธ์ของการแปลหากเกี่ยวข้องกับการแปลงรูปแบบ", + "primaryAction": "เปิดผู้ให้บริการ", + "secondaryAction": "เปิดตัวแปลภาษา" + }, + "503": { + "title": "บริการไม่พร้อมใช้งาน", + "description": "บริการชั่วคราวไม่สามารถใช้งานได้เนื่องจากการบำรุงรักษาหรือการพึ่งพาที่ลดลง.", + "suggestion1": "กรุณารอสักครู่และลองอีกครั้ง.", + "suggestion2": "ตรวจสอบประกาศการบำรุงรักษาและสถานะระบบ.", + "suggestion3": "ใช้ผู้ให้บริการสำรองหากเวิร์กโฟลว์ของคุณมีความไวต่อความล่าช้า。", + "primaryAction": "รายละเอียดการบำรุงรักษา", + "secondaryAction": "สถานะระบบ" + } + } + }, + "kiroAuthModal": { + "title": "เชื่อมต่อ {providerLabel}", + "chooseMethod": "เลือกวิธีการตรวจสอบสิทธิ์ของคุณ:", + "builderId": "AWS Builder ID", + "builderDescription": "แนะนำสำหรับผู้ใช้ส่วนใหญ่ ลงชื่อเข้าใช้ด้วยบัญชี AWS ที่เชื่อมโยงกับ {providerLabel}", + "organization": "องค์กรของคุณ (AWS IAM Identity Center)", + "organizationDescription": "ใช้ URL เริ่มต้น SSO ของบริษัทคุณ (ตัวอย่าง: {url}).", + "googleAccount": "บัญชี Google", + "googleDescription": "เข้าสู่ระบบด้วยบัญชี Google ของคุณ.", + "githubAccount": "บัญชี GitHub", + "githubDescription": "เข้าสู่ระบบด้วยบัญชี GitHub ของคุณ.", + "importToken": "นำเข้าท็อกเกน", + "importDescription": "วางโทเค็นรีเฟรชที่ส่งออกจาก {providerLabel}", + "apiKey": "คีย์ API", + "apiKeyDescription": "วางคีย์ API {providerLabel} / CodeWhisperer ที่มีอายุยาวนาน มันถูกเก็บเป็นข้อมูลรับรองแบบ bearer โดยไม่มีโทเค็นการรีเฟรช; การค้นหาโปรไฟล์จะทำอย่างดีที่สุด.", + "idcStartUrl": "URL เริ่มต้น IDC", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL ของ AWS IAM Identity Center ขององค์กรของคุณ", + "awsRegion": "ภูมิภาค AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "ภูมิภาค AWS สำหรับ Identity Center ของคุณ (ค่าเริ่มต้น: us-east-1)", + "continue": "ดำเนินการต่อ", + "back": "กลับ", + "autoDetecting": "กำลังตรวจสอบโทเค็นโดยอัตโนมัติ...", + "readingCredentials": "กำลังอ่านข้อมูลรับรอง {providerLabel} จากแคช AWS SSO", + "tokenNotDetected": "ไม่พบโทเค็น {providerLabel} โดยอัตโนมัติ กรุณาวางโทเค็นรีเฟรชของคุณด้วยตนเอง", + "refreshToken": "รีเฟรชโทเคน", + "tokenPlaceholder": "โทเค็นจะถูกกรอกโดยอัตโนมัติ...", + "importing": "กำลังนำเข้า...", + "apiKeyPlaceholder": "วางคีย์ API {providerLabel} ของคุณ...", + "apiKeyStoredDescription": "เก็บข้อมูลที่เข้ารหัสเป็นข้อมูลประจำตัวที่มีอายุยาวนาน ไม่มีการไหลของการรีเฟรช。", + "apiKeyRegionDescription": "ภูมิภาค AWS สำหรับกุญแจ (ค่าเริ่มต้น: us-east-1)", + "validating": "กำลังตรวจสอบ...", + "validateAndSaveApiKey": "ตรวจสอบและบันทึก API Key", + "errorAutoDetect": "ไม่สามารถตรวจจับโทเค็นโดยอัตโนมัติได้", + "errorAutoDetectFailed": "ไม่สามารถตรวจจับโทเค็นโดยอัตโนมัติได้", + "errorRefreshTokenRequired": "กรุณาใส่โทเค็นรีเฟรช", + "errorImportFailed": "นำเข้าล้มเหลว", + "errorApiKeyRequired": "กรุณาใส่ Kiro API key", + "errorApiKeyImportFailed": "การนำเข้าคีย์ API ล้มเหลว", + "errorIdcStartUrlRequired": "กรุณาใส่ URL เริ่มต้น IDC ของคุณ" + }, + "kiroSocialOAuthModal": { + "title": "เชื่อมต่อ {providerLabel} ผ่าน {providerName}", + "errorStartAuthorization": "ไม่สามารถเริ่มการอนุญาตได้", + "errorAuthorizationExpired": "การอนุญาตหมดอายุแล้ว เริ่มกระบวนการเข้าสู่ระบบอีกครั้ง.", + "errorAuthorizationFailed": "การอนุญาตล้มเหลว", + "initializing": "กำลังเริ่มต้น...", + "settingUp": "กำลังตั้งค่าการตรวจสอบสิทธิ์ {providerName}", + "openIncognito": "เปิดลิงก์นี้ในหน้าต่าง Incognito", + "incognitoDescription": "ใช้หน้าต่าง Incognito/Private เพื่อหลีกเลี่ยงความขัดแย้งของเซสชันกับบัญชีที่มีอยู่.", + "copyLink": "คัดลอกลิงก์", + "verificationCode": "รหัสยืนยัน", + "waiting": "รอการอนุญาต...", + "cancel": "ยกเลิก", + "successTitle": "เชื่อมต่อสำเร็จแล้ว!", + "successMessage": "บัญชี {providerLabel} ของคุณผ่าน {providerName} ได้เชื่อมต่อแล้ว", + "done": "เสร็จสิ้น", + "errorTitle": "การเชื่อมต่อล้มเหลว", + "close": "ปิด" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "การอนุญาตล้มเหลว", + "errorPopupBlocked": "ป๊อปอัปถูกบล็อก — อนุญาตให้ป๊อปอัปสำหรับเว็บไซต์นี้ หรือวางโทเค็นด้วยตนเองด้านล่าง.", + "errorPopupClosed": "หน้าต่างการอนุญาตถูกปิดก่อนที่จะเสร็จสิ้น.", + "errorAccessTokenRequired": "ต้องการโทเค็นการเข้าถึง.", + "errorImportFailed": "นำเข้าล้มเหลว", + "title": "เชื่อมต่อ Trae SOLO", + "authorizeDescription": "อนุญาตผ่าน trae.ai ในหน้าต่างป๊อปอัพ หน้าต่างป๊อปอัพจะปิดตัวเองเมื่อมีการนำเข้าท็อกเกนแล้ว", + "authorizeImportant": "สำคัญ: คุณต้องเข้าสู่ระบบที่ trae.ai ใน เบราว์เซอร์นี้ ก่อน หน้าอนุญาตจะแค่ยืนยันเซสชันที่มีอยู่ — ไม่สามารถเข้าสู่ระบบให้คุณได้ หากคุณเห็น \"เข้าสู่ระบบล้มเหลว\" ให้คลิก \"เปิด solo.trae.ai\" เข้าสู่ระบบ จากนั้นกลับมาที่นี่.", + "waitingForAuthorization": "รอ trae.ai…", + "authorizeWithBrowser": "อนุญาตด้วยเบราว์เซอร์", + "openSoloTrae": "เปิด solo.trae.ai", + "orPasteManually": "หรือวางโทเค็นด้วยตนเอง", + "manualInstructions": "ลงชื่อเข้าใช้ solo.trae.ai, เปิด DevTools → Network, ส่งข้อความแชทใด ๆ, และคัดลอก JWT จาก Authorization: Cloud-IDE-JWT {tokenPlaceholder} ในส่วนหัวของคำขอ. อายุการใช้งานของ JWT ประมาณ ~14 วัน. ฟิลด์ระบุตัวตนที่ไม่บังคับมาจาก common_params ในเนื้อหาคำขอเดียวกัน.", + "accessTokenLabel": "Access Token (Cloud-IDE-JWT)", + "webId": "รหัสเว็บ", + "optional": "ไม่บังคับ", + "bizUserId": "รหัสผู้ใช้ธุรกิจ", + "userUniqueId": "รหัสประจำตัวผู้ใช้", + "scope": "ขอบเขต", + "tenant": "ผู้เช่า", + "region": "ภูมิภาค", + "importing": "นำเข้า…", + "importToken": "นำเข้าท็อกเกน", + "cancel": "ยกเลิก" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "กำลังแจกจ่าย...", + "complete": "เสร็จสมบูรณ์", + "defaultLabel": "แจกจ่ายพร็อกซี" + } + }, + "providerTest": { + "dialogLabel": "ทดสอบ {provider}", + "deprecated": "เลิกใช้", + "risk": "ความเสี่ยง", + "close": "ปิด", + "model": "โมเดล", + "key": "กุญแจ", + "defaultKey": "ค่าเริ่มต้น", + "clearConversation": "ล้างการสนทนา", + "clear": "ล้าง", + "tabs": { + "test": "ทดสอบ", + "logs": "บันทึก" + }, + "loadingLogs": "กำลังโหลดบันทึก…", + "failedToLoadLogs": "ไม่สามารถโหลดบันทึกได้", + "noLogsYet": "ยังไม่มีบันทึก", + "noLogsDescription": "ส่งข้อความทดสอบจากแท็บทดสอบ — บันทึกสำหรับผู้ให้บริการนี้จะปรากฏที่นี่。", + "openFullLogs": "เปิดหน้าบันทึกทั้งหมด", + "live": "สด", + "tailingLast": "ติดตาม {count} ล่าสุด", + "refreshNow": "รีเฟรชตอนนี้", + "refresh": "รีเฟรช", + "unknownRequester": "ผู้ขอที่ไม่รู้จัก", + "fields": { + "timestamp": "เวลาประทับตรา", + "status": "สถานะ", + "duration": "ระยะเวลา", + "model": "โมเดล", + "requestedModel": "โมเดลที่ร้องขอ", + "provider": "ผู้ให้บริการ", + "requester": "ผู้ขอ", + "tokens": "โทเค็น" + } + }, + "proxyLog": { + "detailAriaLabel": "รายละเอียดบันทึกพร็อกซี", + "event": "เหตุการณ์พร็อกซี", + "close": "ปิดโมดัลรายละเอียดพร็อกซี", + "time": "เวลา", + "latency": "ความหน่วง", + "clientIp": "ที่อยู่ IP ของลูกค้า", + "proxy": "พร็อกซี", + "direct": "ตรง", + "type": "ประเภท", + "level": "ระดับ", + "provider": "ผู้ให้บริการ", + "tlsFingerprint": "ลายนิ้วมือ TLS", + "directNative": "ตรง (พื้นเมือง)", + "targetUrl": "URL เป้าหมาย", + "error": "ข้อผิดพลาด", + "configuration": "การตั้งค่า Proxy" + }, + "requestTimeline": { + "title": "ไทม์ไลน์คำขอ", + "modes": { + "follow": "ติดตาม", + "followDescription": "แกนเลื่อนซ้าย, เส้น NOW อยู่ที่ 75%", + "now": "ตอนนี้", + "nowDescription": "กระโดดไปที่เวลาปัจจุบัน, บรรทัด NOW จะรีเซ็ตไปที่กลาง", + "pan": "กระทะ", + "panDescription": "ลากเพื่อสำรวจ, พื้นหลังถูกแช่แข็ง" + }, + "reset": "รีเซ็ต", + "started": "เริ่มต้น", + "ended": "สิ้นสุดแล้ว", + "duration": "ระยะเวลา", + "status": "สถานะ", + "provider": "ผู้ให้บริการ", + "tokens": "โทเค็น", + "active": "ใช้งานอยู่", + "other": "อื่น ๆ", + "tenMinutes": "10นาที", + "hour": "ชั่วโมง", + "day": "วัน", + "unknownModel": "ไม่ทราบ", + "pending": "รอดำเนินการ" + }, + "metadata": { + "compressionTitle": "การบีบอัด", + "compressionDescription": "กำหนดการตั้งค่าการบีบอัดบริบทเพื่อลดการใช้โทเค็นและค่าใช้จ่าย", + "relayTitle": "OmniRoute — Relay Proxies", + "relayDescription": "จุดสิ้นสุดพร็อกซีรีเลย์แบบไม่มีเซิร์ฟเวอร์สำหรับโครงสร้างพื้นฐาน AI ของคุณ", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "ตรวจสอบการเรียก LLM + แก้ไขปัญหาการรับส่งข้อมูล HTTPS ของแอปพลิเคชันใด ๆ" + }, + "conductor": { + "title": "Conductor — ฟลีตเอเจนต์ CLI", + "subtitle": "OmniConductor ฮับ: ผู้วิ่ง, คิวงาน และสภา, สด", + "runners": "นักวิ่ง", + "tasks": "งาน", + "colName": "ชื่อ", + "colClis": "CLIs", + "colStatus": "สถานะ", + "colTask": "งาน", + "colMode": "โหมด", + "colRunner": "ผู้วิ่ง", + "colSummary": "สรุป", + "online": "ออนไลน์", + "offline": "ออฟไลน์", + "draining": "การระบาย", + "hubOffline": "Conductor hub ออฟไลน์หรือไม่ได้กำหนดค่า (CONDUCTOR_HUB_URL) — แสดงไม่มีอะไรนอกจากข้อมูลที่ล้าสมัย.", + "noRunners": "ไม่มีผู้วิ่งลงทะเบียน", + "noTasks": "ยังไม่มีงานใด ๆ", + "detailTitle": "รายละเอียดงาน", + "prompt": "คำสั่ง", + "branch": "สาขา", + "fetchHint": "ดึงผลลัพธ์ด้วย: git fetch origin {branch}", + "council": "สภา", + "candidates": "ผู้สมัคร", + "cancel": "ยกเลิกงาน", + "cancelConfirmTitle": "ยกเลิกงานนี้ใช่ไหม?", + "cancelConfirmMessage": "ฮับจะยกเลิกการดำเนินการบนรันเนอร์ นี่ไม่สามารถย้อนกลับได้", + "cancelFailed": "ศูนย์ปฏิเสธการยกเลิก", + "close": "ปิด", + "error": "ข้อผิดพลาด", + "faroTitle": "Faro — โฆษกของฟลีท", + "faroSubtitle": "แชทและเสียง เชื่อมโยงกับเหตุการณ์จริงในฟลีท คำสั่งที่ทำลายล้างจะขอการยืนยันเสมอ", + "faroEmpty": "ถามเกี่ยวกับกองเรือ — เช่น \"กองเรือเป็นอย่างไร?\"", + "faroPending": "Faro กำลังขอการยืนยัน", + "faroPlaceholder": "พูดคุยกับ Faro…", + "faroSend": "ส่ง", + "faroOffline": "Faro (ผู้พูด) ออฟไลน์", + "yes": "ใช่", + "no": "ไม่", + "pushToTalk": "กดค้างเพื่อพูด", + "speakAnswers": "พูดคำตอบ", + "voiceModels": "โมเดลเสียง (ผู้ให้บริการ/โมเดลของ OmniRoute นี้)", + "voiceIdle": "พูด", + "voiceListening": "กำลังฟัง…", + "voiceThinking": "กำลังคิดอยู่…", + "voiceSpeaking": "กำลังพูดอยู่…", + "sttFailed": "การถอดเสียงล้มเหลว (ตรวจสอบโมเดล/ผู้ให้บริการ STT)", + "ttsFailed": "การสังเคราะห์เสียงล้มเหลว (โปรดตรวจสอบโมเดล/ผู้ให้บริการ TTS)", + "micDenied": "ไมโครโฟนไม่พร้อมใช้งานหรือถูกปฏิเสธสิทธิ์" + }, + "cliproxyProviderExposure": { + "title": "การเปิดเผยผู้ให้บริการ", + "description": "เปิดเผยโมเดล CLIProxyAPI เป็นเป้าหมายการกำหนดเส้นทางภายใต้ cliproxyapi/ คำนำหน้า", + "label": "เปิดเผยเป็น cliproxyapi/...", + "hint": "เมื่อเปิดใช้งาน โมเดลที่ค้นพบจะปรากฏในตัวเลือกผู้ให้บริการทั่วทั้ง OmniRoute.", + "updateFailed": "ไม่สามารถอัปเดตได้ (HTTP {status})", + "networkError": "ข้อผิดพลาดของเครือข่าย — ไม่สามารถอัปเดตการตั้งค่าการเปิดเผยผู้ให้บริการได้" + } } - diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index 73d2ea2dc2..966016c256 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -172,6 +172,18 @@ "unselectAll": "Seçimi kaldır", "visibleModels": "görünür", "selectAllConfirm": "Bu kombinasyona {count} model eklensin mi?", + "testSelectedProviders": "Test sağlayıcıları", + "testingSelectedProviders": "Test Ediliyor {done}/{total}...", + "noProvidersSelectedToTest": "Öncelikle aşağıdaki en az bir sağlayıcıyı kontrol edin", + "noModelsToTestForProviders": "Seçilen sağlayıcılar için test edilecek model yok", + "testSelectedProvidersResults": "{ok} {total} model çalışıyor", + "selectWorkingModels": "Çalışma ekle", + "unselectWorkingModels": "Seçimi Kaldırma", + "noWorkingModelsToSelect": "Eklenecek çalışır model kalmadı", + "providerTestHint": "İpucu: bir sağlayıcıyı kontrol et → Test → Çalışan ekle. Seçimi kaldırmak için tekrar tıklayın.", + "selectAllProviders": "Tüm sağlayıcıları kontrol et", + "clearProviderSelection": "Sağlayıcıların işaretini kaldırın", + "providersSelectedCount": "{count} sağlayıcı kontrol edildi", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Boyut", + "toggleNoAuthProvider": "Kimlik doğrulama gerektirmeyen sağlayıcıyı aç/kapat", + "loadingModels": "Modeller yükleniyor…", + "selectAModel": "Bir model seçin", + "degraded": "Bozulmuş", + "zeroConfigBannerTitle": "Sıfır yapılandırma modunda çalışıyor", + "zeroConfigBannerBody": "OmniRoute, ilk açılışta otomatik olarak güvenli şifreleme anahtarları oluşturdu. Bunlar {dataDir} dizinine kaydedildi. Hiçbir işlem yapmanıza gerek yok — verileriniz şifreli ve güvende. Özel anahtarlar kullanmak için, o dosyaya JWT_SECRET ve STORAGE_ENCRYPTION_KEY ekleyin.", + "batchRelativeTimeIn": "{value} içinde", + "batchRelativeTimeAgo": "{value} önce", + "batchDetailsTitle": "Toplu Ayrıntılar", + "batchProgress": "İlerleme", + "batchCompletedCount": "{count} tamamlandı", + "batchFailedCount": "{count} başarısız", + "batchPendingCount": "{count} bekleyen", + "batchTimeline": "Zaman Çizelgesi", + "batchTimelineInProgress": "Devam Ediyor", + "batchTimelineFinalizing": "Tamamlanıyor", + "batchTimelineCompleted": "Tamamlandı", + "batchTimelineFailed": "Başarısız", + "batchTimelineExpires": "Süresi Dolmuş", + "batchTimelineExpired": "Süresi Dolmuş", + "batchTimelineCancelling": "İptal Ediliyor", + "batchTimelineCancelled": "İptal Edildi", + "batchTokenUsage": "Token Kullanımı", + "batchMetadata": "Meta Veriler", + "batchFileContents": "Dosya İçeriği", + "batchFileUsedByCount": "{count, plural, one {# parti} other {# parti}}", + "batchFilePreview": "Önizleme", + "batchFilePreviewTruncated": "İlk {shown} satır gösteriliyor ({total} toplam satır)", + "batchFileDownloadFull": "Tam Dosyayı İndir" }, "disabled": "Devre dışı", "featureFlagOmnirouteEmergencyFallbackDescription": "Bütçesi tükenmiş istekleri acil durum ücretsiz yedek sağlayıcıya/modele yönlendirin.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Ayırıcı", "discovery": "Keşif", "discoverySubtitle": "Ücretsiz erişim için sağlayıcıları tarayın", + "conductor": "İletken", + "conductorSubtitle": "CLI-ajans filosu", "resilienceConnections": "Bağlantı Dayanıklılığı", "resilienceConnectionsSubtitle": "Soğuma, devre kesici, kilit durumu", "settingsModalityBridge": "Modality Köprüsü", - "settingsModalityBridgeSubtitle": "Görüntü/ses → yalnızca metin modelleri için metin yedeği" + "settingsModalityBridgeSubtitle": "Görüntü/ses → yalnızca metin modelleri için metin yedeği", + "commandPalette": { + "title": "Komut paleti", + "searchPlaceholder": "Sayfaları, ayarları, araçları ara...", + "clearSearch": "Aramayı Temizle", + "noResults": "Sonuç yok", + "navigate": "navigasyon", + "open": "açık", + "close": "kapat" + }, + "noResults": "Sonuç yok" }, "webhooks": { "title": "Web kancaları", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Ayar Güncellemesi Başarısız Oldu", "sync.token.created": "Eşitleme Belirteci Oluşturuldu", "sync.token.revoked": "Eşitleme Belirteci İptal Edildi" - } + }, + "mcpMetricCalls24h": "Aramalar (24s)", + "mcpMetricSuccessRate": "Başarı oranı", + "mcpMetricAvgDuration": "Ortalama süre", + "mcpMetricTopTool": "En iyi araç" }, "themesPage": { "title": "Temalar", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Yeni bir sürüm mevcut. Güncellemek için tıklayın.", "updateStarted": "Güncelleme başladı...", "reloadingPageAutomatically": "Sayfa otomatik olarak yeniden yükleniyor...", - "providerTopology": "Sağlayıcı Topolojisi" + "providerTopology": "Sağlayıcı Topolojisi", + "downloadDmg": "DMG İndir (macOS)", + "downloadDmgDescription": "OmniRoute masaüstü uygulamasının yeni bir sürümü mevcut. Lütfen güncellemek için macOS DMG yükleyicisini indirin ve kurun (mevcut: v{version}).", + "downloadExe": "EXE İndir (Windows)", + "downloadExeDescription": "OmniRoute masaüstü uygulamasının yeni bir sürümü mevcut. Lütfen güncellemek için Windows EXE yükleyicisini indirin ve kurun (mevcut: v{version}).", + "downloadAppImage": "AppImage'i İndir (Linux)", + "downloadAppImageDescription": "OmniRoute masaüstü uygulamasının yeni bir sürümü mevcut. Lütfen güncelleme için Linux AppImage paketini indirin (mevcut: v{version}).", + "downloadUpdate": "Güncellemeyi İndir", + "downloadUpdateDescription": "OmniRoute masaüstü uygulamasının yeni bir sürümü mevcut. Lütfen sisteminiz için ilgili uygulama formatını indirerek güncelleyin (mevcut: v{version}).", + "updateQueued": "v{version} için güncelleme sıraya alındı.", + "updateDockerRebuilding": "Docker görüntüsü arka planda yeniden oluşturuluyor.", + "updateWaitingRestart": "Yeni sürümle OmniRoute'un yeniden başlamasını bekliyorum.", + "updateInstalling": "v{version} yükleniyor.", + "updateRunning": "OmniRoute artık v{version} sürümünde çalışıyor.", + "updateCompleted": "OmniRoute v{version} sürümüne güncellendi.", + "updateDockerStillRebuilding": "Docker görüntüsü v{version} için hala yeniden oluşturuluyor.", + "updateInstallingBackground": "Arka planda v{version} kuruluyor.", + "updateWaitingVersion": "v{version} üzerinde OmniRoute'un geri dönmesini bekliyoruz.", + "updateDockerStillInProgress": "Docker yeniden inşa işlemi hala devam ediyor.", + "updateRestarting": "Hizmet yeniden başlatılıyor. OmniRoute'un çevrimiçi olmasını bekliyoruz...", + "updateTimeout": "Güncelleme başlatıldı, ancak v{version} zaman aşımından önce kullanılamadı. Sayfayı yenileyin veya sunucu günlüklerini kontrol edin.", + "updateTimedOut": "v{version} güncellemesi zaman aşımına uğradı.", + "updateStartFailed": "Güncelleme başlatılamadı.", + "noResponseStream": "Yanıt akışı alınamadı.", + "updateComplete": "Güncelleme tamamlandı!", + "updateFailed": "Güncelleme başarısız oldu.", + "updateNetworkError": "Ağ hatası — güncelleme sırasında bağlantı kesildi.", + "stepInstallPackage": "Paket Yükle", + "stepRebuildNativeModules": "Yerel Modülleri Yeniden Oluştur", + "stepRestartService": "Servisi Yeniden Başlat", + "stepComplete": "Tamamla", + "stepError": "Hata", + "updateCompleteTitle": "Güncelleme Tamamlandı!", + "updateFailedTitle": "Güncelleme Başarısız", + "updatingTitle": "OmniRoute Güncelleniyor...", + "reloadNotice": "Sayfa birkaç saniye içinde otomatik olarak yenilenecek.", + "retryNotice": "Lütfen tekrar deneyin veya CLI aracılığıyla manuel olarak güncelleyin.", + "restartNotice": "Bu sayfayı kapatmayın. Sistem otomatik olarak yeniden başlayacaktır.", + "reloadNow": "Şimdi Yenile", + "closeUpdate": "Kapat", + "retryUpdate": "Yeniden Dene", + "updateAvailableTitle": "Güncelleme Mevcut: v{version}{desktop}", + "desktopAppLabel": "(Masaüstü Uygulaması)", + "checkingForUpdates": "Güncellemeler kontrol ediliyor...", + "versionAvailableForDownload": "Sürüm v{version} indirilmeye hazır.", + "downloadingUpdate": "Güncelleme indiriliyor... {percent}% tamamlandı.", + "updateDownloaded": "İndirme başarıyla tamamlandı! Uygulamak için Yeniden Başlat ve Yükle'ye tıklayın.", + "autoUpdateFailed": "Otomatik güncelleme başarısız oldu: {reason}.", + "unknownUpdateError": "Bilinmeyen hata", + "versionAvailableDesktop": "Masaüstü uygulaması için v{version} sürümü mevcut.", + "manualUpdateRequired": "Bu kurulum türü için manuel güncelleme gereklidir.", + "restartAndInstall": "Yeniden Başlat & Kur", + "checkForUpdate": "Güncellemeleri Kontrol Et", + "manualUpdate": "Manuel Güncelleme", + "directDownloadHint": "Ya da ilgili yükleyici formatını doğrudan indirin:", + "releaseNotes": "Sürüm Notları", + "readMore": "Daha Fazla Oku", + "noAuthLabel": "Yetkisiz" }, "analytics": { "title": "Analitik", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Bu istek civarındaki kalıcı çağrı günlüklerinden çıkarıldı", "routeRecommendations": "Öneriler", "routeLimitations": "Sınırlamalar", - "routeNoKnownLimitations": "Bu açıklama için bilinen bir sınırlama yok." + "routeNoKnownLimitations": "Bu açıklama için bilinen bir sınırlama yok.", + "searchAnalyticsLoading": "Arama analitiği yükleniyor…", + "searchAnalyticsNoData": "Henüz arama verisi mevcut değil.", + "searchAnalyticsNoDataDescription": "Arama istekleri, /v1/search üzerinden ilk arama yapıldıktan sonra burada görünecektir.", + "searchAnalyticsToday": "{count} bugün", + "searchAnalyticsCachedRequests": "{count} önbelleğe alınmış istekler", + "searchAnalyticsApiCosts": "arama API maliyetleri", + "searchAnalyticsErrors": "{count} hata", + "searchAnalyticsNoErrors": "Hata yok", + "searchAnalyticsProviderBreakdown": "Sağlayıcı Dağılımı", + "searchAnalyticsQueries": "sorgular", + "searchAnalyticsEmptyDescription": "Web aramalarını yönlendirmeye başlamak için POST /v1/search kullanın.", + "searchAnalyticsFreeTier": "Ücretsiz katman mevcut: Serper (2,500/ay), Brave (2,000/ay), Exa (1,000/ay), Tavily (1,000/ay) — toplam 6,500+ ücretsiz arama/ay ile otomatik geçiş.", + "autoRoutingNoDataAvailable": "Otomatik yönlendirme analitiği mevcut değil. Metrikleri görmek için auto/ öneki ile istek yapın.", + "defaultVariantLabel": "Varsayılan", + "freeTierAvailable": "Ücretsiz katman mevcut" }, "apiManager": { "title": "API Anahtarları", @@ -2348,7 +2478,9 @@ "providerCount": "{count} sağlayıcı", "imageToTextBridgeAvailable": "Modality Bridge artık yalnızca metin tabanlı modeller için görüntüleri tanımlayabilir. /api/v1/images/understanding uygulandığında çevrimiçi oyun alanı kullanılabilir olacak.", "imageToTextBridgeCta": "Modality Bridge ayarlarında Görüntü→Metin köprüsünü yapılandırın", - "sttBridgeCta": "Modality Bridge ayarlarında Konuşma→Metin köprüsünü yapılandırın" + "sttBridgeCta": "Modality Bridge ayarlarında Konuşma→Metin köprüsünü yapılandırın", + "existingConnection": "Mevcut bağlantı", + "openrouterSttDescription": "OpenRouter konuşmadan metne modelleri, yapılandırılmış OpenRouter bağlantınızı kullanır. Ayrı bir kimlik bilgisi gereklidir." }, "search": { "searchQuery": "Arama Sorgusu", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Şuraya yapıştırın:", "copilotReloadInstruction": "Ardından VS Code'u yeniden yükleyin ve giriş isteminde API anahtarını ayarlayın.", "wireApiChatCompletions": "Sohbet Tamamlamaları (/sohbet/tamamlamalar)", - "wireApiResponses": "Yanıtlar API'si (/yanıtlar)" + "wireApiResponses": "Yanıtlar API'si (/yanıtlar)", + "cliproxyapiActionFailed": "Eylem başarısız oldu", + "cliproxyapiActionSucceeded": "İşlem başarılı oldu", + "cliproxyapiCheckUpdates": "Güncellemeleri Kontrol Et", + "cliproxyapiDescription": "Yukarı akış proxy yedekleme (Go tabanlı OAuth)", + "cliproxyapiHealth": "Sağlık", + "cliproxyapiHealthy": "Sağlıklı", + "cliproxyapiInstall": "Kurulum", + "cliproxyapiNotInstalledValue": "Yüklenmedi", + "cliproxyapiPort": "Port", + "cliproxyapiRequestFailed": "İstek başarısız oldu", + "cliproxyapiRestart": "Yeniden Başlat", + "cliproxyapiStart": "Başla", + "cliproxyapiStatusError": "Hata", + "cliproxyapiStatusInstalled": "Yüklü", + "cliproxyapiStatusNotInstalled": "Yüklenmedi", + "cliproxyapiStatusRunning": "Çalıştırılıyor", + "cliproxyapiStatusStopped": "Durduruldu", + "cliproxyapiStop": "Durdur", + "cliproxyapiUnhealthy": "Sağlıksız", + "cliproxyapiUnknown": "Bilinmiyor", + "cliproxyapiUpdate": "Güncelle", + "cliproxyapiUpdateAvailable": "Güncelleme mevcut: v{current} → v{latest}", + "cliproxyapiVersion": "Sürüm" }, "combos": { "title": "Kombolar", @@ -3236,6 +3391,8 @@ "pricingMissing": "Fiyatlandırma yok", "pricingAvailableShort": "fiyat var", "pricingMissingShort": "fiyat yok", + "fallbackOnlyOnQuotaExhaustion": "Sadece kota tükenmesi durumunda ilerleyin", + "fallbackOnlyOnQuotaExhaustionShort": "sadece kota yedeği", "warningRoundRobinSingleModel": "Round-robin en az 2 modelle en iyi sonucu verir.", "warningCostOptimizedPartialPricing": "{total} modelin yalnızca {priced} tanesinde fiyat bilgisi var. Yönlendirme kısmen maliyet odaklı olabilir.", "warningCostOptimizedNoPricing": "Bu kombo için fiyatlandırma verisi bulunamadı. Maliyet odaklı yönlendirme beklenmedik davranabilir.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Mod paketi ve ağırlıklandırma burada kalır; devre kesici çalışma zamanı durumu Sağlık sayfasında kalır.", "emailVisibilityHint": "Buradaki hesap e-postaları genel gizlilik anahtarına uyar.", "emailVisibilityTooltip": "Kombolar, sağlayıcılar ve kota ekranları genelinde hesap e-postalarını göstermek veya gizlemek için göz simgesini kullanın.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Adım adım (Sağlayıcı → Model)", + "builderModeGlobal": "Küresel model arama (Özel kombinasyon)", + "builderGlobalSearchPlaceholder": "Tüm sağlayıcılar arasında modelleri ara (örn. opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Hepsini Ekle", + "builderGlobalShortcuts": "Kısayollar:", + "builderGlobalNoResults": "\"{query}\" için model bulunamadı.", + "builderGlobalProviderLabel": "Sağlayıcı:", + "builderGlobalAccountCount": "{count, plural, one {# hesap} other {# hesap}}", + "builderGlobalAdded": "Eklendi", + "builderGlobalAdd": "Ekle", "manualModel": "Manuel model", "manualModelInvalid": "Modeli provider/model olarak girin.", "manualModelUnknownProvider": "Bilinmeyen sağlayıcı öneki.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Oturum Uygunluğu", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Yapışkanlık kapalı", "kimiPresetTitle": "Kimi Coding hazır ayarı", "kimiPresetDescription": "Yapılandırıldığında Kimi Code bağlantılarınıza (kimi-coding, kimi-web) otomatik geri dönüş ile birincil model olarak Kimi K3 (Moonshot API).", - "kimiPresetCta": "Hazır ayar ekle" + "kimiPresetCta": "Hazır ayar ekle", + "intelligentComboCount": "{count, plural, one {# zeki kombinasyon} other {# zeki kombinasyonlar}}", + "providersInScope": "{count, plural, one {# sağlayıcı kapsamda} other {# sağlayıcı kapsamda}}", + "savingModePack": "{pack} kaydediliyor…", + "errorTitle": "Kombinasyonlar yüklenemedi", + "errorDescription": "Şu anda kombinasyon verilerini yükleyemedik. Bağlantınızı kontrol edin ve tekrar deneyin.", + "errorId": "Hata Kimliği: {id}", + "errorRetry": "Tekrar Dene", + "comboLabel": "Kombinasyon" }, "costs": { "title": "Maliyetler", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL'si", "obsidianUsername": "Kullanıcı Adı", "obsidianPassword": "Şifre", - "obsidianTailscaleHint": "Mobilden bağlanıyorsanız localhost yerine Tailscale IP'nizi kullanın. Her iki cihaz da aynı Tailscale ağında olmalıdır." + "obsidianTailscaleHint": "Mobilden bağlanıyorsanız localhost yerine Tailscale IP'nizi kullanın. Her iki cihaz da aynı Tailscale ağında olmalıdır.", + "cloudSyncNotConfigured": "Bu örnekte bulut senkronizasyonu yapılandırılmamış.", + "notionConnect": "Bağlan", + "notionConnectFailed": "Bağlantı kurulamadı", + "notionConnected": "Bağlandı", + "notionConnectionFailed": "Bağlantı başarısız oldu", + "notionDescription": "Routed AI modelleri aracılığıyla Notion'da arama yapın, okuyun, sorgulayın ve yazın.", + "notionDisconnect": "Bağlantıyı Kes", + "notionDisconnectFailed": "Bağlantı kesilemedi", + "notionEnterToken": "Lütfen bir Notion entegrasyon belirteci girin", + "notionIntegrationHelp": "İç Entegrasyon Oluşturun at", + "notionIntegrationToken": "Notion Dahili Entegrasyon Tokeni", + "notionNotConnected": "Bağlı değil", + "notionTokenConfigured": "Token yapılandırıldı. Notion araçları MCP üzerinden mevcuttur." }, "endpoints": { "tabProxy": "Uç Nokta Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Sağlayıcı / Model", "noRemoteProviders": "Yapılandırılmış API anahtarı olan sağlayıcı yok", "selectProviderModel": "Bir model seçin", + "customBaseUrlLabel": "Özel temel URL (isteğe bağlı)", + "customModelIdLabel": "Özel model kimliği (isteğe bağlı)", + "customEndpointHelp": "OpenAI uyumlu bir /embeddings uç noktasını kullanın. Yerel uç noktalar izinlidir; bulut meta veri hedefleri engellenmiştir.", + "customEndpointSave": "Özel uç nokta uygula", + "customEndpointInvalid": "Geçerli bir HTTP(S) temel URL'si ve bir model kimliği girin veya her iki alanı da boş bırakın.", + "customEndpointSaveFailed": "Özel gömme uç noktası kaydedilemedi.", "staticEnabledLabel": "Statik Potion'ı Etkinleştir", "staticEnabledDesc": "potion-base-8M modelini yerel olarak indirin ve kullanın", "transformersEnabledLabel": "Transformers.js'i Etkinleştir", @@ -4258,7 +4443,9 @@ "cleaning": "Temizleniyor...", "cleanNow": "Şimdi temizle", "cleanupSuccess": "{count} nokta kaldırıldı", - "cleanupFailed": "Temizlik başarısız oldu" + "cleanupFailed": "Temizlik başarısız oldu", + "hostLabel": "Ana Bilgisayar", + "collectionLabel": "Koleksiyon" }, "rerank": { "enableLabel": "Rerank'i Etkinleştir", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 katmanlı geri dönüş diyagramı", "apiKeyMgmt": "API Anahtarı Yönetimi", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Ücretsiz sağlayıcıları ayarlayın", + "description": "Seçilen kayıtsız sağlayıcıları isteğe bağlı olarak etkinleştirin. Devam etmeden önce her sağlayıcının bildirimini ve sitesini gözden geçirin; kullanılabilirlik ve oran sınırlamaları üçüncü şahıslar tarafından kontrol edilmektedir.", + "loading": "Ücretsiz sağlayıcılar yükleniyor...", + "loadFailed": "Ücretsiz sağlayıcılar yüklenemedi.", + "alreadyConfigured": "Tüm uygun ücretsiz sağlayıcılar zaten yapılandırılmıştır.", + "reviewProviderSite": "Sağlayıcı sitesini ve şartlarını gözden geçirin", + "confirmation": "Bu üçüncü taraf sağlayıcıları inceledim ve OmniRoute'un seçilen bağlantıları oluşturmasını istiyorum.", + "setupSelected": "Seçilen sağlayıcıları ayarla", + "settingUp": "Kuruluyor...", + "setupFailed": "Seçilen sağlayıcılar kurulamadı. Mevcut olan hiçbir şey değiştirilmedi.", + "retryFailed": "Başarısız sağlayıcıları yeniden dene", + "orUseApiKey": "veya bir API anahtarı ile bağlanın", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "oluşturuldu", + "skipped": "zaten yapılandırılmış", + "failed": "başarısız" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Gerekli. Sağlayıcı API temel URL'si.", "iconUrlLabel": "Simge URL'si", "iconUrlHint": "İsteğe bağlı. Bu sağlayıcının simgesi olarak gösterilen görsel URL'si.", + "iconUrlInvalid": "Geçersiz simge URL'si. http(s):// veya data:image/*;base64 URL'si kullanın.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5045,7 +5233,7 @@ "clearAllModelsFailed": "Modeller temizlenemedi", "addConnectionToImport": "İçe aktarmayı etkinleştirmek için bir bağlantı ekleyin.", "noModelsConfigured": "Yapılandırılmış model yok", - "connectionCount": "{count, plural, one {# bağlantı} other {# bağlantı}}", + "connectionCount": "{count} connection(s)", "fetchingModels": "Mevcut modeller getiriliyor...", "failedFetchModels": "Modeller getirilemedi", "noFreeModelsFound": "Bu sağlayıcı için ücretsiz model bulunamadı — hiçbir şey içe aktarılmadı.", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "Bu sağlayıcının modellerini claude/<provider>/<model> ayna kimlikleri altında tanıtın, böylece Claude Code'un geçiş modeli keşfi bunları listeleyebilir. Varsayılan olarak kapalı — bunu etkinleştirmek, tüm müşteriler için katalog girişlerini iki katına çıkarır.", "ccAliasProviderLevelLabel": "Sağlayıcı varsayılan", "ccAliasModelOverridesLabel": "Model başına geçersiz kılmalar", - "ccAliasModelOverrideAriaLabel": "{name} için geçersiz kılma", + "ccAliasModelOverrideAriaLabel": "{modelId} için geçersiz kılma", "ccAliasStateInherit": "Devralmak", "ccAliasStateOn": "Açık", "ccAliasStateOff": "Kapalı", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Uyumlu (Üretim)", "tokenRefreshed": "Jeton başarıyla yenilendi", "tokenRefreshFailed": "Jeton yenileme başarısız oldu", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Oturum zaten geçerli", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Kimlik doğrulamayı uygula", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API anahtarını yapıştırın…", "zedSaving": "Kaydediliyor…", "zedImportAction": "İçe Aktar", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Otomatik İmleç oturum yenilemesini etkinleştir", + "cursorAgentNudgeBody": "Otomatik oturum yenilemesi için cursor-agent'ı yükleyin — bunun olmaması durumunda, Cursor bağlantılarının yaklaşık her 24 saatte bir periyodik olarak manuel olarak yeniden bağlanması gerekir.", + "cursorAgentNudgeDismiss": "Kapat", "zedManualImportFailed": "Manuel içe aktarma başarısız oldu", "zedManualImportSuccess": "Zed'den {provider} token'ı içe aktarıldı", "grokImportTitle": "Grok Build Kimlik Doğrulamasını İçe Aktar", @@ -5878,7 +6066,6 @@ "friendliai": "Sunucusuz çıkarım için ücretsiz katman — kredi kartı gerekmez", "gemini": "Sonsuza kadar ücretsiz: Gemini 2.5 Flash için günlük 1.500 istek — kredi kartı gerekmez, anahtarı aistudio.google.com adresinden alın", "gigachat": "GigaChat'i (Sber) bir API anahtarı ile bağlayın.", - "github-models": "github.com/settings/tokens adresinde 'models: read' kapsamına sahip bir GitHub PAT oluşturun", "gitlab": "Genel Code Suggestions API'si için GitLab kişisel erişim belirteci. gitlab.com kullanmadığınızda barındırılan bir temel URL yapılandırın.", "gitlawb-gmi": "API anahtarınızı Gitlawb Opengateway panelinden alın.", "gitlawb": "API anahtarınızı Gitlawb Opengateway panelinden alın.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Mevcut OAuth akışıyla Kimi Coding'i bağlayın.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Mevcut OAuth akışı ile OpenAI Codex'i bağlayın.", - "qwen": "Mevcut OAuth akışı ile Qwen Code'u bağlayın." + "qwen": "Mevcut OAuth akışı ile Qwen Code'u bağlayın.", + "github-models": "github.com/settings/tokens adresinde 'models: read' kapsamına sahip bir GitHub PAT oluşturun" }, "passthroughModelsDescription": "{provider} sağlayıcıya özgü model kimliklerini kabul eder. /models'den içe aktarın veya yönlendirme için özel kimlikler ekleyin.", "bedrockModelsDescription": "Amazon Bedrock modelleri AWS bölgesi kapsamındadır. /models'den içe aktarın veya seçilen bölgede etkin olan Bedrock model kimliklerini ekleyin.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Tüm yapılandırılmış bağlantılar tükendiğinde (kota, kredi veya süresi dolmuş), bu sağlayıcının anahtarsız katmanını geçici olarak kullanın. Anahtarsız katmanın bunları reddettiği (401) durumlarda, anonim istek göndermek yerine bu sağlayıcıyı atlamak için kapatın — önerilir.", "anonymousFallbackEnabled": "{provider} için anonim geri dönüş etkinleştirildi", "anonymousFallbackDisabled": "{provider} için anonim yedekleme devre dışı — tükenen bağlantılar bu sağlayıcıyı atlayacak", - "anonymousFallbackUpdateFailed": "Anonim yedek ayarını güncellemeyi başaramadı" + "anonymousFallbackUpdateFailed": "Anonim yedek ayarını güncellemeyi başaramadı", + "batchDeleteFailed": "Toplu silme başarısız oldu", + "batchDeleteNetworkError": "Toplu silme sırasında ağ hatası", + "batchUpdateFailed": "Toplu güncelleme başarısız oldu", + "batchUpdateNetworkError": "Toplu güncelleme sırasında ağ hatası", + "categoryAudio": "Ses", + "categoryCloudAgent": "Bulut Ajanı", + "categoryIde": "IDE", + "categoryLocal": "Yerel", + "categorySearch": "Ara", + "categoryWebCookie": "Web Çerezi", + "claudeExtraUsageBlockingDisabled": "Claude ek kullanım engellemesi devre dışı bırakıldı (ek kullanımına izin veriliyor)", + "claudeExtraUsageBlockingEnabled": "Claude ek kullanım engelleme etkinleştirildi (ek kullanım engellenecek)", + "claudeRoutingPreferenceDisabled": "Öneksiz Claude modelleri artık Claude Code'u tercih etmiyor", + "claudeRoutingPreferenceEnabled": "Öneksiz Claude modelleri artık Claude Code'u tercih ediyor", + "clearMediaFilter": "Temizle", + "cliproxyRoutingDisabled": "İstekler artık yerel OmniRoute (doğrudan) kullanıyor", + "cliproxyRoutingEnabled": "Artık istekler CLIProxyAPI üzerinden yönlendiriliyor (daha derin emülasyon)", + "codexLimitPolicyUpdated": "Codex limit politikası güncellendi", + "codexServiceModeUpdated": "Codex hizmet modu güncellendi", + "codexServiceTierActive": "Codex {tier} hizmet katmanı aktiftir", + "codexTierFastLabel": "Hızlı", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Command Code auth uygulaması başarısız oldu", + "commandCodeApplyingApproval": "Tarayıcı onaylandı, uygulanıyor…", + "commandCodeApplyingKey": "Tarayıcı onaylı anahtar uygulanıyor…", + "commandCodeApprovalInstructions": "Auth URL'sini açın, erişimi onaylayın, ardından dönen anahtarı/JSON'u/URL'yi aşağıya yapıştırın…", + "commandCodeAuthExpired": "Komut Kodu yetkilendirmesi süresi doldu", + "commandCodeConnected": "Komut Kodu bağlı", + "commandCodeConnectionAdded": "Komut Kodu bağlantısı eklendi", + "commandCodeLinkExpired": "Komut Kodu bağlantısı süresi doldu", + "commandCodeOpeningStudio": "Komut Kodu Stüdyosu Açılıyor…", + "commandCodePopupBlocked": "Açılır pencereler engellendi. Lütfen açılır pencerelere izin verin ve Command Code Connect'i tekrar deneyin.", + "commandCodeStartFailed": "Command Code auth başlatılamadı", + "connectionDeleted": "Bağlantı silindi", + "connectionFallback": "bağlantı", + "coolingConnectionsDescription": "Bu bağlantılar son isteğinde 429 (hız limiti) döndürdü. OmniRoute, zamanlayıcı süresi dolana kadar bunları atlayacak — manuel devre dışı bırakma gerekmez.", + "coolingConnectionsTitle": "Şu anda soğutma ({count})", + "failedDeleteAlias": "Alias silinemedi", + "failedDeleteConnection": "Bağlantı silinemedi", + "failedDistributeProxies": "Proxy'leri dağıtma başarısız oldu.", + "failedSaveModelEndpointSettings": "Model uç noktası ayarlarını kaydetme başarısız oldu", + "failedUpdateClaudeExtraUsagePolicy": "Claude ek kullanım politikasını güncellemeyi başaramadı", + "failedUpdateClaudeRoutingPreference": "Claude Code yönlendirme tercihleri güncellenemedi", + "failedUpdateCliproxyRouting": "CLIProxyAPI yönlendirmesi güncellenemedi", + "failedUpdateCodexLimitPolicy": "Codex limit politikasını güncellemeye başarısız olundu", + "failedUpdateCodexServiceMode": "Codex hizmet modu güncellenemedi", + "filterByMedia": "Medya", + "freeBadge": "Ücretsiz", + "kimiCodeApiKeyLabel": "Kimi Code API Anahtarı", + "modelTestFailed": "Model testi başarısız oldu", + "modelTestNetworkError": "Ağ hatası test etme modeli", + "networkError": "Ağ hatası", + "networkErrorDeletingAlias": "Alias silinirken ağ hatası", + "networkErrorSettingAlias": "Takma ad ayarlarken ağ hatası", + "noProvidersMatch": "Aramanızla eşleşen sağlayıcı yok.", + "noSavedProxies": "Kaydedilmiş proxy bulunamadı. Öncelikle Ayarlar → Proxy bölümüne proxy ekleyin.", + "pageLoadErrorDescription": "Şu anda sağlayıcı verilerini yükleyemedik. Bağlantınızı kontrol edin ve tekrar deneyin.", + "pageLoadErrorId": "Hata Kimliği: {id}", + "pageLoadErrorRetry": "Tekrar Dene", + "pageLoadErrorTitle": "Sağlayıcılar yüklenemedi", + "playgroundTitle": "Oyun Alanı", + "providerDetailConnectionFlexActive": "Codex flex hizmet katmanı bu bağlantı için aktiftir", + "providerDetailConnectionPriorityActive": "Codex öncelikli hizmet katmanı bu bağlantı için aktiftir", + "providerDetailGlobalFlexActive": "Global Codex flex hizmet katmanı aktiftir", + "providerDetailGlobalPriorityActive": "Küresel Codex öncelik hizmet katmanı aktiftir", + "proxiesDistributed": "{tagLabel}{total} bağlantı(lar) arasında dağıtılmış {assigned} proxy ataması.", + "rerankEndpoint": "Yeniden Sıralama", + "savedModelEndpointSettings": "Kaydedilmiş model uç noktası ayarları", + "searchByModelAria": "Model ile ara", + "selectSupportedEndpoint": "En az bir desteklenen uç noktayı seçin", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Ayarlar", @@ -6460,7 +6719,24 @@ "loadFailed": "Abonelik listesi yüklenemedi", "toggleFailed": "Anahtar değiştirilemedi", "refreshFailed": "Yenilenemedi", - "deleteFailed": "Silinemedi" + "deleteFailed": "Silinemedi", + "add": "Ekle", + "cancel": "İptal Et", + "configure": "Yapılandırın", + "copyEndpoint": "Kopyala Uç Noktası", + "coreEndpointHint": "Temel Uç Noktası İpucu", + "coreNodesHint": "Ana Düğüm İpucu", + "create": "Oluştur", + "deleteConfirm": "Silme Onayı", + "empty": "Boş", + "globalModeDescription": "Küresel Mod Açıklaması", + "localCoreHint": "Yerel Çekirdek İpucu", + "nodeSummary": "Düğüm Özeti", + "providerRequired": "Sağlayıcı Gerekiyor", + "providerRouting": "Sağlayıcı Yönlendirme", + "refresh": "Yenile", + "refreshInterval": "Yenileme Aralığı", + "ruleModeDescription": "Kural Modu Açıklaması" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Görüntü isteklerini yalnızca metin içeren modellere yönlendirmeden önce otomatik bir görselden metne geri dönüşü çalıştırın.", "visionBridgeEnabledLabel": "Etkin", "visionBridgeEnabledDesc": "Görüntü parçalarını ayıklanan metinle değiştiren çağrı öncesi köprüsünü açıp kapatın.", + "visionBridgeRerouteTextOnlyLabel": "Metin tabanlı modelleri yönlendir", + "visionBridgeRerouteTextOnlyDesc": "Seçilen modelin görüntü girişi yoksa, görüntüler de dahil olmak üzere tam isteği köprü modeline gönderin.", "visionBridgeModel": "Köprü Modeli", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Görsel desteği olan herhangi bir OmniRoute model kimliği burada kullanılabilir.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API anahtarı manage kapsamına sahip değil.", "BYPASS_PREFIX_NOT_ALLOWED": "Bir veya daha fazla önek spawn destekli rotaları hedefliyor ve atlanamaz.", "GENERIC": "authz ayarları güncellenemedi." - } + }, + "remove": "Kaldır" }, "resilienceBaseCooldownLabel": "Temel bekleme süresi", "scopeLabel": "Kapsam", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Ses testi yapılıyor…", "modalityBridgeAudioTestOk": "Ses Köprüsü Tamam — {count} klip {model} tarafından transkribe edildi", "modalityBridgeAudioTestNoop": "Ses Köprüsü etkinleştirilemedi (hedef ses desteği verebilir, STT sağlayıcısı bağlı değil veya köprü devre dışı)", - "modalityBridgeAudioTestError": "Ses testi başarısız oldu: {message}" + "modalityBridgeAudioTestError": "Ses testi başarısız oldu: {message}", + "modelRoutingDescriptionPlaceholder": "Route Opus modellerini frontier kombinasyonuna yönlendir", + "cliproxyapiFallbackCodes": "Cliproxyapi Yedek Kodları", + "cliproxyapiFallbackDescription": "Cliproxyapi Yedek Açıklaması", + "cliproxyapiHealthLabel": "Cliproxyapi Sağlık Etiketi", + "cliproxyapiImportFailed": "Cliproxyapi İçe Aktarma Başarısız Oldu", + "cliproxyapiImportResult": "Cliproxyapi İçe Aktarma Sonucu", + "cliproxyapiInvalidUrl": "Cliproxyapi Geçersiz URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi Yaşam Döngüsü Bildirimi Sonrası", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Yaşam Döngüsü Bildirimi Önce", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi Yaşam Döngüsü Bildirimi Bağlantısı", + "cliproxyapiPortLabel": "Cliproxyapi Port Etiketi", + "cliproxyapiStatusLabel": "Cliproxyapi Durum Etiketi", + "cliproxyapiVersionLabel": "Cliproxyapi Sürüm Etiketi", + "collection": "Koleksiyon", + "errorPage": { + "description": "Şu anda ayarları yükleyemedik. Lütfen birkaç saniye içinde tekrar deneyin.", + "errorId": "Hata Kimliği: {id}", + "retry": "Tekrar Dene", + "title": "Ayarlar yüklenemedi" + }, + "host": "Ana Bilgisayar", + "notInstalled": "Yüklenmedi", + "oneproxyActions": "Oneproxy Eylemleri", + "oneproxyActive": "Oneproxy Aktif", + "oneproxyAnonymity": "Oneproxy Anonimliği", + "oneproxyCountry": "Oneproxy Ülkesi", + "oneproxyDelete": "Oneproxy Sil", + "oneproxyEmpty": "Oneproxy Boş", + "oneproxyHost": "Oneproxy Sunucusu", + "oneproxyLatency": "Oneproxy Gecikmesi", + "oneproxyProtocol": "Oneproxy Protokolü", + "oneproxyQuality": "Oneproxy Kalitesi", + "oneproxySyncFailed": "Senkranizasyon başarısız: {error}", + "oneproxySyncSuccess": "Senkran {total} proxy ({added} yeni, {updated} güncellenmiş)", + "proxyDocumentationSocks5DescAfter": "Proxy Belgeleri Socks5 Açıklaması Sonrası", + "proxyFreePoolAddProxy": "Proxy Ücretsiz Havuz Proxy Ekle", + "proxyFreePoolAdding": "Proxy Ücretsiz Havuz Ekleme", + "proxyFreePoolSelectProxy": "Proxy Ücretsiz Havuz Proxy Seçin", + "proxyStatusActive": "Proxy Durumu Aktif", + "proxyStatusInactive": "Proxy Durumu Pasif", + "routingAddEntry": "Giriş Ekle", + "settingSaveFailed": "Ayar Kaydetme Başarısız Oldu", + "settingSaved": "Ayarlar Kaydedildi", + "skillsmpApiKeyHintAfter": ". Hız limiti: {limit} istek/gün.", + "skillsmpApiKeyHintBefore": "API anahtarınızı alın şuradan", + "syncFailed": "Senkranizasyon başarısız oldu", + "unhealthy": "Sağlıksız", + "oneproxyDescription": "1proxy topluluğu platformundan ücretsiz doğrulanmış proxy'leri al ve döndür", + "oneproxySyncing": "Senkranizasyon yapılıyor...", + "oneproxySyncNow": "Şimdi Senkronize Et", + "oneproxyClearAll": "Tümünü Temizle", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Tüm 1proxy proxy'lerini temizle?", + "memorySkillsSkillsmpDescription": "SkillsMP'ye bağlanarak pazardan becerileri keşfedin ve yükleyin.", + "memorySkillsActiveProviderDescription": "Beceriler sayfasının arama ve yükleme için hangi sağlayıcıyı kullanacağını seçin.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Pazar Yeri", + "memorySkillsSkillsmpProviderDescription": "Kimlik doğrulamalı pazar yeri (SkillsMP API anahtarınızı kullanır).", + "memorySkillsSkillsshProviderTitle": "skills.sh Dizini", + "memorySkillsSkillsshProviderDescription": "Herkese Açık dizin sağlayıcısı (API anahtarı gerekmez).", + "routingCcBridgeCatalogName": "Anthropic-uyumlu CC köprüsü", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "OAuth ile verilen token'lar ile yerel Claude sağlayıcısı.", + "routingCcBridgeName": "Claude-Code Köprüsü", + "routingCcBridgeDescription": "API anahtarları kullanarak relay uç noktaları (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Özel sağlayıcı.", + "routingUnknownOpKind": "Bilinmeyen op türü: {kind}", + "routingInvalidJson": "Geçersiz JSON: {error}", + "routingConfigMustBeObject": "Config bir JSON nesnesi olmalıdır", + "routingEnabledMustBeBoolean": "`enabled` true veya false olmalıdır", + "routingPipelineMustBeArray": "`pipeline` bir ops dizisi olmalıdır", + "routingPipelineTooLong": "Pipeline 50 ops'ı geçemez", + "routingOpMissingKind": "Op #{index}: eksik veya geçersiz `kind`", + "routingOpUnknownKind": "Op #{index}: bilinmeyen tür \"{kind}\"", + "routingJsonEditorHide": "JSON düzenleyicisini gizle", + "routingJsonEditorImportExport": "JSON İçe Aktar / Dışa Aktar", + "routingJsonEditorLabel": "JSON (düzenle ve uygula veya içe aktarmak için yapıştır)", + "routingApplyJson": "JSON Uygula", + "routingTransformsFootnote": "Tüm dönüştürme işlemleri yeniden çalıştırıldığında idempotenttir. Değişiklikler bir sonraki istekte hemen etkili olur.", + "cliproxyapiUnknown": "Bilinmiyor", + "cliproxyapiVersion": "Sürüm", + "cliproxyapiHealth": "Sağlık", + "cliproxyapiPort": "Port", + "qdrantHost": "Ana Bilgisayar", + "qdrantCollection": "Koleksiyon" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "Tam", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "Varsayılan", + "off": "Kapalı", + "lite": "Hafif", + "standard": "Standart", + "aggressive": "Agresif", + "ultra": "Ultra", + "responsesToolOutput": "Yanıtlar aracı çıktısı" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Yığında en son çalışır (RTK/Caveman metni temizledikten sonra OmniGlyph geri kalanını görüntülere dönüştürür) ve ayrıca omniglyph modu aracılığıyla bağımsız olarak çalışır. Bu bir önizlemedir ve uçtan uca doğrulama tamamlanana kadar varsayılan olarak kapalı kalır.", "saved": "Kaydedildi.", "saveFailed": "Kaydedilemedi.", - "enableAria": "OmniGlyph motorunu etkinleştir" + "enableAria": "OmniGlyph motorunu etkinleştir", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Gömülü Servisler", @@ -9127,7 +9500,49 @@ "unableToLoad": "Sistem metrikleri yüklenemedi", "product": "Ürün", "resources": "Kaynaklar", - "company": "Şirket" + "company": "Şirket", + "tokenHealthTooltips": { + "allHealthy": "Tüm jetonlar sağlıklı", + "needsAttention": "Bazı jetonların dikkate alınması gerekiyor", + "refreshFailures": "Token yenileme hataları tespit edildi", + "unknown": "Sağlık durumu bilinmiyor" + }, + "systemMonitor": { + "metricsAriaLabel": "Sistem metrikleri", + "memory": "Hafıza", + "memoryShort": "mem", + "uptime": "Çalışma Süresi", + "ariaLabel": "Sistem izleme", + "title": "Sistem İzleyici", + "version": "Sürüm", + "connections": "Bağlantılar", + "circuitBreakers": "Devre Kesiciler", + "open": "{count} açık", + "memoryUsage": "Bellek kullanımı" + }, + "never": "Asla", + "justNow": "Şu anda", + "minutesAgo": "{count}d önce", + "hoursAgo": "{count}saat önce", + "tokens": "Jetonlar", + "costs": "Maliyetler", + "autoRefresh": "Otomatik Yenileme ({seconds}s)", + "toggleAutoRefresh": "Otomatik yenilemeyi aç/kapat", + "activeRequests": "Aktif Talepler", + "totalRequests": "Toplam İstekler", + "totalInputTokens": "Toplam Girdi Token'ları", + "model": "Model", + "provider": "Sağlayıcı", + "requests": "İstekler", + "lastUsed": "Son Kullanım", + "inputTokens": "Girdi Jetonları", + "totalTokens": "Toplam Tokenler", + "inputCost": "Girdi Maliyeti", + "outputCost": "Çıktı Maliyeti", + "noUsageData": "Henüz kullanım kaydedilmedi. Burada veri görmek için bazı istekler yapın.", + "account": "Hesap", + "accountLabel": "Hesap {id}", + "noAccountUsage": "Henüz hesap spesifik kullanım kaydedilmedi. Verileri burada görmek için OAuth hesapları kullanarak istek yapın." }, "auth": { "welcome": "Hoş geldiniz", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Uygulama Verileri ile Sıfırla", + "resetViaAppDataDescription": "Şifrenizi sıfırlamak için ayar dosyasını uygulama veri dizininden silin:", + "quitDesktopApp": "OmniRoute masaüstü uygulamasını tamamen kapatın", + "navigateToAppDataDirectory": "Uygulama veri dizinine gidin:", + "checkSystemAppDataFolder": "(Sistem uygulama veri klasörünüzü kontrol edin)", + "relaunchDesktopFreshSetup": "OmniRoute masaüstü uygulamasını yeniden başlatın — yeni bir kurulum başlayacak", + "alternativeSetPasswordTitle": "Alternatif: Yeni Şifre Belirle", + "alternativeSetPasswordDescription": "Sunucu ortam dosyası aracılığıyla yeni bir başlangıç şifresi belirleyin:", + "openServerEnvFilePrefix": "Açık", + "relaunchDesktopApp": "OmniRoute masaüstü uygulamasını yeniden başlatın", + "codexLinkInvalidOrExpired": "Bu bağlantı geçersiz veya süresi dolmuş.", + "codexValidationServerError": "Bu bağlantıyı doğrulamak için sunucuya ulaşılamadı.", + "codexSaveConnectionError": "Bağlantı kaydedilemedi. Bağlantı süresi dolmuş olabilir.", + "codexDeviceLoginDisabled": "Bu OpenAI hesabı için cihaz kodu girişi devre dışı. Bunu ChatGPT güvenlik ayarlarında etkinleştirin (veya çalışma alanı yöneticinize sorun).", + "codexAuthorizationTimedOut": "Yetkilendirme süresi doldu. Yeniden denemek için Başlat'a tıklayın.", + "authenticationCancelled": "Kimlik doğrulama iptal edildi.", + "unexpectedAuthenticationError": "Kimlik doğrulama sırasında beklenmedik bir hata oluştu. Lütfen tekrar deneyin.", + "connectOpenAiCodexTitle": "OpenAI Codex'e Bağlan", + "codexConnectDescription": "Bu bağlantıyı tamamlamak için bir ChatGPT hesabını yetkilendirin.", + "validatingCodexLink": "Bağlantı doğrulanıyor…", + "codexGenerateCodeDescription": "Aşağıdaki butona tıklayarak tek kullanımlık bir kod oluşturun, ardından OpenAI'ye giriş yapın.", + "startCodexFlow": "Başla", + "requestingOpenAiCode": "OpenAI'den kod talep ediliyor…", + "codexVerificationInstructions": "1. OpenAI doğrulama sayfasını açın ve 2. bu kodu girin. Bu sayfa yetkilendirdiğinizde otomatik olarak güncellenir.", + "yourCode": "Kodunuz", + "openVerificationPage": "Doğrulama sayfasını açın", + "copyUrlShort": "URL'yi Kopyala", + "savingConnection": "Bağlantı kaydediliyor…", + "codexConnected": "Bağlandı!", + "codexConnectionRegistered": "Codex hesabı kaydedildi. Bu sekmeyi kapatabilirsiniz.", + "tryAgain": "Tekrar dene", + "traeAuthorizationSuccess": "Trae yetkilendirmesi ✓", + "traeAuthorizationFailed": "Trae yetkilendirmesi başarısız oldu", + "closeAuthorizationWindow": "Bu pencereyi kapatabilirsiniz.", + "returnToDashboard": "Gösterge paneline dön.", + "resetViaAppData": "Uygulama Verileri ile Sıfırla", + "deleteSettingsToReset": "Şifrenizi sıfırlamak için ayarlar dosyasını uygulama veri dizininden silin:", + "quitAppCompletely": "OmniRoute masaüstü uygulamasını tamamen kapatın", + "navigateToAppData": "Uygulama veri dizinine gidin", + "checkAppDataFolder": "Sistem uygulama veri klasörünüzü kontrol edin", + "deleteSettingsJson": "Sil", + "relaunchAppFresh": "OmniRoute masaüstü uygulamasını yeniden başlatın — yeni bir kurulum başlayacak", + "alternativeSetPassword": "Alternatif: Yeni Şifre Belirle", + "setNewPasswordViaEnv": "Sunucu ortam dosyası aracılığıyla yeni bir başlangıç şifresi belirleyin:", + "openServerEnv": "Açık", + "inDataDirectory": "veri dizininde", + "addOrUpdate": "Ekle veya güncelle", + "deleteAndRelaunch": "Sil", + "settingsJson": "settings.json", + "fromDataDir": "veri dizininden", + "relaunchApp": "OmniRoute masaüstü uygulamasını yeniden başlatın" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "AI Altyapınızı Sadeleştirmeye Hazır mısınız?", "ctaDescription": "OmniRoute ile AI entegrasyonlarını sadeleştiren geliştiricilere katılın. Açık kaynaklıdır ve başlamak ücretsizdir.", "startFree": "Ücretsiz Başla", - "readDocumentation": "Dokümantasyonu Oku" + "readDocumentation": "Dokümantasyonu Oku", + "company": "Şirket", + "pricing": "Fiyatlandırma", + "apiReference": "API Referansı", + "helpCenter": "Yardım Merkezi", + "about": "Hakkında", + "blog": "Blog", + "contact": "İletişim", + "terms": "Şartlar", + "privacy": "Gizlilik", + "license": "Lisans", + "footerDescription": "Modern AI altyapısı için birleşik arayüz. Güvenli, gözlemlenebilir ve ölçeklenebilir.", + "communityDiscussions": "Topluluk Tartışmaları" }, "docs": { "title": "Dokümantasyon", @@ -9349,7 +9827,7 @@ "featureCloudSyncText": "Şifrelenmiş kimlik bilgileri ve otomatik yük devretme ile uzaktan erişim için yapılandırmanızı Cloudflare Workers ile senkronize edin.", "providersAcrossConnectionTypes": "Üç bağlantı türünde toplam {count} sağlayıcı.", "manageProviders": "Sağlayıcıları Yönet", - "providersCount": "{count, plural, one {# sağlayıcı} other {# sağlayıcı}}", + "providersCount": "{count} providers", "providerTypeFree": "Ücretsiz Katman", "providerTypeOAuth": "OAuth", "providerTypeApiKey": "API Anahtarı", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Temsilciler arası iletişim ve araç paylaşımı için aracıları ACP kaydı aracılığıyla kaydedin ve yönetin.", "protocolAcpStep1": "Kayıtlı ACP temsilcilerini görüntülemek için Kontrol Paneli → Temsilciler seçeneğine gidin.", "protocolAcpStep2": "Yeteneklere ve uç nokta yapılandırmasına sahip yeni aracıları kaydedin.", - "protocolAcpStep3": "Temsilci iletişim kanallarını yapılandırmak için CLI Araçlarını kullanın." + "protocolAcpStep3": "Temsilci iletişim kanallarını yapılandırmak için CLI Araçlarını kullanın.", + "metadataTitleTemplate": "%s — OmniRoute Belgeleri", + "metadataDefaultTitle": "OmniRoute Dokümantasyonu", + "metadataDescription": "OmniRoute AI geçidi için kapsamlı belgeler — kurulum, API, sıkıştırma, dağıtım ve daha fazlası.", + "layoutNavTitle": "OmniRoute Belgeleri", + "layoutHomeLink": "Belgeler Ana Sayfası", + "layoutDashboardLink": "← Gösterge Tablosuna Geri Dön", + "homeTitle": "OmniRoute Dokümantasyonu", + "homeMetadataDescription": "AI'nizi yönlendirmek, sıkıştırmak ve ölçeklendirmek için ihtiyacınız olan her şey - kurulum kılavuzları, API referansı, sıkıştırma, dağıtım ve daha fazlası.", + "homeTwitterDescription": "OmniRoute AI geçidi için kapsamlı belgeler", + "homeDescription": "AI'nizi yönlendirmek, sıkıştırmak ve ölçeklendirmek için ihtiyacınız olan her şey", + "homeSearchHint": "Belgeleri aramak için Ctrl K tuşuna basın", + "featuredQuickStartTitle": "Hızlı Başlangıç", + "featuredQuickStartDescription": "OmniRoute'u 3 dakikada çalıştırın", + "featuredAutoComboTitle": "Otomatik Kombinasyon Rehberi", + "featuredAutoComboDescription": "OmniRoute sizin için en iyi AI'yı seçsin", + "featuredProvidersTitle": "Sağlayıcılar Kılavuzu", + "featuredProvidersDescription": "Dakikalar içinde AI sağlayıcılarını bağlayın", + "nonTechUsersTitle": "Teknik Olmayan Kullanıcılar İçin", + "nonTechUsersSubtitle": "Hızla başlayın — teknik bir geçmişe ihtiyaç yok", + "techUsersTitle": "Teknik Kullanıcılar İçin", + "techUsersSubtitle": "Mimari, API'ler ve iç yapılar üzerine derinlemesine inceleme", + "apiExplorerMetadataTitle": "API Keşif Aracı — OmniRoute Belgeleri", + "apiExplorerMetadataDescription": "Etkileşimli API keşif aracı — OmniRoute uç noktalarını gerçek zamanlı yanıtlarla canlı deneyin", + "apiExplorerTitle": "API Keşif Aracı", + "apiExplorerDescription": "OmniRoute uç noktalarını canlı olarak deneyin. Bir uç nokta seçin, isteğinizi yapılandırın ve yanıtı gerçek zamanlı olarak görün.", + "apiExplorerSseStarted": "SSE akışı başlatıldı — gerçek zamanlı çıktı için terminal/geliştirici araçlarını kontrol edin.", + "apiExplorerError": "Hata: {message}", + "apiExplorerAuth": "kimlik doğrulama", + "apiExplorerResponseLabel": "Yanıt", + "apiExplorerSelectEndpoint": "Keşfetmek için bir uç nokta seçin", + "apiExplorerChooseApi": "Kenar çubuğundan bir API seçin, detayları görün ve canlı deneyin", + "feedbackThanks": "Geri bildiriminiz için teşekkürler!", + "feedbackQuestion": "Bu sayfa faydalı oldu mu?", + "pageMetadataTitle": "{title} — OmniRoute Belgeleri", + "pageMetadataDescription": "OmniRoute belgeleri: {title}", + "breadcrumb": "Ekmek Kırıntısı", + "apiReferenceTable": { + "parameters": "Parametreler", + "name": "İsim", + "type": "Türü", + "description": "Açıklama", + "returns": "İade Edilir", + "typePrefix": "Tür:" + } }, "legal": { "privacyPolicy": "Gizlilik Politikası", @@ -9957,7 +10479,42 @@ "successMessage": "{providerName} hesabınız bağlandı.", "done": "Bitti", "error": "Bağlantı başarısız oldu", - "tryAgain": "Tekrar dene" + "tryAgain": "Tekrar dene", + "errorSessionIncomplete": "OAuth oturumu eksik (yönlendirme URI'si veya kod doğrulayıcı eksik). Bağlantıyı yeniden başlatın ve tekrar deneyin.", + "errorExchangeFailed": "Değişim başarısız oldu", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: Varsayılan Google OAuth kimlik bilgileri yalnızca localhost'ta çalışır. Uzaktan kullanım için, kendi OAuth kimlik bilgilerinizi ortam değişkenleri aracılığıyla yapılandırın: ANTIGRAVITY_OAUTH_CLIENT_ID ve ANTIGRAVITY_OAUTH_CLIENT_SECRET. 'Uzaktan Sunucuda OAuth' başlıklı README bölümüne bakın.", + "errorSaveFailed": "Kaydetme başarısız oldu", + "errorAuthorizationFailed": "Yetkilendirme başarısız oldu", + "errorAuthorizationTimeout": "Yetkilendirme zaman aşımı", + "errorRequestFailed": "İstek başarısız oldu", + "errorCallbackServerFailed": "Geri çağırma sunucusu başlatılamadı", + "errorBrowserUnavailable": "Tarayıcı OAuth, mevcut ortamda bu sağlayıcı için kullanılamıyor. Bunun yerine desteklenen kimlik doğrulama yöntemini kullanın.", + "errorStateMismatch": "OAuth durumu uyuşmazlığı. Bağlantıyı yeniden başlatın ve tekrar deneyin.", + "errorImportAccessToken": "Erişim belirteci içe aktarılamadı", + "errorSessionNotInitialized": "OAuth oturumu başlatılmadı. Bağlantı akışını yeniden başlatın ve tekrar deneyin.", + "errorNoAuthorizationCode": "Yetki kodu bulunamadı. Geri çağırma URL'sini veya Kimlik Doğrulama Kodunu yapıştırın.", + "tabDeviceCode": "Cihaz Kodu", + "tabBrowserLogin": "Tarayıcı Girişi", + "tabImportAuthJson": "auth.json dosyasını içe aktar", + "tabPasteApiKey": "API Anahtarını Yapıştırın", + "windsurfPasteDescription": "Windsurf / VS Code IDE'de, komut paletinden \"Windsurf: Provide Auth Token\" komutunu çalıştırın (veya Jupyter \"Get Windsurf Authentication Token\" butonuna tıklayın), ardından gösterilen token'ı kopyalayın ve aşağıya yapıştırın. windsurf.com/show-auth-token adresini doğrudan açmak yalnızca \"Yönlendiriliyor\" sayfasını gösterir — akışı başlatan IDE olmalıdır.", + "grokAuthJsonDescription": "~/.grok/auth.json dosyasının TAM içeriğini yapıştırın (sadece JWT \"anahtar\" alanını değil). Boş bir JWT'nin refresh_token'ı yoktur, bu nedenle bağlantı süresi dolduktan sonra kesilir (#7610). Mümkünse, mevcut olduğunda özel İçe Aktarma auth.json penceresini tercih edin.", + "devinDesktopPasteDescription": "Mevcut bir Devin API anahtarını kimlik doğrulaması yapılmış bir Devin oturumundan yapıştırın. Anahtarın dışa aktarımının mevcut olup olmadığı ve adımları Devin sürümüne ve hesaba göre değişiklik gösterir.", + "devinPasteDescription": "WINDSURF_API_KEY'inizi sağlayın (devin auth login ile veya Windsurf IDE \"Windsurf: Provide Auth Token\" komutu aracılığıyla alınmıştır).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Anahtarı / Jetonu", + "saving": "Kaydediliyor…", + "saveConnection": "Bağlantıyı Kaydet", + "gheDescription": "GitHub Enterprise örneğinizin temel URL'sini girin (örneğin, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL'si gereklidir", + "gitlabDuoSetupTitle": "GitLab Duo OAuth kurulumu", + "gitlabDuoSetupMessage": "GitLab Duo OAuth yapılandırılmamış. {applicationsUrl} adresinde bir OAuth uygulaması kaydedin, yönlendirme URI'sı {redirectUri} ve kapsamlar \"{scopes}\" ile birlikte, ardından {clientIdEnv} (ve isteğe bağlı olarak {clientSecretEnv}) ayarlayın ve yeniden başlatın.", + "gitlabDuoSetupDescription": "Uygulama kaydedildikten ve bu OmniRoute örneğinde ortam değişkenleri ayarlandıktan sonra, OAuth oturum açma işlemini başlatmak için Devam'a tıklayın.", + "continue": "Devam Et" }, "cursorAuthModal": { "title": "İmleç IDE'sini bağlayın", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Daha Fazla Yükle", - "loadingMore": "Daha fazla yükleniyor..." + "loadingMore": "Daha fazla yükleniyor...", + "correlationId": "Korelasyon Kimliği", + "group": { + "showAllRows": "Tüm satırları göster", + "showLatestPerCorrelation": "Sonuçları korelasyon ID'sine göre göster.", + "grouped": "Gruplandı" + }, + "running": "çalıştırma", + "interval": { + "decrease": "Aralığı Azalt", + "title": "Saniye cinsinden otomatik yenileme aralığı", + "increase": "Aralığı artırın" + }, + "status": { + "inProgress": "Devam ediyor", + "recoveredByRetry": "Tekrar deneyerek kurtarıldı", + "goToParent": "Üst isteğe git", + "healedTitle": "Başarısız, {count} denemeden sonra kurtarıldı", + "healed": "iyileşti", + "failedTitle": "Tüm {count} denemeler başarısız oldu", + "failed": "başarısız", + "pinnedTitle": "Bağlam önbellek oturumu sabitleme ile seçilen model", + "pinned": "sabitlenmiş" + }, + "attempts": "denemeler", + "detail": { + "collapse": "{title} Kapat", + "expand": "{title} genişlet", + "copyTitle": "{title}'ı Kopyala", + "copied": "Kopyalandı!", + "copy": "Kopyala", + "autoscrollOn": "Otomatik Kaydırma: açık", + "autoscrollOff": "Otomatik Kaydırma: kapalı", + "payload": { + "clientRawRequest": "İstemci Ham İsteği", + "clientRequest": "Müşteri Talebi", + "openaiRequest": "OpenAI İsteği", + "providerRequest": "Sağlayıcı Talebi", + "providerResponse": "Sağlayıcı Yanıtı", + "clientResponse": "Müşteri Yanıtı", + "pipelineError": "Pipeline Hatası" + }, + "payloadMissing": "Bu günlük girişi için ayrıntılı yük nesnesi artık mevcut değil.", + "payloadCorrupt": "Ayrıntılı yük nesnesi ayrıştırılamadı.", + "notAvailable": "N/A", + "semanticCache": "Anlamsal (OmniRoute)", + "upstreamCache": "Yukarı Akış (Sağlayıcı)", + "ariaLabel": "İstek günlüğü ayrıntısı", + "completed": "Tamamlandı", + "upstreamStatus": "Yukarı Akış: {status}", + "statusDiscrepancy": "OmniRoute {provider} döndürmesine rağmen {status} döndü", + "previousRequest": "Önceki istek", + "nextRequest": "Sonraki istek", + "close": "Detay modülünü kapat", + "startedAt": "Başlangıç Tarihi", + "endedAt": "Bittiği Zaman", + "duration": "Süre", + "model": "Model", + "provider": "Sağlayıcı", + "account": "Hesap", + "input": "Girdi", + "totalIn": "Toplam Giriş: {value}", + "cacheRead": "Önbellek Okuma: {value}", + "cacheWrite": "Önbellek Yaz: {value}", + "compressed": "Sıkıştırıldı: {from} → {to} ({percent}% tasarruf edildi)", + "output": "Çıktı", + "totalOut": "Toplam Çıkış: {value}", + "reasoning": "Gerekçe: {value}", + "requestedModel": "İstenen Model", + "requestProtocol": "İstek Protokolü", + "cacheSource": "Önbellek Kaynağı", + "modelPinning": "Model Sabitleme", + "activeModelPinning": "Aktif — oturum sabitleme ile seçilen model", + "rotated": "Döndürüldü: {initial} -> {final}", + "apiKey": "API Anahtarı", + "noApiKey": "API anahtarı yok", + "combo": "Kombinasyon", + "error": "Hata", + "unblockAll": "Tümünü engellemeyi kaldır", + "cleared": "Temizlendi", + "unblock": "Engelleme Kaldır", + "relatedRequests": "İlgili Talepler ({count})", + "current": "geçerli", + "detailStatus": "Detay Durumu", + "loadingDetails": "İstek ayrıntıları yükleniyor...", + "providerEventStream": "Sağlayıcı Olay Akışı", + "clientEventStream": "İstemci Olay Akışı", + "eventStream": "Olay Akışı", + "responsePayloadLegacy": "Yanıt Yükü (Eski)", + "requestPayloadLegacy": "İstek Yükü (Eski)", + "noPayload": "Bu günlük girişi için kullanılabilir yük verisi yok.", + "correlationId": "Korelasyon Kimliği", + "correlationIdValue": "Korelasyon Kimliği: {id}", + "detailedPayloadInfo": "Yeni istekler için dört aşamalı istemci/sağlayıcı yük görünümünü istiyorsanız önce ayrıntılı günlüğü etkinleştirin." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} devre dışı bırakıldı", "providerAdded": "{provider} eklendi", "add": "Ekle", - "manualApiKey": "Manuel API anahtarı kullanın" + "manualApiKey": "Manuel API anahtarı kullanın", + "createDahlTokenFailed": "Dahl token oluşturulamadı", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Proxy'yi yapılandırın", + "providerProxyTitleConfigured": "Proxy yapılandırıldı: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS kısıtlamalı — şartları inceleyin", "caution": "Dikkat — kişisel kullanım / proxy maddeleri", "ok": "Genel olarak izin verici" - } + }, + "allProviders": "Tüm sağlayıcılar", + "noApiKeyRequired": "API anahtarı gerekmez" }, "providerHealthAutopilot": { "title": "Sağlayıcı Sağlığı Otopilotu", @@ -12390,7 +13047,11 @@ "on": "AÇIK", "off": "KAPALI", "availableProviders": "Kullanılabilir sağlayıcılar ({count})", - "noProviderOverrides": "Geçersiz kılma yok — tüm etkin sağlayıcılar varsayılan modelleriyle katılacaktır" + "noProviderOverrides": "Geçersiz kılma yok — tüm etkin sağlayıcılar varsayılan modelleriyle katılacaktır", + "resetFailed": "Sıfırlama başarısız oldu", + "resetSuccess": "Ayarlar varsayılanlara sıfırlandı", + "running": "Çalıştırılıyor...", + "testFailed": "Test başarısız oldu" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI), OmniRoute'un kurucu Açık Kaynak Dostudur", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Sağlayıcı, bu görüntü isteği için görsel desteği sağlamıyor.", "capabilityFilter.toolsMismatch": "Sağlayıcı araç çağrısını desteklemiyor", "capabilityFilter.structuredOutputMismatch": "Sağlayıcı yapılandırılmış çıktıyı desteklemiyor", - "capabilityFilter.contextWindowMismatch": "Talep sağlayıcı bağlam penceresini aşıyor" + "capabilityFilter.contextWindowMismatch": "Talep sağlayıcı bağlam penceresini aşıyor", + "publicSystem": { + "notFound": { + "title": "Sayfa bulunamadı", + "description": "Aradığınız sayfa mevcut değil veya taşınmış.", + "dashboardAriaLabel": "Gösterge paneline dön", + "statusAriaLabel": "Sistem durum sayfasını açın", + "systemStatus": "Sistem Durumu" + }, + "error": { + "title": "İç Sunucu Hatası", + "description": "İsteğinizi işlerken bir şeyler ters gitti. Ekibimiz bilgilendirildi ve bir çözüm üzerinde çalışıyor.", + "errorId": "Hata Kimliği: {id}", + "detailsAriaLabel": "Hata ayrıntıları", + "retryAriaLabel": "Sayfayı yeniden yüklemeyi deneyin", + "tryAgain": "Tekrar Dene", + "dashboardAriaLabel": "Gösterge paneline dön", + "statusAriaLabel": "Sistem durumunu açın", + "systemStatus": "Sistem Durumu" + }, + "globalError": { + "title": "Bir şeyler yanlış gitti", + "description": "Beklenmedik bir hata oluştu. Bu kaydedildi ve ekibimiz inceleyecektir.", + "detailsAriaLabel": "Hata detayları", + "retryAriaLabel": "Sayfayı yeniden yüklemeyi deneyin", + "tryAgain": "Tekrar Dene", + "statusAriaLabel": "Sistem durumunu açın", + "systemStatus": "Sistem Durumu" + }, + "offline": { + "title": "Bağlantı Sorunu", + "description": "OmniRoute şu anda ağa ulaşamıyor. İnternet, VPN veya proxy ayarlarınızı kontrol edin.", + "connectionRestored": "Bağlantı yeniden sağlandı", + "offlineModeDetected": "Çevrimdışı mod tespit edildi", + "retryConnection": "Bağlantıyı Yeniden Deneyin", + "openStatusPage": "Durum Sayfasını Aç" + }, + "maintenance": { + "title": "Planlı Bakım", + "description": "Bazı hizmetler bakım çalışmaları sırasında geçici olarak kullanılamıyor. Temel yönlendirme genellikle çevrimiçi kalır, ancak yönetim özellikleri etkilenebilir.", + "suggestion1": "Birkaç dakika sonra tekrar deneyin.", + "suggestion2": "Yeniden denemeden önce mevcut sağlık göstergelerini ve sağlayıcı durumunu kontrol edin.", + "systemStatus": "Sistem Durumunu Görüntüle", + "healthDashboard": "Açık Sağlık Gösterge Paneli" + }, + "status": { + "title": "Sistem Durumu", + "description": "OmniRoute çekirdek hizmetleri için canlı operasyonel anlık görüntü.", + "loadingHealth": "Sağlık metrikleri yükleniyor...", + "failedToLoad": "Sistem sağlığı yüklenemedi.", + "unableToReachHealth": "Sağlık uç noktasına ulaşılamıyor. Bağlantıyı kontrol edin ve tekrar deneyin.", + "healthCheckFailed": "Sağlık Kontrolü Başarısız oldu", + "openConnectivityHelp": "Açık Bağlantı Yardımı", + "maintenanceInfo": "Bakım Bilgisi", + "service": "Hizmet", + "unknown": "bilinmeyen", + "notAvailable": "geçersiz", + "providersTracked": "Sağlayıcılar Takip Edildi", + "circuitBreakerState": "Sağlayıcı Devre Kesici Durumu", + "lastUpdate": "Son güncelleme: {timestamp}", + "uptimeMinutes": "{minutes}d", + "uptimeHoursMinutes": "{hours}s {minutes}d" + }, + "statusPages": { + "400": { + "title": "Geçersiz İstek", + "description": "İstek yükü geçersiz veya eksik.", + "suggestion1": "Gözden geçirilmesi gereken alanlar ve yük formatını kontrol edin, ardından tekrar deneyin.", + "suggestion2": "API'yi kullanıyorsanız, JSON şemasını yerel olarak doğrulayın.", + "suggestion3": "Eğer bu devam ederse, yükü incelemek için isteği Translator Playground'da açın.", + "primaryAction": "Dokümana Aç", + "secondaryAction": "Çevirmeni Aç" + }, + "401": { + "title": "Yetkisiz", + "description": "Bu kaynağa erişim için kimlik doğrulama gereklidir.", + "suggestion1": "Tekrar oturum açın ve işlemi yeniden deneyin.", + "suggestion2": "API çağrıları için, Bearer token'ın mevcut ve geçerli olduğunu onaylayın.", + "suggestion3": "Eğer token yakın zamanda döndürüldüyse, istemci kimlik bilgilerinizi güncelleyin.", + "primaryAction": "Giriş Yap'a Git", + "secondaryAction": "API Anahtarlarını Yönet" + }, + "403": { + "title": "Yasaklandı", + "description": "Talebiniz anlaşıldı, ancak erişim politika nedeniyle reddedildi.", + "suggestion1": "Ayarlarındaki IP izin listesi/engelleme listesi kurallarını kontrol et.", + "suggestion2": "API anahtarınıza atanan model ve bütçe politikalarını doğrulayın.", + "suggestion3": "Bir yöneticiden gerekli izin kapsamını vermesini isteyin.", + "primaryAction": "Açık Erişim Yardımı", + "secondaryAction": "Güvenlik Ayarlarını Açın" + }, + "408": { + "title": "İstek Zaman Aşımı", + "description": "Sunucu, zamanında eksiksiz bir istek almadı.", + "suggestion1": "Talebi daha küçük bir yükle tekrar deneyin.", + "suggestion2": "Ağ stabilitenizi ve VPN/proxy gecikmesini kontrol edin.", + "suggestion3": "Uzun işlemler için akışı etkinleştirin veya isteği bölün.", + "primaryAction": "Açık Uç Noktası Kılavuzu", + "secondaryAction": "Ağ Durumunu Kontrol Et" + }, + "429": { + "title": "Çok Fazla İstek", + "description": "Bu istemci, anahtar veya sağlayıcı için oran limitleri aşıldı.", + "suggestion1": "Bekleme süresini bekleyin ve önerilen aralıktan sonra tekrar deneyin.", + "suggestion2": "Yedek sağlayıcılarla bir kombinasyona geçin.", + "suggestion3": "Ayarlar içinde sağlayıcı dayanıklılık/hız sınırlama profillerini ayarlayın.", + "primaryAction": "Dayanıklılık Ayarlarını Açın", + "secondaryAction": "Açık Kombinasyonlar" + }, + "500": { + "title": "İç Sunucu Hatası", + "description": "İsteğinizi işlerken beklenmedik bir sunucu hatası oluştu.", + "suggestion1": "Birkaç saniye içinde bir kez daha deneyin.", + "suggestion2": "Sağlık telemetrisini ve sunucu günlüklerini ilişkili istek kimlikleri için kontrol edin.", + "suggestion3": "Eğer sürekli bir sorun yaşıyorsanız, zaman damgası ve istek bağlamı ile birlikte durumu bildirin.", + "primaryAction": "Açık Sağlık Gösterge Paneli", + "secondaryAction": "Logları Aç" + }, + "502": { + "title": "Kötü Ağ Geçidi", + "description": "Üst akış sağlayıcısı veya geçit entegrasyonu geçersiz bir yanıt döndürdü.", + "suggestion1": "Başka bir sağlayıcı veya aktif kombinasyon rotası ile yeniden deneyin.", + "suggestion2": "Sağlayıcı kimlik bilgilerini ve model kullanılabilirliğini kontrol edin.", + "suggestion3": "Format dönüşümü söz konusuysa çevirmen çıktısını denetleyin.", + "primaryAction": "Sağlayıcıları Açın", + "secondaryAction": "Çevirmeni Aç" + }, + "503": { + "title": "Hizmet Kullanılamıyor", + "description": "Hizmet, bakım veya bozulmuş bağımlılıklar nedeniyle geçici olarak kullanılamıyor.", + "suggestion1": "Biraz bekleyin ve tekrar deneyin.", + "suggestion2": "Bakım bildirimlerini ve sistem durumunu kontrol edin.", + "suggestion3": "Gecikmeye duyarlı bir iş akışınız varsa yedek sağlayıcıları kullanın.", + "primaryAction": "Bakım Detayları", + "secondaryAction": "Sistem Durumu" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel} ile Bağlan", + "chooseMethod": "Kimlik doğrulama yöntemini seçin:", + "builderId": "AWS Builder ID", + "builderDescription": "Çoğu kullanıcı için önerilir. {providerLabel} ile bağlantılı AWS hesabınızla oturum açın.", + "organization": "Sizin Organizasyonunuz (AWS IAM Kimlik Merkezi)", + "organizationDescription": "Şirketinizin SSO başlangıç URL'sini kullanın (örnek: {url}).", + "googleAccount": "Google Hesabı", + "googleDescription": "Google hesabınızla giriş yapın.", + "githubAccount": "GitHub Hesabı", + "githubDescription": "GitHub hesabınızla giriş yapın.", + "importToken": "Token İçe Aktar", + "importDescription": "{providerLabel} tarafından dışa aktarılan bir yenileme jetonunu yapıştırın.", + "apiKey": "API Anahtarı", + "apiKeyDescription": "Uzun ömürlü bir {providerLabel} / CodeWhisperer API anahtarını yapıştırın. Bu, yenileme belirteci olmadan bir bearer kimlik bilgisi olarak saklanır; profil keşfi en iyi çaba ile yapılır.", + "idcStartUrl": "IDC Başlangıç URL'si", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "Kuruluşunuzun AWS IAM Kimlik Merkezi URL'si", + "awsRegion": "AWS Bölgesi", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Kimlik Merkezi'niz için AWS bölgesi (varsayılan: us-east-1)", + "continue": "Devam Et", + "back": "Geri", + "autoDetecting": "Token otomatik olarak algılanıyor...", + "readingCredentials": "AWS SSO önbelleğinden {providerLabel} kimlik bilgileri okunuyor", + "tokenNotDetected": "{providerLabel} jetonu otomatik olarak algılanamadı. Lütfen yenileme jetonunuzu manuel olarak yapıştırın.", + "refreshToken": "Yenileme Jetonu", + "tokenPlaceholder": "Token otomatik olarak doldurulacak...", + "importing": "İçe Aktarılıyor...", + "apiKeyPlaceholder": "{providerLabel} API anahtarınızı yapıştırın...", + "apiKeyStoredDescription": "Uzun ömürlü bir taşıyıcı kimlik bilgisi olarak şifrelenmiş olarak saklandı. Yenileme akışı yoktur.", + "apiKeyRegionDescription": "Anahtar için AWS bölgesi (varsayılan: us-east-1)", + "validating": "Geçerlilik kontrol ediliyor...", + "validateAndSaveApiKey": "API Anahtarını Doğrula ve Kaydet", + "errorAutoDetect": "Token otomatik olarak tespit edilemedi", + "errorAutoDetectFailed": "Token otomatik olarak tespit edilemedi", + "errorRefreshTokenRequired": "Lütfen bir yenileme belirteci girin", + "errorImportFailed": "İçe aktarma başarısız oldu", + "errorApiKeyRequired": "Lütfen bir Kiro API anahtarı girin", + "errorApiKeyImportFailed": "API anahtarı içe aktarılamadı", + "errorIdcStartUrlRequired": "Lütfen IDC başlangıç URL'nizi girin" + }, + "kiroSocialOAuthModal": { + "title": "{providerName} üzerinden {providerLabel} ile bağlanın", + "errorStartAuthorization": "Yetkilendirme başlatılamadı", + "errorAuthorizationExpired": "Yetkilendirme süresi doldu. Giriş akışını tekrar başlatın.", + "errorAuthorizationFailed": "Yetkilendirme başarısız oldu", + "initializing": "Başlatılıyor...", + "settingUp": "{providerName} kimlik doğrulaması ayarlanıyor", + "openIncognito": "Bu bağlantıyı Gizli pencerede açın", + "incognitoDescription": "Mevcut hesaplarla oturum çakışmalarını önlemek için Gizli/Özel bir pencere kullanın.", + "copyLink": "Bağlantıyı Kopyala", + "verificationCode": "Doğrulama kodu", + "waiting": "Yetkilendirme bekleniyor...", + "cancel": "İptal Et", + "successTitle": "Bağlantı Başarıyla Kuruldu!", + "successMessage": "{providerName} üzerinden {providerLabel} hesabınız bağlandı.", + "done": "Tamamlandı", + "errorTitle": "Bağlantı Başarısız", + "close": "Kapat" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Yetkilendirme başarısız oldu", + "errorPopupBlocked": "Açılır pencere engellendi — bu site için açılır pencerelere izin verin veya aşağıya token'i manuel olarak yapıştırın.", + "errorPopupClosed": "Yetkilendirme penceresi tamamlanmadan kapatıldı.", + "errorAccessTokenRequired": "Erişim belirteci gereklidir.", + "errorImportFailed": "İçe aktarma başarısız oldu", + "title": "Bağlan Trae SOLO", + "authorizeDescription": "trae.ai üzerinden bir açılır pencerede yetkilendirin. Token içe aktarıldıktan sonra açılır pencere kendiliğinden kapanacaktır.", + "authorizeImportant": "Önemli: önce bu tarayıcıda trae.ai hesabınıza giriş yapmış olmalısınız. Yetkilendirme sayfası yalnızca mevcut bir oturumu onaylar — sizi giriş yaptıramaz. \"Giriş Başarısız\" mesajını görüyorsanız, \"solo.trae.ai'yi Aç\" seçeneğine tıklayın, giriş yapın ve ardından buraya geri dönün.", + "waitingForAuthorization": "trae.ai için bekleniyor…", + "authorizeWithBrowser": "Tarayıcı ile Yetkilendir", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "veya bir jetonu manuel olarak yapıştırın", + "manualInstructions": "solo.trae.ai hesabınıza giriş yapın, Geliştirici Araçları → Ağ'ı açın, herhangi bir sohbet mesajı gönderin ve Authorization: Cloud-IDE-JWT {tokenPlaceholder} istek başlığından JWT'yi kopyalayın. JWT ömrü ~14 gündür. Opsiyonel kimlik alanları, aynı istek gövdesindeki common_params içinden gelir.", + "accessTokenLabel": "Erişim Jetonu (Cloud-IDE-JWT)", + "webId": "Web Kimliği", + "optional": "isteğe bağlı", + "bizUserId": "Biz Kullanıcı Kimliği", + "userUniqueId": "Kullanıcı Benzersiz Kimliği", + "scope": "Kapsam", + "tenant": "Kiracı", + "region": "Bölge", + "importing": "İçe Aktarılıyor…", + "importToken": "Token İçe Aktar", + "cancel": "İptal Et" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Dağıtılıyor...", + "complete": "Tamamla", + "defaultLabel": "Proxy'leri Dağıtın" + } + }, + "providerTest": { + "dialogLabel": "Test {provider}", + "deprecated": "kullanımdan kaldırılmış", + "risk": "risk", + "close": "Kapat", + "model": "Model", + "key": "Anahtar", + "defaultKey": "varsayılan", + "clearConversation": "Sohbeti Temizle", + "clear": "Temizle", + "tabs": { + "test": "Test", + "logs": "Kayıtlar" + }, + "loadingLogs": "Günlükler yükleniyor…", + "failedToLoadLogs": "Loglar yüklenemedi", + "noLogsYet": "Henüz kayıt yok", + "noLogsDescription": "Test sekmesinden bir test mesajı gönderin — bu sağlayıcı için günlükler burada görünecektir.", + "openFullLogs": "Tam günlükler sayfasını açın", + "live": "Canlı", + "tailingLast": "son {count} izleme", + "refreshNow": "Şimdi Yenile", + "refresh": "Yenile", + "unknownRequester": "bilinmeyen talep eden", + "fields": { + "timestamp": "Zaman Damgası", + "status": "Durum", + "duration": "Süre", + "model": "Model", + "requestedModel": "İstenen model", + "provider": "Sağlayıcı", + "requester": "Talep Eden", + "tokens": "Jetonlar" + } + }, + "proxyLog": { + "detailAriaLabel": "Proxy günlük ayrıntısı", + "event": "Proxy Olay", + "close": "Proxy detay modülünü kapat", + "time": "Zaman", + "latency": "Gecikme", + "clientIp": "İstemci IP", + "proxy": "Proxy", + "direct": "Doğrudan", + "type": "Türü", + "level": "Seviye", + "provider": "Sağlayıcı", + "tlsFingerprint": "TLS Parmak İzi", + "directNative": "Doğrudan", + "targetUrl": "Hedef URL", + "error": "Hata", + "configuration": "Proxy Yapılandırması" + }, + "requestTimeline": { + "title": "İstek Zaman Çizelgesi", + "modes": { + "follow": "Takip Et", + "followDescription": "Eksen sola kaydırılıyor, ŞİMDİ hattı %75'te kalıyor", + "now": "Şimdi", + "nowDescription": "Şu anki zamana atla, ŞİMDİ satırı merkeze sıfırlanır", + "pan": "Tava", + "panDescription": "Sürükleyerek keşfedin, arka plan donmuş durumda" + }, + "reset": "Sıfırla", + "started": "Başlatıldı", + "ended": "Bitti", + "duration": "Süre", + "status": "Durum", + "provider": "Sağlayıcı", + "tokens": "Jetonlar", + "active": "Aktif", + "other": "Diğer", + "tenMinutes": "10dk", + "hour": "saat", + "day": "gün", + "unknownModel": "bilinmiyor", + "pending": "beklemede" + }, + "metadata": { + "compressionTitle": "Sıkıştırma", + "compressionDescription": "Bağlam sıkıştırma ayarlarını yapılandırarak token kullanımını ve maliyetleri azaltın.", + "relayTitle": "OmniRoute — İletim Araçları", + "relayDescription": "AI altyapınız için sunucusuz relay proxy uç noktaları", + "trafficInspectorTitle": "Trafik Müfettişi — OmniRoute", + "trafficInspectorDescription": "LLM çağrılarını izleyin + herhangi bir uygulamanın HTTPS trafiğini hata ayıklayın" + }, + "conductor": { + "title": "Conductor — CLI-ajansı filosu", + "subtitle": "OmniConductor merkezi: koşucular, görev kuyruğu ve konseyler, canlı", + "runners": "Koşucular", + "tasks": "Görevler", + "colName": "Ad", + "colClis": "CLI'lar", + "colStatus": "Durum", + "colTask": "Görev", + "colMode": "Mod", + "colRunner": "Koşucu", + "colSummary": "Özet", + "online": "çevrimiçi", + "offline": "çevrimdışı", + "draining": "boşaltma", + "hubOffline": "Konduktör hub'ı çevrimdışı veya yapılandırılmamış (CONDUCTOR_HUB_URL) — eski veriler yerine hiçbir şey göstermiyor.", + "noRunners": "Hiç koşucu kaydedilmedi", + "noTasks": "Henüz görev yok", + "detailTitle": "Görev detayı", + "prompt": "İstem", + "branch": "Dal", + "fetchHint": "Sonucu almak için: git fetch origin {branch}", + "council": "Konsey", + "candidates": "Adaylar", + "cancel": "Görevi iptal et", + "cancelConfirmTitle": "Bu görevi iptal etmek istiyor musunuz?", + "cancelConfirmMessage": "Hub, çalıştırıcıda yürütmeyi iptal edecektir. Bu geri alınamaz.", + "cancelFailed": "Merkez iptali reddetti", + "close": "Kapat", + "error": "Hata", + "faroTitle": "Faro — filo sözcüsü", + "faroSubtitle": "Gerçek filo olaylarına dayalı sohbet ve ses. Yıkıcı komutlar her zaman onay ister.", + "faroEmpty": "Filoyu sorun — örneğin \"filo nasıl?\"", + "faroPending": "Faro onay istiyor", + "faroPlaceholder": "Faro ile konuş…", + "faroSend": "gönder", + "faroOffline": "Faro (sözcü) çevrimdışı", + "yes": "Evet", + "no": "Hayır", + "pushToTalk": "Konuşmak için basılı tutun", + "speakAnswers": "cevapları konuş", + "voiceModels": "Ses modelleri (bu OmniRoute'un sağlayıcısı/modeli)", + "voiceIdle": "konuşmak", + "voiceListening": "dinliyor…", + "voiceThinking": "düşünüyor…", + "voiceSpeaking": "konuşuyor…", + "sttFailed": "Transkripsiyon başarısız oldu (STT modeli/sağlayıcısını kontrol edin)", + "ttsFailed": "Konuşma sentezi başarısız oldu (TTS modeli/sağlayıcısını kontrol edin)", + "micDenied": "Mikrofon kullanılamıyor veya izin reddedildi" + }, + "cliproxyProviderExposure": { + "title": "Sağlayıcı Maruziyeti", + "description": "cliproxyapi/ ön eki altında CLIProxyAPI modellerini bir yönlendirme hedefi olarak açın.", + "label": "cliproxyapi/... olarak açığa çıkar", + "hint": "Etkinleştirildiğinde, keşfedilen modeller OmniRoute genelinde sağlayıcı seçimlerinde görünür.", + "updateFailed": "Güncelleme başarısız oldu (HTTP {status})", + "networkError": "Ağ hatası — sağlayıcı maruziyet ayarı güncellenemedi" + } } - diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index 35709fbf08..90bf313790 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -172,13 +172,25 @@ "unselectAll": "Зняти вибір", "visibleModels": "видимих", "selectAllConfirm": "Додати {count} моделей до цієї комбінації?", + "testSelectedProviders": "Тестові постачальники", + "testingSelectedProviders": "Тестування {done}/{total}...", + "noProvidersSelectedToTest": "Спочатку виберіть принаймні одного постачальника нижче", + "noModelsToTestForProviders": "Немає моделей для тестування для вибраних постачальників", + "testSelectedProvidersResults": "{ok} з {total} моделей працює", + "selectWorkingModels": "Додати робочий", + "unselectWorkingModels": "Скасувати вибір роботи", + "noWorkingModelsToSelect": "Немає робочих моделей, які можна додати", + "providerTestHint": "Порада: перевірте постачальника → Тест → Додати робочий. Клацніть ще раз, щоб зняти вибір.", + "selectAllProviders": "Перевірити всіх постачальників", + "clearProviderSelection": "Зняти позначку з постачальників", + "providersSelectedCount": "Перевірено {count} постачальників", "errorOccurred": "Сталася помилка", "comboDeleted": "Комбінацію видалено", "hide": "Приховати", "creating": "Створення", "comboCreated": "Комбінацію створено", "swapFormats": "Поміняти формати", - "daysAgo": "{count} днів тому", + "daysAgo": "Days Ago", "retries": "Повтори", "errorDuringRestore": "Помилка під час відновлення", "eventsAppearHint": "Події з'являться тут", @@ -186,7 +198,7 @@ "webSearchDesc": "Пошук в Інтернеті", "audioProvidersHeading": "Аудіопровайдери", "cloudAgentProviders": "Постачальники хмарних агентів", - "minutesAgo": "{count} хв тому", + "minutesAgo": "Minutes Ago", "a": "A", "liveAutoRefreshing": "Наживо · автооновлення", "webSearch": "Веб-пошук", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "Розмір", + "toggleNoAuthProvider": "Перемкнути постачальника без авторизації", + "loadingModels": "Завантаження моделей…", + "selectAModel": "Виберіть модель", + "degraded": "Знижена якість", + "zeroConfigBannerTitle": "Запуск у режимі нульової конфігурації", + "zeroConfigBannerBody": "OmniRoute автоматично генерує захищені ключі шифрування під час першого запуску. Вони зберігаються в {dataDir}. Додаткових дій не потрібно — ваші дані зашифровані та в безпеці. Щоб використовувати власні ключі, додайте JWT_SECRET та STORAGE_ENCRYPTION_KEY до цього файлу.", + "batchRelativeTimeIn": "в {value}", + "batchRelativeTimeAgo": "{value} тому", + "batchDetailsTitle": "Деталі Партії", + "batchProgress": "Прогрес", + "batchCompletedCount": "{count} завершено", + "batchFailedCount": "{count} не вдалося", + "batchPendingCount": "{count} в очікуванні", + "batchTimeline": "Хронологія", + "batchTimelineInProgress": "В процесі", + "batchTimelineFinalizing": "Завершення", + "batchTimelineCompleted": "Завершено", + "batchTimelineFailed": "Не вдалося", + "batchTimelineExpires": "Термін дії закінчується", + "batchTimelineExpired": "Термін дії закінчився", + "batchTimelineCancelling": "Скасування", + "batchTimelineCancelled": "Скасовано", + "batchTokenUsage": "Використання Токенів", + "batchMetadata": "Метадані", + "batchFileContents": "Вміст файлу", + "batchFileUsedByCount": "Використано {count, plural, one {# партія} other {# партій}}", + "batchFilePreview": "Попередній перегляд", + "batchFilePreviewTruncated": "Показано перші {shown} рядків ({total} всього рядків)", + "batchFileDownloadFull": "Завантажити повний файл" }, "disabled": "Вимкнено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправляти запити з вичерпаним бюджетом на резервного безкоштовного провайдера/модель.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "Розділювач", "discovery": "Виявлення", "discoverySubtitle": "Сканувати провайдерів на наявність безкоштовного доступу", + "conductor": "Кондуктор", + "conductorSubtitle": "CLI-агент флот", "resilienceConnections": "Стійкість З'єднання", "resilienceConnectionsSubtitle": "Охолодження, автомат, стан блокування", "settingsModalityBridge": "Міст Модальності", - "settingsModalityBridgeSubtitle": "Зображення/аудіо → текстове резервування для моделей тільки з текстом" + "settingsModalityBridgeSubtitle": "Зображення/аудіо → текстове резервування для моделей тільки з текстом", + "commandPalette": { + "title": "Палітра команд", + "searchPlaceholder": "Шукати сторінки, налаштування, інструменти...", + "clearSearch": "Очистити пошук", + "noResults": "Немає результатів", + "navigate": "перейти", + "open": "відкрити", + "close": "закрити" + }, + "noResults": "Немає результатів" }, "webhooks": { "title": "Веб-хуки", @@ -1477,7 +1531,11 @@ "settings.update_failed": "Не вдалося оновити налаштування", "sync.token.created": "Створено токен синхронізації", "sync.token.revoked": "Відкликано токен синхронізації" - } + }, + "mcpMetricCalls24h": "Виклики (24 год)", + "mcpMetricSuccessRate": "Коефіцієнт успішності", + "mcpMetricAvgDuration": "Середня тривалість", + "mcpMetricTopTool": "Найкращий інструмент" }, "themesPage": { "title": "Теми", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "Доступна нова версія. Натисніть, щоб оновити.", "updateStarted": "Оновлення розпочато...", "reloadingPageAutomatically": "Автоматичне перезавантаження сторінки...", - "providerTopology": "Топологія провайдера" + "providerTopology": "Топологія провайдера", + "downloadDmg": "Завантажити DMG (macOS)", + "downloadDmgDescription": "Доступна нова версія настільного додатку OmniRoute. Будь ласка, завантажте та встановіть установник DMG для macOS, щоб оновити (поточна: v{version}).", + "downloadExe": "Завантажити EXE (Windows)", + "downloadExeDescription": "Доступна нова версія настільного додатку OmniRoute. Будь ласка, завантажте та встановіть Windows EXE інсталятор для оновлення (поточна: v{version}).", + "downloadAppImage": "Завантажити AppImage (Linux)", + "downloadAppImageDescription": "Доступна нова версія настільного додатку OmniRoute. Будь ласка, завантажте пакет Linux AppImage для оновлення (поточна: v{version}).", + "downloadUpdate": "Завантажити Оновлення", + "downloadUpdateDescription": "Доступна нова версія настільного додатку OmniRoute. Будь ласка, завантажте відповідний формат додатку для вашої системи, щоб оновити (поточна: v{version}).", + "updateQueued": "В черзі оновлення до v{version}.", + "updateDockerRebuilding": "Docker-образ перебудовується у фоновому режимі.", + "updateWaitingRestart": "Очікування перезапуску OmniRoute з новою версією.", + "updateInstalling": "Встановлення v{version}.", + "updateRunning": "OmniRoute тепер працює на версії v{version}.", + "updateCompleted": "OmniRoute оновлено до v{version}.", + "updateDockerStillRebuilding": "Docker-образ все ще перебудовується для v{version}.", + "updateInstallingBackground": "Встановлення v{version} у фоновому режимі.", + "updateWaitingVersion": "Очікування на повернення OmniRoute на v{version}.", + "updateDockerStillInProgress": "Docker перебудова все ще триває.", + "updateRestarting": "Перезапуск служби триває. Очікуємо, поки OmniRoute знову стане доступним...", + "updateTimeout": "Оновлення розпочато, але v{version} не стало доступним до закінчення часу очікування. Оновіть сторінку або перевірте журнали сервера.", + "updateTimedOut": "Час оновлення до v{version} вичерпано.", + "updateStartFailed": "Не вдалося розпочати оновлення.", + "noResponseStream": "Не отримано потік відповіді.", + "updateComplete": "Оновлення завершено!", + "updateFailed": "Оновлення не вдалося.", + "updateNetworkError": "Помилка мережі — з'єднання втрачено під час оновлення.", + "stepInstallPackage": "Встановити пакет", + "stepRebuildNativeModules": "Перебудувати Нативні Модулі", + "stepRestartService": "Перезапустити службу", + "stepComplete": "Завершено", + "stepError": "Помилка", + "updateCompleteTitle": "Оновлення завершено!", + "updateFailedTitle": "Оновлення не вдалося", + "updatingTitle": "Оновлення OmniRoute...", + "reloadNotice": "Сторінка перезавантажиться автоматично через кілька секунд.", + "retryNotice": "Будь ласка, спробуйте ще раз або оновіть вручну через CLI.", + "restartNotice": "Не закривайте цю сторінку. Система перезапуститься автоматично.", + "reloadNow": "Перезавантажити зараз", + "closeUpdate": "Закрити", + "retryUpdate": "Спробувати ще раз", + "updateAvailableTitle": "Доступне оновлення: v{version}{desktop}", + "desktopAppLabel": "(Десктопний додаток)", + "checkingForUpdates": "Перевірка оновлень...", + "versionAvailableForDownload": "Версія v{version} доступна для завантаження.", + "downloadingUpdate": "Завантаження оновлення... {percent}% завершено.", + "updateDownloaded": "Оновлення успішно завантажено! Натисніть Перезапустити та Встановити, щоб застосувати.", + "autoUpdateFailed": "Не вдалося автоматично оновити: {reason}.", + "unknownUpdateError": "Невідома помилка", + "versionAvailableDesktop": "Версія v{version} доступна для настільного додатку.", + "manualUpdateRequired": "Необхідне ручне оновлення для цього типу установки.", + "restartAndInstall": "Перезапустити та встановити", + "checkForUpdate": "Перевірити наявність оновлень", + "manualUpdate": "Ручне оновлення", + "directDownloadHint": "Або завантажте відповідний формат інсталятора безпосередньо:", + "releaseNotes": "Примітки до випуску", + "readMore": "Читати далі", + "noAuthLabel": "Без автентифікації" }, "analytics": { "title": "Аналітика", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "Отримано на основі збережених логів викликів навколо цього запиту", "routeRecommendations": "Рекомендації", "routeLimitations": "Обмеження", - "routeNoKnownLimitations": "Немає відомих обмежень для цього пояснення." + "routeNoKnownLimitations": "Немає відомих обмежень для цього пояснення.", + "searchAnalyticsLoading": "Завантаження аналітики пошуку…", + "searchAnalyticsNoData": "Дані для пошуку ще недоступні.", + "searchAnalyticsNoDataDescription": "Запити на пошук з'являться тут після першого пошуку через /v1/search.", + "searchAnalyticsToday": "{count} сьогодні", + "searchAnalyticsCachedRequests": "{count} кешованих запитів", + "searchAnalyticsApiCosts": "витрати на API пошуку", + "searchAnalyticsErrors": "{count} помилок", + "searchAnalyticsNoErrors": "Немає помилок", + "searchAnalyticsProviderBreakdown": "Розподіл постачальників", + "searchAnalyticsQueries": "запити", + "searchAnalyticsEmptyDescription": "Використовуйте POST /v1/search, щоб розпочати маршрутизацію веб-пошуків.", + "searchAnalyticsFreeTier": "Доступний безкоштовний тариф: Serper (2,500/міс), Brave (2,000/міс), Exa (1,000/міс), Tavily (1,000/міс) — всього 6,500+ безкоштовних пошуків/місяць з автоматичним переключенням.", + "autoRoutingNoDataAvailable": "Немає доступної аналітики автоматичного маршрутизації. Використовуйте префікс auto/ для запитів, щоб переглянути метрики.", + "defaultVariantLabel": "За замовчуванням", + "freeTierAvailable": "Доступний безкоштовний тариф" }, "apiManager": { "title": "Ключі API", @@ -2124,7 +2254,7 @@ "savePermissions": "Зберегти дозволи", "endpointRestrictions": "Обмеження ендпоінтів", "allEndpointsAllowed": "Дозволено всі ендпоінти", - "endpointsRestricted": "{count, plural, one {# ендпоінт обмежено} few {# ендпоінти обмежено} many {# ендпоінтів обмежено} other {# ендпоінта обмежено}}", + "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "Автоматичне визначення", "autoResolveDesc": "Автоматично визначати неоднозначні імена моделей до рідного провайдера для цього API-ключа.", "streamDefaultMode": "Сумісність потокового передавання за замовчуванням", @@ -2348,7 +2478,9 @@ "providerCount": "{count} провайдерів", "imageToTextBridgeAvailable": "Міст Модальності тепер може описувати зображення для моделей лише з текстом. Інлайн-плейграунд буде доступний, коли /api/v1/images/understanding буде реалізовано.", "imageToTextBridgeCta": "Налаштуйте міст зображення→текст у налаштуваннях моста модальності", - "sttBridgeCta": "Налаштуйте міст між Мовленням→Текстом у налаштуваннях Мосту Модальності" + "sttBridgeCta": "Налаштуйте міст між Мовленням→Текстом у налаштуваннях Мосту Модальності", + "existingConnection": "Існуюче з'єднання", + "openrouterSttDescription": "Моделі перетворення мови в текст OpenRouter використовують ваше налаштоване з'єднання OpenRouter. Окремі облікові дані не потрібні." }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "Вставити в:", "copilotReloadInstruction": "Потім перезавантажте VS Code та вкажіть ключ API у полі введення.", "wireApiChatCompletions": "Завершення чату (/chat/completions)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Дію не виконано", + "cliproxyapiActionSucceeded": "Дію виконано успішно", + "cliproxyapiCheckUpdates": "Перевірити оновлення", + "cliproxyapiDescription": "Резервний проксі-сервер (OAuth на базі Go)", + "cliproxyapiHealth": "Здоров'я", + "cliproxyapiHealthy": "Здоровий", + "cliproxyapiInstall": "Встановити", + "cliproxyapiNotInstalledValue": "Не встановлено", + "cliproxyapiPort": "Порт", + "cliproxyapiRequestFailed": "Запит не вдався", + "cliproxyapiRestart": "Перезапустити", + "cliproxyapiStart": "Почати", + "cliproxyapiStatusError": "Помилка", + "cliproxyapiStatusInstalled": "Встановлено", + "cliproxyapiStatusNotInstalled": "Не встановлено", + "cliproxyapiStatusRunning": "Виконання", + "cliproxyapiStatusStopped": "Зупинено", + "cliproxyapiStop": "Зупинити", + "cliproxyapiUnhealthy": "Нездоровий", + "cliproxyapiUnknown": "Невідомо", + "cliproxyapiUpdate": "Оновити", + "cliproxyapiUpdateAvailable": "Доступне оновлення: v{current} → v{latest}", + "cliproxyapiVersion": "Версія" }, "combos": { "title": "Комбо", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "Тільки просуватися при вичерпанні квоти", + "fallbackOnlyOnQuotaExhaustionShort": "резервування лише для квоти", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "Режим і ваги залишаються тут; стан запобіжника в реальному часі — на сторінці Стан системи.", "emailVisibilityHint": "Адреси акаунтів тут підпорядковуються глобальному перемикачу приватності.", "emailVisibilityTooltip": "Використовуйте піктограму ока, щоб глобально показувати або приховувати адреси акаунтів у комбо, провайдерах і квотах.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Крок за кроком (Постачальник → Модель)", + "builderModeGlobal": "Глобальний пошук моделі (Користувацька комбінація)", + "builderGlobalSearchPlaceholder": "Шукати моделі серед усіх постачальників (наприклад, opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Додати все", + "builderGlobalShortcuts": "Скорочення:", + "builderGlobalNoResults": "Модель не знайдена для \"{query}\".", + "builderGlobalProviderLabel": "Постачальник:", + "builderGlobalAccountCount": "{count, plural, one {# обліковий запис} other {# облікових записів}}", + "builderGlobalAdded": "Додано", + "builderGlobalAdd": "Додати", "manualModel": "Модель вручну", "manualModelInvalid": "Введіть модель у форматі провайдер/модель.", "manualModelUnknownProvider": "Невідомий префікс провайдера.", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Доступність сесії", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "Закріплення вимкнено", "kimiPresetTitle": "Пресет Kimi Coding", "kimiPresetDescription": "Kimi K3 як основна модель (Moonshot API) з автоматичним переходом на ваші підключення Kimi Code (kimi-coding, kimi-web) після налаштування.", - "kimiPresetCta": "Додати пресет" + "kimiPresetCta": "Додати пресет", + "intelligentComboCount": "{count, plural, one {# інтелектуальна комбінація} other {# інтелектуальних комбінацій}}", + "providersInScope": "{count, plural, one {# постачальник у межах} other {# постачальників у межах}}", + "savingModePack": "Збереження {pack}…", + "errorTitle": "Не вдалося завантажити комбо", + "errorDescription": "Ми не змогли завантажити дані комбо прямо зараз. Перевірте своє з'єднання та спробуйте ще раз.", + "errorId": "Ідентифікатор помилки: {id}", + "errorRetry": "Спробуйте ще раз", + "comboLabel": "Комбо" }, "costs": { "title": "Витрати", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "URL-адреса WebDAV", "obsidianUsername": "Ім'я користувача", "obsidianPassword": "Пароль", - "obsidianTailscaleHint": "Використовуйте свою IP-адресу Tailscale замість localhost, якщо підключаєтеся з мобільного пристрою. Обидва пристрої мають бути в одній мережі Tailscale." + "obsidianTailscaleHint": "Використовуйте свою IP-адресу Tailscale замість localhost, якщо підключаєтеся з мобільного пристрою. Обидва пристрої мають бути в одній мережі Tailscale.", + "cloudSyncNotConfigured": "Хмарна синхронізація не налаштована на цьому екземплярі.", + "notionConnect": "Підключитися", + "notionConnectFailed": "Не вдалося підключитися", + "notionConnected": "Підключено", + "notionConnectionFailed": "З'єднання не вдалося", + "notionDescription": "Шукайте, читайте, запитуйте та пишіть у Notion через маршрутизовані AI моделі", + "notionDisconnect": "Відключити", + "notionDisconnectFailed": "Не вдалося відключитися", + "notionEnterToken": "Будь ласка, введіть токен інтеграції Notion", + "notionIntegrationHelp": "Створити внутрішню інтеграцію на", + "notionIntegrationToken": "Токен внутрішньої інтеграції Notion", + "notionNotConnected": "Не підключено", + "notionTokenConfigured": "Токен налаштовано. Інструменти Notion доступні через MCP." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "Провайдер / Модель", "noRemoteProviders": "Немає провайдерів із налаштованим API-ключем", "selectProviderModel": "Виберіть модель", + "customBaseUrlLabel": "Користувацька базова URL-адреса (необов'язково)", + "customModelIdLabel": "Ідентифікатор користувацької моделі (необов'язково)", + "customEndpointHelp": "Використовуйте сумісний з OpenAI /embeddings кінцевий пункт. Локальні кінцеві пункти дозволені; цільові метадані хмари заблоковані.", + "customEndpointSave": "Застосувати користувацький кінцевий пункт", + "customEndpointInvalid": "Введіть дійсний базовий URL HTTP(S) та ідентифікатор моделі, або залиште обидва поля порожніми.", + "customEndpointSaveFailed": "Користувацьку точку вбудовування не вдалося зберегти.", "staticEnabledLabel": "Увімкнути Static Potion", "staticEnabledDesc": "Завантажити та використовувати модель potion-base-8M локально", "transformersEnabledLabel": "Увімкнути Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "Очищення...", "cleanNow": "Очистити зараз", "cleanupSuccess": "Видалено {count} точок", - "cleanupFailed": "Помилка очищення" + "cleanupFailed": "Помилка очищення", + "hostLabel": "Хост", + "collectionLabel": "Колекція" }, "rerank": { "enableLabel": "Увімкнути Rerank", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "3-рівнева резервна схема OmniRoute", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Налаштуйте безкоштовних постачальників", + "description": "Додатково увімкніть вибрані провайдери без реєстрації. Ознайомтеся з повідомленнями та сайтом кожного провайдера перед продовженням; доступність та обмеження швидкості контролюються третіми сторонами.", + "loading": "Завантаження безкоштовних провайдерів...", + "loadFailed": "Не вдалося завантажити безкоштовні провайдери.", + "alreadyConfigured": "Всі відповідні безкоштовні постачальники вже налаштовані.", + "reviewProviderSite": "Перегляньте сайт постачальника та умови", + "confirmation": "Я переглянув ці сторонні постачальники і хочу, щоб OmniRoute створив вибрані з'єднання.", + "setupSelected": "Налаштувати вибрані постачальники", + "settingUp": "Налаштування...", + "setupFailed": "Не вдалося налаштувати вибрані провайдери. Нічого з існуючого не було змінено.", + "retryFailed": "Спробувати знову невдалі постачальники", + "orUseApiKey": "або підключитися за допомогою ключа API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "створено", + "skipped": "вже налаштовано", + "failed": "не вдалося" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Обов'язковий. Основна URL-адреса API постачальника.", "iconUrlLabel": "URL-адреса іконки", "iconUrlHint": "Необов'язково. URL-адреса зображення, що відображається як іконка цього провайдера.", + "iconUrlInvalid": "Недійсне URL-адреса значка. Використовуйте http(s):// або data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Сумісність (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "Сесія вже активна", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "Застосувати авторизацію", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "Вставте ключ API…", "zedSaving": "Збереження…", "zedImportAction": "Імпортувати", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "Увімкнути автоматичне оновлення сесії курсора", + "cursorAgentNudgeBody": "Встановіть cursor-agent для автоматичного поновлення сесій — без нього з'єднання Cursor потребують періодичного ручного перепідключення приблизно кожні 24 години.", + "cursorAgentNudgeDismiss": "Відхилити", "zedManualImportFailed": "Не вдалося виконати ручний імпорт", "zedManualImportSuccess": "Імпортовано токен {provider} із Zed", "grokImportTitle": "Імпорт автентифікації Grok Build", @@ -5878,7 +6066,6 @@ "friendliai": "Безкоштовний тариф для безсерверного виведення — кредитна картка не потрібна", "gemini": "Безкоштовно назавжди: 1500 зап/день для Gemini 2.5 Flash — без кредитної картки, отримайте ключ на aistudio.google.com", "gigachat": "Підключіть GigaChat (Сбер) за допомогою API-ключа.", - "github-models": "Створіть GitHub PAT з областю видимості 'models: read' на github.com/settings/tokens", "gitlab": "Особистий токен доступу GitLab для публічного API Code Suggestions. Налаштуйте власну базову URL-адресу, якщо не використовуєте gitlab.com.", "gitlawb-gmi": "Отримайте свій API-ключ на панелі керування Gitlawb Opengateway.", "gitlawb": "Отримайте свій API-ключ на панелі керування Gitlawb Opengateway.", @@ -6017,7 +6204,8 @@ "kimi-coding": "Connect Kimi Coding with the existing OAuth flow.", "kiro": "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", "codex": "Connect OpenAI Codex with the existing OAuth flow.", - "qwen": "Connect Qwen Code with the existing OAuth flow." + "qwen": "Connect Qwen Code with the existing OAuth flow.", + "github-models": "Створіть GitHub PAT з областю видимості 'models: read' на github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} приймає власні ідентифікатори моделі постачальника. Імпортуйте з /models або додайте власні ідентифікатори для маршрутизації.", "bedrockModelsDescription": "Моделі Amazon Bedrock залежать від регіону AWS. Імпортуйте з /models або додайте ідентифікатори моделі Bedrock, активовані у вибраному регіоні.", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "Коли всі налаштовані з'єднання вичерпані (квота, кредити або термін дії), тимчасово використовуйте безключовий рівень цього постачальника. Вимкніть, щоб пропустити цього постачальника замість надсилання анонімних запитів — рекомендовано, коли безключовий рівень їх відхиляє (401).", "anonymousFallbackEnabled": "Анонімний резервний варіант увімкнено для {provider}", "anonymousFallbackDisabled": "Анонімний резервний варіант вимкнено для {provider} — вичерпані з'єднання пропустять цього постачальника", - "anonymousFallbackUpdateFailed": "Не вдалося оновити налаштування анонімного резервного копіювання" + "anonymousFallbackUpdateFailed": "Не вдалося оновити налаштування анонімного резервного копіювання", + "batchDeleteFailed": "Пакетне видалення не вдалося", + "batchDeleteNetworkError": "Помилка мережі під час пакетного видалення", + "batchUpdateFailed": "Не вдалося оновити пакет", + "batchUpdateNetworkError": "Помилка мережі під час пакетного оновлення", + "categoryAudio": "Аудіо", + "categoryCloudAgent": "Хмарний Агент", + "categoryIde": "IDE", + "categoryLocal": "Локальний", + "categorySearch": "Пошук", + "categoryWebCookie": "Веб-кукі", + "claudeExtraUsageBlockingDisabled": "Блокування додаткового використання Claude вимкнено (додаткове використання дозволено)", + "claudeExtraUsageBlockingEnabled": "Блокування додаткового використання Claude увімкнено (додаткове використання буде заблоковано)", + "claudeRoutingPreferenceDisabled": "Моделі Claude без префікса більше не віддають перевагу Claude Code", + "claudeRoutingPreferenceEnabled": "Моделі Claude без префікса тепер віддають перевагу Claude Code", + "clearMediaFilter": "Очистити", + "cliproxyRoutingDisabled": "Запити тепер використовують рідний OmniRoute (прямий)", + "cliproxyRoutingEnabled": "Запити тепер маршрутизуються через CLIProxyAPI (глибша емуляція)", + "codexLimitPolicyUpdated": "Політика обмеження Codex оновлена", + "codexServiceModeUpdated": "Режим служби Codex оновлено", + "codexServiceTierActive": "Активний сервісний рівень Codex {tier}", + "codexTierFastLabel": "Швидко", + "codexTierFlexLabel": "Флекс", + "commandCodeApplyFailed": "Не вдалося застосувати код команди auth", + "commandCodeApplyingApproval": "Браузер затверджено, застосування…", + "commandCodeApplyingKey": "Застосування ключа, затвердженого браузером…", + "commandCodeApprovalInstructions": "Відкрийте URL авторизації, підтвердіть доступ, а потім вставте повернений ключ/JSON/URL нижче…", + "commandCodeAuthExpired": "Термін дії коду команди auth закінчився", + "commandCodeConnected": "Команда Код підключено", + "commandCodeConnectionAdded": "Додано з'єднання командного коду", + "commandCodeLinkExpired": "Посилання на код команди більше не дійсне", + "commandCodeOpeningStudio": "Відкриття Command Code Studio…", + "commandCodePopupBlocked": "Вікно спливаючого вмісту заблоковано. Будь ласка, дозволте спливаючі вікна та спробуйте знову Command Code Connect.", + "commandCodeStartFailed": "Не вдалося запустити команду Code auth", + "connectionDeleted": "З'єднання видалено", + "connectionFallback": "з'єднання", + "coolingConnectionsDescription": "Ці з'єднання повернули 429 (обмеження швидкості) у своєму останньому запиті. OmniRoute пропустить їх, поки не закінчиться таймер — вручну вимикати не потрібно.", + "coolingConnectionsTitle": "Наразі охолодження ({count})", + "failedDeleteAlias": "Не вдалося видалити псевдонім", + "failedDeleteConnection": "Не вдалося видалити з'єднання", + "failedDistributeProxies": "Не вдалося розподілити проксі.", + "failedSaveModelEndpointSettings": "Не вдалося зберегти налаштування кінцевої точки моделі", + "failedUpdateClaudeExtraUsagePolicy": "Не вдалося оновити політику додаткового використання Claude", + "failedUpdateClaudeRoutingPreference": "Не вдалося оновити перевагу маршрутизації коду Claude", + "failedUpdateCliproxyRouting": "Не вдалося оновити маршрутизацію CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Не вдалося оновити політику обмеження Codex", + "failedUpdateCodexServiceMode": "Не вдалося оновити режим служби Codex", + "filterByMedia": "Медіа", + "freeBadge": "Безкоштовно", + "kimiCodeApiKeyLabel": "Kimi Code API Ключ", + "modelTestFailed": "Тест моделі не пройдено", + "modelTestNetworkError": "Помилка мережі під час тестування моделі", + "networkError": "Помилка мережі", + "networkErrorDeletingAlias": "Помилка мережі під час видалення псевдоніму", + "networkErrorSettingAlias": "Помилка мережі під час налаштування псевдоніму", + "noProvidersMatch": "Немає постачальників, які відповідають вашому запиту.", + "noSavedProxies": "Не знайдено збережених проксі. Спочатку додайте проксі в Налаштування → Проксі.", + "pageLoadErrorDescription": "Ми не змогли завантажити дані постачальника зараз. Перевірте своє з'єднання та спробуйте ще раз.", + "pageLoadErrorId": "Ідентифікатор помилки: {id}", + "pageLoadErrorRetry": "Спробуйте ще раз", + "pageLoadErrorTitle": "Не вдалося завантажити постачальників", + "playgroundTitle": "Ігровий майданчик", + "providerDetailConnectionFlexActive": "Активний рівень сервісу Codex flex для цього з'єднання", + "providerDetailConnectionPriorityActive": "Активний рівень пріоритетного обслуговування Codex для цього з'єднання", + "providerDetailGlobalFlexActive": "Активний рівень послуг Global Codex flex", + "providerDetailGlobalPriorityActive": "Активний глобальний рівень пріоритетного обслуговування Codex", + "proxiesDistributed": "Розподілено {assigned} призначення проксі по {tagLabel}{total} з'єднанням.", + "rerankEndpoint": "Перенумерувати", + "savedModelEndpointSettings": "Налаштування кінцевої точки збереженої моделі", + "searchByModelAria": "Пошук за моделлю", + "selectSupportedEndpoint": "Виберіть принаймні одну підтримувану точку доступу", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Налаштування", @@ -6460,7 +6719,24 @@ "loadFailed": "Не вдалося завантажити список підписок", "toggleFailed": "Не вдалося перемкнути перемикач", "refreshFailed": "Не вдалося оновити", - "deleteFailed": "Не вдалося видалити" + "deleteFailed": "Не вдалося видалити", + "add": "Додати", + "cancel": "Скасувати", + "configure": "Налаштувати", + "copyEndpoint": "Скопіювати кінцеву точку", + "coreEndpointHint": "Основний підказка кінцевої точки", + "coreNodesHint": "Підказка для основних вузлів", + "create": "Створити", + "deleteConfirm": "Підтвердження видалення", + "empty": "Порожньо", + "globalModeDescription": "Опис глобального режиму", + "localCoreHint": "Локальний Ядровий Підказка", + "nodeSummary": "Підсумок вузла", + "providerRequired": "Необхідний постачальник", + "providerRouting": "Маршрутизація Провайдера", + "refresh": "Оновити", + "refreshInterval": "Інтервал оновлення", + "ruleModeDescription": "Опис Режиму Правил" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "Запустити автоматичне vision-to-text резервування перед маршрутизацією зображень до текстових моделей.", "visionBridgeEnabledLabel": "Увімкнено", "visionBridgeEnabledDesc": "Перемикач попереднього мосту, який заміняє частини із зображеннями на витягнутий текст.", + "visionBridgeRerouteTextOnlyLabel": "Перенаправити моделі лише для тексту", + "visionBridgeRerouteTextOnlyDesc": "Надішліть повний запит, включаючи зображення, до моделі моста, коли вибрана модель не має вхідного зображення.", "visionBridgeModel": "Модель мосту", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "Тут можна використовувати будь-який ID моделі OmniRoute, що підтримує vision.", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API-ключ не має manage-області.", "BYPASS_PREFIX_NOT_ALLOWED": "Один або декілька префіксів вказують на маршрути з можливістю spawn і не можуть бути обхідними.", "GENERIC": "Не вдалося оновити налаштування авторизації." - } + }, + "remove": "Видалити" }, "resilienceBaseCooldownLabel": "Базовий час відновлення", "scopeLabel": "Область застосування", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "Тестування аудіо…", "modalityBridgeAudioTestOk": "Аудіо міст OK — {count} кліп(и) транскрибовано {model}", "modalityBridgeAudioTestNoop": "Аудіоміст не активувався (можливо, ціль підтримує аудіо, жоден постачальник STT не підключений, або міст вимкнено)", - "modalityBridgeAudioTestError": "Тест аудіо не вдався: {message}" + "modalityBridgeAudioTestError": "Тест аудіо не вдався: {message}", + "modelRoutingDescriptionPlaceholder": "Маршрутизувати моделі Opus до комбінації frontier", + "cliproxyapiFallbackCodes": "Коди резервного копіювання Cliproxyapi", + "cliproxyapiFallbackDescription": "Опис резервного копіювання Cliproxyapi", + "cliproxyapiHealthLabel": "Мітка здоров'я Cliproxyapi", + "cliproxyapiImportFailed": "Не вдалося імпортувати Cliproxyapi", + "cliproxyapiImportResult": "Результат імпорту Cliproxyapi", + "cliproxyapiInvalidUrl": "Cliproxyapi Неправильне URL", + "cliproxyapiLifecycleNoticeAfter": "Повідомлення про життєвий цикл Cliproxyapi Після", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi Повідомлення Про Життєвий Цикл Перед", + "cliproxyapiLifecycleNoticeLink": "Посилання на Повідомлення Про Життєвий Цикл Cliproxyapi", + "cliproxyapiPortLabel": "Мітка порту Cliproxyapi", + "cliproxyapiStatusLabel": "Мітка статусу Cliproxyapi", + "cliproxyapiVersionLabel": "Мітка версії Cliproxyapi", + "collection": "Колекція", + "errorPage": { + "description": "Ми не змогли завантажити налаштування прямо зараз. Будь ласка, спробуйте ще раз через кілька секунд.", + "errorId": "Ідентифікатор помилки: {id}", + "retry": "Спробуйте ще раз", + "title": "Не вдалося завантажити налаштування" + }, + "host": "Хост", + "notInstalled": "Не встановлено", + "oneproxyActions": "Дії Oneproxy", + "oneproxyActive": "Oneproxy Активний", + "oneproxyAnonymity": "Анонімність Oneproxy", + "oneproxyCountry": "Країна Oneproxy", + "oneproxyDelete": "Oneproxy Видалити", + "oneproxyEmpty": "Oneproxy Порожньо", + "oneproxyHost": "Oneproxy Хост", + "oneproxyLatency": "Затримка Oneproxy", + "oneproxyProtocol": "Протокол Oneproxy", + "oneproxyQuality": "Якість Oneproxy", + "oneproxySyncFailed": "Синхронізація не вдалася: {error}", + "oneproxySyncSuccess": "Синхронізовано {total} проксі ({added} нових, {updated} оновлених)", + "proxyDocumentationSocks5DescAfter": "Документація проксі Socks5 Опис Після", + "proxyFreePoolAddProxy": "Додати проксі до безкоштовного пулу", + "proxyFreePoolAdding": "Додавання безкоштовного проксі-пулу", + "proxyFreePoolSelectProxy": "Вибрати проксі з безкоштовного пулу", + "proxyStatusActive": "Статус проксі Активний", + "proxyStatusInactive": "Статус проксі Неактивний", + "routingAddEntry": "Додати запис", + "settingSaveFailed": "Не вдалося зберегти налаштування", + "settingSaved": "Налаштування збережено", + "skillsmpApiKeyHintAfter": ". Ліміт запитів: {limit} запитів/день.", + "skillsmpApiKeyHintBefore": "Отримайте свій API-ключ з", + "syncFailed": "Синхронізація не вдалася", + "unhealthy": "Нездоровий", + "oneproxyDescription": "Отримайте та обертайте безкоштовні перевірені проксі з платформи спільноти 1proxy", + "oneproxySyncing": "Синхронізація...", + "oneproxySyncNow": "Синхронізувати зараз", + "oneproxyClearAll": "Очистити все", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Очистити всі проксі 1proxy?", + "memorySkillsSkillsmpDescription": "Підключіться до SkillsMP, щоб виявити та встановити навички з ринку.", + "memorySkillsActiveProviderDescription": "Виберіть, який постачальник використовується на сторінці Навичок для пошуку та встановлення.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Ринок", + "memorySkillsSkillsmpProviderDescription": "Аутентифікований маркетплейс (використовує ваш API-ключ SkillsMP).", + "memorySkillsSkillsshProviderTitle": "каталог skills.sh", + "memorySkillsSkillsshProviderDescription": "Постачальник публічного каталогу (необхідний ключ API).", + "routingCcBridgeCatalogName": "Міст CC, сумісний з Anthropic", + "routingClaudeProviderName": "Клод (OAuth)", + "routingClaudeProviderDescription": "Нативний постачальник Claude з токенами, виданими OAuth.", + "routingCcBridgeName": "Міст Claude-Code", + "routingCcBridgeDescription": "Релейте кінцеві точки, використовуючи API-ключі (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Користувацький провайдер.", + "routingUnknownOpKind": "Невідомий тип операції: {kind}", + "routingInvalidJson": "Неправильний JSON: {error}", + "routingConfigMustBeObject": "Конфігурація повинна бути об'єктом JSON", + "routingEnabledMustBeBoolean": "`enabled` має бути true або false", + "routingPipelineMustBeArray": "`pipeline` повинен бути масивом ops", + "routingPipelineTooLong": "Конвеєр не може перевищувати 50 операцій", + "routingOpMissingKind": "Операція #{index}: відсутній або недійсний `kind`", + "routingOpUnknownKind": "Операція #{index}: невідомий тип \"{kind}\"", + "routingJsonEditorHide": "Сховати редактор JSON", + "routingJsonEditorImportExport": "Імпорт / експорт JSON", + "routingJsonEditorLabel": "JSON (редагувати та застосувати, або вставити для імпорту)", + "routingApplyJson": "Застосувати JSON", + "routingTransformsFootnote": "Усі операції перетворення є ідемпотентними при повторному виконанні. Зміни набирають чинності негайно при наступному запиті.", + "cliproxyapiUnknown": "Невідомо", + "cliproxyapiVersion": "Версія", + "cliproxyapiHealth": "Здоров'я", + "cliproxyapiPort": "Порт", + "qdrantHost": "Хост", + "qdrantCollection": "Колекція" }, "contextRtk": { "title": "Двигун RTK", @@ -8016,6 +8379,15 @@ "full": "Full", "ultra": "Ultra" } + }, + "modeOptions": { + "default": "За замовчуванням", + "off": "Вимкнено", + "lite": "Легка", + "standard": "Стандартний", + "aggressive": "Агресивний", + "ultra": "Ультра", + "responsesToolOutput": "Вихідний інструмент відповідей" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "Запускається останнім у стеку (після того, як RTK/Caveman очищає текст, а OmniGlyph конвертує решту в зображення), а також працює автономно в режимі omniglyph. Це попередня версія, яка залишається вимкненою за замовчуванням до завершення наскрізної перевірки.", "saved": "Збережено.", "saveFailed": "Не вдалося зберегти.", - "enableAria": "Увімкнути рушій OmniGlyph" + "enableAria": "Увімкнути рушій OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Вбудовані служби", @@ -9127,7 +9500,49 @@ "unableToLoad": "Не вдалося завантажити системні показники", "product": "Продукт", "resources": "Ресурси", - "company": "Компанія" + "company": "Компанія", + "tokenHealthTooltips": { + "allHealthy": "Усі токени здорові", + "needsAttention": "Деякі токени потребують уваги", + "refreshFailures": "Виявлено помилки оновлення токенів", + "unknown": "Статус здоров'я невідомий" + }, + "systemMonitor": { + "metricsAriaLabel": "Системні метрики", + "memory": "Пам'ять", + "memoryShort": "mem", + "uptime": "Час безвідмовної роботи", + "ariaLabel": "Моніторинг системи", + "title": "Монітор системи", + "version": "Версія", + "connections": "З'єднання", + "circuitBreakers": "Автоматичні вимикачі", + "open": "{count} відкрито", + "memoryUsage": "Використання пам'яті" + }, + "never": "Ніколи", + "justNow": "Тільки що", + "minutesAgo": "{count}м тому", + "hoursAgo": "{count} годин тому", + "tokens": "Токени", + "costs": "Витрати", + "autoRefresh": "Автооновлення ({seconds}с)", + "toggleAutoRefresh": "Перемкнути автоматичне оновлення", + "activeRequests": "Активні запити", + "totalRequests": "Всього запитів", + "totalInputTokens": "Загальна кількість вхідних токенів", + "model": "Модель", + "provider": "Постачальник", + "requests": "Запити", + "lastUsed": "Останнє використання", + "inputTokens": "Токени Введення", + "totalTokens": "Всього токенів", + "inputCost": "Вартість Введення", + "outputCost": "Вартість виводу", + "noUsageData": "Ще не зафіксовано жодного використання. Зробіть кілька запитів, щоб побачити дані тут.", + "account": "Обліковий запис", + "accountLabel": "Обліковий запис {id}", + "noAccountUsage": "Ще не зафіксовано жодного використання, пов'язаного з обліковим записом. Використовуйте облікові записи OAuth для отримання даних тут." }, "auth": { "welcome": "Ласкаво просимо", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "Скинути через дані програми", + "resetViaAppDataDescription": "Видаліть файл налаштувань з каталогу даних програми, щоб скинути свій пароль:", + "quitDesktopApp": "Повністю вийти з настільного додатку OmniRoute", + "navigateToAppDataDirectory": "Перейдіть до каталогу даних програми:", + "checkSystemAppDataFolder": "(Перевірте папку даних системного додатку)", + "relaunchDesktopFreshSetup": "Перезапустіть настільний додаток OmniRoute — він розпочне нову установку", + "alternativeSetPasswordTitle": "Альтернатива: Встановити Новий Пароль", + "alternativeSetPasswordDescription": "Встановіть новий початковий пароль через файл середовища сервера:", + "openServerEnvFilePrefix": "Відкрити", + "relaunchDesktopApp": "Перезапустіть настільний додаток OmniRoute", + "codexLinkInvalidOrExpired": "Цей посилання недійсне або термін дії закінчився.", + "codexValidationServerError": "Не вдалося досягти сервера для перевірки цього посилання.", + "codexSaveConnectionError": "Не вдалося зберегти з'єднання. Посилання могло закінчитися.", + "codexDeviceLoginDisabled": "Увійти за допомогою коду пристрою вимкнено для цього облікового запису OpenAI. Увімкніть його в налаштуваннях безпеки ChatGPT (або запитайте у адміністратора вашого робочого простору).", + "codexAuthorizationTimedOut": "Час авторизації вичерпано. Натисніть Почати знову, щоб спробувати ще раз.", + "authenticationCancelled": "Аутентифікацію було скасовано.", + "unexpectedAuthenticationError": "Несподівана помилка під час автентифікації. Будь ласка, спробуйте ще раз.", + "connectOpenAiCodexTitle": "Підключити OpenAI Codex", + "codexConnectDescription": "Авторизуйте обліковий запис ChatGPT, щоб завершити налаштування цього з'єднання.", + "validatingCodexLink": "Перевірка посилання…", + "codexGenerateCodeDescription": "Натисніть нижче, щоб згенерувати одноразовий код, а потім увійдіть до OpenAI.", + "startCodexFlow": "Почати", + "requestingOpenAiCode": "Запит коду від OpenAI…", + "codexVerificationInstructions": "1. Відкрийте сторінку перевірки OpenAI та 2. введіть цей код. Ця сторінка оновлюється автоматично після вашої авторизації.", + "yourCode": "Ваш код", + "openVerificationPage": "Відкрити сторінку перевірки", + "copyUrlShort": "Скопіювати URL", + "savingConnection": "Збереження з'єднання…", + "codexConnected": "Підключено!", + "codexConnectionRegistered": "Обліковий запис Codex був зареєстрований. Ви можете закрити цю вкладку.", + "tryAgain": "Спробуйте ще раз", + "traeAuthorizationSuccess": "Авторизація Trae ✓", + "traeAuthorizationFailed": "Не вдалося авторизувати Trae", + "closeAuthorizationWindow": "Ви можете закрити це вікно.", + "returnToDashboard": "Повернутися до інформаційної панелі.", + "resetViaAppData": "Скинути через дані програми", + "deleteSettingsToReset": "Видаліть файл налаштувань з каталогу даних програми, щоб скинути свій пароль:", + "quitAppCompletely": "Повністю вийти з настільного додатку OmniRoute", + "navigateToAppData": "Перейдіть до каталогу даних програми", + "checkAppDataFolder": "Перевірте папку даних системного додатку", + "deleteSettingsJson": "Видалити", + "relaunchAppFresh": "Перезапустіть настільний додаток OmniRoute — він розпочне нову установку", + "alternativeSetPassword": "Альтернатива: Встановити Новий Пароль", + "setNewPasswordViaEnv": "Встановіть новий початковий пароль через файл середовища сервера:", + "openServerEnv": "Відкрити", + "inDataDirectory": "в каталозі даних", + "addOrUpdate": "Додати або оновити", + "deleteAndRelaunch": "Видалити", + "settingsJson": "settings.json", + "fromDataDir": "з каталогу даних", + "relaunchApp": "Перезапустіть настільний додаток OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Готові спростити інфраструктуру ШІ?", "ctaDescription": "Приєднуйтесь до розробників, які оптимізують свою інтеграцію ШІ за допомогою OmniRoute. З відкритим вихідним кодом і безкоштовно.", "startFree": "Почніть безкоштовно", - "readDocumentation": "Прочитайте документацію" + "readDocumentation": "Прочитайте документацію", + "company": "Компанія", + "pricing": "Ціни", + "apiReference": "Посилання на API", + "helpCenter": "Центр Допомоги", + "about": "Про програму", + "blog": "Блог", + "contact": "Контакт", + "terms": "Умови", + "privacy": "Конфіденційність", + "license": "Ліцензія", + "footerDescription": "Уніфікований інтерфейс для сучасної інфраструктури ШІ. Безпечний, спостережуваний та масштабований.", + "communityDiscussions": "Обговорення спільноти" }, "docs": { "title": "Документація", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Реєструйте агентів і керуйте ними через реєстр ACP для спілкування між агентами та спільного використання інструментів.", "protocolAcpStep1": "Перейдіть до Інформаційної панелі → Агенти, щоб переглянути зареєстрованих агентів ACP.", "protocolAcpStep2": "Зареєструйте нових агентів із можливостями та конфігурацією кінцевої точки.", - "protocolAcpStep3": "Використовуйте інструменти CLI для налаштування каналів зв’язку агента." + "protocolAcpStep3": "Використовуйте інструменти CLI для налаштування каналів зв’язку агента.", + "metadataTitleTemplate": "%s — Документація OmniRoute", + "metadataDefaultTitle": "Документація OmniRoute", + "metadataDescription": "Всеосяжна документація для OmniRoute AI gateway — налаштування, API, стиснення, розгортання та інше.", + "layoutNavTitle": "OmniRoute Документація", + "layoutHomeLink": "Головна документація", + "layoutDashboardLink": "← Назад до Панелі управління", + "homeTitle": "Документація OmniRoute", + "homeMetadataDescription": "Усе, що вам потрібно для маршрутизації, стиснення та масштабування вашого ШІ — посібники з налаштування, довідник API, стиснення, розгортання та інше.", + "homeTwitterDescription": "Всеосяжна документація для OmniRoute AI шлюзу", + "homeDescription": "Усе, що вам потрібно для маршрутизації, стиснення та масштабування вашого ШІ", + "homeSearchHint": "Натисніть Ctrl K, щоб знайти документацію", + "featuredQuickStartTitle": "Швидкий старт", + "featuredQuickStartDescription": "Запустіть OmniRoute за 3 хвилини", + "featuredAutoComboTitle": "Авто-комбо посібник", + "featuredAutoComboDescription": "Нехай OmniRoute вибере найкращий ШІ для вас", + "featuredProvidersTitle": "Посібник для постачальників", + "featuredProvidersDescription": "Підключіть постачальників ШІ за кілька хвилин", + "nonTechUsersTitle": "Для нетехнічних користувачів", + "nonTechUsersSubtitle": "Швидкий старт — технічний досвід не потрібен", + "techUsersTitle": "Для технічних користувачів", + "techUsersSubtitle": "Глибоке занурення в архітектуру, API та внутрішні системи", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute Документація", + "apiExplorerMetadataDescription": "Інтерактивний API-експлорер — спробуйте кінцеві точки OmniRoute в реальному часі з миттєвими відповідями", + "apiExplorerTitle": "API Експлорер", + "apiExplorerDescription": "Спробуйте кінцеві точки OmniRoute в реальному часі. Виберіть кінцеву точку, налаштуйте свій запит і перегляньте відповідь в реальному часі.", + "apiExplorerSseStarted": "Потік SSE розпочато — перевірте термінал/інструменти розробника для отримання даних у реальному часі.", + "apiExplorerError": "Помилка: {message}", + "apiExplorerAuth": "авторизація", + "apiExplorerResponseLabel": "Відповідь", + "apiExplorerSelectEndpoint": "Виберіть кінцеву точку для дослідження", + "apiExplorerChooseApi": "Виберіть API з бокової панелі, щоб переглянути деталі та спробувати його в реальному часі", + "feedbackThanks": "Дякуємо за ваш відгук!", + "feedbackQuestion": "Чи була ця сторінка корисною?", + "pageMetadataTitle": "{title} — Документація OmniRoute", + "pageMetadataDescription": "Документація OmniRoute: {title}", + "breadcrumb": "Хлібні крихти", + "apiReferenceTable": { + "parameters": "Параметри", + "name": "Ім'я", + "type": "Тип", + "description": "Опис", + "returns": "Повертає", + "typePrefix": "Тип:" + } }, "legal": { "privacyPolicy": "Політика конфіденційності", @@ -9957,7 +10479,42 @@ "successMessage": "Ваш обліковий запис {providerName} підключено.", "done": "Готово", "error": "Помилка підключення", - "tryAgain": "Спробуйте знову" + "tryAgain": "Спробуйте знову", + "errorSessionIncomplete": "Сесія OAuth неповна (відсутній URI перенаправлення або код перевірки). Перезапустіть з'єднання та спробуйте ще раз.", + "errorExchangeFailed": "Обмін не вдався", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: За замовчуванням облікові дані Google OAuth працюють лише на localhost. Для віддаленого використання налаштуйте свої власні облікові дані OAuth через змінні середовища: ANTIGRAVITY_OAUTH_CLIENT_ID та ANTIGRAVITY_OAUTH_CLIENT_SECRET. Дивіться розділ README 'OAuth на віддаленому сервері'.", + "errorSaveFailed": "Збереження не вдалося", + "errorAuthorizationFailed": "Авторизація не вдалася", + "errorAuthorizationTimeout": "Тайм-аут авторизації", + "errorRequestFailed": "Запит не вдався", + "errorCallbackServerFailed": "Не вдалося запустити сервер зворотного виклику", + "errorBrowserUnavailable": "OAuth для браузера недоступний для цього постачальника в поточному середовищі. Використовуйте підтримуваний метод автентифікації замість цього.", + "errorStateMismatch": "Несумісність стану OAuth. Перезапустіть з'єднання та спробуйте ще раз.", + "errorImportAccessToken": "Не вдалося імпортувати токен доступу", + "errorSessionNotInitialized": "Сесію OAuth не ініційовано. Перезапустіть процес підключення та спробуйте ще раз.", + "errorNoAuthorizationCode": "Не знайдено коду авторизації. Вставте URL зворотного виклику або код авторизації.", + "tabDeviceCode": "Код Пристрою", + "tabBrowserLogin": "Вхід у браузер", + "tabImportAuthJson": "Імпортувати auth.json", + "tabPasteApiKey": "Вставте API ключ", + "windsurfPasteDescription": "У середовищі Windsurf / VS Code IDE виконайте команду \"Windsurf: Provide Auth Token\" з палітри команд (або натисніть кнопку Jupyter \"Get Windsurf Authentication Token\"), потім скопіюйте показаний токен і вставте його нижче. Відкриття windsurf.com/show-auth-token безпосередньо показує лише сторінку \"Перенаправлення\" — IDE повинно ініціювати цей процес.", + "grokAuthJsonDescription": "Вставте повний вміст ~/.grok/auth.json (не лише поле \"key\" JWT). Простий JWT не має refresh_token, тому з'єднання припиняється після закінчення терміну дії (#7610). Виберіть спеціальне вікно імпорту auth.json, коли це можливо.", + "devinDesktopPasteDescription": "Вставте існуючий ключ API Devin з автентифікованої сесії Devin. Доступність експорту ключа та кроки можуть відрізнятися в залежності від версії Devin та облікового запису.", + "devinPasteDescription": "Надайте свій WINDSURF_API_KEY (отриманий через `devin auth login`, або через команду \"Windsurf: Provide Auth Token\" у Windsurf IDE).", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API Ключ / Токен", + "saving": "Збереження…", + "saveConnection": "Зберегти з'єднання", + "gheDescription": "Введіть базову URL-адресу вашого екземпляра GitHub Enterprise (наприклад, https://ghe.yourcompany.com).", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "URL GitHub Enterprise", + "gheUrlRequired": "Необхідно вказати URL-адресу GitHub Enterprise", + "gitlabDuoSetupTitle": "Налаштування Duo OAuth для GitLab", + "gitlabDuoSetupMessage": "Не налаштовано Duo OAuth для GitLab. Зареєструйте OAuth-додаток за адресою {applicationsUrl} з URI перенаправлення {redirectUri} та обсягами \"{scopes}\", потім встановіть {clientIdEnv} (і, за бажанням, {clientSecretEnv}) та перезапустіть.", + "gitlabDuoSetupDescription": "Після реєстрації програми та налаштування змінних середовища на цьому екземплярі OmniRoute натисніть Продовжити, щоб розпочати вхід через OAuth.", + "continue": "Продовжити" }, "cursorAuthModal": { "title": "Підключіть Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "Завантажити ще", - "loadingMore": "Завантаження..." + "loadingMore": "Завантаження...", + "correlationId": "Ідентифікатор кореляції", + "group": { + "showAllRows": "Показати всі рядки", + "showLatestPerCorrelation": "Показати останні за ідентифікатором кореляції", + "grouped": "Груповані" + }, + "running": "виконання", + "interval": { + "decrease": "Зменшити інтервал", + "title": "Інтервал автоматичного оновлення в секундах", + "increase": "Збільшити інтервал" + }, + "status": { + "inProgress": "В процесі", + "recoveredByRetry": "Відновлено шляхом повторної спроби", + "goToParent": "Перейти до батьківського запиту", + "healedTitle": "Не вдалося, відновлено після {count} спроб", + "healed": "зцілений", + "failedTitle": "Усі {count} спроби не вдалися", + "failed": "не вдалося", + "pinnedTitle": "Модель вибрана через закріплення сесії контекстного кешу", + "pinned": "закріплено" + }, + "attempts": "спроби", + "detail": { + "collapse": "Згорнути {title}", + "expand": "Розгорнути {title}", + "copyTitle": "Скопіювати {title}", + "copied": "Скопійовано!", + "copy": "Копіювати", + "autoscrollOn": "Автопрокрутка: увімкнено", + "autoscrollOff": "Автопрокрутка: вимкнено", + "payload": { + "clientRawRequest": "Сирий запит клієнта", + "clientRequest": "Запит клієнта", + "openaiRequest": "Запит OpenAI", + "providerRequest": "Запит постачальника", + "providerResponse": "Відповідь постачальника", + "clientResponse": "Відповідь клієнта", + "pipelineError": "Помилка конвеєра" + }, + "payloadMissing": "Детальний артефакт корисного навантаження більше недоступний для цього запису журналу.", + "payloadCorrupt": "Не вдалося розібрати детальний артефакт корисного навантаження.", + "notAvailable": "N/A", + "semanticCache": "Семантичний (OmniRoute)", + "upstreamCache": "Верхній рівень (Постачальник)", + "ariaLabel": "Деталі журналу запитів", + "completed": "Завершено", + "upstreamStatus": "Вгору за течією: {status}", + "statusDiscrepancy": "OmniRoute повернув {status}, хоча постачальник повернув {provider}", + "previousRequest": "Попередній запит", + "nextRequest": "Наступний запит", + "close": "Закрити детальне модальне вікно", + "startedAt": "Початок", + "endedAt": "Закінчено о", + "duration": "Тривалість", + "model": "Модель", + "provider": "Постачальник", + "account": "Обліковий запис", + "input": "Вхід", + "totalIn": "Всього в: {value}", + "cacheRead": "Кеш Читання: {value}", + "cacheWrite": "Запис у кеш: {value}", + "compressed": "Стиснуто: {from} → {to} ({percent}% зекономлено)", + "output": "Вивід", + "totalOut": "Всього вихід: {value}", + "reasoning": "Міркування: {value}", + "requestedModel": "Запитана Модель", + "requestProtocol": "Протокол запиту", + "cacheSource": "Кеш Джерело", + "modelPinning": "Прикріплення Моделі", + "activeModelPinning": "Активний — модель, вибрана через закріплення сесії", + "rotated": "Повернуто: {initial} -> {final}", + "apiKey": "API Ключ", + "noApiKey": "Немає ключа API", + "combo": "Комбо", + "error": "Помилка", + "unblockAll": "Розблокувати все", + "cleared": "Очищено", + "unblock": "Розблокувати", + "relatedRequests": "Супутні запити ({count})", + "current": "поточний", + "detailStatus": "Детальний статус", + "loadingDetails": "Завантаження деталей запиту...", + "providerEventStream": "Постачальник Подій Потоку", + "clientEventStream": "Потік подій клієнта", + "eventStream": "Потік Подій", + "responsePayloadLegacy": "Вантаж відповіді (Спадковий)", + "requestPayloadLegacy": "Запит на навантаження (Спадковий)", + "noPayload": "Немає даних про корисне навантаження для цього запису журналу.", + "correlationId": "Ідентифікатор кореляції", + "correlationIdValue": "Ідентифікатор кореляції: {id}", + "detailedPayloadInfo": "Спочатку увімкніть детальне ведення журналів, якщо ви хочете перегляд чотирьохетапного навантаження клієнта/постачальника для нових запитів." + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} вимкнено", "providerAdded": "{provider} додано", "add": "Додати", - "manualApiKey": "Використовуйте ручний API-ключ" + "manualApiKey": "Використовуйте ручний API-ключ", + "createDahlTokenFailed": "Не вдалося створити токен Dahl", + "providerProxy": "Проксі", + "providerProxyConfigureHint": "Налаштувати проксі", + "providerProxyTitleConfigured": "Проксі налаштовано: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "Обмежено ToS — перегляньте умови", "caution": "Увага — пункти про особисте використання / проксі", "ok": "Загалом дозволено" - } + }, + "allProviders": "Усі постачальники", + "noApiKeyRequired": "Не потрібен API-ключ" }, "providerHealthAutopilot": { "title": "Автопілот стану провайдерів", @@ -12390,7 +13047,11 @@ "on": "УВІМК", "off": "ВИМК", "availableProviders": "Доступні провайдери ({count})", - "noProviderOverrides": "Без перевизначень — усі активні провайдери братимуть участь зі своїми моделями за замовчуванням" + "noProviderOverrides": "Без перевизначень — усі активні провайдери братимуть участь зі своїми моделями за замовчуванням", + "resetFailed": "Скидання не вдалося", + "resetSuccess": "Скидання конфігурації до значень за замовчуванням", + "running": "Виконання...", + "testFailed": "Тест не пройдено" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) — друг-засновник відкритого коду OmniRoute", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "Постачальник не підтримує візуалізацію для цього запиту зображення", "capabilityFilter.toolsMismatch": "Постачальник не підтримує виклик інструментів", "capabilityFilter.structuredOutputMismatch": "Постачальник не підтримує структурований вивід", - "capabilityFilter.contextWindowMismatch": "Запит перевищує контекстне вікно постачальника" + "capabilityFilter.contextWindowMismatch": "Запит перевищує контекстне вікно постачальника", + "publicSystem": { + "notFound": { + "title": "Сторінку не знайдено", + "description": "Сторінка, яку ви шукаєте, не існує або була переміщена.", + "dashboardAriaLabel": "Повернутися до панелі керування", + "statusAriaLabel": "Відкрити сторінку статусу системи", + "systemStatus": "Стан Системи" + }, + "error": { + "title": "Внутрішня помилка сервера", + "description": "Щось пішло не так під час обробки вашого запиту. Наша команда була сповіщена і працює над виправленням.", + "errorId": "Ідентифікатор помилки: {id}", + "detailsAriaLabel": "Деталі помилки", + "retryAriaLabel": "Спробуйте перезавантажити сторінку", + "tryAgain": "Спробуйте ще раз", + "dashboardAriaLabel": "Повернутися до панелі управління", + "statusAriaLabel": "Відкрити статус системи", + "systemStatus": "Стан Системи" + }, + "globalError": { + "title": "Щось пішло не так", + "description": "Сталася несподівана помилка. Це було зафіксовано, і наша команда розслідуватиме.", + "detailsAriaLabel": "Деталі помилки", + "retryAriaLabel": "Спробуйте перезавантажити сторінку", + "tryAgain": "Спробуйте ще раз", + "statusAriaLabel": "Відкрити статус системи", + "systemStatus": "Стан Системи" + }, + "offline": { + "title": "Проблема з підключенням", + "description": "OmniRoute не може зараз підключитися до мережі. Перевірте ваше інтернет-з'єднання, налаштування VPN або проксі.", + "connectionRestored": "З'єднання відновлено", + "offlineModeDetected": "Виявлено режим офлайн", + "retryConnection": "Спробувати знову підключитися", + "openStatusPage": "Відкрити сторінку статусу" + }, + "maintenance": { + "title": "Планове обслуговування", + "description": "Деякі сервіси тимчасово недоступні під час проведення технічного обслуговування. Основна маршрутизація зазвичай залишається онлайн, але функції управління можуть бути знижені.", + "suggestion1": "Спробуйте ще раз через кілька хвилин.", + "suggestion2": "Перевірте поточні індикатори здоров'я та статус постачальника перед повторною спробою.", + "systemStatus": "Переглянути статус системи", + "healthDashboard": "Відкрити інформаційну панель здоров'я" + }, + "status": { + "title": "Стан Системи", + "description": "Живий оперативний знімок для основних служб OmniRoute.", + "loadingHealth": "Завантаження показників здоров'я...", + "failedToLoad": "Не вдалося завантажити стан системи.", + "unableToReachHealth": "Неможливо досягти кінцевої точки здоров'я. Перевірте з'єднання та спробуйте ще раз.", + "healthCheckFailed": "Перевірка стану не вдалася", + "openConnectivityHelp": "Допомога з відкритою сумісністю", + "maintenanceInfo": "Інформація про обслуговування", + "service": "Сервіс", + "unknown": "невідомо", + "notAvailable": "н/д", + "providersTracked": "Відстежувані постачальники", + "circuitBreakerState": "Стан вимикача ланцюга постачальника", + "lastUpdate": "Останнє оновлення: {timestamp}", + "uptimeMinutes": "{minutes}хв", + "uptimeHoursMinutes": "{hours}г {minutes}х" + }, + "statusPages": { + "400": { + "title": "Неправильний запит", + "description": "Тіло запиту є недійсним або неповним.", + "suggestion1": "Перевірте обов'язкові поля та формат даних перед повторною спробою.", + "suggestion2": "Якщо ви використовуєте API, перевірте JSON-схему локально.", + "suggestion3": "Якщо це продовжуватиме відбуватися, відкрийте запит у Translator Playground, щоб перевірити корисне навантаження.", + "primaryAction": "Відкрити Документацію", + "secondaryAction": "Відкрити Перекладач" + }, + "401": { + "title": "Неавторизовано", + "description": "Для доступу до цього ресурсу потрібна аутентифікація.", + "suggestion1": "Увійдіть знову та повторіть операцію.", + "suggestion2": "Для викликів API підтвердіть, що токен Bearer присутній і дійсний.", + "suggestion3": "Якщо токен нещодавно був змінений, оновіть свої облікові дані клієнта.", + "primaryAction": "Перейти до входу", + "secondaryAction": "Керувати API ключами" + }, + "403": { + "title": "Заборонено", + "description": "Ваш запит був зрозумілий, але доступ заборонено політикою.", + "suggestion1": "Перевірте правила дозволеного/заблокованого IP у налаштуваннях.", + "suggestion2": "Перевірте моделі та політики бюджету, призначені для вашого API-ключа.", + "suggestion3": "Попросіть адміністратора надати необхідний обсяг дозволів.", + "primaryAction": "Допомога з відкритим доступом", + "secondaryAction": "Відкрити Налаштування Безпеки" + }, + "408": { + "title": "Час запиту вичерпано", + "description": "Сервер не отримав повний запит вчасно.", + "suggestion1": "Спробуйте надіслати запит з меншим обсягом даних.", + "suggestion2": "Перевірте стабільність вашої мережі та затримку VPN/проксі.", + "suggestion3": "Для тривалих операцій увімкніть потокову передачу або розділіть запит.", + "primaryAction": "Відкрити посібник з кінцевих точок", + "secondaryAction": "Перевірити стан мережі" + }, + "429": { + "title": "Занадто багато запитів", + "description": "Перевищено ліміти швидкості для цього клієнта, ключа або постачальника.", + "suggestion1": "Зачекайте на охолодження та спробуйте ще раз після запропонованого інтервалу.", + "suggestion2": "Переключитися на комбінацію з резервними постачальниками.", + "suggestion3": "Налаштуйте профілі стійкості/обмеження швидкості постачальника в налаштуваннях.", + "primaryAction": "Відкрити Налаштування Стійкості", + "secondaryAction": "Відкрити комбо" + }, + "500": { + "title": "Внутрішня помилка сервера", + "description": "Сталася несподівана помилка на стороні сервера під час обробки вашого запиту.", + "suggestion1": "Спробуйте ще раз через кілька секунд.", + "suggestion2": "Перевірте телеметрію стану та журнали сервера на наявність корельованих ідентифікаторів запитів.", + "suggestion3": "Якщо проблема повторюється, повідомте про неї з позначкою часу та контекстом запиту.", + "primaryAction": "Відкрити інформаційну панель здоров'я", + "secondaryAction": "Відкрити журнали" + }, + "502": { + "title": "Поганий шлюз", + "description": "Постачальник верхнього рівня або інтеграція шлюзу повернула недійсну відповідь.", + "suggestion1": "Спробуйте з іншим постачальником або активним комбінаційним маршрутом.", + "suggestion2": "Перевірте облікові дані постачальника та доступність моделі.", + "suggestion3": "Перевірте вихідні дані перекладача, якщо залучено перетворення формату.", + "primaryAction": "Відкрити постачальників", + "secondaryAction": "Відкрити Перекладач" + }, + "503": { + "title": "Служба недоступна", + "description": "Сервіс тимчасово недоступний через технічне обслуговування або зниження якості залежностей.", + "suggestion1": "Зачекайте хвилину і спробуйте ще раз.", + "suggestion2": "Перевірте повідомлення про обслуговування та статус системи.", + "suggestion3": "Використовуйте резервні постачальники, якщо ваш робочий процес чутливий до затримок.", + "primaryAction": "Деталі обслуговування", + "secondaryAction": "Стан Системи" + } + } + }, + "kiroAuthModal": { + "title": "Підключити {providerLabel}", + "chooseMethod": "Виберіть свій метод аутентифікації:", + "builderId": "AWS Builder ID", + "builderDescription": "Рекомендується для більшості користувачів. Увійдіть за допомогою облікового запису AWS, пов'язаного з {providerLabel}.", + "organization": "Ваша організація (AWS IAM Identity Center)", + "organizationDescription": "Використовуйте URL-адресу початку SSO вашої компанії (наприклад: {url}).", + "googleAccount": "Обліковий запис Google", + "googleDescription": "Увійдіть за допомогою свого облікового запису Google.", + "githubAccount": "Обліковий запис GitHub", + "githubDescription": "Увійдіть за допомогою свого облікового запису GitHub.", + "importToken": "Імпортувати Токен", + "importDescription": "Вставте токен оновлення, експортований з {providerLabel}.", + "apiKey": "API Ключ", + "apiKeyDescription": "Вставте довгостроковий {providerLabel} / CodeWhisperer API ключ. Він зберігається як облікові дані типу bearer без токена оновлення; виявлення профілю здійснюється на основі найкращих зусиль.", + "idcStartUrl": "IDC Початкове URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "URL вашого AWS IAM Identity Center організації", + "awsRegion": "Регіон AWS", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "Регіон AWS для вашого Центру Ідентифікації (за замовчуванням: us-east-1)", + "continue": "Продовжити", + "back": "Назад", + "autoDetecting": "Автоматичне виявлення токена...", + "readingCredentials": "Читання облікових даних {providerLabel} з кешу AWS SSO", + "tokenNotDetected": "Токен {providerLabel} не був автоматично виявлений. Будь ласка, вставте свій токен оновлення вручну.", + "refreshToken": "Токен Оновлення", + "tokenPlaceholder": "Токен буде автоматично заповнено...", + "importing": "Імпортування...", + "apiKeyPlaceholder": "Вставте свій {providerLabel} API ключ...", + "apiKeyStoredDescription": "Зберігається зашифрованим як довгостроковий маркер доступу. Процесу оновлення немає.", + "apiKeyRegionDescription": "Регіон AWS для ключа (за замовчуванням: us-east-1)", + "validating": "Валідуючи...", + "validateAndSaveApiKey": "Перевірити та зберегти API-ключ", + "errorAutoDetect": "Не вдалося автоматично виявити токен", + "errorAutoDetectFailed": "Не вдалося автоматично виявити токен", + "errorRefreshTokenRequired": "Будь ласка, введіть токен оновлення", + "errorImportFailed": "Імпорт не вдався", + "errorApiKeyRequired": "Будь ласка, введіть ключ API Kiro", + "errorApiKeyImportFailed": "Імпорт ключа API не вдався", + "errorIdcStartUrlRequired": "Будь ласка, введіть ваше IDC початкове URL" + }, + "kiroSocialOAuthModal": { + "title": "Підключити {providerLabel} через {providerName}", + "errorStartAuthorization": "Не вдалося розпочати авторизацію", + "errorAuthorizationExpired": "Термін дії авторизації закінчився. Розпочніть процес входу знову.", + "errorAuthorizationFailed": "Авторизація не вдалася", + "initializing": "Ініціалізація...", + "settingUp": "Налаштування автентифікації {providerName}", + "openIncognito": "Відкрийте це посилання в режимі Інкогніто", + "incognitoDescription": "Використовуйте вікно Інкогніто/Приватне, щоб уникнути конфліктів сесій з існуючими обліковими записами.", + "copyLink": "Скопіювати посилання", + "verificationCode": "Код підтвердження", + "waiting": "Очікування авторизації...", + "cancel": "Скасувати", + "successTitle": "Успішно підключено!", + "successMessage": "Ваш обліковий запис {providerLabel} через {providerName} був підключений.", + "done": "Готово", + "errorTitle": "З'єднання не вдалося", + "close": "Закрити" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "Авторизація не вдалася", + "errorPopupBlocked": "Вікно спливаючого повідомлення заблоковано — дозволте спливаючі вікна для цього сайту або вставте токен вручну нижче.", + "errorPopupClosed": "Вікно авторизації було закрито до завершення.", + "errorAccessTokenRequired": "Необхідний токен доступу.", + "errorImportFailed": "Імпорт не вдався", + "title": "Підключити Trae SOLO", + "authorizeDescription": "Авторизуйте через trae.ai у спливаючому вікні. Спливаюче вікно закриється автоматично після імпорту токена.", + "authorizeImportant": "Важливо: ви повинні увійти в trae.ai в цьому браузері спочатку. Сторінка авторизації лише підтверджує існуючу сесію — вона не може вас увійти. Якщо ви бачите \"Не вдалося увійти\", натисніть \"Відкрити solo.trae.ai\", увійдіть, а потім поверніться сюди.", + "waitingForAuthorization": "Очікування на trae.ai…", + "authorizeWithBrowser": "Авторизуватися за допомогою браузера", + "openSoloTrae": "Відкрийте solo.trae.ai", + "orPasteManually": "або вставте токен вручну", + "manualInstructions": "Увійдіть на solo.trae.ai, відкрийте DevTools → Мережа, надішліть будь-яке повідомлення чату та скопіюйте JWT з заголовка запиту Authorization: Cloud-IDE-JWT {tokenPlaceholder}. Термін дії JWT становить ~14 днів. Додаткові поля ідентичності беруться з common_params у тій же частині запиту.", + "accessTokenLabel": "Токен Доступу (Cloud-IDE-JWT)", + "webId": "Веб ID", + "optional": "додатковий", + "bizUserId": "ID користувача Biz", + "userUniqueId": "Унікальний ID користувача", + "scope": "Область", + "tenant": "Орендар", + "region": "Регіон", + "importing": "Імпортування…", + "importToken": "Імпортувати Токен", + "cancel": "Скасувати" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "Розподіл...", + "complete": "Завершено", + "defaultLabel": "Розподілити проксі" + } + }, + "providerTest": { + "dialogLabel": "Тест {provider}", + "deprecated": "застарілий", + "risk": "ризик", + "close": "Закрити", + "model": "Модель", + "key": "Ключ", + "defaultKey": "за замовчуванням", + "clearConversation": "Очистити розмову", + "clear": "Очистити", + "tabs": { + "test": "Тест", + "logs": "Журнали" + }, + "loadingLogs": "Завантаження журналів…", + "failedToLoadLogs": "Не вдалося завантажити журнали", + "noLogsYet": "Ще немає журналів", + "noLogsDescription": "Надішліть тестове повідомлення з вкладки Тест — журнали для цього постачальника з'являться тут.", + "openFullLogs": "Відкрити сторінку повних журналів", + "live": "В прямому ефірі", + "tailingLast": "виведення останніх {count}", + "refreshNow": "Оновити зараз", + "refresh": "Оновити", + "unknownRequester": "невідомий запитувач", + "fields": { + "timestamp": "Мітка часу", + "status": "Статус", + "duration": "Тривалість", + "model": "Модель", + "requestedModel": "Запитана модель", + "provider": "Постачальник", + "requester": "Запитувач", + "tokens": "Токени" + } + }, + "proxyLog": { + "detailAriaLabel": "Деталі журналу проксі", + "event": "Проксі Подія", + "close": "Закрити модальне вікно деталей проксі", + "time": "Час", + "latency": "Затримка", + "clientIp": "IP-адреса клієнта", + "proxy": "Проксі", + "direct": "Прямий", + "type": "Тип", + "level": "Рівень", + "provider": "Постачальник", + "tlsFingerprint": "TLS відбиток", + "directNative": "Прямий (рідний)", + "targetUrl": "Цільовий URL", + "error": "Помилка", + "configuration": "Конфігурація проксі" + }, + "requestTimeline": { + "title": "Таймлайн Запиту", + "modes": { + "follow": "Слідкувати", + "followDescription": "Вісь прокручується вліво, лінія NOW залишається на 75%", + "now": "Тепер", + "nowDescription": "Перейти до поточного часу, лінія ЗАРАЗ скидається до центру", + "pan": "Сковорода", + "panDescription": "Перетягніть, щоб дослідити, фон заморожено" + }, + "reset": "Скинути", + "started": "Розпочато", + "ended": "Закінчено", + "duration": "Тривалість", + "status": "Статус", + "provider": "Постачальник", + "tokens": "Токени", + "active": "Активний", + "other": "Інше", + "tenMinutes": "10хв", + "hour": "година", + "day": "день", + "unknownModel": "невідомо", + "pending": "в очікуванні" + }, + "metadata": { + "compressionTitle": "Стиснення", + "compressionDescription": "Налаштуйте параметри стиснення контексту, щоб зменшити використання токенів та витрати.", + "relayTitle": "OmniRoute — Релейні Проксі", + "relayDescription": "Безсерверні релейні проксі-ендпоїнти для вашої інфраструктури ШІ", + "trafficInspectorTitle": "Traffic Inspector — OmniRoute", + "trafficInspectorDescription": "Моніторинг викликів LLM + налагодження HTTPS-трафіку будь-якого застосунку" + }, + "conductor": { + "title": "Кондуктор — флот CLI-агентів", + "subtitle": "OmniConductor хаб: виконавці, черга завдань та ради, в реальному часі", + "runners": "Бігунки", + "tasks": "Завдання", + "colName": "Ім'я", + "colClis": "CLI-інтерфейси", + "colStatus": "Статус", + "colTask": "Завдання", + "colMode": "Режим", + "colRunner": "Запускатор", + "colSummary": "Резюме", + "online": "онлайн", + "offline": "офлайн", + "draining": "зливання", + "hubOffline": "Кондукторський хаб офлайн або не налаштований (CONDUCTOR_HUB_URL) — не показує нічого, крім застарілих даних.", + "noRunners": "Немає зареєстрованих бігунів", + "noTasks": "Ще немає завдань", + "detailTitle": "Деталі завдання", + "prompt": "Запит", + "branch": "Гілка", + "fetchHint": "Отримайте результат за допомогою: git fetch origin {branch}", + "council": "Рада", + "candidates": "Кандидати", + "cancel": "Скасувати завдання", + "cancelConfirmTitle": "Скасувати це завдання?", + "cancelConfirmMessage": "Хаб скасує виконання на виконавці. Це не можна скасувати.", + "cancelFailed": "Хаб відмовив у скасуванні", + "close": "Закрити", + "error": "Помилка", + "faroTitle": "Faro — речник флоту", + "faroSubtitle": "Чат і голос, прив'язані до реальних подій флоту. Руйнувальні команди завжди вимагають підтвердження.", + "faroEmpty": "Запитайте про флот — наприклад, \"як справи з флотом?\"", + "faroPending": "Faro просить підтвердження", + "faroPlaceholder": "поговори з Фаро…", + "faroSend": "надіслати", + "faroOffline": "Faro (представник) не в мережі", + "yes": "Так", + "no": "Ні", + "pushToTalk": "Утримуйте, щоб говорити", + "speakAnswers": "говорити відповіді", + "voiceModels": "Моделі голосу (постачальник/модель цього OmniRoute)", + "voiceIdle": "говорити", + "voiceListening": "слухаю…", + "voiceThinking": "думаю…", + "voiceSpeaking": "говорячи…", + "sttFailed": "Не вдалося транскрибувати (перевірте модель/постачальника STT)", + "ttsFailed": "Не вдалося синтезувати мову (перевірте модель/постачальника TTS)", + "micDenied": "Мікрофон недоступний або доступ заборонено" + }, + "cliproxyProviderExposure": { + "title": "Виток Постачальника", + "description": "Експонуйте моделі CLIProxyAPI як ціль маршрутизації під префіксом cliproxyapi/.", + "label": "Експонувати як cliproxyapi/...", + "hint": "Коли увімкнено, виявлені моделі з'являються у виборах постачальника в OmniRoute.", + "updateFailed": "Не вдалося оновити (HTTP {status})", + "networkError": "Помилка мережі — не вдалося оновити налаштування експозиції провайдера" + } } - diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index 870efb5e0c..27f420e7ee 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -172,6 +172,18 @@ "unselectAll": "انتخاب ہٹائیں", "visibleModels": "نظر آنے والے", "selectAllConfirm": "اس کومبو میں {count} ماڈل شامل کریں؟", + "testSelectedProviders": "ٹیسٹ فراہم کنندگان", + "testingSelectedProviders": "جانچ {done}/{total}...", + "noProvidersSelectedToTest": "پہلے نیچے کم از کم ایک فراہم کنندہ کی جانچ کریں", + "noModelsToTestForProviders": "منتخب کردہ فراہم کنندگان کے لیے کوئی ماڈل ٹیسٹ کرنے کے لیے دستیاب نہیں ہیں۔", + "testSelectedProvidersResults": "{ok} میں سے {total} ماڈلز کام کر رہے ہیں", + "selectWorkingModels": "کام شامل کریں", + "unselectWorkingModels": "کام کرنے کے لیے غیر منتخب کریں", + "noWorkingModelsToSelect": "کوئی کام کرنے والے ماڈل شامل کرنے کے لیے باقی نہیں ہیں", + "providerTestHint": "نکته: ایک فراہم کنندہ کی جانچ کریں → ٹیسٹ → کام کرنے کے لیے شامل کریں۔ دوبارہ کلک کریں تاکہ غیر منتخب کریں۔", + "selectAllProviders": "تمام فراہم کنندگان کی جانچ کریں", + "clearProviderSelection": "پرووائیڈرز کو انچیک کریں", + "providersSelectedCount": "{count} فراہم کنندگان کی جانچ کی گئی", "errorOccurred": "Error Occurred", "comboDeleted": "Combo Deleted", "hide": "Hide", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.", "batchActionCancelError": "Failed to cancel batch. Try again.", "batchActionRetryError": "Failed to retry failed requests. Try again.", - "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)" + "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)", + "batchFilesSizeColumn": "سائز", + "toggleNoAuthProvider": "نو-اتھ فراہم کنندہ کو تبدیل کریں", + "loadingModels": "ماڈلز لوڈ ہو رہے ہیں…", + "selectAModel": "ایک ماڈل منتخب کریں", + "degraded": "کمزور", + "zeroConfigBannerTitle": "زیرو-کنفیگ موڈ میں چل رہا ہے", + "zeroConfigBannerBody": "OmniRoute نے پہلے لانچ پر خودکار طور پر محفوظ انکرپشن کیز تیار کیں۔ یہ {dataDir} میں محفوظ کی گئی ہیں۔ کوئی کارروائی کی ضرورت نہیں ہے — آپ کا ڈیٹا انکرپٹڈ اور محفوظ ہے۔ اپنی مرضی کی کیز استعمال کرنے کے لیے، اس فائل میں JWT_SECRET اور STORAGE_ENCRYPTION_KEY شامل کریں۔", + "batchRelativeTimeIn": "میں {value}", + "batchRelativeTimeAgo": "{value} پہلے", + "batchDetailsTitle": "بیچ کی تفصیلات", + "batchProgress": "ترقی", + "batchCompletedCount": "{count} مکمل ہوا", + "batchFailedCount": "{count} ناکام", + "batchPendingCount": "{count} زیر التواء", + "batchTimeline": "ٹائم لائن", + "batchTimelineInProgress": "جاری ہے", + "batchTimelineFinalizing": "حتمی شکل دینا", + "batchTimelineCompleted": "مکمل ہوا", + "batchTimelineFailed": "ناکام", + "batchTimelineExpires": "ختم ہو گیا", + "batchTimelineExpired": "میعاد ختم ہوگئی", + "batchTimelineCancelling": "کینسل کر رہے ہیں", + "batchTimelineCancelled": "منسوخ شدہ", + "batchTokenUsage": "ٹوکن کا استعمال", + "batchMetadata": "میٹاڈیٹا", + "batchFileContents": "فائل کے مواد", + "batchFileUsedByCount": "استعمال کیا گیا {count, plural, one {# بیچ} other {# بیچوں}}", + "batchFilePreview": "پیش نظارہ", + "batchFilePreviewTruncated": "پہلی {shown} لائنیں دکھا رہے ہیں ({total} کل لائنیں)", + "batchFileDownloadFull": "مکمل فائل ڈاؤن لوڈ کریں" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "جدا کار", "discovery": "دریافت", "discoverySubtitle": "مفت رسائی کے لیے فراہم کنندگان کو اسکین کریں", + "conductor": "کنڈکٹر", + "conductorSubtitle": "CLI-agent بیڑہ", "resilienceConnections": "کنکشن مضبوطی", "resilienceConnectionsSubtitle": "کولڈاؤن، بریکر، لاک آؤٹ حالت", "settingsModalityBridge": "موڈالیٹی پل", - "settingsModalityBridgeSubtitle": "تصویر/آڈیو → ٹیکسٹ کے لیے ٹیکسٹ صرف ماڈلز کے لیے متبادل" + "settingsModalityBridgeSubtitle": "تصویر/آڈیو → ٹیکسٹ کے لیے ٹیکسٹ صرف ماڈلز کے لیے متبادل", + "commandPalette": { + "title": "کمانڈ پیلیٹ", + "searchPlaceholder": "صفحے، سیٹنگز، ٹولز تلاش کریں...", + "clearSearch": "تلاش صاف کریں", + "noResults": "کوئی نتائج نہیں", + "navigate": "نیویگیٹ", + "open": "کھولیں", + "close": "بند کریں" + }, + "noResults": "کوئی نتائج نہیں" }, "webhooks": { "title": "ویب ہکس", @@ -1477,7 +1531,11 @@ "settings.update_failed": "ترتیبات کی اپ ڈیٹ ناکام ہو گئی", "sync.token.created": "سنک ٹوکن بنا دیا گیا", "sync.token.revoked": "سنک ٹوکن منسوخ کر دیا گیا" - } + }, + "mcpMetricCalls24h": "کالیں (24 گھنٹے)", + "mcpMetricSuccessRate": "کامیابی کی شرح", + "mcpMetricAvgDuration": "اوسط دورانیہ", + "mcpMetricTopTool": "بہترین ٹول" }, "themesPage": { "title": "Themes", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "A new version is available. Click to update.", "updateStarted": "Update started...", "reloadingPageAutomatically": "صفحہ خودکار طور پر دوبارہ لوڈ ہو رہا ہے...", - "providerTopology": "فراہم کنندہ ٹوپولوجی" + "providerTopology": "فراہم کنندہ ٹوپولوجی", + "downloadDmg": "DMG ڈاؤن لوڈ کریں (macOS)", + "downloadDmgDescription": "OmniRoute ڈیسک ٹاپ ایپ کا نیا ورژن دستیاب ہے۔ براہ کرم اپ ڈیٹ کرنے کے لیے macOS DMG انسٹالر ڈاؤن لوڈ اور انسٹال کریں (موجودہ: v{version})۔", + "downloadExe": "EXE ڈاؤن لوڈ کریں (ونڈوز)", + "downloadExeDescription": "OmniRoute ڈیسک ٹاپ ایپ کا ایک نیا ورژن دستیاب ہے۔ براہ کرم اپ ڈیٹ کرنے کے لیے Windows EXE انسٹالر ڈاؤن لوڈ اور انسٹال کریں (موجودہ: v{version})۔", + "downloadAppImage": "ایپ امیج ڈاؤن لوڈ کریں (لینکس)", + "downloadAppImageDescription": "OmniRoute ڈیسک ٹاپ ایپ کا ایک نیا ورژن دستیاب ہے۔ براہ کرم اپ ڈیٹ کرنے کے لیے Linux AppImage پیکیج ڈاؤن لوڈ کریں (موجودہ: v{version})۔", + "downloadUpdate": "اپ ڈیٹ ڈاؤن لوڈ کریں", + "downloadUpdateDescription": "OmniRoute ڈیسک ٹاپ ایپ کا ایک نیا ورژن دستیاب ہے۔ براہ کرم اپنے نظام کے لیے متعلقہ ایپ فارمیٹ ڈاؤن لوڈ کریں تاکہ اپ ڈیٹ کیا جا سکے (موجودہ: v{version})۔", + "updateQueued": "v{version} کے لیے اپ ڈیٹ قطار میں ہے۔", + "updateDockerRebuilding": "ڈوکر امیج پس منظر میں دوبارہ تعمیر ہو رہا ہے۔", + "updateWaitingRestart": "نئی ورژن کے ساتھ OmniRoute کے دوبارہ شروع ہونے کا انتظار ہے۔", + "updateInstalling": "v{version} نصب کیا جا رہا ہے۔", + "updateRunning": "OmniRoute اب v{version} پر چل رہا ہے۔", + "updateCompleted": "OmniRoute کو v{version} میں اپ ڈیٹ کیا گیا۔", + "updateDockerStillRebuilding": "Docker امیج ابھی بھی v{version} کے لیے دوبارہ تعمیر ہو رہا ہے۔", + "updateInstallingBackground": "پس منظر میں v{version} انسٹال ہو رہا ہے۔", + "updateWaitingVersion": "OmniRoute v{version} پر واپس آنے کا انتظار کر رہا ہے۔", + "updateDockerStillInProgress": "Docker کی دوبارہ تعمیر ابھی جاری ہے۔", + "updateRestarting": "سروس دوبارہ شروع ہو رہی ہے۔ OmniRoute کے آن لائن ہونے کا انتظار ہے...", + "updateTimeout": "اپ ڈیٹ شروع ہو گیا، لیکن v{version} ٹائم آؤٹ سے پہلے دستیاب نہیں ہوا۔ صفحہ کو تازہ کریں یا سرور کے لاگ چیک کریں۔", + "updateTimedOut": "v{version} پر اپ ڈیٹ کرنے کا وقت ختم ہو گیا۔", + "updateStartFailed": "اپ ڈیٹ شروع کرنے میں ناکامی۔", + "noResponseStream": "کوئی جواب کا سلسلہ موصول نہیں ہوا۔", + "updateComplete": "اپ ڈیٹ مکمل!", + "updateFailed": "اپ ڈیٹ ناکام ہوگیا۔", + "updateNetworkError": "نیٹ ورک کی خرابی — اپ ڈیٹ کے دوران کنکشن کھو گیا۔", + "stepInstallPackage": "پیکیج انسٹال کریں", + "stepRebuildNativeModules": "نیٹو ماڈیولز کو دوبارہ بنائیں", + "stepRestartService": "سروس دوبارہ شروع کریں", + "stepComplete": "مکمل کریں", + "stepError": "غلطی", + "updateCompleteTitle": "اپ ڈیٹ مکمل!", + "updateFailedTitle": "اپ ڈیٹ ناکام ہوگیا", + "updatingTitle": "OmniRoute کو اپ ڈیٹ کر رہے ہیں...", + "reloadNotice": "یہ صفحہ چند سیکنڈ میں خود بخود دوبارہ لوڈ ہو جائے گا۔", + "retryNotice": "براہ کرم دوبارہ کوشش کریں یا CLI کے ذریعے دستی طور پر اپ ڈیٹ کریں۔", + "restartNotice": "اس صفحے کو بند نہ کریں۔ نظام خود بخود دوبارہ شروع ہوگا۔", + "reloadNow": "اب دوبارہ لوڈ کریں", + "closeUpdate": "بند کریں", + "retryUpdate": "دوبارہ کوشش کریں", + "updateAvailableTitle": "اپ ڈیٹ دستیاب ہے: v{version}{desktop}", + "desktopAppLabel": "(ڈیسک ٹاپ ایپ)", + "checkingForUpdates": "اپ ڈیٹس کی جانچ ہو رہی ہے...", + "versionAvailableForDownload": "ورژن v{version} ڈاؤن لوڈ کے لیے دستیاب ہے۔", + "downloadingUpdate": "اپ ڈیٹ ڈاؤن لوڈ ہو رہا ہے... {percent}% مکمل۔", + "updateDownloaded": "اپ ڈیٹ کامیابی کے ساتھ ڈاؤن لوڈ ہو گیا! لاگو کرنے کے لیے دوبارہ شروع کریں اور انسٹال پر کلک کریں۔", + "autoUpdateFailed": "خودکار اپ ڈیٹ ناکام ہوگیا: {reason}.", + "unknownUpdateError": "نامعلوم خرابی", + "versionAvailableDesktop": "ڈیسک ٹاپ ایپ کے لیے ورژن v{version} دستیاب ہے۔", + "manualUpdateRequired": "اس تنصیب کی قسم کے لیے دستی اپ ڈیٹ کی ضرورت ہے۔", + "restartAndInstall": "دوبارہ شروع کریں اور انسٹال کریں", + "checkForUpdate": "اپ ڈیٹ کے لیے چیک کریں", + "manualUpdate": "ہاتھ سے اپ ڈیٹ کریں", + "directDownloadHint": "یا متعلقہ انسٹالر فارمیٹ کو براہ راست ڈاؤن لوڈ کریں:", + "releaseNotes": "ریلیز نوٹس", + "readMore": "مزید پڑھیں", + "noAuthLabel": "کوئی تصدیق نہیں" }, "analytics": { "title": "Analytics", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "اس درخواست کے ارد گرد محفوظ کردہ کال لاگز سے اخذ کردہ", "routeRecommendations": "سفارشات", "routeLimitations": "حدود", - "routeNoKnownLimitations": "اس وضاحت کے لیے کوئی معلوم حدود نہیں ہیں۔" + "routeNoKnownLimitations": "اس وضاحت کے لیے کوئی معلوم حدود نہیں ہیں۔", + "searchAnalyticsLoading": "تلاش کے تجزیات لوڈ ہو رہے ہیں…", + "searchAnalyticsNoData": "ابھی تک کوئی تلاش کا ڈیٹا دستیاب نہیں ہے۔", + "searchAnalyticsNoDataDescription": "پہلی تلاش کے بعد تلاش کی درخواستیں یہاں ظاہر ہوں گی /v1/search۔", + "searchAnalyticsToday": "{count} آج", + "searchAnalyticsCachedRequests": "{count} کیش شدہ درخواستیں", + "searchAnalyticsApiCosts": "سرچ API کے اخراجات", + "searchAnalyticsErrors": "{count} غلطیاں", + "searchAnalyticsNoErrors": "کوئی غلطیاں نہیں", + "searchAnalyticsProviderBreakdown": "پرووائیڈر کی تفصیل", + "searchAnalyticsQueries": "تلاشیں", + "searchAnalyticsEmptyDescription": "POST /v1/search کا استعمال کریں تاکہ ویب تلاشوں کی روٹنگ شروع کی جا سکے۔", + "searchAnalyticsFreeTier": "مفت سطح دستیاب: Serper (2,500/ماہ), Brave (2,000/ماہ), Exa (1,000/ماہ), Tavily (1,000/ماہ) — کل 6,500+ مفت تلاشیں/ماہ خودکار فیل اوور کے ساتھ۔", + "autoRoutingNoDataAvailable": "کوئی خودکار روٹنگ تجزیات دستیاب نہیں ہیں۔ میٹرکس دیکھنے کے لیے auto/ پیشوند کا استعمال کرتے ہوئے درخواستیں کریں۔", + "defaultVariantLabel": "ڈیفالٹ", + "freeTierAvailable": "مفت سطح دستیاب ہے" }, "apiManager": { "title": "API Keys", @@ -2348,7 +2478,9 @@ "providerCount": "{count} فراہم کنندگان", "imageToTextBridgeAvailable": "Modality Bridge اب ٹیکسٹ-صرف ماڈلز کے لیے تصاویر کی وضاحت کر سکتا ہے۔ ان لائن پلے گراونڈ دستیاب ہوگا جب /api/v1/images/understanding نافذ کیا جائے گا۔", "imageToTextBridgeCta": "Modality Bridge کی سیٹنگز میں Image→Text پل کو ترتیب دیں", - "sttBridgeCta": "Modality Bridge کی سیٹنگز میں Speech→Text پل کو ترتیب دیں" + "sttBridgeCta": "Modality Bridge کی سیٹنگز میں Speech→Text پل کو ترتیب دیں", + "existingConnection": "موجودہ کنکشن", + "openrouterSttDescription": "OpenRouter تقریر سے متن ماڈل آپ کے ترتیب دیے گئے OpenRouter کنکشن کا استعمال کرتے ہیں۔ کوئی علیحدہ اسناد کی ضرورت نہیں ہے۔" }, "search": { "searchQuery": "Search Query", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "اس میں پیسٹ کریں:", "copilotReloadInstruction": "پھر VS Code کو دوبارہ لوڈ کریں اور ان پٹ پرامپٹ میں API key سیٹ کریں۔", "wireApiChatCompletions": "چیٹ کی تکمیل (/چیٹ/کمپلیشنز)", - "wireApiResponses": "Responses API (/responses)" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "عمل ناکام ہوگیا", + "cliproxyapiActionSucceeded": "عمل کامیاب ہوا", + "cliproxyapiCheckUpdates": "اپ ڈیٹس چیک کریں", + "cliproxyapiDescription": "اپ اسٹریم پروکسی فال بیک (گو پر مبنی اوتھ)", + "cliproxyapiHealth": "صحت", + "cliproxyapiHealthy": "صحت مند", + "cliproxyapiInstall": "انسٹال کریں", + "cliproxyapiNotInstalledValue": "نہیں نصب کیا گیا", + "cliproxyapiPort": "پورٹ", + "cliproxyapiRequestFailed": "درخواست ناکام ہوگئی", + "cliproxyapiRestart": "دوبارہ شروع کریں", + "cliproxyapiStart": "شروع کریں", + "cliproxyapiStatusError": "غلطی", + "cliproxyapiStatusInstalled": "انسٹال کیا گیا", + "cliproxyapiStatusNotInstalled": "نہیں نصب کیا گیا", + "cliproxyapiStatusRunning": "چل رہا ہے", + "cliproxyapiStatusStopped": "روک دیا گیا", + "cliproxyapiStop": "روکیں", + "cliproxyapiUnhealthy": "غیر صحت مند", + "cliproxyapiUnknown": "نامعلوم", + "cliproxyapiUpdate": "اپ ڈیٹ", + "cliproxyapiUpdateAvailable": "اپ ڈیٹ دستیاب ہے: v{current} → v{latest}", + "cliproxyapiVersion": "ورژن" }, "combos": { "title": "Combos", @@ -3236,6 +3391,8 @@ "pricingMissing": "No pricing", "pricingAvailableShort": "priced", "pricingMissingShort": "no-price", + "fallbackOnlyOnQuotaExhaustion": "صرف کوٹہ ختم ہونے پر آگے بڑھیں", + "fallbackOnlyOnQuotaExhaustionShort": "کوٹہ صرف متبادل", "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.", "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.", "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.", @@ -3270,16 +3427,16 @@ "routingInputsHint": "موڈ پیک اور ویٹنگ یہاں رہتے ہیں؛ بریکر رن ٹائم کی حالت Health صفحے پر رہتی ہے۔", "emailVisibilityHint": "یہاں اکاؤنٹ کی ای میلز گلوبل پرائیویسی ٹوگل کی پیروی کرتی ہیں۔", "emailVisibilityTooltip": "کومبوز، فراہم کنندگان اور کوٹہ اسکرینز پر عالمی سطح پر اکاؤنٹ کی ای میلز کو ظاہر یا پوشیدہ کرنے کے لیے آنکھ کے آئیکن کا استعمال کریں۔", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "مرحلہ وار (فراہم کنندہ → ماڈل)", + "builderModeGlobal": "عالمی ماڈل تلاش (حسب ضرورت مجموعہ)", + "builderGlobalSearchPlaceholder": "تمام فراہم کنندگان میں ماڈلز تلاش کریں (جیسے opus، sonnet، deepseek، kimi، qwen)...", + "builderGlobalAddAll": "سب شامل کریں", + "builderGlobalShortcuts": "شارٹ کٹس:", + "builderGlobalNoResults": "\"{query}\" کے لیے کوئی ماڈل نہیں ملا۔", + "builderGlobalProviderLabel": "فراہم کنندہ:", + "builderGlobalAccountCount": "{count, plural, one {# اکاؤنٹ} other {# اکاؤنٹس}}", + "builderGlobalAdded": "شامل کیا گیا", + "builderGlobalAdd": "شامل کریں", "manualModel": "مینول ماڈل", "manualModelInvalid": "ماڈل کو provider/model کے طور پر درج کریں۔", "manualModelUnknownProvider": "نامعلوم فراہم کنندہ کا پریفکس۔", @@ -3324,6 +3481,7 @@ "weightStability": "Stability", "weightTierPriority": "Tier", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "سیشن کی دستیابی", "reviewIntelligentTitle": "Intelligent Routing Config", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "اسٹیکینس آف", "kimiPresetTitle": "Kimi Coding پری سیٹ", "kimiPresetDescription": "بنیادی ماڈل کے طور پر Kimi K3 (Moonshot API)، کنفیگر ہونے پر آپ کے Kimi Code کنکشنز (kimi-coding، kimi-web) پر خودکار فال بیک کے ساتھ۔", - "kimiPresetCta": "پری سیٹ شامل کریں" + "kimiPresetCta": "پری سیٹ شامل کریں", + "intelligentComboCount": "{count, plural, one {# ذہین کمبو} other {# ذہین کمبوز}}", + "providersInScope": "{count, plural, one {# فراہم کنندہ دائرہ میں} other {# فراہم کنندے دائرہ میں}}", + "savingModePack": "{pack} محفوظ کیا جا رہا ہے…", + "errorTitle": "کمبوز لوڈ کرنے میں ناکامی ہوئی", + "errorDescription": "ہم اس وقت کومبو ڈیٹا لوڈ نہیں کر سکے۔ اپنی کنکشن چیک کریں اور دوبارہ کوشش کریں۔", + "errorId": "خرابی کی شناخت: {id}", + "errorRetry": "پھر کوشش کریں", + "comboLabel": "کمبو" }, "costs": { "title": "Costs", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "صارف نام", "obsidianPassword": "پاس ورڈ", - "obsidianTailscaleHint": "اگر موبائل سے منسلک ہو رہے ہیں تو localhost کے بجائے اپنا Tailscale IP استعمال کریں۔ دونوں آلات کا ایک ہی Tailscale نیٹ ورک پر ہونا ضروری ہے۔" + "obsidianTailscaleHint": "اگر موبائل سے منسلک ہو رہے ہیں تو localhost کے بجائے اپنا Tailscale IP استعمال کریں۔ دونوں آلات کا ایک ہی Tailscale نیٹ ورک پر ہونا ضروری ہے۔", + "cloudSyncNotConfigured": "اس مثال پر کلاؤڈ ہم وقت سازی ترتیب نہیں دی گئی ہے۔", + "notionConnect": "جوڑیں", + "notionConnectFailed": "کنیکٹ کرنے میں ناکامی", + "notionConnected": "متصل", + "notionConnectionFailed": "کنکشن ناکام ہوگیا", + "notionDescription": "Notion کے ذریعے روٹڈ AI ماڈلز کے ذریعے تلاش کریں، پڑھیں، سوال کریں، اور لکھیں۔", + "notionDisconnect": "منقطع کریں", + "notionDisconnectFailed": "ڈس کنیکٹ کرنے میں ناکامی", + "notionEnterToken": "براہ کرم ایک Notion انضمام ٹوکن درج کریں", + "notionIntegrationHelp": "ایک داخلی انضمام بنائیں", + "notionIntegrationToken": "Notion داخلی انضمام ٹوکن", + "notionNotConnected": "منسلک نہیں ہے", + "notionTokenConfigured": "ٹوکین ترتیب دیا گیا ہے۔ نوٹیشن کے ٹولز MCP کے ذریعے دستیاب ہیں۔" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4152,6 +4331,12 @@ "providerModelLabel": "فراہم کنندہ / ماڈل", "noRemoteProviders": "کنفیگر شدہ API کلید کے ساتھ کوئی فراہم کنندہ نہیں ہے", "selectProviderModel": "ایک ماڈل منتخب کریں", + "customBaseUrlLabel": "حسب ضرورت بنیادی URL (اختیاری)", + "customModelIdLabel": "حسب ضرورت ماڈل ID (اختیاری)", + "customEndpointHelp": "ایک OpenAI-ہم آہنگ /embeddings اینڈپوائنٹ استعمال کریں۔ مقامی اینڈپوائنٹس کی اجازت ہے؛ کلاؤڈ میٹاڈیٹا کے مقاصد بلاک ہیں۔", + "customEndpointSave": "حسب ضرورت اینڈپوائنٹ لگائیں", + "customEndpointInvalid": "ایک درست HTTP(S) بیس URL اور ماڈل ID درج کریں، یا دونوں فیلڈز کو خالی چھوڑ دیں۔", + "customEndpointSaveFailed": "حسب ضرورت ایمبیڈنگ اینڈپوائنٹ محفوظ نہیں کیا جا سکا۔", "staticEnabledLabel": "Static Potion فعال کریں", "staticEnabledDesc": "مقامی طور پر potion-base-8M ماڈل ڈاؤن لوڈ اور استعمال کریں", "transformersEnabledLabel": "Transformers.js فعال کریں", @@ -4258,7 +4443,9 @@ "cleaning": "صفائی ہو رہی ہے...", "cleanNow": "ابھی صاف کریں", "cleanupSuccess": "{count} پوائنٹ(s) ہٹا دیے گئے", - "cleanupFailed": "صفائی ناکام رہی" + "cleanupFailed": "صفائی ناکام رہی", + "hostLabel": "میزبان", + "collectionLabel": "اجتماع" }, "rerank": { "enableLabel": "Rerank فعال کریں", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 درجے کا فال بیک ڈایاگرام", "apiKeyMgmt": "API Key Mgmt", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "مفت فراہم کنندگان کو ترتیب دیں", + "description": "اختیاری طور پر منتخب کردہ بغیر سائن اپ فراہم کنندگان کو فعال کریں۔ جاری رکھنے سے پہلے ہر فراہم کنندہ کے نوٹس اور سائٹ کا جائزہ لیں؛ دستیابی اور شرح کی حدود تیسرے فریق کے ذریعہ کنٹرول کی جاتی ہیں۔", + "loading": "مفت فراہم کنندگان لوڈ ہو رہے ہیں...", + "loadFailed": "مفت فراہم کنندگان لوڈ نہیں کیے جا سکے۔", + "alreadyConfigured": "تمام اہل مفت فراہم کنندگان پہلے ہی ترتیب دیے جا چکے ہیں۔", + "reviewProviderSite": "فراہم کنندہ کی سائٹ اور شرائط کا جائزہ لیں", + "confirmation": "میں نے ان تیسرے فریق فراہم کنندگان کا جائزہ لیا ہے اور چاہتا ہوں کہ OmniRoute منتخب کردہ کنکشنز بنائے۔", + "setupSelected": "منتخب فراہم کنندگان کو ترتیب دیں", + "settingUp": "سیٹ اپ ہو رہا ہے...", + "setupFailed": "منتخب فراہم کنندگان کو ترتیب نہیں دیا جا سکا۔ موجودہ چیزوں میں کوئی تبدیلی نہیں کی گئی۔", + "retryFailed": "ناکام فراہم کنندگان کو دوبارہ کوشش کریں", + "orUseApiKey": "یا API کی چابی کے ساتھ جڑیں", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "بنایا گیا", + "skipped": "پہلے سے ترتیب دیا گیا", + "failed": "ناکام" } } }, @@ -4977,6 +5164,7 @@ "baseUrlHint": "Required. Provider API base URL.", "iconUrlLabel": "آئیکن URL", "iconUrlHint": "اختیاری۔ تصویر کا URL جو اس فراہم کنندہ کے آئیکن کے طور پر دکھایا گیا ہے۔", + "iconUrlInvalid": "غلط آئیکن یو آر ایل۔ http(s):// یا data:image/*;base64 یو آر ایل استعمال کریں۔", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5243,7 +5431,7 @@ "ccAliasSectionHint": "اس فراہم کنندہ کے ماڈلز کو claude/<provider>/<model> آئینہ شناختوں کے تحت اشتہار دیں تاکہ Claude Code کے گیٹ وے ماڈل کی دریافت انہیں درج کر سکے۔ ڈیفالٹ کے طور پر بند — اس کو فعال کرنے سے تمام کلائنٹس کے لیے کیٹلاگ کی اندراجات دوگنا ہو جاتی ہیں۔", "ccAliasProviderLevelLabel": "فراہم کنندہ ڈیفالٹ", "ccAliasModelOverridesLabel": "فی ماڈل اووررائیڈز", - "ccAliasModelOverrideAriaLabel": "{name} کے لیے اووررائیڈ", + "ccAliasModelOverrideAriaLabel": "{modelId} کے لیے اووررائیڈ", "ccAliasStateInherit": "وراثت", "ccAliasStateOn": "پر", "ccAliasStateOff": "بند", @@ -5314,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} Compatible (Prod)", "tokenRefreshed": "Token refreshed successfully", "tokenRefreshFailed": "Token refresh failed", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "سیشن پہلے ہی موجود ہے", "applyCodexAuthLocal": "Apply auth", "exportCodexAuthFile": "Export auth", "applyClaudeAuthLocal": "تصدیق کا اطلاق کریں۔", @@ -5688,9 +5876,9 @@ "zedPasteApiKey": "API کلید چسپاں کریں…", "zedSaving": "محفوظ کیا جا رہا ہے…", "zedImportAction": "درآمد کریں", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "خودکار کرسر سیشن کی تجدید کو فعال کریں", + "cursorAgentNudgeBody": "کرسر ایجنٹ کو خودکار سیشن کی تجدید کے لیے انسٹال کریں — اس کے بغیر، کرسر کنکشنز کو تقریباً ہر 24 گھنٹے بعد دستی طور پر دوبارہ جڑنے کی ضرورت ہوتی ہے۔", + "cursorAgentNudgeDismiss": "خارج کریں", "zedManualImportFailed": "دستی درآمد ناکام ہو گئی", "zedManualImportSuccess": "Zed سے {provider} ٹوکن درآمد کر لیا گیا", "grokImportTitle": "Grok Build Auth درآمد کریں", @@ -5878,7 +6066,6 @@ "friendliai": "سرور لیس انفیرنس کے لیے مفت ٹیر — کسی کریڈٹ کارڈ کی ضرورت نہیں", "gemini": "ہمیشہ کے لیے مفت: Gemini 2.5 Flash کے لیے 1,500 درخواستیں/دن — کوئی کریڈٹ کارڈ نہیں، aistudio.google.com پر کی حاصل کریں", "gigachat": "GigaChat (Sber) کو ایک API کی کے ساتھ منسلک کریں۔", - "github-models": "github.com/settings/tokens پر 'models: read' اسکوپ کے ساتھ ایک GitHub PAT بنائیں", "gitlab": "عوامی Code Suggestions API کے لیے GitLab پرسنل ایکسیس ٹوکن۔ جب gitlab.com استعمال نہ کر رہے ہوں تو ایک سیلف ہوسٹڈ بیس URL کنفیگر کریں۔", "gitlawb-gmi": "Gitlawb Opengateway ڈیش بورڈ سے اپنی API کی حاصل کریں۔", "gitlawb": "Gitlawb Opengateway ڈیش بورڈ سے اپنی API کی حاصل کریں۔", @@ -6017,7 +6204,8 @@ "kimi-coding": "Kimi Coding کو موجودہ OAuth فلو کے ساتھ منسلک کریں۔", "kiro": "مفت پلان: 50 کریڈٹس/مہینہ (~25K–100K ٹوکنز)۔ ⚠️ Kiro ToS فریقِ ثالث کے پراکسی/ہارنس کے استعمال سے منع کرتا ہے۔", "codex": "OpenAI Codex کو موجودہ OAuth فلو سے منسلک کریں۔", - "qwen": "Qwen Code کو موجودہ OAuth فلو سے منسلک کریں۔" + "qwen": "Qwen Code کو موجودہ OAuth فلو سے منسلک کریں۔", + "github-models": "github.com/settings/tokens پر 'models: read' اسکوپ کے ساتھ ایک GitHub PAT بنائیں" }, "passthroughModelsDescription": "{provider} فراہم کنندہ کے مقامی ماڈل IDs کو قبول کرتا ہے۔ /ماڈلز سے درآمد کریں یا روٹنگ کے لیے حسب ضرورت IDs شامل کریں۔", "bedrockModelsDescription": "ایمیزون بیڈرک ماڈلز کا دائرہ AWS ریجن کے ذریعہ کیا گیا ہے۔ /ماڈلز سے درآمد کریں یا منتخب علاقے میں فعال کردہ Bedrock ماڈل IDs شامل کریں۔", @@ -6076,7 +6264,78 @@ "anonymousFallbackDesc": "جب تمام کنفیگر کردہ کنکشنز ختم ہو جائیں (کوٹہ، کریڈٹس، یا میعاد)، اس فراہم کنندہ کی بغیر کلید کی سطح کو عارضی طور پر استعمال کریں۔ اس فراہم کنندہ کو چھوڑنے کے لیے بند کریں بجائے اس کے کہ گمنام درخواستیں بھیجیں — جب بغیر کلید کی سطح انہیں مسترد کرتی ہے (401) تو یہ تجویز کردہ ہے۔", "anonymousFallbackEnabled": "{provider} کے لیے نامعلوم متبادل فعال ہے", "anonymousFallbackDisabled": "نامعلوم متبادل {provider} کے لیے غیر فعال — ختم شدہ کنکشن اس فراہم کنندہ کو چھوڑ دیں گے", - "anonymousFallbackUpdateFailed": "نامعلوم متبادل سیٹنگ کو اپ ڈیٹ کرنے میں ناکامی" + "anonymousFallbackUpdateFailed": "نامعلوم متبادل سیٹنگ کو اپ ڈیٹ کرنے میں ناکامی", + "batchDeleteFailed": "بیچ حذف کرنے میں ناکامی ہوئی", + "batchDeleteNetworkError": "بیچ حذف کرتے وقت نیٹ ورک کی خرابی", + "batchUpdateFailed": "بیچ اپ ڈیٹ ناکام ہوگیا", + "batchUpdateNetworkError": "بیچ اپ ڈیٹ کے دوران نیٹ ورک کی خرابی", + "categoryAudio": "آڈیو", + "categoryCloudAgent": "کلاؤڈ ایجنٹ", + "categoryIde": "IDE", + "categoryLocal": "مقامی", + "categorySearch": "تلاش کریں", + "categoryWebCookie": "ویب کوکی", + "claudeExtraUsageBlockingDisabled": "Claude اضافی استعمال کی بلاکنگ غیر فعال ہے (اضافی استعمال کی اجازت ہے)", + "claudeExtraUsageBlockingEnabled": "Claude اضافی استعمال کی روک تھام فعال ہے (اضافی استعمال روکا جائے گا)", + "claudeRoutingPreferenceDisabled": "بغیر پیشوند کے Claude ماڈلز اب Claude Code کو ترجیح نہیں دیتے۔", + "claudeRoutingPreferenceEnabled": "بغیر پیشوند کے Claude ماڈلز اب Claude Code کو ترجیح دیتے ہیں", + "clearMediaFilter": "صاف کریں", + "cliproxyRoutingDisabled": "درخواستیں اب مقامی OmniRoute (براہ راست) استعمال کرتی ہیں", + "cliproxyRoutingEnabled": "اب درخواستیں CLIProxyAPI کے ذریعے روٹ ہوتی ہیں (گہرائی میں نقل)", + "codexLimitPolicyUpdated": "کوڈیکس حد کی پالیسی اپ ڈیٹ کر دی گئی", + "codexServiceModeUpdated": "Codex سروس موڈ اپ ڈیٹ کیا گیا", + "codexServiceTierActive": "Codex {tier} سروس کی سطح فعال ہے", + "codexTierFastLabel": "تیز", + "codexTierFlexLabel": "فلیکس", + "commandCodeApplyFailed": "کمانڈ کوڈ کی توثیق کرنے میں ناکامی", + "commandCodeApplyingApproval": "براؤزر کی منظوری ہوگئی، لاگو کیا جا رہا ہے…", + "commandCodeApplyingKey": "براؤزر کی منظوری شدہ کلید لاگو کی جا رہی ہے…", + "commandCodeApprovalInstructions": "اتھارٹی URL کھولیں، رسائی کی منظوری دیں، پھر نیچے واپس کردہ کلید/JSON/URL پیسٹ کریں…", + "commandCodeAuthExpired": "کمانڈ کوڈ کی توثیق ختم ہو گئی", + "commandCodeConnected": "کمانڈ کوڈ جڑا ہوا ہے", + "commandCodeConnectionAdded": "کمانڈ کوڈ کنکشن شامل کیا گیا", + "commandCodeLinkExpired": "کمانڈ کوڈ کا لنک ختم ہو گیا ہے", + "commandCodeOpeningStudio": "کمانڈ کوڈ اسٹوڈیو کھولنا…", + "commandCodePopupBlocked": "پاپ اپ بلاک کر دیا گیا ہے۔ براہ کرم پاپ اپس کی اجازت دیں اور دوبارہ Command Code Connect کو آزمائیں۔", + "commandCodeStartFailed": "کمانڈ کوڈ کی توثیق شروع کرنے میں ناکامی", + "connectionDeleted": "کنکشن حذف کر دیا گیا", + "connectionFallback": "کنکشن", + "coolingConnectionsDescription": "یہ کنکشنز نے اپنی آخری درخواست پر 429 (ریٹ-لیمٹ) واپس کیا۔ OmniRoute انہیں اس وقت تک چھوڑ دے گا جب تک کہ ٹائمر ختم نہ ہو جائے — کوئی دستی غیر فعال کرنے کی ضرورت نہیں۔", + "coolingConnectionsTitle": "فی الحال ٹھنڈا کر رہا ہے ({count})", + "failedDeleteAlias": "ایلیاس کو حذف کرنے میں ناکامی", + "failedDeleteConnection": "کنکشن کو حذف کرنے میں ناکامی", + "failedDistributeProxies": "پراکسیز تقسیم کرنے میں ناکامی۔", + "failedSaveModelEndpointSettings": "ماڈل اینڈپوائنٹ کی ترتیبات محفوظ کرنے میں ناکامی", + "failedUpdateClaudeExtraUsagePolicy": "Claude اضافی استعمال کی پالیسی کو اپ ڈیٹ کرنے میں ناکام", + "failedUpdateClaudeRoutingPreference": "Claude Code کی روٹنگ کی ترجیح کو اپ ڈیٹ کرنے میں ناکامی", + "failedUpdateCliproxyRouting": "CLIProxyAPI روٹنگ کو اپ ڈیٹ کرنے میں ناکامی", + "failedUpdateCodexLimitPolicy": "Codex حد کی پالیسی کو اپ ڈیٹ کرنے میں ناکامی", + "failedUpdateCodexServiceMode": "Codex سروس موڈ کو اپ ڈیٹ کرنے میں ناکامی", + "filterByMedia": "میڈیا", + "freeBadge": "مفت", + "kimiCodeApiKeyLabel": "کیمی کوڈ API کلید", + "modelTestFailed": "ماڈل ٹیسٹ ناکام ہوا", + "modelTestNetworkError": "نیٹ ورک کی خرابی ماڈل کی جانچ", + "networkError": "نیٹ ورک کی خرابی", + "networkErrorDeletingAlias": "ایلیاس حذف کرتے وقت نیٹ ورک کی خرابی", + "networkErrorSettingAlias": "نیٹ ورک کی خرابی ایلیاس سیٹ کرتے وقت", + "noProvidersMatch": "آپ کی تلاش سے کوئی فراہم کنندہ میل نہیں کھاتا۔", + "noSavedProxies": "کوئی محفوظ شدہ پروکسی نہیں ملی۔ پہلے سیٹنگز → پروکسی میں پروکسی شامل کریں۔", + "pageLoadErrorDescription": "ہم اس وقت فراہم کنندہ کا ڈیٹا لوڈ نہیں کر سکے۔ اپنے کنکشن کی جانچ کریں اور دوبارہ کوشش کریں۔", + "pageLoadErrorId": "خرابی کی شناخت: {id}", + "pageLoadErrorRetry": "پھر کوشش کریں", + "pageLoadErrorTitle": "پرووائیڈرز لوڈ کرنے میں ناکامی", + "playgroundTitle": "کھیل کا میدان", + "providerDetailConnectionFlexActive": "Codex Flex سروس کی سطح اس کنکشن کے لیے فعال ہے", + "providerDetailConnectionPriorityActive": "Codex کی ترجیحی سروس کی سطح اس کنکشن کے لیے فعال ہے", + "providerDetailGlobalFlexActive": "گلوبل کوڈیکس فلیکس سروس کی سطح فعال ہے", + "providerDetailGlobalPriorityActive": "گلوبل کوڈیکس کی ترجیحی سروس کی سطح فعال ہے", + "proxiesDistributed": "تقسیم شدہ {assigned} پروکسی تفویض(ات) {tagLabel}{total} کنکشن(وں) میں۔", + "rerankEndpoint": "دوبارہ درجہ بندی کریں", + "savedModelEndpointSettings": "محفوظ شدہ ماڈل اینڈپوائنٹ کی ترتیبات", + "searchByModelAria": "ماڈل کے ذریعے تلاش کریں", + "selectSupportedEndpoint": "کم از کم ایک سپورٹ کردہ اینڈپوائنٹ منتخب کریں", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Settings", @@ -6460,7 +6719,24 @@ "loadFailed": "سبسکرپشن لسٹ لوڈ کرنے میں ناکام", "toggleFailed": "سوئچ ٹوگل کرنے میں ناکام", "refreshFailed": "ریفریش کرنے میں ناکام", - "deleteFailed": "حذف کرنے میں ناکام" + "deleteFailed": "حذف کرنے میں ناکام", + "add": "شامل کریں", + "cancel": "منسوخ کریں", + "configure": "ترتیب دیں", + "copyEndpoint": "اینڈپوائنٹ کاپی کریں", + "coreEndpointHint": "کور اینڈپوائنٹ ہنٹ", + "coreNodesHint": "کور نوڈز کی ہنٹ", + "create": "بنائیں", + "deleteConfirm": "حذف کی تصدیق", + "empty": "خالی", + "globalModeDescription": "عالمی موڈ کی وضاحت", + "localCoreHint": "مقامی کور اشارہ", + "nodeSummary": "نوڈ کا خلاصہ", + "providerRequired": "مہیا کنندہ درکار ہے", + "providerRouting": "پرووائیڈر روٹنگ", + "refresh": "تازہ کریں", + "refreshInterval": "تازہ کاری کا وقفہ", + "ruleModeDescription": "قواعد وضع کی وضاحت" }, "bulkHealthcheck": "Bulk Healthcheck", "bulkHealthcheckDesc": "Test all configured proxies against a target URL to find which ones work.", @@ -7234,6 +7510,8 @@ "visionBridgeDesc": "تصویر کی درخواستوں کو صرف ٹیکسٹ والے ماڈلز پر روٹ کرنے سے پہلے ایک خودکار ویژن ٹو ٹیکسٹ فال بیک چلائیں۔", "visionBridgeEnabledLabel": "فعال", "visionBridgeEnabledDesc": "پری کال برج کو ٹوگل کریں جو تصویر کے حصوں کو نکالے گئے ٹیکسٹ سے بدل دیتا ہے۔", + "visionBridgeRerouteTextOnlyLabel": "صرف ٹیکسٹ ماڈلز کو دوبارہ راستہ دیں", + "visionBridgeRerouteTextOnlyDesc": "جب منتخب ماڈل میں کوئی امیج ان پٹ نہیں ہے تو مکمل درخواست، بشمول امیجز، پل ماڈل کو بھیجیں۔", "visionBridgeModel": "برج ماڈل", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "کوئی بھی OmniRoute ماڈل ID جو ویژن کو سپورٹ کرتی ہے یہاں استعمال کی جا سکتی ہے۔", @@ -7596,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API کلید میں manage اسکوپ کی کمی ہے۔", "BYPASS_PREFIX_NOT_ALLOWED": "ایک یا زیادہ پریفکسز اسپون کے قابل روٹس کو نشانہ بناتے ہیں اور انہیں بائی پاس نہیں کیا جا سکتا۔", "GENERIC": "authz ترتیبات کو اپ ڈیٹ کرنے میں ناکام۔" - } + }, + "remove": "ہٹا دیں" }, "resilienceBaseCooldownLabel": "بیس کولڈاؤن", "scopeLabel": "دائرہ کار", @@ -7783,7 +8062,91 @@ "modalityBridgeAudioTestRunning": "آڈیو کی جانچ ہو رہی ہے…", "modalityBridgeAudioTestOk": "آڈیو برج ٹھیک ہے — {count} کلپ(ز) کی نقل {model} کے ذریعے کی گئی", "modalityBridgeAudioTestNoop": "آڈیو برج فعال نہیں ہوا (ہو سکتا ہے کہ ہدف آڈیو کی حمایت کرتا ہو، کوئی STT فراہم کنندہ منسلک نہیں ہے، یا برج غیر فعال ہے)", - "modalityBridgeAudioTestError": "آڈیو ٹیسٹ ناکام: {message}" + "modalityBridgeAudioTestError": "آڈیو ٹیسٹ ناکام: {message}", + "modelRoutingDescriptionPlaceholder": "روٹ اوپس ماڈلز کو فرنٹیئر کومبو پر بھیجیں", + "cliproxyapiFallbackCodes": "Cliproxyapi متبادل کوڈز", + "cliproxyapiFallbackDescription": "Cliproxyapi متبادل کی تفصیل", + "cliproxyapiHealthLabel": "Cliproxyapi صحت کا لیبل", + "cliproxyapiImportFailed": "Cliproxyapi درآمد ناکام ہوگئی", + "cliproxyapiImportResult": "Cliproxyapi درآمد کا نتیجہ", + "cliproxyapiInvalidUrl": "Cliproxyapi غلط URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi لائف سائیکل نوٹس بعد", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi لائف سائیکل نوٹس پہلے", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi لائف سائیکل نوٹس لنک", + "cliproxyapiPortLabel": "Cliproxyapi پورٹ لیبل", + "cliproxyapiStatusLabel": "Cliproxyapi کی حیثیت کا لیبل", + "cliproxyapiVersionLabel": "Cliproxyapi ورژن لیبل", + "collection": "اجتماع", + "errorPage": { + "description": "ہم ابھی سیٹنگز لوڈ نہیں کر سکے۔ براہ کرم چند سیکنڈ میں دوبارہ کوشش کریں۔", + "errorId": "خرابی کی شناخت: {id}", + "retry": "پھر کوشش کریں", + "title": "ترتیبات لوڈ کرنے میں ناکامی ہوئی" + }, + "host": "میزبان", + "notInstalled": "نہیں انسٹال کیا گیا", + "oneproxyActions": "ون پروکسی کے اقدامات", + "oneproxyActive": "Oneproxy فعال", + "oneproxyAnonymity": "Oneproxy کی گمنامی", + "oneproxyCountry": "ون پروکسی ملک", + "oneproxyDelete": "Oneproxy حذف کریں", + "oneproxyEmpty": "Oneproxy خالی", + "oneproxyHost": "ون پروکسی میزبان", + "oneproxyLatency": "Oneproxy کی تاخیر", + "oneproxyProtocol": "ون پروکسی پروٹوکول", + "oneproxyQuality": "Oneproxy معیار", + "oneproxySyncFailed": "ہم آہنگی ناکام ہوگئی: {error}", + "oneproxySyncSuccess": "ہم وقت ساز {total} پروکسیز ({added} نئے، {updated} اپ ڈیٹ شدہ)", + "proxyDocumentationSocks5DescAfter": "پراکسی دستاویزات Socks5 تفصیل کے بعد", + "proxyFreePoolAddProxy": "پراکسی فری پول پراکسی شامل کریں", + "proxyFreePoolAdding": "پراکسی فری پول شامل کرنا", + "proxyFreePoolSelectProxy": "پراکسی فری پول پراکسی منتخب کریں", + "proxyStatusActive": "پراکسی کی حیثیت فعال", + "proxyStatusInactive": "پراکسی کی حیثیت غیر فعال", + "routingAddEntry": "داخلہ شامل کریں", + "settingSaveFailed": "سیٹنگ محفوظ کرنے میں ناکامی", + "settingSaved": "ترتیب محفوظ کر لی گئی", + "skillsmpApiKeyHintAfter": ". ریٹ کی حد: {limit} درخواستیں/دن۔", + "skillsmpApiKeyHintBefore": "اپنی API کلید حاصل کریں", + "syncFailed": "ہم آہنگی ناکام ہوگئی", + "unhealthy": "غیر صحت مند", + "oneproxyDescription": "1proxy کمیونٹی پلیٹ فارم سے مفت تصدیق شدہ پراکسیز حاصل کریں اور گھمائیں", + "oneproxySyncing": "ہم وقت سازی ہو رہی ہے...", + "oneproxySyncNow": "اب ہم وقت سازی کریں", + "oneproxyClearAll": "سب صاف کریں", + "oneproxyGoogle": "گوگل", + "oneproxyClearAllConfirm": "تمام 1proxy پروکسیز صاف کریں؟", + "memorySkillsSkillsmpDescription": "SkillsMP سے جڑیں تاکہ مارکیٹ پلیس سے مہارتیں دریافت اور انسٹال کی جا سکیں۔", + "memorySkillsActiveProviderDescription": "چنیں کہ Skills صفحہ تلاش اور انسٹال کے لیے کون سا فراہم کنندہ استعمال کرتا ہے۔", + "memorySkillsSkillsmpProviderTitle": "SkillsMP مارکیٹ", + "memorySkillsSkillsmpProviderDescription": "مصدقہ مارکیٹ پلیس (آپ کی SkillsMP API کلید کا استعمال کرتی ہے)۔", + "memorySkillsSkillsshProviderTitle": "skills.sh ڈائریکٹری", + "memorySkillsSkillsshProviderDescription": "عوامی ڈائریکٹری فراہم کنندہ (کوئی API کلید درکار نہیں)۔", + "routingCcBridgeCatalogName": "انتھروپک-ہم آہنگ CC پل", + "routingClaudeProviderName": "کلاڈ (OAuth)", + "routingClaudeProviderDescription": "نئی کلود فراہم کنندہ OAuth جاری کردہ ٹوکن کے ساتھ۔", + "routingCcBridgeName": "Claude-Code پل", + "routingCcBridgeDescription": "API کیز (anthropic-compatible-cc-*) کا استعمال کرتے ہوئے ریلی ایڈپوائنٹس۔", + "routingCustomProviderDescription": "حسب ضرورت فراہم کنندہ۔", + "routingUnknownOpKind": "نامعلوم آپریشن قسم: {kind}", + "routingInvalidJson": "غلط JSON: {error}", + "routingConfigMustBeObject": "کنفیگ ایک JSON آبجیکٹ ہونا چاہیے", + "routingEnabledMustBeBoolean": "`enabled` کو صحیح یا غلط ہونا چاہیے", + "routingPipelineMustBeArray": "`pipeline` کو ops کی ایک صف ہونا چاہیے", + "routingPipelineTooLong": "پائپ لائن 50 آپریشنز سے تجاوز نہیں کر سکتی", + "routingOpMissingKind": "Op #{index}: غائب یا غلط `kind`", + "routingOpUnknownKind": "Op #{index}: نامعلوم قسم \"{kind}\"", + "routingJsonEditorHide": "JSON ایڈیٹر چھپائیں", + "routingJsonEditorImportExport": "درآمد / برآمد JSON", + "routingJsonEditorLabel": "JSON (ترمیم کریں اور لاگو کریں، یا درآمد کرنے کے لیے چسپاں کریں)", + "routingApplyJson": "JSON لگائیں", + "routingTransformsFootnote": "تمام تبدیلی کے آپریشن دوبارہ چلانے پر غیر متغیر ہیں۔ تبدیلیاں اگلی درخواست پر فوری طور پر اثر انداز ہوتی ہیں۔", + "cliproxyapiUnknown": "نامعلوم", + "cliproxyapiVersion": "ورژن", + "cliproxyapiHealth": "صحت", + "cliproxyapiPort": "پورٹ", + "qdrantHost": "میزبان", + "qdrantCollection": "اجتماع" }, "contextRtk": { "title": "RTK Engine", @@ -8016,6 +8379,15 @@ "full": "مکمل", "ultra": "الٹرا" } + }, + "modeOptions": { + "default": "ڈیفالٹ", + "off": "بند", + "lite": "لائٹ", + "standard": "معیاری", + "aggressive": "جارحانہ", + "ultra": "الٹرا", + "responsesToolOutput": "جوابوں کا ٹول آؤٹ پٹ" } }, "contextCombos": { @@ -8181,7 +8553,8 @@ "enableDescription": "اسٹیک میں سب سے آخر میں چلتا ہے (RTK/Caveman کے متن صاف کرنے کے بعد، OmniGlyph باقی ماندہ کو تصاویر میں تبدیل کرتا ہے) اور omniglyph موڈ کے ذریعے اسٹینڈ الون بھی چلتا ہے۔ یہ ایک پیش نظارہ ہے اور اینڈ ٹو اینڈ توثیق مکمل ہونے تک ڈیفالٹ طور پر بند رہتا ہے۔", "saved": "محفوظ ہو گیا۔", "saveFailed": "محفوظ نہیں ہو سکا۔", - "enableAria": "OmniGlyph انجن فعال کریں" + "enableAria": "OmniGlyph انجن فعال کریں", + "title": "OmniGlyph" }, "embeddedServices": { "title": "ایمبیڈڈ سروسز", @@ -9127,7 +9500,49 @@ "unableToLoad": "Unable to load system metrics", "product": "Product", "resources": "Resources", - "company": "Company" + "company": "Company", + "tokenHealthTooltips": { + "allHealthy": "تمام ٹوکن صحت مند ہیں", + "needsAttention": "کچھ ٹوکنز کو توجہ کی ضرورت ہے", + "refreshFailures": "ٹوکین کی تجدید میں ناکامیاں دریافت ہوئیں", + "unknown": "صحت کی حیثیت نامعلوم" + }, + "systemMonitor": { + "metricsAriaLabel": "سسٹم میٹرکس", + "memory": "میموری", + "memoryShort": "میم", + "uptime": "اپ ٹائم", + "ariaLabel": "سسٹم مانیٹرنگ", + "title": "سسٹم مانیٹر", + "version": "ورژن", + "connections": "کنکشنز", + "circuitBreakers": "سرکٹ بریکر", + "open": "{count} کھلے", + "memoryUsage": "میموری کا استعمال" + }, + "never": "کبھی نہیں", + "justNow": "ابھی ابھی", + "minutesAgo": "{count} منٹ پہلے", + "hoursAgo": "{count} گھنٹے پہلے", + "tokens": "ٹوکنز", + "costs": "لاگتیں", + "autoRefresh": "خودکار تازہ کاری ({seconds}s)", + "toggleAutoRefresh": "آٹو ریفریش کو تبدیل کریں", + "activeRequests": "فعال درخواستیں", + "totalRequests": "کل درخواستیں", + "totalInputTokens": "کل ان پٹ ٹوکن", + "model": "ماڈل", + "provider": "فراہم کنندہ", + "requests": "درخواستیں", + "lastUsed": "آخری استعمال شدہ", + "inputTokens": "ان پٹ ٹوکن", + "totalTokens": "کل ٹوکن", + "inputCost": "ان پٹ لاگت", + "outputCost": "اخراجات کی لاگت", + "noUsageData": "ابھی تک کوئی استعمال ریکارڈ نہیں ہوا۔ یہاں ڈیٹا دیکھنے کے لیے کچھ درخواستیں کریں۔", + "account": "اکاؤنٹ", + "accountLabel": "اکاؤنٹ {id}", + "noAccountUsage": "ابھی تک کوئی اکاؤنٹ مخصوص استعمال ریکارڈ نہیں ہوا۔ یہاں ڈیٹا دیکھنے کے لیے OAuth اکاؤنٹس کا استعمال کرتے ہوئے درخواستیں کریں۔" }, "auth": { "welcome": "Welcome", @@ -9193,7 +9608,58 @@ "nodeIncompatibleTitle": "Incompatible Node.js Version", "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.", "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release", - "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended." + "nodeIncompatibleHint": "OmniRoute requires Node.js 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended.", + "resetViaAppDataTitle": "ایپ ڈیٹا کے ذریعے ری سیٹ کریں", + "resetViaAppDataDescription": "اپلیکیشن ڈیٹا ڈائریکٹری سے سیٹنگز فائل کو حذف کریں تاکہ آپ کا پاس ورڈ ری سیٹ ہو سکے:", + "quitDesktopApp": "OmniRoute ڈیسک ٹاپ ایپ کو مکمل طور پر بند کریں", + "navigateToAppDataDirectory": "ایپ ڈیٹا ڈائریکٹری پر جائیں:", + "checkSystemAppDataFolder": "(اپنے سسٹم ایپ ڈیٹا فولڈر کی جانچ کریں)", + "relaunchDesktopFreshSetup": "OmniRoute ڈیسک ٹاپ ایپ کو دوبارہ شروع کریں — یہ تازہ سیٹ اپ شروع کرے گا", + "alternativeSetPasswordTitle": "متبادل: نیا پاس ورڈ سیٹ کریں", + "alternativeSetPasswordDescription": "سرور کے ماحول کی فائل کے ذریعے ایک نیا ابتدائی پاس ورڈ سیٹ کریں:", + "openServerEnvFilePrefix": "کھولیں", + "relaunchDesktopApp": "OmniRoute ڈیسک ٹاپ ایپ کو دوبارہ شروع کریں", + "codexLinkInvalidOrExpired": "یہ لنک غلط یا ختم ہو چکا ہے۔", + "codexValidationServerError": "اس لنک کی توثیق کے لیے سرور تک نہیں پہنچ سکا۔", + "codexSaveConnectionError": "کنکشن کو محفوظ نہیں کیا جا سکا۔ لنک ختم ہو چکا ہو سکتا ہے۔", + "codexDeviceLoginDisabled": "اس OpenAI اکاؤنٹ کے لیے ڈیوائس کوڈ لاگ ان غیر فعال ہے۔ اسے ChatGPT سیکیورٹی سیٹنگز میں فعال کریں (یا اپنے ورک اسپیس ایڈمن سے پوچھیں)۔", + "codexAuthorizationTimedOut": "اجازت نامہ ختم ہو گیا۔ دوبارہ کوشش کرنے کے لیے Start پر کلک کریں۔", + "authenticationCancelled": "تصدیق منسوخ کر دی گئی۔", + "unexpectedAuthenticationError": "تصدیق کے دوران غیر متوقع خرابی۔ براہ کرم دوبارہ کوشش کریں۔", + "connectOpenAiCodexTitle": "OpenAI Codex سے جڑیں", + "codexConnectDescription": "اس کنکشن کو مکمل کرنے کے لیے ایک ChatGPT اکاؤنٹ کی اجازت دیں۔", + "validatingCodexLink": "لنک کی تصدیق ہو رہی ہے…", + "codexGenerateCodeDescription": "نیچے کلک کریں تاکہ ایک وقتی کوڈ تیار کریں، پھر OpenAI میں سائن ان کریں۔", + "startCodexFlow": "شروع", + "requestingOpenAiCode": "OpenAI سے کوڈ کی درخواست کر رہے ہیں…", + "codexVerificationInstructions": "1. OpenAI تصدیق صفحہ کھولیں اور 2. یہ کوڈ درج کریں۔ یہ صفحہ خود بخود اپ ڈیٹ ہو جاتا ہے جب آپ اجازت دیتے ہیں۔", + "yourCode": "آپ کا کوڈ", + "openVerificationPage": "تصدیق کا صفحہ کھولیں", + "copyUrlShort": "یو آر ایل کاپی کریں", + "savingConnection": "کنکشن محفوظ کر رہا ہے…", + "codexConnected": "متصل!", + "codexConnectionRegistered": "Codex اکاؤنٹ رجسٹر ہو گیا ہے۔ آپ اس ٹیب کو بند کر سکتے ہیں۔", + "tryAgain": "پھر کوشش کریں", + "traeAuthorizationSuccess": "ٹری آتھورائزیشن ✓", + "traeAuthorizationFailed": "ٹری آتھورائزیشن ناکام ہوگئی", + "closeAuthorizationWindow": "آپ اس ونڈو کو بند کر سکتے ہیں۔", + "returnToDashboard": "ڈیش بورڈ پر واپس جائیں۔", + "resetViaAppData": "ایپ ڈیٹا کے ذریعے ری سیٹ کریں", + "deleteSettingsToReset": "اپلیکیشن ڈیٹا ڈائریکٹری سے سیٹنگز کی فائل حذف کریں تاکہ آپ کا پاس ورڈ ری سیٹ ہو سکے:", + "quitAppCompletely": "OmniRoute ڈیسک ٹاپ ایپ کو مکمل طور پر بند کریں", + "navigateToAppData": "ایپ ڈیٹا ڈائریکٹری پر جائیں", + "checkAppDataFolder": "اپنے سسٹم ایپ ڈیٹا فولڈر کی جانچ کریں", + "deleteSettingsJson": "حذف کریں", + "relaunchAppFresh": "OmniRoute ڈیسک ٹاپ ایپ کو دوبارہ شروع کریں — یہ تازہ سیٹ اپ شروع کرے گا", + "alternativeSetPassword": "متبادل: نیا پاس ورڈ سیٹ کریں", + "setNewPasswordViaEnv": "سرور کے ماحول کی فائل کے ذریعے ایک نیا ابتدائی پاس ورڈ سیٹ کریں:", + "openServerEnv": "کھولیں", + "inDataDirectory": "ڈیٹا ڈائریکٹری میں", + "addOrUpdate": "شامل کریں یا اپ ڈیٹ کریں", + "deleteAndRelaunch": "حذف کریں", + "settingsJson": "settings.json", + "fromDataDir": "ڈیٹا ڈائریکٹری سے", + "relaunchApp": "OmniRoute ڈیسک ٹاپ ایپ کو دوبارہ شروع کریں" }, "landing": { "brandName": "OmniRoute", @@ -9275,7 +9741,19 @@ "ctaTitle": "Ready to Simplify Your AI Infrastructure?", "ctaDescription": "Join developers who are streamlining their AI integrations with OmniRoute. Open source and free to start.", "startFree": "Start Free", - "readDocumentation": "Read Documentation" + "readDocumentation": "Read Documentation", + "company": "کمپنی", + "pricing": "قیمتیں", + "apiReference": "API حوالہ", + "helpCenter": "مدد مرکز", + "about": "کے بارے میں", + "blog": "بلاگ", + "contact": "رابطہ", + "terms": "شرائط", + "privacy": "رازداری", + "license": "لائسنس", + "footerDescription": "جدید AI بنیادی ڈھانچے کے لیے متحدہ انٹرفیس۔ محفوظ، قابل مشاہدہ، اور توسیع پذیر۔", + "communityDiscussions": "کمیونٹی مباحثے" }, "docs": { "title": "Documentation", @@ -9484,7 +9962,51 @@ "protocolAcpDesc": "Register and manage agents via the ACP registry for inter-agent communication and tool sharing.", "protocolAcpStep1": "Navigate to Dashboard → Agents to view registered ACP agents.", "protocolAcpStep2": "Register new agents with capabilities and endpoint configuration.", - "protocolAcpStep3": "Use CLI Tools to configure agent communication channels." + "protocolAcpStep3": "Use CLI Tools to configure agent communication channels.", + "metadataTitleTemplate": "%s — OmniRoute دستاویزات", + "metadataDefaultTitle": "OmniRoute دستاویزات", + "metadataDescription": "OmniRoute AI گیٹ وے کے لیے جامع دستاویزات — سیٹ اپ، API، کمپریشن، تعیناتی، اور مزید۔", + "layoutNavTitle": "OmniRoute Docs", + "layoutHomeLink": "دستاویزات کا گھر", + "layoutDashboardLink": "← ڈیش بورڈ پر واپس جائیں", + "homeTitle": "OmniRoute دستاویزات", + "homeMetadataDescription": "آپ کو اپنے AI کو روٹ، کمپریس، اور اسکیل کرنے کے لیے درکار ہر چیز — سیٹ اپ گائیڈز، API حوالہ، کمپریشن، تعیناتی، اور مزید۔", + "homeTwitterDescription": "OmniRoute AI گیٹ وے کے لیے جامع دستاویزات", + "homeDescription": "آپ کی AI کو روٹ، کمپریس، اور اسکیل کرنے کے لیے آپ کو ہر چیز کی ضرورت ہے", + "homeSearchHint": "دستاویزات تلاش کرنے کے لیے Ctrl K دبائیں", + "featuredQuickStartTitle": "جلدی شروع کریں", + "featuredQuickStartDescription": "3 منٹ میں OmniRoute چلائیں", + "featuredAutoComboTitle": "آٹو-کمبو گائیڈ", + "featuredAutoComboDescription": "OmniRoute کو آپ کے لیے بہترین AI منتخب کرنے دیں", + "featuredProvidersTitle": "مہیا کنندگان کا رہنما", + "featuredProvidersDescription": "منٹوں میں AI فراہم کنندگان کو جوڑیں", + "nonTechUsersTitle": "غیر تکنیکی صارفین کے لیے", + "nonTechUsersSubtitle": "جلدی شروع کریں — کوئی تکنیکی پس منظر کی ضرورت نہیں", + "techUsersTitle": "ٹیک صارفین کے لیے", + "techUsersSubtitle": "معماری، APIs، اور اندرونی نظام میں گہرائی سے جائزہ لیں", + "apiExplorerMetadataTitle": "API ایکسپلورر — OmniRoute دستاویزات", + "apiExplorerMetadataDescription": "انٹرایکٹو API ایکسپلورر — حقیقی وقت کے جوابات کے ساتھ OmniRoute اینڈپوائنٹس کو براہ راست آزمائیں", + "apiExplorerTitle": "API ایکسپلورر", + "apiExplorerDescription": "OmniRoute کے اینڈپوائنٹس کو براہ راست آزمائیں۔ ایک اینڈپوائنٹ منتخب کریں، اپنی درخواست کو ترتیب دیں، اور حقیقی وقت میں جواب دیکھیں۔", + "apiExplorerSseStarted": "SSE اسٹریم شروع ہو گیا — حقیقی وقت کے آؤٹ پٹ کے لیے ٹرمینل/devtools چیک کریں۔", + "apiExplorerError": "خرابی: {message}", + "apiExplorerAuth": "تصدیق", + "apiExplorerResponseLabel": "جواب", + "apiExplorerSelectEndpoint": "ایک اینڈپوائنٹ منتخب کریں جس کی جانچ کریں", + "apiExplorerChooseApi": "سائیڈبار سے ایک API منتخب کریں تاکہ تفصیلات دیکھ سکیں اور اسے براہ راست آزما سکیں۔", + "feedbackThanks": "آپ کی رائے کا شکریہ!", + "feedbackQuestion": "کیا یہ صفحہ مددگار تھا؟", + "pageMetadataTitle": "{title} — OmniRoute دستاویزات", + "pageMetadataDescription": "OmniRoute دستاویزات: {title}", + "breadcrumb": "راستہ نشان", + "apiReferenceTable": { + "parameters": "پیرا میٹرز", + "name": "نام", + "type": "ٹائپ", + "description": "تفصیل", + "returns": "واپسی", + "typePrefix": "قسم:" + } }, "legal": { "privacyPolicy": "Privacy Policy", @@ -9957,7 +10479,42 @@ "successMessage": "Your {providerName} account has been connected.", "done": "Done", "error": "Connection failed", - "tryAgain": "Try again" + "tryAgain": "Try again", + "errorSessionIncomplete": "OAuth سیشن مکمل نہیں ہے (ری ڈائریکٹ URI یا کوڈ ویری فائر غائب ہے)۔ کنکشن کو دوبارہ شروع کریں اور دوبارہ کوشش کریں۔", + "errorExchangeFailed": "تبادلہ ناکام ہوا", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: ڈیفالٹ Google OAuth اسناد صرف localhost پر کام کرتی ہیں۔ دور دراز کے استعمال کے لیے، اپنے OAuth اسناد کو ماحول کے متغیرات کے ذریعے ترتیب دیں: ANTIGRAVITY_OAUTH_CLIENT_ID اور ANTIGRAVITY_OAUTH_CLIENT_SECRET۔ README کے سیکشن 'OAuth on a Remote Server' کو دیکھیں۔", + "errorSaveFailed": "محفوظ کرنے میں ناکامی ہوئی", + "errorAuthorizationFailed": "اجازت نامہ ناکام ہوا", + "errorAuthorizationTimeout": "اجازت نامہ کا وقت ختم ہوگیا", + "errorRequestFailed": "درخواست ناکام ہوگئی", + "errorCallbackServerFailed": "کال بیک سرور شروع کرنے میں ناکامی", + "errorBrowserUnavailable": "براؤزر OAuth اس فراہم کنندہ کے لیے موجودہ ماحول میں دستیاب نہیں ہے۔ اس کے بجائے سپورٹ کردہ تصدیق کے طریقے کا استعمال کریں۔", + "errorStateMismatch": "OAuth ریاست میں عدم مطابقت۔ کنکشن کو دوبارہ شروع کریں اور دوبارہ کوشش کریں۔", + "errorImportAccessToken": "ایکسس ٹوکن درآمد کرنے میں ناکامی", + "errorSessionNotInitialized": "OAuth سیشن شروع نہیں ہوا۔ کنکشن کے بہاؤ کو دوبارہ شروع کریں اور دوبارہ کوشش کریں۔", + "errorNoAuthorizationCode": "کوئی اختیار نامہ کوڈ نہیں ملا۔ کال بیک یو آر ایل یا اختیار نامہ کوڈ پیسٹ کریں۔", + "tabDeviceCode": "ڈیوائس کوڈ", + "tabBrowserLogin": "براؤزر لاگ ان", + "tabImportAuthJson": "auth.json درآمد کریں", + "tabPasteApiKey": "API کی چابی پیسٹ کریں", + "windsurfPasteDescription": "Windsurf / VS Code IDE میں، کمانڈ پیلیٹ سے \"Windsurf: Provide Auth Token\" کمانڈ چلائیں (یا Jupyter \"Get Windsurf Authentication Token\" بٹن پر کلک کریں)، پھر دکھائے گئے ٹوکن کو کاپی کریں اور نیچے پیسٹ کریں۔ براہ راست windsurf.com/show-auth-token کھولنے سے صرف \"Redirecting\" صفحہ دکھائی دیتا ہے — IDE کو بہاؤ شروع کرنا ہوگا۔", + "grokAuthJsonDescription": "~/.grok/auth.json کے مکمل مواد کو پیسٹ کریں (صرف JWT \"key\" فیلڈ نہیں)۔ ایک خالی JWT میں refresh_token نہیں ہوتا، اس لیے کنکشن کی میعاد ختم ہونے کے بعد بند ہو جاتا ہے (#7610)۔ جب دستیاب ہو تو مخصوص Import auth.json ماڈل کو ترجیح دیں۔", + "devinDesktopPasteDescription": "ایک موجودہ Devin API کلید کو ایک تصدیق شدہ Devin سیشن سے پیسٹ کریں۔ کلید برآمد کرنے کی دستیابی اور مراحل Devin ورژن اور اکاؤنٹ کے لحاظ سے مختلف ہیں۔", + "devinPasteDescription": "اپنا WINDSURF_API_KEY فراہم کریں (جو `devin auth login` کے ذریعے حاصل کیا گیا، یا Windsurf IDE \"Windsurf: Provide Auth Token\" کمانڈ کے ذریعے)۔", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok Build auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API کی چابی / ٹوکن", + "saving": "محفوظ کر رہے ہیں…", + "saveConnection": "کنکشن محفوظ کریں", + "gheDescription": "اپنے GitHub Enterprise انسٹنس کا بنیادی URL درج کریں (جیسے https://ghe.yourcompany.com)۔", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise URL", + "gheUrlRequired": "GitHub Enterprise URL درکار ہے", + "gitlabDuoSetupTitle": "GitLab Duo OAuth سیٹ اپ", + "gitlabDuoSetupMessage": "GitLab Duo OAuth ترتیب نہیں دیا گیا ہے۔ {applicationsUrl} پر ایک OAuth ایپلیکیشن رجسٹر کریں جس میں ری ڈائریکٹ URI {redirectUri} اور اسکوپس \"{scopes}\" ہوں، پھر {clientIdEnv} (اور اختیاری طور پر {clientSecretEnv}) سیٹ کریں اور دوبارہ شروع کریں۔", + "gitlabDuoSetupDescription": "جب ایپلیکیشن رجسٹر ہو جائے اور اس OmniRoute انسٹنس پر env vars سیٹ ہو جائیں، تو OAuth لاگ ان شروع کرنے کے لیے Continue پر کلک کریں۔", + "continue": "جاری رکھیں" }, "cursorAuthModal": { "title": "Connect Cursor IDE", @@ -10474,7 +11031,101 @@ "noMatchingLogs": "No logs matching current filters.", "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}.", "loadMore": "مزید لوڈ کریں", - "loadingMore": "مزید لوڈ ہو رہا ہے..." + "loadingMore": "مزید لوڈ ہو رہا ہے...", + "correlationId": "ہم آہنگی شناختی نمبر", + "group": { + "showAllRows": "تمام قطاریں دکھائیں", + "showLatestPerCorrelation": "آخری کو دکھائیں فی تعلق ID", + "grouped": "گروپ کیا گیا" + }, + "running": "چل رہا ہے", + "interval": { + "decrease": "انٹرول کم کریں", + "title": "سیکنڈز میں خودکار تازہ کاری کا وقفہ", + "increase": "وقفہ بڑھائیں" + }, + "status": { + "inProgress": "جاری ہے", + "recoveredByRetry": "دوبارہ کوشش کرکے بحال کیا گیا", + "goToParent": "والدین کی درخواست پر جائیں", + "healedTitle": "ناکام، {count} کوششوں کے بعد بحال ہوا", + "healed": "شفا یاب", + "failedTitle": "تمام {count} کوششیں ناکام ہو گئیں", + "failed": "ناکام", + "pinnedTitle": "سیاق-کیش سیشن پننگ کے ذریعے ماڈل منتخب کیا گیا", + "pinned": "پِن کیا ہوا" + }, + "attempts": "کوششیں", + "detail": { + "collapse": "{title} کو بند کریں", + "expand": "{title} کو بڑھائیں", + "copyTitle": "کاپی {title}", + "copied": "کاپی کر لیا!", + "copy": "نقل کریں", + "autoscrollOn": "خودکار اسکرول: آن", + "autoscrollOff": "آٹو اسکرول: بند", + "payload": { + "clientRawRequest": "کلائنٹ خام درخواست", + "clientRequest": "کلائنٹ کی درخواست", + "openaiRequest": "OpenAI درخواست", + "providerRequest": "مہیا کنندہ کی درخواست", + "providerResponse": "مہیا کنندہ کا جواب", + "clientResponse": "کلائنٹ کا جواب", + "pipelineError": "پائپ لائن کی خرابی" + }, + "payloadMissing": "اس لاگ اندراج کے لیے تفصیلی پیلوڈ آرٹيفیکٹ اب دستیاب نہیں ہے۔", + "payloadCorrupt": "تفصیلی پیلوڈ آرٹفیکٹ کو پارس نہیں کیا جا سکا۔", + "notAvailable": "N/A", + "semanticCache": "سمینٹک (OmniRoute)", + "upstreamCache": "اوپر کی طرف (فراہم کنندہ)", + "ariaLabel": "درخواست لاگ کی تفصیل", + "completed": "مکمل ہوا", + "upstreamStatus": "اوپر کی طرف: {status}", + "statusDiscrepancy": "OmniRoute نے {status} واپس کیا حالانکہ فراہم کنندہ نے {provider} واپس کیا", + "previousRequest": "پچھلی درخواست", + "nextRequest": "اگلی درخواست", + "close": "تفصیل کا ماڈل بند کریں", + "startedAt": "شروع کیا گیا", + "endedAt": "ختم ہوا پر", + "duration": "مدت", + "model": "ماڈل", + "provider": "فراہم کنندہ", + "account": "اکاؤنٹ", + "input": "ان پٹ", + "totalIn": "کل داخل: {value}", + "cacheRead": "کیچ پڑھیں: {value}", + "cacheWrite": "کیچ لکھیں: {value}", + "compressed": "کمپریسڈ: {from} → {to} ({percent}% بچت)", + "output": "آؤٹ پٹ", + "totalOut": "کل باہر: {value}", + "reasoning": "وجوہات: {value}", + "requestedModel": "درخواست کردہ ماڈل", + "requestProtocol": "درخواست پروٹوکول", + "cacheSource": "کیچ ماخذ", + "modelPinning": "ماڈل پننگ", + "activeModelPinning": "فعال — سیشن پننگ کے ذریعے ماڈل منتخب کیا گیا", + "rotated": "موڑا گیا: {initial} -> {final}", + "apiKey": "ای پی آئی کی کلید", + "noApiKey": "کوئی API کلید نہیں", + "combo": "کمبو", + "error": "غلطی", + "unblockAll": "تمام بلاک کریں", + "cleared": "صاف کیا گیا", + "unblock": "ان بلاک کریں", + "relatedRequests": "متعلقہ درخواستیں ({count})", + "current": "موجودہ", + "detailStatus": "تفصیلی حیثیت", + "loadingDetails": "درخواست کی تفصیلات لوڈ ہو رہی ہیں...", + "providerEventStream": "پرووائیڈر ایونٹ اسٹریم", + "clientEventStream": "کلائنٹ ایونٹ اسٹریم", + "eventStream": "ایونٹ اسٹریم", + "responsePayloadLegacy": "جواب کا پیلوڈ (ورثہ)", + "requestPayloadLegacy": "درخواست پیلوڈ (ورثے)", + "noPayload": "اس لاگ اندراج کے لیے کوئی پیلوڈ ڈیٹا دستیاب نہیں ہے۔", + "correlationId": "کورلیشن آئی ڈی", + "correlationIdValue": "Correlation ID: {id}", + "detailedPayloadInfo": "پہلے تفصیلی لاگنگ فعال کریں اگر آپ نئے درخواستوں کے لیے چار مرحلوں کے کلائنٹ/فراہم کنندہ پے لوڈ ویو چاہتے ہیں۔" + } }, "proxyLogger": { "filterAll": "All", @@ -11703,7 +12354,11 @@ "providerDisabled": "{provider} غیر فعال کر دیا گیا", "providerAdded": "{provider} شامل کیا گیا", "add": "شامل کریں", - "manualApiKey": "ہاتھ سے API کلید استعمال کریں" + "manualApiKey": "ہاتھ سے API کلید استعمال کریں", + "createDahlTokenFailed": "Dahl ٹوکن بنانے میں ناکامی", + "providerProxy": "پراکسی", + "providerProxyConfigureHint": "پراکسی ترتیب دیں", + "providerProxyTitleConfigured": "پراکسی ترتیب دی گئی: {host}" }, "gamification": { "leaderboardScopes": { @@ -12201,7 +12856,9 @@ "avoid": "ToS-محدود — شرائط کا جائزہ لیں", "caution": "احتیاط — ذاتی استعمال / پراکسی شقیں", "ok": "عام طور پر اجازت یافتہ" - } + }, + "allProviders": "تمام فراہم کنندگان", + "noApiKeyRequired": "کوئی API کلید درکار نہیں" }, "providerHealthAutopilot": { "title": "پرووائیڈر ہیلتھ آٹو پائلٹ", @@ -12390,7 +13047,11 @@ "on": "آن", "off": "آف", "availableProviders": "دستیاب فراہم کنندگان ({count})", - "noProviderOverrides": "کوئی اوور رائیڈز نہیں — تمام فعال فراہم کنندگان اپنے ڈیفالٹ ماڈلز کے ساتھ حصہ لیں گے" + "noProviderOverrides": "کوئی اوور رائیڈز نہیں — تمام فعال فراہم کنندگان اپنے ڈیفالٹ ماڈلز کے ساتھ حصہ لیں گے", + "resetFailed": "ری سیٹ ناکام ہوا", + "resetSuccess": "کنفیگریشن کو ڈیفالٹس پر ری سیٹ کریں", + "running": "چل رہا ہے...", + "testFailed": "ٹیسٹ ناکام ہوا" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) OmniRoute کا بانی اوپن سورس دوست ہے", @@ -12579,6 +13240,380 @@ "capabilityFilter.visionMismatch": "فراہم کنندہ اس تصویر کی درخواست کے لیے بصیرت کی حمایت نہیں کرتا", "capabilityFilter.toolsMismatch": "فراہم کنندہ ٹول کالنگ کی حمایت نہیں کرتا", "capabilityFilter.structuredOutputMismatch": "پرووائیڈر ساختی آؤٹ پٹ کی حمایت نہیں کرتا", - "capabilityFilter.contextWindowMismatch": "درخواست فراہم کنندہ کے سیاق و سباق کی ونڈو سے تجاوز کر گئی ہے" + "capabilityFilter.contextWindowMismatch": "درخواست فراہم کنندہ کے سیاق و سباق کی ونڈو سے تجاوز کر گئی ہے", + "publicSystem": { + "notFound": { + "title": "صفحہ نہیں ملا", + "description": "جس صفحے کی آپ تلاش کر رہے ہیں وہ موجود نہیں ہے یا منتقل کر دیا گیا ہے۔", + "dashboardAriaLabel": "ڈیش بورڈ پر واپس جائیں", + "statusAriaLabel": "نظام کی حیثیت کا صفحہ کھولیں", + "systemStatus": "سسٹم کی حیثیت" + }, + "error": { + "title": "اندرونی سرور کی خرابی", + "description": "آپ کی درخواست کی پروسیسنگ کے دوران کچھ غلط ہوا۔ ہماری ٹیم کو مطلع کر دیا گیا ہے اور وہ ایک حل پر کام کر رہی ہے۔", + "errorId": "خرابی کی شناخت: {id}", + "detailsAriaLabel": "خرابی کی تفصیلات", + "retryAriaLabel": "صفحہ دوبارہ لوڈ کرنے کی کوشش کریں", + "tryAgain": "پھر کوشش کریں", + "dashboardAriaLabel": "ڈیش بورڈ پر واپس جائیں", + "statusAriaLabel": "نظام کی حیثیت کھولیں", + "systemStatus": "سسٹم کی حیثیت" + }, + "globalError": { + "title": "کچھ غلط ہو گیا", + "description": "ایک غیر متوقع خرابی پیش آئی ہے۔ یہ لاگ کر دیا گیا ہے اور ہماری ٹیم تحقیقات کرے گی۔", + "detailsAriaLabel": "غلطی کی تفصیلات", + "retryAriaLabel": "صفحہ دوبارہ لوڈ کرنے کی کوشش کریں", + "tryAgain": "پھر کوشش کریں", + "statusAriaLabel": "نظام کی حیثیت کھولیں", + "systemStatus": "سسٹم کی حیثیت" + }, + "offline": { + "title": "کنیکٹیویٹی کا مسئلہ", + "description": "OmniRoute اس وقت نیٹ ورک تک نہیں پہنچ سکتا۔ اپنے انٹرنیٹ، VPN، یا پراکسی کی ترتیبات چیک کریں۔", + "connectionRestored": "کنکشن بحال ہوگیا", + "offlineModeDetected": "آف لائن موڈ کا پتہ چلا ہے", + "retryConnection": "کنکشن دوبارہ کوشش کریں", + "openStatusPage": "اسٹیٹس پیج کھولیں" + }, + "maintenance": { + "title": "شیڈول کردہ دیکھ بھال", + "description": "کچھ خدمات عارضی طور پر دستیاب نہیں ہیں جبکہ دیکھ بھال جاری ہے۔ بنیادی روٹنگ عام طور پر آن لائن رہتی ہے، لیکن انتظامی خصوصیات میں کمی ہو سکتی ہے۔", + "suggestion1": "کچھ منٹ بعد دوبارہ کوشش کریں۔", + "suggestion2": "دوبارہ کوشش کرنے سے پہلے موجودہ صحت کے اشارے اور فراہم کنندہ کی حیثیت چیک کریں۔", + "systemStatus": "سسٹم کی حیثیت دیکھیں", + "healthDashboard": "ہیلتھ ڈیش بورڈ کھولیں" + }, + "status": { + "title": "سسٹم کی حیثیت", + "description": "OmniRoute کے بنیادی خدمات کے لیے لائیو آپریشنل اسنیپ شاٹ۔", + "loadingHealth": "ہیلتھ میٹرکس لوڈ ہو رہے ہیں...", + "failedToLoad": "سسٹم کی صحت لوڈ کرنے میں ناکامی۔", + "unableToReachHealth": "ہیلتھ اینڈپوائنٹ تک پہنچنے میں ناکامی۔ کنیکٹیویٹی چیک کریں اور دوبارہ کوشش کریں۔", + "healthCheckFailed": "ہیلتھ چیک ناکام ہوا", + "openConnectivityHelp": "اوپن کنیکٹیویٹی مدد", + "maintenanceInfo": "نگہداشت کی معلومات", + "service": "سروس", + "unknown": "نامعلوم", + "notAvailable": "n/a", + "providersTracked": "مہیا کنندگان کی نگرانی کی گئی", + "circuitBreakerState": "پرووائیڈر سرکٹ بریکر کی حالت", + "lastUpdate": "آخری اپ ڈیٹ: {timestamp}", + "uptimeMinutes": "{minutes}منٹ", + "uptimeHoursMinutes": "{hours}گھنٹے {minutes}منٹ" + }, + "statusPages": { + "400": { + "title": "غلط درخواست", + "description": "درخواست کا پیلوڈ غلط یا نامکمل ہے۔", + "suggestion1": "درست کرنے سے پہلے درکار فیلڈز اور پیلوڈ فارمیٹ کا جائزہ لیں۔", + "suggestion2": "اگر آپ API استعمال کر رہے ہیں تو JSON اسکیمہ کو مقامی طور پر درست کریں۔", + "suggestion3": "اگر یہ جاری رہا تو Translator Playground میں درخواست کھولیں تاکہ پیلوڈ کا معائنہ کیا جا سکے۔", + "primaryAction": "دستاویزات کھولیں", + "secondaryAction": "ترجمہ کرنے والا کھولیں" + }, + "401": { + "title": "غیر مجاز", + "description": "اس وسائل تک رسائی کے لیے توثیق کی ضرورت ہے۔", + "suggestion1": "دوبارہ سائن ان کریں اور کارروائی کو دوبارہ کوشش کریں۔", + "suggestion2": "API کالز کے لیے، تصدیق کریں کہ بیئرر ٹوکن موجود اور درست ہے۔", + "suggestion3": "اگر ٹوکن حال ہی میں تبدیل کیا گیا ہے تو اپنے کلائنٹ کی اسناد کو اپ ڈیٹ کریں۔", + "primaryAction": "لاگ ان پر جائیں", + "secondaryAction": "API کیز کا انتظام کریں" + }, + "403": { + "title": "ممنوع", + "description": "آپ کی درخواست کو سمجھ لیا گیا ہے، لیکن پالیسی کی وجہ سے رسائی مسترد کر دی گئی ہے۔", + "suggestion1": "سیٹنگز میں IP اجازت نامہ/بلاک لسٹ کے قواعد چیک کریں۔", + "suggestion2": "اپنی API کلید کے لیے تفویض کردہ ماڈل اور بجٹ کی پالیسیوں کی تصدیق کریں۔", + "suggestion3": "کسی منتظم سے درخواست کریں کہ درکار اجازت کی حد فراہم کریں۔", + "primaryAction": "اوپن ایکسیس مدد", + "secondaryAction": "سیکیورٹی کی ترتیبات کھولیں" + }, + "408": { + "title": "درخواست کا وقت ختم ہوگیا", + "description": "سرور کو وقت پر مکمل درخواست موصول نہیں ہوئی۔", + "suggestion1": "درخواست کو چھوٹے پیلوڈ کے ساتھ دوبارہ کوشش کریں۔", + "suggestion2": "اپنی نیٹ ورک کی استحکام اور VPN/proxy کی تاخیر چیک کریں۔", + "suggestion3": "طویل کارروائیوں کے لیے، اسٹریمنگ کو فعال کریں یا درخواست کو تقسیم کریں۔", + "primaryAction": "اوپن اینڈپوائنٹ گائیڈ", + "secondaryAction": "نیٹ ورک کی حیثیت چیک کریں" + }, + "429": { + "title": "بہت زیادہ درخواستیں", + "description": "اس کلائنٹ، کلید، یا فراہم کنندہ کے لیے ریٹ کی حدیں تجاوز کر گئی ہیں۔", + "suggestion1": "کول ڈاؤن کا انتظار کریں اور تجویز کردہ وقفے کے بعد دوبارہ کوشش کریں۔", + "suggestion2": "فیل بیک فراہم کنندگان کے ساتھ ایک کومبو پر سوئچ کریں۔", + "suggestion3": "سیٹنگز میں فراہم کنندہ کی لچک/شرح کی حد کے پروفائلز کو ترتیب دیں۔", + "primaryAction": "ریزیلینس سیٹنگز کھولیں", + "secondaryAction": "اوپن کومبوز" + }, + "500": { + "title": "اندرونی سرور کی خرابی", + "description": "آپ کی درخواست کی پروسیسنگ کے دوران ایک غیر متوقع سرور سائیڈ کی خرابی پیش آئی۔", + "suggestion1": "چند سیکنڈ میں دوبارہ کوشش کریں۔", + "suggestion2": "صحت کی ٹیلی میٹری اور سرور لاگ کو مربوط درخواست IDs کے لیے چیک کریں۔", + "suggestion3": "اگر یہ مسئلہ برقرار رہے تو مسئلے کی رپورٹ کریں جس میں وقت کا نشان اور درخواست کا سیاق و سباق شامل ہو۔", + "primaryAction": "ہیلتھ ڈیش بورڈ کھولیں", + "secondaryAction": "لاگ کھولیں" + }, + "502": { + "title": "خراب گیٹ وے", + "description": "اپ اسٹریم فراہم کنندہ یا گیٹ وے انضمام نے ایک غیر درست جواب واپس کیا۔", + "suggestion1": "کسی دوسرے فراہم کنندہ یا فعال کمبو راستے کے ساتھ دوبارہ کوشش کریں۔", + "suggestion2": "مہیا کنندہ کی اسناد اور ماڈل کی دستیابی کی جانچ کریں۔", + "suggestion3": "اگر فارمیٹ کی تبدیلی شامل ہو تو مترجم کی پیداوار کا معائنہ کریں۔", + "primaryAction": "اوپن فراہم کنندگان", + "secondaryAction": "ترجمہ کرنے والا کھولیں" + }, + "503": { + "title": "سروس دستیاب نہیں ہے", + "description": "یہ سروس عارضی طور پر دستیاب نہیں ہے کیونکہ یہ دیکھ بھال یا کمزور انحصار کی وجہ سے ہے۔", + "suggestion1": "ایک لمحہ انتظار کریں اور دوبارہ کوشش کریں۔", + "suggestion2": "نگہداشت کے نوٹس اور نظام کی حیثیت چیک کریں۔", + "suggestion3": "اگر آپ کا ورک فلو لیٹنسی حساس ہے تو متبادل فراہم کنندگان کا استعمال کریں۔", + "primaryAction": "نگہداشت کی تفصیلات", + "secondaryAction": "نظام کی حیثیت" + } + } + }, + "kiroAuthModal": { + "title": "{providerLabel} سے جڑیں", + "chooseMethod": "اپنی توثیق کا طریقہ منتخب کریں:", + "builderId": "AWS Builder ID", + "builderDescription": "زیادہ تر صارفین کے لیے تجویز کردہ۔ {providerLabel} سے منسلک AWS اکاؤنٹ کے ساتھ سائن ان کریں۔", + "organization": "آپ کی تنظیم (AWS IAM شناختی مرکز)", + "organizationDescription": "اپنی کمپنی کے SSO شروع کرنے کے URL کا استعمال کریں (مثال: {url})۔", + "googleAccount": "گوگل اکاؤنٹ", + "googleDescription": "اپنے Google اکاؤنٹ سے لاگ ان کریں۔", + "githubAccount": "GitHub اکاؤنٹ", + "githubDescription": "اپنے GitHub اکاؤنٹ کے ساتھ لاگ ان کریں۔", + "importToken": "ٹوکین درآمد کریں", + "importDescription": "{providerLabel} سے برآمد کردہ ریفریش ٹوکن پیسٹ کریں۔", + "apiKey": "API کی کلید", + "apiKeyDescription": "ایک طویل مدتی {providerLabel} / CodeWhisperer API کلید پیسٹ کریں۔ یہ بغیر کسی ریفریش ٹوکن کے بیئرر اسناد کے طور پر محفوظ کی گئی ہے؛ پروفائل کی دریافت بہترین کوشش ہے۔", + "idcStartUrl": "IDC شروع URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "آپ کی تنظیم کا AWS IAM شناختی مرکز کا URL", + "awsRegion": "AWS علاقہ", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "آپ کے شناختی مرکز کے لیے AWS علاقہ (ڈیفالٹ: us-east-1)", + "continue": "جاری رکھیں", + "back": "پیچھے", + "autoDetecting": "ٹوکن کی خودکار شناخت ہو رہی ہے...", + "readingCredentials": "AWS SSO کی کیش سے {providerLabel} کی اسناد پڑھنا", + "tokenNotDetected": "{providerLabel} ٹوکن خود بخود نہیں پایا گیا۔ براہ کرم اپنا ریفریش ٹوکن دستی طور پر پیسٹ کریں۔", + "refreshToken": "ریفرش ٹوکن", + "tokenPlaceholder": "ٹوکن خود بخود بھر دیا جائے گا...", + "importing": "درآمد ہو رہا ہے...", + "apiKeyPlaceholder": "اپنی {providerLabel} API کلید پیسٹ کریں...", + "apiKeyStoredDescription": "طویل مدتی بیئرر اسناد کے طور پر محفوظ کردہ خفیہ کردہ۔ کوئی ریفریش فلو نہیں ہے۔", + "apiKeyRegionDescription": "کیز کے لیے AWS علاقہ (ڈیفالٹ: us-east-1)", + "validating": "جانچ رہے ہیں...", + "validateAndSaveApiKey": "API کی کلید کی توثیق کریں اور محفوظ کریں", + "errorAutoDetect": "ٹوکین خودکار طور پر شناخت نہیں کیا جا سکا", + "errorAutoDetectFailed": "ٹوکین کو خودکار طور پر شناخت کرنے میں ناکامی", + "errorRefreshTokenRequired": "براہ کرم ایک ریفریش ٹوکن درج کریں", + "errorImportFailed": "درآمد ناکام ہوگئی", + "errorApiKeyRequired": "براہ کرم ایک Kiro API کلید درج کریں", + "errorApiKeyImportFailed": "API کی چابی درآمد کرنے میں ناکامی ہوئی", + "errorIdcStartUrlRequired": "براہ کرم اپنا IDC شروع کرنے کا URL درج کریں" + }, + "kiroSocialOAuthModal": { + "title": "{providerLabel} کو {providerName} کے ذریعے منسلک کریں", + "errorStartAuthorization": "تصدیق شروع کرنے میں ناکامی", + "errorAuthorizationExpired": "اجازت نامہ ختم ہو گیا ہے۔ دوبارہ لاگ ان کا عمل شروع کریں۔", + "errorAuthorizationFailed": "اجازت نامہ ناکام ہوا", + "initializing": "شروع ہو رہا ہے...", + "settingUp": "{providerName} کی توثیق ترتیب دینا", + "openIncognito": "اس لنک کو انکگنیٹو ونڈو میں کھولیں", + "incognitoDescription": "موجودہ اکاؤنٹس کے ساتھ سیشن کے تنازعات سے بچنے کے لیے ایک انکگنیٹو/پرائیویٹ ونڈو کا استعمال کریں۔", + "copyLink": "لنک کاپی کریں", + "verificationCode": "تصدیق کوڈ", + "waiting": "اختیار کی منتظر...", + "cancel": "منسوخ کریں", + "successTitle": "کامیابی کے ساتھ جڑ گیا!", + "successMessage": "آپ کا {providerLabel} اکاؤنٹ {providerName} کے ذریعے جڑ گیا ہے۔", + "done": "ہو گیا", + "errorTitle": "کنکشن ناکام ہوگیا", + "close": "بند کریں" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "اجازت نامہ ناکام ہوا", + "errorPopupBlocked": "پاپ اپ بلاک کر دیا گیا ہے — اس سائٹ کے لیے پاپ اپ کی اجازت دیں، یا نیچے ٹوکن دستی طور پر پیسٹ کریں۔", + "errorPopupClosed": "اجازت نامہ ونڈو مکمل ہونے سے پہلے بند کر دی گئی۔", + "errorAccessTokenRequired": "ایکسس ٹوکن درکار ہے۔", + "errorImportFailed": "درآمد ناکام ہوگیا", + "title": "کنیکٹ ٹری سولو", + "authorizeDescription": "ایک پاپ اپ میں trae.ai کے ذریعے اجازت دیں۔ پاپ اپ خود بخود بند ہو جائے گا جب ٹوکن درآمد ہو جائے گا۔", + "authorizeImportant": "اہم: آپ کو پہلے اس براؤزر میں trae.ai میں لاگ ان ہونا ضروری ہے۔ اجازت دینے والا صفحہ صرف موجودہ سیشن کی تصدیق کرتا ہے — یہ آپ کو لاگ ان نہیں کر سکتا۔ اگر آپ کو \"لاگ ان ناکام\" نظر آتا ہے تو \"solo.trae.ai کھولیں\" پر کلک کریں، لاگ ان کریں، پھر یہاں واپس آئیں۔", + "waitingForAuthorization": "trae.ai کا انتظار کر رہے ہیں…", + "authorizeWithBrowser": "براؤزر کے ساتھ اجازت دیں", + "openSoloTrae": "Open solo.trae.ai", + "orPasteManually": "یا ٹوکن کو دستی طور پر پیسٹ کریں", + "manualInstructions": "solo.trae.ai میں سائن ان کریں، DevTools → Network کھولیں، کوئی بھی چیٹ پیغام بھیجیں، اور Authorization: Cloud-IDE-JWT {tokenPlaceholder} درخواست ہیڈر سے JWT کاپی کریں۔ JWT کی عمر تقریباً 14 دن ہے۔ اختیاری شناختی فیلڈز اسی درخواست کے جسم میں common_params سے آتی ہیں۔", + "accessTokenLabel": "ایکسس ٹوکن (Cloud-IDE-JWT)", + "webId": "ویب آئی ڈی", + "optional": "اختیاری", + "bizUserId": "بزنس صارف ID", + "userUniqueId": "صارف کا منفرد شناختی نمبر", + "scope": "دائرہ", + "tenant": "کرایہ دار", + "region": "علاقہ", + "importing": "درآمد کر رہا ہے…", + "importToken": "ٹوکین درآمد کریں", + "cancel": "کینسل کریں" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "تقسیم کیا جا رہا ہے...", + "complete": "مکمل کریں", + "defaultLabel": "پراکسیز تقسیم کریں" + } + }, + "providerTest": { + "dialogLabel": "ٹیسٹ {provider}", + "deprecated": "مسترد شدہ", + "risk": "خطرہ", + "close": "بند کریں", + "model": "ماڈل", + "key": "کیے", + "defaultKey": "ڈیفالٹ", + "clearConversation": "بات چیت صاف کریں", + "clear": "صاف کریں", + "tabs": { + "test": "ٹیسٹ", + "logs": "لاگز" + }, + "loadingLogs": "لاگ لوڈ ہو رہے ہیں…", + "failedToLoadLogs": "لاگ لوڈ کرنے میں ناکامی", + "noLogsYet": "ابھی تک کوئی لاگ نہیں", + "noLogsDescription": "ٹیسٹ ٹیب سے ایک ٹیسٹ پیغام بھیجیں — اس فراہم کنندہ کے لیے لاگ یہاں ظاہر ہوں گے۔", + "openFullLogs": "مکمل لاگ صفحہ کھولیں", + "live": "براہ راست", + "tailingLast": "آخری {count} کو دیکھنا", + "refreshNow": "اب تازہ کریں", + "refresh": "تازہ کریں", + "unknownRequester": "نامعلوم درخواست گزار", + "fields": { + "timestamp": "ٹائم اسٹیمپ", + "status": "حیثیت", + "duration": "مدت", + "model": "ماڈل", + "requestedModel": "درخواست کردہ ماڈل", + "provider": "فراہم کنندہ", + "requester": "درخواست گزار", + "tokens": "ٹوکنز" + } + }, + "proxyLog": { + "detailAriaLabel": "پراکسی لاگ کی تفصیلات", + "event": "پراکسی ایونٹ", + "close": "پراکسی کی تفصیلات کا موڈل بند کریں", + "time": "وقت", + "latency": "لیٹنسی", + "clientIp": "کلائنٹ آئی پی", + "proxy": "پراکسی", + "direct": "براہ راست", + "type": "ٹائپ", + "level": "سطح", + "provider": "فراہم کنندہ", + "tlsFingerprint": "TLS فنگر پرنٹ", + "directNative": "براہ راست", + "targetUrl": "ٹارگٹ یو آر ایل", + "error": "غلطی", + "configuration": "پراکسی کی تشکیل" + }, + "requestTimeline": { + "title": "درخواست کا وقت بندی", + "modes": { + "follow": "پیروی کریں", + "followDescription": "محور بائیں طرف سکرول ہوتا ہے، اب لائن 75% پر رہتی ہے", + "now": "اب", + "nowDescription": "موجودہ وقت پر جائیں، NOW لائن مرکز پر دوبارہ سیٹ ہوتی ہے", + "pan": "پین", + "panDescription": "کھینچ کر دریافت کریں، پس منظر منجمد ہے" + }, + "reset": "ری سیٹ کریں", + "started": "شروع ہوا", + "ended": "ختم ہوگیا", + "duration": "مدت", + "status": "حیثیت", + "provider": "فراہم کنندہ", + "tokens": "ٹوکنز", + "active": "فعال", + "other": "دیگر", + "tenMinutes": "10منٹ", + "hour": "گھنٹہ", + "day": "دن", + "unknownModel": "نامعلوم", + "pending": "زیر التواء" + }, + "metadata": { + "compressionTitle": "کمپریشن", + "compressionDescription": "سیاق کی کمپریشن کی ترتیبات کو ترتیب دیں تاکہ ٹوکن کے استعمال اور اخراجات کو کم کیا جا سکے۔", + "relayTitle": "OmniRoute — ریلی پروکسیز", + "relayDescription": "آپ کے AI بنیادی ڈھانچے کے لیے سرور لیس ریلی پروکسی اینڈ پوائنٹس", + "trafficInspectorTitle": "ٹریفک انسپکٹر — اومنی روٹ", + "trafficInspectorDescription": "LLM کالز کی نگرانی کریں + کسی بھی ایپلیکیشن کی HTTPS ٹریفک کی خرابی کریں" + }, + "conductor": { + "title": "کنڈکٹر — CLI ایجنٹ بیڑہ", + "subtitle": "OmniConductor ہب: رنرز، ٹاسک کیو اور کونسلز، براہ راست", + "runners": "دوڑنے والے", + "tasks": "کام", + "colName": "نام", + "colClis": "CLIs", + "colStatus": "حیثیت", + "colTask": "کام", + "colMode": "موڈ", + "colRunner": "دوڑنے والا", + "colSummary": "خلاصہ", + "online": "آن لائن", + "offline": "آف لائن", + "draining": "نکاسی", + "hubOffline": "کنڈکٹر حب آف لائن ہے یا ترتیب نہیں دیا گیا (CONDUCTOR_HUB_URL) — پرانی معلومات کے بجائے کچھ نہیں دکھا رہا۔", + "noRunners": "کوئی رنرز رجسٹرڈ نہیں ہیں", + "noTasks": "ابھی تک کوئی کام نہیں", + "detailTitle": "کام کی تفصیل", + "prompt": "پرومپٹ", + "branch": "برانچ", + "fetchHint": "نتیجہ حاصل کریں: git fetch origin {branch}", + "council": "کونسل", + "candidates": "امیدوار", + "cancel": "کام منسوخ کریں", + "cancelConfirmTitle": "کیا آپ اس کام کو منسوخ کرنا چاہتے ہیں؟", + "cancelConfirmMessage": "ہب رنر پر عملدرآمد کو منسوخ کر دے گا۔ یہ عمل واپس نہیں لیا جا سکتا۔", + "cancelFailed": "ہب نے منسوخی کی درخواست مسترد کر دی", + "close": "بند کریں", + "error": "غلطی", + "faroTitle": "فارو — بیڑے کا ترجمان", + "faroSubtitle": "چیٹ اور آواز، حقیقی بیڑے کے واقعات میں جڑے ہوئے۔ تباہ کن کمانڈز ہمیشہ تصدیق کے لیے پوچھتے ہیں۔", + "faroEmpty": "بیڑے کے بارے میں پوچھیں — مثلاً \"بیڑا کیسا ہے؟\"", + "faroPending": "Faro تصدیق مانگ رہا ہے", + "faroPlaceholder": "Faro سے بات کریں…", + "faroSend": "بھیجیں", + "faroOffline": "Faro (spokesperson) آف لائن ہے", + "yes": "جی ہاں", + "no": "نہیں", + "pushToTalk": "بات کرنے کے لیے دبائے رکھیں", + "speakAnswers": "جواب بولیں", + "voiceModels": "وائس ماڈلز (اس OmniRoute کا فراہم کنندہ/ماڈل)", + "voiceIdle": "بات کریں", + "voiceListening": "سن رہے ہیں…", + "voiceThinking": "سوچ رہے ہیں…", + "voiceSpeaking": "بولتے ہوئے…", + "sttFailed": "ٹرانسکرپشن ناکام ہوگئی (STT ماڈل/فراہم کنندہ چیک کریں)", + "ttsFailed": "تقریر کی ترکیب ناکام ہوگئی (TTS ماڈل/فراہم کنندہ چیک کریں)", + "micDenied": "مائیکروفون دستیاب نہیں ہے یا اجازت مسترد کر دی گئی ہے" + }, + "cliproxyProviderExposure": { + "title": "پرووائیڈر ایکسپوژر", + "description": "CLIProxyAPI ماڈلز کو cliproxyapi/ پیشوند کے تحت ایک روٹنگ ہدف کے طور پر ظاہر کریں۔", + "label": "cliproxyapi/... کے طور پر ظاہر کریں", + "hint": "جب فعال ہو تو، دریافت کردہ ماڈل OmniRoute میں فراہم کنندہ کے انتخاب میں ظاہر ہوتے ہیں۔", + "updateFailed": "اپ ڈیٹ کرنے میں ناکامی (HTTP {status})", + "networkError": "نیٹ ورک کی خرابی — فراہم کنندہ کی نمائش کی ترتیب کو اپ ڈیٹ نہیں کر سکا" + } } - diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index f20be6be4d..6a2fc77fa0 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -172,6 +172,18 @@ "unselectAll": "Bỏ chọn tất cả", "visibleModels": "hiển thị", "selectAllConfirm": "Thêm {count} mô hình vào tổ hợp này?", + "testSelectedProviders": "Nhà cung cấp kiểm tra", + "testingSelectedProviders": "Đang kiểm tra {done}/{total}...", + "noProvidersSelectedToTest": "Vui lòng chọn ít nhất một nhà cung cấp bên dưới trước.", + "noModelsToTestForProviders": "Không có mô hình nào để kiểm tra cho các nhà cung cấp đã chọn", + "testSelectedProvidersResults": "{ok} của {total} mô hình đang hoạt động", + "selectWorkingModels": "Thêm hoạt động", + "unselectWorkingModels": "Bỏ chọn đang hoạt động", + "noWorkingModelsToSelect": "Không còn mô hình hoạt động nào để thêm nữa", + "providerTestHint": "Mẹo: kiểm tra nhà cung cấp → Kiểm tra → Thêm hoạt động. Nhấp lại để bỏ chọn.", + "selectAllProviders": "Kiểm tra tất cả các nhà cung cấp", + "clearProviderSelection": "Bỏ chọn nhà cung cấp", + "providersSelectedCount": "Đã kiểm tra {count} nhà cung cấp", "errorOccurred": "Đã xảy ra lỗi", "comboDeleted": "Đã xóa combo", "hide": "Ẩn", @@ -770,7 +782,7 @@ "batchFileDetailLoadError": "Lỗi khi tải nội dung tập tin", "batchFilesListSearchPlaceholder": "Tìm kiếm theo ID hoặc tên tập tin…", "batchFilesListFilesTable": "Tập tin", - "batchFilesCount": "{count} tập tin", + "batchFilesCount": "{count, plural, one {# file} other {# files}}", "batchFilesAllPurposes": "Tất cả mục đích", "batchFilesFilename": "Tên tập tin", "batchFilesPurpose": "Mục đích", @@ -830,7 +842,7 @@ "wizardValidating": "Đang kiểm tra…", "wizardValidationParseFailed": "Kiểm tra thất bại — không thể phân tích nội dung.", "wizardValidationSummary": "{lines} dòng · {ids} custom_id duy nhất", - "wizardValidationErrorCount": "Phát hiện {count} lỗi", + "wizardValidationErrorCount": "{count, plural, one {# error} other {# errors}} found", "wizardValidationDuplicateIds": "Phát hiện custom_id trùng lặp:", "wizardValidationFirstErrors": "Các lỗi (hiển thị {count} lỗi đầu):", "wizardValidationLine": "Dòng {line}", @@ -1263,11 +1275,13 @@ "groupSeparatorLabel": "Dấu phân cách", "discovery": "Khám phá", "discoverySubtitle": "Quét các nhà cung cấp để tìm quyền truy cập miễn phí", -"resilienceConnections": "Khả Năng Phục Hồi Kết Nối", -"resilienceConnectionsSubtitle": "Cooldown, cầu dao, trạng thái khóa", -"settingsModalityBridge": "Cầu Kết Nối Modality", -"settingsModalityBridgeSubtitle": "Chuyển đổi hình ảnh/âm thanh → văn bản cho các mô hình chỉ văn bản", -"commandPalette": { + "conductor": "Người dẫn dắt", + "conductorSubtitle": "Đội tàu CLI-agent", + "resilienceConnections": "Khả Năng Phục Hồi Kết Nối", + "resilienceConnectionsSubtitle": "Cooldown, cầu dao, trạng thái khóa", + "settingsModalityBridge": "Cầu Kết Nối Modality", + "settingsModalityBridgeSubtitle": "Chuyển đổi hình ảnh/âm thanh → văn bản cho các mô hình chỉ văn bản", + "commandPalette": { "title": "Bảng lệnh", "searchPlaceholder": "Tìm kiếm trang, cài đặt, công cụ...", "clearSearch": "Xóa tìm kiếm", @@ -1275,7 +1289,8 @@ "navigate": "điều hướng", "open": "mở", "close": "đóng" - } + }, + "noResults": "Không có kết quả" }, "webhooks": { "title": "Webhook", @@ -2173,7 +2188,8 @@ "searchAnalyticsEmptyDescription": "Dùng POST /v1/search để bắt đầu định tuyến các tìm kiếm trên Web.", "searchAnalyticsFreeTier": "Có gói miễn phí: Serper (2,500/tháng), Brave (2,000/tháng), Exa (1,000/tháng), Tavily (1,000/tháng) — tổng cộng hơn 6,500 lượt tìm kiếm miễn phí mỗi tháng với cơ chế chuyển đổi dự phòng tự động.", "autoRoutingNoDataAvailable": "Không có dữ liệu phân tích định tuyến tự động. Gửi yêu cầu với tiền tố auto/ để xem số liệu.", - "defaultVariantLabel": "Mặc định" + "defaultVariantLabel": "Mặc định", + "freeTierAvailable": "Có gói miễn phí sẵn có" }, "apiManager": { "title": "Khóa API", @@ -2316,7 +2332,7 @@ "removeClaudeCodeDefault": "Xóa mặc định Claude Code", "allowedCombos": "Combo được phép", "allCombosAllowed": "Khóa này có thể sử dụng mọi combo.", - "restrictedComboCount": "Được giới hạn ở {count} combo.", + "restrictedComboCount": "Restricted to {count, plural, one {# combo} other {# combos}}.", "apiManagerCustomRateLimits": "Giới hạn tốc độ tùy chỉnh", "apiManagerCustomRateLimitsDesc": "Ghi đè giới hạn mặc định toàn cục. Để trống để sử dụng mặc định.", "apiManagerRateLimitRequestsPlaceholder": "Yêu cầu", @@ -2462,7 +2478,9 @@ "providerCount": "{count} nhà cung cấp", "imageToTextBridgeAvailable": "Cầu nối phương thức hiện có thể mô tả hình ảnh cho các mô hình chỉ hỗ trợ văn bản. Playground nội tuyến sẽ khả dụng khi /api/v1/images/understanding được triển khai.", "imageToTextBridgeCta": "Cấu hình cầu Hình Ảnh→Văn Bản trong cài đặt Cầu Modality", - "sttBridgeCta": "Cấu hình cầu Nói→Văn bản trong cài đặt Cầu Modality" + "sttBridgeCta": "Cấu hình cầu Nói→Văn bản trong cài đặt Cầu Modality", + "existingConnection": "Kết nối hiện có", + "openrouterSttDescription": "Mô hình chuyển đổi giọng nói thành văn bản của OpenRouter sử dụng kết nối OpenRouter đã được cấu hình của bạn. Không cần thông tin xác thực riêng biệt." }, "search": { "searchQuery": "Truy vấn tìm kiếm", @@ -2635,7 +2653,7 @@ "always": "Luôn bật" }, "ccDiscoveryInfoButton": "Cách bật khám phá mô hình trong Claude Code", - "ccDiscoveryInfoTooltip": "Quảng bá các mô hình không phải Claude dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.", + "ccDiscoveryInfoTooltip": "Công bố các mô hình không phải Claude dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.", "ccDiscoveryInfoLink": "Mở Feature Flags", "ccOnboardingTitle": "settings.json cho việc khám phá mô hình qua gateway", "ccOnboardingCopy": "Sao chép", @@ -3077,7 +3095,7 @@ "hermesNotOmniRoute": "{provider} (không qua OmniRoute)", "hermesRemovePendingRole": "Bỏ vai trò này khỏi các thay đổi đang chờ", "hermesApply": "Áp dụng cho Hermes Agent", - "hermesRolesWillUpdate": "{count} vai trò sẽ được cập nhật", + "hermesRolesWillUpdate": "{count, plural, one {# role will be updated} other {# roles will be updated}}", "hermesPreviewPath": "Xem trước — sẽ ghi vào ~/.hermes/config.yaml", "hermesSaveDescription": "Lưu mô hình đã chọn cho từng vai trò vào", "copilotConfigGenerator": "Trình tạo cấu hình GitHub Copilot", @@ -3090,7 +3108,7 @@ "loadingModels": "Đang tải mô hình...", "advancedOptions": "Tùy chọn nâng cao", "vision": "Thị giác", - "copilotCopyConfigForModels": "Sao chép cấu hình ({count} mô hình)", + "copilotCopyConfigForModels": "Copy config ({count, plural, one {# model} other {# models}})", "copilotFilterModelsPlaceholder": "Lọc mô hình...", "copilotMaxInputTokens": "Token đầu vào tối đa", "copilotMaxOutputTokens": "Token đầu ra tối đa", @@ -3098,38 +3116,30 @@ "copilotPasteInto": "Dán vào:", "copilotReloadInstruction": "Sau đó tải lại VS Code và nhập khóa API khi được yêu cầu.", "wireApiChatCompletions": "Chat Completions (/chat/completions)", -"wireApiResponses": "Responses API (/responses)", -"ccDiscoveryInfoButton": "Cách bật khám phá mô hình trong Claude Code", -"ccDiscoveryInfoTooltip": "Công bố các mô hình không phải Claude dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.", -"ccDiscoveryInfoLink": "Mở Feature Flags", -"ccOnboardingTitle": "settings.json cho việc khám phá mô hình qua gateway", -"ccOnboardingCopy": "Sao chép", -"ccOnboardingCopied": "Đã sao chép", -"ccOnboardingKeyPlaceholder": "", -"ccOnboardingWindowNote": "Claude Code mặc định coi mọi id mô hình mà nó không nhận ra là có cửa sổ ngữ cảnh 200K. Với mô hình có cửa sổ thực tế khác, hãy thêm CLAUDE_CODE_AUTO_COMPACT_WINDOW ngay bên dưới để việc nén ngữ cảnh tự động không kích hoạt quá sớm.", -"cliproxyapiActionFailed": "Thao tác thất bại", -"cliproxyapiActionSucceeded": "Thao tác thành công", -"cliproxyapiCheckUpdates": "Kiểm tra bản cập nhật", -"cliproxyapiDescription": "Dự phòng proxy upstream (OAuth dựa trên Go)", -"cliproxyapiHealth": "Tình trạng", -"cliproxyapiHealthy": "Hoạt động tốt", -"cliproxyapiInstall": "Cài đặt", -"cliproxyapiNotInstalledValue": "Chưa cài đặt", -"cliproxyapiPort": "Cổng", -"cliproxyapiRequestFailed": "Yêu cầu thất bại", -"cliproxyapiRestart": "Khởi động lại", -"cliproxyapiStart": "Bắt đầu", -"cliproxyapiStatusError": "Lỗi", -"cliproxyapiStatusInstalled": "Đã cài đặt", -"cliproxyapiStatusNotInstalled": "Chưa cài đặt", -"cliproxyapiStatusRunning": "Đang chạy", -"cliproxyapiStatusStopped": "Đã dừng", -"cliproxyapiStop": "Dừng", -"cliproxyapiUnhealthy": "Không ổn định", -"cliproxyapiUnknown": "Không rõ", -"cliproxyapiUpdate": "Cập nhật", -"cliproxyapiUpdateAvailable": "Có bản cập nhật: v{current} → v{latest}", -"cliproxyapiVersion": "Phiên bản" + "wireApiResponses": "Responses API (/responses)", + "cliproxyapiActionFailed": "Thao tác thất bại", + "cliproxyapiActionSucceeded": "Thao tác thành công", + "cliproxyapiCheckUpdates": "Kiểm tra bản cập nhật", + "cliproxyapiDescription": "Dự phòng proxy upstream (OAuth dựa trên Go)", + "cliproxyapiHealth": "Tình trạng", + "cliproxyapiHealthy": "Hoạt động tốt", + "cliproxyapiInstall": "Cài đặt", + "cliproxyapiNotInstalledValue": "Chưa cài đặt", + "cliproxyapiPort": "Cổng", + "cliproxyapiRequestFailed": "Yêu cầu thất bại", + "cliproxyapiRestart": "Khởi động lại", + "cliproxyapiStart": "Bắt đầu", + "cliproxyapiStatusError": "Lỗi", + "cliproxyapiStatusInstalled": "Đã cài đặt", + "cliproxyapiStatusNotInstalled": "Chưa cài đặt", + "cliproxyapiStatusRunning": "Đang chạy", + "cliproxyapiStatusStopped": "Đã dừng", + "cliproxyapiStop": "Dừng", + "cliproxyapiUnhealthy": "Không ổn định", + "cliproxyapiUnknown": "Không rõ", + "cliproxyapiUpdate": "Cập nhật", + "cliproxyapiUpdateAvailable": "Có bản cập nhật: v{current} → v{latest}", + "cliproxyapiVersion": "Phiên bản" }, "combos": { "title": "Combo", @@ -3240,7 +3250,7 @@ "liveDisconnected": "Đã tắt chế độ trực tiếp — WebSocket đã ngắt kết nối. Đang hiển thị trạng thái gần nhất.", "liveSelectCombo": "Chọn combo", "liveSelectComboPlaceholder": "— chọn combo —", - "liveTargetCount": "{count} mục tiêu", + "liveTargetCount": "{count, plural, one {# target} other {# targets}}", "liveSingle": "Đơn lẻ", "liveFleet": "Toàn cụm", "playgroundStatusAvailable": "Khả dụng", @@ -3381,6 +3391,8 @@ "pricingMissing": "Chưa có thông tin giá", "pricingAvailableShort": "đã định giá", "pricingMissingShort": "chưa định giá", + "fallbackOnlyOnQuotaExhaustion": "Chỉ tiến hành khi hết hạn ngạch", + "fallbackOnlyOnQuotaExhaustionShort": "chỉ dự phòng theo hạn ngạch", "warningRoundRobinSingleModel": "Định tuyến luân phiên hữu ích nhất khi có ít nhất 2 mô hình.", "warningCostOptimizedPartialPricing": "Chỉ có {priced} trên {total} mô hình có thông tin giá. Việc định tuyến có thể chỉ tính đến chi phí một phần.", "warningCostOptimizedNoPricing": "Không tìm thấy dữ liệu giá cho combo này. Định tuyến tối ưu hóa chi phí có thể không như mong đợi.", @@ -3415,16 +3427,16 @@ "routingInputsHint": "Gói chế độ và trọng số được hiển thị ở đây; trạng thái thời gian chạy của bộ ngắt mạch nằm trên trang Tình trạng.", "emailVisibilityHint": "Các email tài khoản ở đây tuân theo tùy chọn bật/tắt quyền riêng tư toàn cục.", "emailVisibilityTooltip": "Sử dụng biểu tượng con mắt để hiển thị hoặc ẩn email tài khoản trên toàn bộ màn hình combo, nhà cung cấp và hạn mức.", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "Từng bước (Nhà cung cấp → Mô hình)", + "builderModeGlobal": "Tìm kiếm mô hình toàn cầu (Tùy chỉnh kết hợp)", + "builderGlobalSearchPlaceholder": "Tìm kiếm mô hình trên tất cả các nhà cung cấp (ví dụ: opus, sonnet, deepseek, kimi, qwen)...", + "builderGlobalAddAll": "Thêm tất cả", + "builderGlobalShortcuts": "Phím tắt:", + "builderGlobalNoResults": "Không tìm thấy mô hình cho \"{query}\".", + "builderGlobalProviderLabel": "Nhà cung cấp:", + "builderGlobalAccountCount": "{count, plural, one {# tài khoản} other {# tài khoản}}", + "builderGlobalAdded": "Đã thêm", + "builderGlobalAdd": "Thêm", "manualModel": "Mô hình thủ công", "manualModelInvalid": "Nhập mô hình theo dạng nhà cung cấp/mô hình.", "manualModelUnknownProvider": "Tiền tố nhà cung cấp không xác định.", @@ -3469,6 +3481,7 @@ "weightStability": "Độ ổn định", "weightTierPriority": "Phân hạng", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "Tình Trạng Phiên", "reviewIntelligentTitle": "Cấu hình định tuyến thông minh", "strategyRecommendations": { "priority": { @@ -3699,7 +3712,8 @@ "errorTitle": "Không thể tải các combo", "errorDescription": "Hiện không thể tải dữ liệu combo. Hãy kiểm tra kết nối rồi thử lại.", "errorId": "ID lỗi: {id}", - "errorRetry": "Thử lại" + "errorRetry": "Thử lại", + "comboLabel": "Combo" }, "costs": { "title": "Chi phí", @@ -4317,6 +4331,12 @@ "providerModelLabel": "Nhà cung cấp / Mô hình", "noRemoteProviders": "Không có nhà cung cấp nào đã cấu hình khóa API", "selectProviderModel": "Chọn một mô hình", + "customBaseUrlLabel": "URL cơ sở tùy chỉnh (tùy chọn)", + "customModelIdLabel": "ID mô hình tùy chỉnh (tùy chọn)", + "customEndpointHelp": "Sử dụng điểm cuối /embeddings tương thích với OpenAI. Các điểm cuối cục bộ được phép; các mục tiêu siêu dữ liệu đám mây bị chặn.", + "customEndpointSave": "Áp dụng điểm cuối tùy chỉnh", + "customEndpointInvalid": "Nhập cả URL cơ sở HTTP(S) hợp lệ và ID mô hình, hoặc để cả hai trường trống.", + "customEndpointSaveFailed": "Không thể lưu điểm cuối nhúng tùy chỉnh.", "staticEnabledLabel": "Kích hoạt Static Potion", "staticEnabledDesc": "Tải xuống và sử dụng mô hình potion-base-8M cục bộ", "transformersEnabledLabel": "Kích hoạt Transformers.js", @@ -4423,7 +4443,9 @@ "cleaning": "Đang dọn dẹp...", "cleanNow": "Dọn dẹp ngay", "cleanupSuccess": "Đã xóa {count} điểm", - "cleanupFailed": "Dọn dẹp thất bại" + "cleanupFailed": "Dọn dẹp thất bại", + "hostLabel": "Máy chủ", + "collectionLabel": "Bộ Sưu Tập" }, "rerank": { "enableLabel": "Bật xếp hạng lại", @@ -4630,7 +4652,7 @@ "repairBackupCreated": "Đã tạo bản sao lưu trước khi sửa dữ liệu.", "sessionActivity": "Hoạt động phiên", "activeCount": "{count} đang hoạt động", - "requestCount": "{count} yêu cầu", + "requestCount": "{count, plural, one {# request} other {# requests}}", "idleSeconds": "nhàn rỗi {count} giây", "ageSeconds": "đã tồn tại {count} giây", "quotaMonitors": "Trình giám sát hạn ngạch", @@ -4845,7 +4867,7 @@ "disableAutoScroll": "Tắt tự động cuộn", "enableAutoScroll": "Bật tự động cuộn", "autoScroll": "Tự động cuộn", - "entryCount": "{count} mục", + "entryCount": "{count, plural, one {# entry} other {# entries}}", "lastHour": "1 giờ gần đây", "updatedAt": "Cập nhật lúc {time}", "fileLoggingRequired": "Hãy đảm bảo ứng dụng đang ghi nhật ký vào tập tin (APP_LOG_TO_FILE=true)", @@ -4921,22 +4943,22 @@ "tierFlowDiagramAlt": "Sơ đồ dự phòng 3 cấp của OmniRoute", "apiKeyMgmt": "Quản lý khóa API", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "Thiết lập nhà cung cấp miễn phí", + "description": "Tùy chọn kích hoạt các nhà cung cấp không cần đăng ký đã chọn. Xem xét thông báo và trang web của từng nhà cung cấp trước khi tiếp tục; tính khả dụng và giới hạn tỷ lệ được kiểm soát bởi bên thứ ba.", + "loading": "Đang tải các nhà cung cấp miễn phí...", + "loadFailed": "Không thể tải các nhà cung cấp miễn phí.", + "alreadyConfigured": "Tất cả các nhà cung cấp miễn phí đủ điều kiện đã được cấu hình.", + "reviewProviderSite": "Xem xét trang nhà cung cấp và điều khoản", + "confirmation": "Tôi đã xem xét các nhà cung cấp bên thứ ba này và muốn OmniRoute tạo các kết nối đã chọn.", + "setupSelected": "Cài đặt các nhà cung cấp đã chọn", + "settingUp": "Đang thiết lập...", + "setupFailed": "Không thể thiết lập các nhà cung cấp đã chọn. Không có gì hiện có bị thay đổi.", + "retryFailed": "Thử lại các nhà cung cấp thất bại", + "orUseApiKey": "hoặc kết nối bằng khóa API", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "đã tạo", + "skipped": "đã được cấu hình", + "failed": "thất bại" } } }, @@ -5142,6 +5164,7 @@ "baseUrlHint": "Bắt buộc. URL cơ sở API của nhà cung cấp.", "iconUrlLabel": "URL biểu tượng", "iconUrlHint": "Tùy chọn. URL hình ảnh được hiển thị làm biểu tượng của nhà cung cấp này.", + "iconUrlInvalid": "URL biểu tượng không hợp lệ. Sử dụng http(s):// hoặc data:image/*;base64 URL.", "anthropicPrefixPlaceholder": "ac-prod", "openaiPrefixPlaceholder": "oc-prod", "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1", @@ -5405,7 +5428,7 @@ "interceptionLoadError": "Không thể tải cài đặt chặn: {error}", "interceptionSaveError": "Không thể lưu cài đặt chặn: {error}", "ccAliasSectionTitle": "Hiển thị trong Claude Code (claude/…)", - "ccAliasSectionHint": "Quảng bá các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.", + "ccAliasSectionHint": "Công bố các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.", "ccAliasProviderLevelLabel": "Mặc định của nhà cung cấp", "ccAliasModelOverridesLabel": "Ghi đè theo từng mô hình", "ccAliasModelOverrideAriaLabel": "Ghi đè cho {modelId}", @@ -6043,7 +6066,6 @@ "friendliai": "Gói miễn phí cho suy luận serverless — không cần thẻ tín dụng", "gemini": "Miễn phí vĩnh viễn: 1.500 yêu cầu/ngày cho Gemini 2.5 Flash — không cần thẻ tín dụng, lấy khóa tại aistudio.google.com", "gigachat": "Kết nối GigaChat (Sber) bằng khóa API.", - "github-models": "Tạo GitHub PAT với phạm vi 'models: read' tại github.com/settings/tokens", "gitlab": "Personal access token GitLab cho API Code Suggestions công khai. Cấu hình URL cơ sở tự lưu trữ khi không dùng gitlab.com.", "gitlawb-gmi": "Lấy khóa API của bạn từ Gitlawb Opengateway dashboard.", "gitlawb": "Lấy khóa API của bạn từ Gitlawb Opengateway dashboard.", @@ -6182,7 +6204,8 @@ "kimi-coding": "Kết nối Kimi Coding bằng luồng OAuth hiện có.", "kiro": "Gói miễn phí: 50 tín dụng/tháng (khoảng 25–100 nghìn token). ⚠️ Điều khoản Kiro cấm sử dụng proxy/harness của bên thứ ba.", "codex": "Kết nối OpenAI Codex bằng luồng OAuth hiện có.", - "qwen": "Kết nối Qwen Code bằng luồng OAuth hiện có." + "qwen": "Kết nối Qwen Code bằng luồng OAuth hiện có.", + "github-models": "Tạo GitHub PAT với phạm vi 'models: read' tại github.com/settings/tokens" }, "passthroughModelsDescription": "{provider} chấp nhận ID mô hình gốc của nhà cung cấp. Nhập từ /models hoặc thêm ID tùy chỉnh để định tuyến.", "bedrockModelsDescription": "Các mô hình Amazon Bedrock được giới hạn theo vùng AWS. Nhập từ /models hoặc thêm ID mô hình Bedrock được bật trong vùng đã chọn.", @@ -6237,93 +6260,82 @@ "cheaperInferenceSupporterBadge": "Người bạn mã nguồn mở", "cheaperInferenceSupporterTooltip": "Cheaper Inference hỗ trợ OmniRoute với tư cách là người bạn mã nguồn mở", "kimiPartnerLinkNote": "Partner link — supports OmniRoute at no extra cost to you", -"anonymousFallbackTitle": "Dự phòng ẩn danh", -"anonymousFallbackDesc": "Khi tất cả kết nối đã cấu hình đều cạn kiệt (hạn ngạch, tín dụng hoặc hết hạn), hãy tạm thời sử dụng tầng không cần khóa của nhà cung cấp này. Tắt tùy chọn này để bỏ qua nhà cung cấp thay vì gửi yêu cầu ẩn danh — khuyến nghị khi tầng không cần khóa từ chối các yêu cầu đó (401).", -"anonymousFallbackEnabled": "Đã bật dự phòng ẩn danh cho {provider}", -"anonymousFallbackDisabled": "Đã tắt dự phòng ẩn danh cho {provider} — các kết nối đã cạn kiệt sẽ bỏ qua nhà cung cấp này", -"anonymousFallbackUpdateFailed": "Không thể cập nhật cài đặt dự phòng ẩn danh", -"ccAliasSectionTitle": "Hiển thị trong Claude Code (claude/…)", -"ccAliasSectionHint": "Công bố các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.", -"ccAliasProviderLevelLabel": "Mặc định của nhà cung cấp", -"ccAliasModelOverridesLabel": "Ghi đè theo từng mô hình", -"ccAliasModelOverrideAriaLabel": "Ghi đè cho {modelId}", -"ccAliasStateInherit": "Kế thừa", -"ccAliasStateOn": "Bật", -"ccAliasStateOff": "Tắt", -"ccAliasAddModelPlaceholder": "Id mô hình (ví dụ: gpt-4o)", -"ccAliasAddModelButton": "Thêm ghi đè", -"ccAliasLoadError": "Không tải được cài đặt bí danh khám phá: {error}", -"ccAliasSaveError": "Không lưu được cài đặt bí danh khám phá: {error}", -"batchDeleteFailed": "Xóa hàng loạt thất bại", -"batchDeleteNetworkError": "Lỗi mạng khi xóa hàng loạt", -"batchUpdateFailed": "Cập nhật hàng loạt thất bại", -"batchUpdateNetworkError": "Lỗi mạng khi cập nhật hàng loạt", -"categoryAudio": "Âm thanh", -"categoryCloudAgent": "Tác nhân đám mây", -"categoryIde": "IDE", -"categoryLocal": "Cục bộ", -"categorySearch": "Tìm kiếm", -"categoryWebCookie": "Cookie web", -"claudeExtraUsageBlockingDisabled": "Đã tắt chặn mức sử dụng bổ sung của Claude (cho phép sử dụng bổ sung)", -"claudeExtraUsageBlockingEnabled": "Đã bật chặn mức sử dụng bổ sung của Claude (sử dụng bổ sung sẽ bị chặn)", -"claudeRoutingPreferenceDisabled": "Các mô hình Claude không có tiền tố giờ không còn ưu tiên Claude Code", -"claudeRoutingPreferenceEnabled": "Các mô hình Claude không có tiền tố giờ ưu tiên Claude Code", -"clearMediaFilter": "Xóa", -"cliproxyRoutingDisabled": "Các yêu cầu hiện sử dụng OmniRoute gốc (trực tiếp)", -"cliproxyRoutingEnabled": "Các yêu cầu hiện được định tuyến qua CLIProxyAPI (mô phỏng sâu hơn)", -"codexLimitPolicyUpdated": "Đã cập nhật chính sách giới hạn Codex", -"codexServiceModeUpdated": "Đã cập nhật chế độ dịch vụ Codex", -"codexServiceTierActive": "Cấp dịch vụ Codex {tier} đang hoạt động", -"codexTierFastLabel": "Nhanh", -"codexTierFlexLabel": "Flex", -"commandCodeApplyFailed": "Không thể áp dụng xác thực Command Code", -"commandCodeApplyingApproval": "Trình duyệt đã phê duyệt, đang áp dụng…", -"commandCodeApplyingKey": "Đang áp dụng khóa được trình duyệt phê duyệt…", -"commandCodeApprovalInstructions": "Mở URL xác thực, phê duyệt quyền truy cập, sau đó dán key/JSON/URL được trả về vào bên dưới…", -"commandCodeAuthExpired": "Xác thực Command Code đã hết hạn", -"commandCodeConnected": "Đã kết nối Command Code", -"commandCodeConnectionAdded": "Đã thêm kết nối Command Code", -"commandCodeLinkExpired": "Liên kết Command Code đã hết hạn", -"commandCodeOpeningStudio": "Đang mở Command Code Studio…", -"commandCodePopupBlocked": "Cửa sổ bật lên đã bị chặn. Hãy cho phép cửa sổ bật lên rồi thử lại Command Code Connect.", -"commandCodeStartFailed": "Không thể bắt đầu xác thực Command Code", -"connectionDeleted": "Đã xóa kết nối", -"connectionFallback": "kết nối", -"coolingConnectionsDescription": "Các kết nối này trả về 429 (giới hạn tốc độ) trong yêu cầu gần nhất. OmniRoute sẽ bỏ qua chúng cho đến khi bộ hẹn giờ hết hạn — không cần tắt thủ công.", -"coolingConnectionsTitle": "Các kết nối đang tạm làm mát ({count})", -"failedDeleteAlias": "Không thể xóa alias", -"failedDeleteConnection": "Không thể xóa kết nối", -"failedDistributeProxies": "Không thể phân phối proxy.", -"failedSaveModelEndpointSettings": "Không thể lưu cài đặt endpoint mô hình", -"failedUpdateClaudeExtraUsagePolicy": "Không thể cập nhật chính sách sử dụng bổ sung của Claude", -"failedUpdateClaudeRoutingPreference": "Không thể cập nhật tùy chọn định tuyến Claude Code", -"failedUpdateCliproxyRouting": "Không thể cập nhật định tuyến CLIProxyAPI", -"failedUpdateCodexLimitPolicy": "Không thể cập nhật chính sách giới hạn Codex", -"failedUpdateCodexServiceMode": "Không thể cập nhật chế độ dịch vụ Codex", -"filterByMedia": "Phương tiện", -"freeBadge": "Miễn phí", -"kimiCodeApiKeyLabel": "Khóa API Kimi Code", -"modelTestFailed": "Kiểm thử mô hình thất bại", -"modelTestNetworkError": "Lỗi mạng khi kiểm thử mô hình", -"networkError": "Lỗi mạng", -"networkErrorDeletingAlias": "Lỗi mạng khi xóa alias", -"networkErrorSettingAlias": "Lỗi mạng khi đặt alias", -"noProvidersMatch": "Không có provider nào khớp với tìm kiếm của bạn.", -"noSavedProxies": "Không tìm thấy proxy đã lưu. Trước tiên hãy thêm proxy trong Cài đặt → Proxy.", -"pageLoadErrorDescription": "Hiện không thể tải dữ liệu provider. Hãy kiểm tra kết nối rồi thử lại.", -"pageLoadErrorId": "ID lỗi: {id}", -"pageLoadErrorRetry": "Thử lại", -"pageLoadErrorTitle": "Không thể tải provider", -"playgroundTitle": "Khu vực thử nghiệm", -"providerDetailConnectionFlexActive": "Cấp dịch vụ flex của Codex đang hoạt động cho kết nối này", -"providerDetailConnectionPriorityActive": "Cấp dịch vụ priority của Codex đang hoạt động cho kết nối này", -"providerDetailGlobalFlexActive": "Cấp dịch vụ flex toàn cục của Codex đang hoạt động", -"providerDetailGlobalPriorityActive": "Cấp dịch vụ priority toàn cục của Codex đang hoạt động", -"proxiesDistributed": "Đã phân phối {assigned} proxy tới {tagLabel}{total} kết nối.", -"rerankEndpoint": "Rerank", -"savedModelEndpointSettings": "Đã lưu cài đặt endpoint mô hình", -"searchByModelAria": "Tìm kiếm theo mô hình", -"selectSupportedEndpoint": "Chọn ít nhất một endpoint được hỗ trợ" + "anonymousFallbackTitle": "Dự phòng ẩn danh", + "anonymousFallbackDesc": "Khi tất cả kết nối đã cấu hình đều cạn kiệt (hạn ngạch, tín dụng hoặc hết hạn), hãy tạm thời sử dụng tầng không cần khóa của nhà cung cấp này. Tắt tùy chọn này để bỏ qua nhà cung cấp thay vì gửi yêu cầu ẩn danh — khuyến nghị khi tầng không cần khóa từ chối các yêu cầu đó (401).", + "anonymousFallbackEnabled": "Đã bật dự phòng ẩn danh cho {provider}", + "anonymousFallbackDisabled": "Đã tắt dự phòng ẩn danh cho {provider} — các kết nối đã cạn kiệt sẽ bỏ qua nhà cung cấp này", + "anonymousFallbackUpdateFailed": "Không thể cập nhật cài đặt dự phòng ẩn danh", + "batchDeleteFailed": "Xóa hàng loạt thất bại", + "batchDeleteNetworkError": "Lỗi mạng khi xóa hàng loạt", + "batchUpdateFailed": "Cập nhật hàng loạt thất bại", + "batchUpdateNetworkError": "Lỗi mạng khi cập nhật hàng loạt", + "categoryAudio": "Âm thanh", + "categoryCloudAgent": "Tác nhân đám mây", + "categoryIde": "IDE", + "categoryLocal": "Cục bộ", + "categorySearch": "Tìm kiếm", + "categoryWebCookie": "Cookie web", + "claudeExtraUsageBlockingDisabled": "Đã tắt chặn mức sử dụng bổ sung của Claude (cho phép sử dụng bổ sung)", + "claudeExtraUsageBlockingEnabled": "Đã bật chặn mức sử dụng bổ sung của Claude (sử dụng bổ sung sẽ bị chặn)", + "claudeRoutingPreferenceDisabled": "Các mô hình Claude không có tiền tố giờ không còn ưu tiên Claude Code", + "claudeRoutingPreferenceEnabled": "Các mô hình Claude không có tiền tố giờ ưu tiên Claude Code", + "clearMediaFilter": "Xóa", + "cliproxyRoutingDisabled": "Các yêu cầu hiện sử dụng OmniRoute gốc (trực tiếp)", + "cliproxyRoutingEnabled": "Các yêu cầu hiện được định tuyến qua CLIProxyAPI (mô phỏng sâu hơn)", + "codexLimitPolicyUpdated": "Đã cập nhật chính sách giới hạn Codex", + "codexServiceModeUpdated": "Đã cập nhật chế độ dịch vụ Codex", + "codexServiceTierActive": "Cấp dịch vụ Codex {tier} đang hoạt động", + "codexTierFastLabel": "Nhanh", + "codexTierFlexLabel": "Flex", + "commandCodeApplyFailed": "Không thể áp dụng xác thực Command Code", + "commandCodeApplyingApproval": "Trình duyệt đã phê duyệt, đang áp dụng…", + "commandCodeApplyingKey": "Đang áp dụng khóa được trình duyệt phê duyệt…", + "commandCodeApprovalInstructions": "Mở URL xác thực, phê duyệt quyền truy cập, sau đó dán key/JSON/URL được trả về vào bên dưới…", + "commandCodeAuthExpired": "Xác thực Command Code đã hết hạn", + "commandCodeConnected": "Đã kết nối Command Code", + "commandCodeConnectionAdded": "Đã thêm kết nối Command Code", + "commandCodeLinkExpired": "Liên kết Command Code đã hết hạn", + "commandCodeOpeningStudio": "Đang mở Command Code Studio…", + "commandCodePopupBlocked": "Cửa sổ bật lên đã bị chặn. Hãy cho phép cửa sổ bật lên rồi thử lại Command Code Connect.", + "commandCodeStartFailed": "Không thể bắt đầu xác thực Command Code", + "connectionDeleted": "Đã xóa kết nối", + "connectionFallback": "kết nối", + "coolingConnectionsDescription": "Các kết nối này trả về 429 (giới hạn tốc độ) trong yêu cầu gần nhất. OmniRoute sẽ bỏ qua chúng cho đến khi bộ hẹn giờ hết hạn — không cần tắt thủ công.", + "coolingConnectionsTitle": "Các kết nối đang tạm làm mát ({count})", + "failedDeleteAlias": "Không thể xóa alias", + "failedDeleteConnection": "Không thể xóa kết nối", + "failedDistributeProxies": "Không thể phân phối proxy.", + "failedSaveModelEndpointSettings": "Không thể lưu cài đặt endpoint mô hình", + "failedUpdateClaudeExtraUsagePolicy": "Không thể cập nhật chính sách sử dụng bổ sung của Claude", + "failedUpdateClaudeRoutingPreference": "Không thể cập nhật tùy chọn định tuyến Claude Code", + "failedUpdateCliproxyRouting": "Không thể cập nhật định tuyến CLIProxyAPI", + "failedUpdateCodexLimitPolicy": "Không thể cập nhật chính sách giới hạn Codex", + "failedUpdateCodexServiceMode": "Không thể cập nhật chế độ dịch vụ Codex", + "filterByMedia": "Phương tiện", + "freeBadge": "Miễn phí", + "kimiCodeApiKeyLabel": "Khóa API Kimi Code", + "modelTestFailed": "Kiểm thử mô hình thất bại", + "modelTestNetworkError": "Lỗi mạng khi kiểm thử mô hình", + "networkError": "Lỗi mạng", + "networkErrorDeletingAlias": "Lỗi mạng khi xóa alias", + "networkErrorSettingAlias": "Lỗi mạng khi đặt alias", + "noProvidersMatch": "Không có provider nào khớp với tìm kiếm của bạn.", + "noSavedProxies": "Không tìm thấy proxy đã lưu. Trước tiên hãy thêm proxy trong Cài đặt → Proxy.", + "pageLoadErrorDescription": "Hiện không thể tải dữ liệu provider. Hãy kiểm tra kết nối rồi thử lại.", + "pageLoadErrorId": "ID lỗi: {id}", + "pageLoadErrorRetry": "Thử lại", + "pageLoadErrorTitle": "Không thể tải provider", + "playgroundTitle": "Khu vực thử nghiệm", + "providerDetailConnectionFlexActive": "Cấp dịch vụ flex của Codex đang hoạt động cho kết nối này", + "providerDetailConnectionPriorityActive": "Cấp dịch vụ priority của Codex đang hoạt động cho kết nối này", + "providerDetailGlobalFlexActive": "Cấp dịch vụ flex toàn cục của Codex đang hoạt động", + "providerDetailGlobalPriorityActive": "Cấp dịch vụ priority toàn cục của Codex đang hoạt động", + "proxiesDistributed": "Đã phân phối {assigned} proxy tới {tagLabel}{total} kết nối.", + "rerankEndpoint": "Rerank", + "savedModelEndpointSettings": "Đã lưu cài đặt endpoint mô hình", + "searchByModelAria": "Tìm kiếm theo mô hình", + "selectSupportedEndpoint": "Chọn ít nhất một endpoint được hỗ trợ", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "Cài đặt", @@ -6653,78 +6665,78 @@ "NEEDS_CORE_NOT_CONFIGURED": "Gói đăng ký này có các nút cần một proxy core cục bộ (SS/VMess/Trojan/VLESS); chúng sẽ không được định tuyến cho đến khi bạn cấu hình điểm cuối SOCKS5 của core cục bộ.", "NO_USABLE_NODES": "Gói đăng ký không tạo ra nút nào có thể sử dụng (http/https/socks5 hoặc các nút có điểm cuối core cục bộ)." }, -"description": "Dán liên kết đăng ký proxy của bạn. Sau khi được bật, lưu lượng truy cập sẽ được định tuyến qua nhóm proxy ở chế độ chung hoặc quy tắc (Nhà cung cấp được chỉ định). Các nút đăng ký được tự động đồng bộ hóa vào nhóm proxy và sử dụng lại các cơ chế bỏ phiếu, kiểm tra tình trạng và chống rò rỉ hiện có.", -"addSubscription": "Thêm đăng ký", -"newSubscription": "Thêm đăng ký", -"editSubscription": "Chỉnh sửa đăng ký", -"name": "Tên", -"namePlaceholder": "ví dụ: Đăng ký của tôi A", -"url": "URL đăng ký", -"urlPlaceholder": "https://.../subscribe?token=...", -"mode": "Chế độ", -"globalMode": "Chế độ toàn cầu", -"ruleMode": "Chế độ quy tắc", -"globalModeDesc": "Tất cả lưu lượng truy cập của Nhà cung cấp đều đi qua nhóm proxy của đăng ký này.", -"ruleModeDesc": "Chỉ lưu lượng truy cập của Nhà cung cấp được chọn mới đi qua proxy; phần còn lại kết nối trực tiếp.", -"localCoreEndpoint": "Điểm cuối lõi cục bộ SOCKS5/HTTP (Tùy chọn)", -"localCoreEndpointPlaceholder": "vớ5://127.0.0.1:1080", -"localCoreEndpointDesc": "Chỉ chấp nhận 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS yêu cầu sing-box/lõi xung đột cục bộ).", -"routeByProvider": "Định tuyến theo Nhà cung cấp (nhiều lựa chọn)", -"loadingProviders": "Đang tải danh sách Nhà cung cấp…", -"autoRefreshInterval": "Khoảng thời gian làm mới tự động (phút)", -"enableAfterCreate": "Kích hoạt khi tạo (đồng bộ và có hiệu lực ngay lập tức)", -"saving": "Đang lưu…", -"saveChanges": "Lưu thay đổi", -"createSubscription": "Tạo đăng ký", -"loading": "Đang tải…", -"noSubscriptions": "Chưa có đăng ký nào. Nhấp vào \"Thêm đăng ký\" để bắt đầu.", -"statusOk": "được rồi", -"statusError": "Lỗi", -"statusEmpty": "trống", -"global": "Toàn cầu", -"rule": "quy tắc", -"enabled": "Đã bật", -"disabled": "Đã tắt", -"nodeCount": "Nút: {count}", -"needsCoreCount": "{count} cần lõi cục bộ", -"lastSynced": "Đồng bộ hóa lần cuối: {time}", -"consecutiveFailures": "{count} thất bại liên tiếp", -"lastError": "Lỗi cuối cùng: {time}", -"coreHintTitle": "Đăng ký này có các nút {count} yêu cầu lõi proxy cục bộ (SS / VMess / Trojan / VLESS, v.v.) và hiện chưa được định tuyến.", -"coreHintDesc": "Các giao thức này không thể được chuyển tiếp trực tiếp bởi OmniRoute. Vui lòng khởi động lõi sing-box hoặc xung đột (Clash.Meta) trên máy của bạn, hiển thị nó dưới dạng điểm cuối SOCKS5/HTTP và điền thông qua Chỉnh sửa (chỉ chấp nhận 127.0.0.1 / localhost).", -"copy": "Sao chép", -"goConfigure": "Cấu hình", -"disable": "Vô hiệu hóa", -"enable": "Kích hoạt", -"refreshNodes": "Làm mới nút", -"edit": "Chỉnh sửa", -"delete": "Xóa", -"confirmDelete": "Bạn có chắc chắn muốn xóa đăng ký \"{name}\" không? Các nút proxy được liên kết cũng sẽ bị xóa.", -"nameRequired": "Vui lòng nhập tên", -"urlRequired": "Vui lòng nhập URL đăng ký", -"ruleModeProviderRequired": "Vui lòng chọn ít nhất một Nhà cung cấp ở chế độ quy tắc", -"saveFailed": "Lưu không thành công", -"loadFailed": "Không tải được danh sách đăng ký", -"toggleFailed": "Không thể chuyển đổi công tắc", -"refreshFailed": "Không thể làm mới", -"deleteFailed": "Không thể xóa", -"add": "Thêm", -"cancel": "Hủy", -"configure": "Cấu hình", -"copyEndpoint": "Sao chép endpoint", -"coreEndpointHint": "Gợi ý endpoint lõi", -"coreNodesHint": "Gợi ý các node lõi", -"create": "Tạo", -"deleteConfirm": "Xác nhận xóa", -"empty": "Trống", -"globalModeDescription": "Mô tả chế độ toàn cục", -"localCoreHint": "Gợi ý lõi cục bộ", -"nodeSummary": "Tóm tắt node", -"providerRequired": "Bắt buộc chọn provider", -"providerRouting": "Định tuyến provider", -"refresh": "Làm mới", -"refreshInterval": "Khoảng thời gian làm mới", -"ruleModeDescription": "Mô tả chế độ quy tắc" + "description": "Dán liên kết đăng ký proxy của bạn. Sau khi được bật, lưu lượng truy cập sẽ được định tuyến qua nhóm proxy ở chế độ chung hoặc quy tắc (Nhà cung cấp được chỉ định). Các nút đăng ký được tự động đồng bộ hóa vào nhóm proxy và sử dụng lại các cơ chế bỏ phiếu, kiểm tra tình trạng và chống rò rỉ hiện có.", + "addSubscription": "Thêm đăng ký", + "newSubscription": "Thêm đăng ký", + "editSubscription": "Chỉnh sửa đăng ký", + "name": "Tên", + "namePlaceholder": "ví dụ: Đăng ký của tôi A", + "url": "URL đăng ký", + "urlPlaceholder": "https://.../subscribe?token=...", + "mode": "Chế độ", + "globalMode": "Chế độ toàn cầu", + "ruleMode": "Chế độ quy tắc", + "globalModeDesc": "Tất cả lưu lượng truy cập của Nhà cung cấp đều đi qua nhóm proxy của đăng ký này.", + "ruleModeDesc": "Chỉ lưu lượng truy cập của Nhà cung cấp được chọn mới đi qua proxy; phần còn lại kết nối trực tiếp.", + "localCoreEndpoint": "Điểm cuối lõi cục bộ SOCKS5/HTTP (Tùy chọn)", + "localCoreEndpointPlaceholder": "vớ5://127.0.0.1:1080", + "localCoreEndpointDesc": "Chỉ chấp nhận 127.0.0.1 / localhost (SS/VMess/Trojan/VLESS yêu cầu sing-box/lõi xung đột cục bộ).", + "routeByProvider": "Định tuyến theo Nhà cung cấp (nhiều lựa chọn)", + "loadingProviders": "Đang tải danh sách Nhà cung cấp…", + "autoRefreshInterval": "Khoảng thời gian làm mới tự động (phút)", + "enableAfterCreate": "Kích hoạt khi tạo (đồng bộ và có hiệu lực ngay lập tức)", + "saving": "Đang lưu…", + "saveChanges": "Lưu thay đổi", + "createSubscription": "Tạo đăng ký", + "loading": "Đang tải…", + "noSubscriptions": "Chưa có đăng ký nào. Nhấp vào \"Thêm đăng ký\" để bắt đầu.", + "statusOk": "được rồi", + "statusError": "Lỗi", + "statusEmpty": "trống", + "global": "Toàn cầu", + "rule": "quy tắc", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "nodeCount": "Nút: {count}", + "needsCoreCount": "{count} cần lõi cục bộ", + "lastSynced": "Đồng bộ hóa lần cuối: {time}", + "consecutiveFailures": "{count} thất bại liên tiếp", + "lastError": "Lỗi cuối cùng: {time}", + "coreHintTitle": "Đăng ký này có các nút {count} yêu cầu lõi proxy cục bộ (SS / VMess / Trojan / VLESS, v.v.) và hiện chưa được định tuyến.", + "coreHintDesc": "Các giao thức này không thể được chuyển tiếp trực tiếp bởi OmniRoute. Vui lòng khởi động lõi sing-box hoặc xung đột (Clash.Meta) trên máy của bạn, hiển thị nó dưới dạng điểm cuối SOCKS5/HTTP và điền thông qua Chỉnh sửa (chỉ chấp nhận 127.0.0.1 / localhost).", + "copy": "Sao chép", + "goConfigure": "Cấu hình", + "disable": "Vô hiệu hóa", + "enable": "Kích hoạt", + "refreshNodes": "Làm mới nút", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "confirmDelete": "Bạn có chắc chắn muốn xóa đăng ký \"{name}\" không? Các nút proxy được liên kết cũng sẽ bị xóa.", + "nameRequired": "Vui lòng nhập tên", + "urlRequired": "Vui lòng nhập URL đăng ký", + "ruleModeProviderRequired": "Vui lòng chọn ít nhất một Nhà cung cấp ở chế độ quy tắc", + "saveFailed": "Lưu không thành công", + "loadFailed": "Không tải được danh sách đăng ký", + "toggleFailed": "Không thể chuyển đổi công tắc", + "refreshFailed": "Không thể làm mới", + "deleteFailed": "Không thể xóa", + "add": "Thêm", + "cancel": "Hủy", + "configure": "Cấu hình", + "copyEndpoint": "Sao chép endpoint", + "coreEndpointHint": "Gợi ý endpoint lõi", + "coreNodesHint": "Gợi ý các node lõi", + "create": "Tạo", + "deleteConfirm": "Xác nhận xóa", + "empty": "Trống", + "globalModeDescription": "Mô tả chế độ toàn cục", + "localCoreHint": "Gợi ý lõi cục bộ", + "nodeSummary": "Tóm tắt node", + "providerRequired": "Bắt buộc chọn provider", + "providerRouting": "Định tuyến provider", + "refresh": "Làm mới", + "refreshInterval": "Khoảng thời gian làm mới", + "ruleModeDescription": "Mô tả chế độ quy tắc" }, "bulkHealthcheck": "Kiểm tra tình trạng hàng loạt", "bulkHealthcheckDesc": "Kiểm tra tất cả proxy đã cấu hình với một URL đích để xác định proxy nào hoạt động.", @@ -7997,138 +8009,144 @@ "enableCredentialRedactionDesc": "Scrubs API keys, tokens, private keys, and JWTs from messages, tool calls, and responses.", "pricingAutoSyncDisabled": "Đã tắt đồng bộ hóa tự động", "pricingAutoSyncEnabled": "Đã bật đồng bộ hóa tự động", -"modalityBridgeIntro": "Kết nối nội dung đa phương thức với văn bản trước khi nó đến các mô hình chỉ văn bản. Hình ảnh đang hoạt động; Âm thanh đến với AudioBridge; Video đang trong lộ trình.", -"modalityBridgeVisionTab": "Tầm Nhìn", -"modalityBridgeAudioTab": "Âm thanh", -"modalityBridgeVideoTab": "Video", -"modalityBridgeSubTabsAria": "Các phần Cầu Nối Modalité", -"modalityBridgeVisionTitle": "Cầu Nhìn", -"modalityBridgeVisionDesc": "Mô tả hình ảnh bằng mô hình thị giác và tiếp tục với mô hình văn bản mà người dùng đã chọn.", -"modalityBridgeMode": "Chế Độ", -"modalityBridgeModeAuto": "Tự động (được khuyến nghị)", -"modalityBridgeModeAutoHint": "Heuristic di sản: chuyển hướng các mô hình cá nhân mà không cần thông tin xác thực; mô tả theo cách khác.", -"modalityBridgeModeDescribe": "Luôn mô tả", -"modalityBridgeModeDescribeHint": "Mô hình bạn chọn luôn trả lời; hình ảnh được thay thế bằng mô tả văn bản.", -"modalityBridgeModeReroute": "Luôn chuyển hướng", -"modalityBridgeModeRerouteHint": "Gửi toàn bộ yêu cầu đến mô hình có khả năng nhìn tốt nhất (sẽ quay lại mô tả khi không có mô hình nào khả dụng).", -"modalityBridgeVisionModel": "Mô Hình Thị Giác", -"modalityBridgeVisionModelAuto": "Tự động (tốt nhất có sẵn)", -"modalityBridgeTaskAware": "Mô tả nhận thức nhiệm vụ", -"modalityBridgeTaskAwareDesc": "Bao gồm câu hỏi của người dùng làm trọng tâm để mô hình thị giác mô tả những gì quan trọng và phiên âm văn bản nhìn thấy.", -"modalityBridgePrompt": "Mô tả yêu cầu", -"modalityBridgeAdvanced": "Nâng Cao", -"modalityBridgeTimeoutMs": "Thời Gian Chờ (ms)", -"modalityBridgeMaxImages": "Số hình ảnh tối đa mỗi yêu cầu", -"modalityBridgeCacheEnabled": "Mô tả bộ nhớ đệm", -"modalityBridgeCacheEnabledDesc": "Tái sử dụng mô tả cho các hình ảnh giống hệt nhau (khóa SHA-256, trong bộ nhớ).", -"modalityBridgeCacheTtlMinutes": "Thời Gian Sống Bộ Nhớ Đệm (phút)", -"modalityBridgeCacheMaxEntries": "Số mục tối đa trong bộ nhớ cache", -"modalityBridgeStatsBridged": "đã kết nối", -"modalityBridgeStatsCacheHits": "lượt truy cập bộ nhớ đệm", -"modalityBridgeStatsFailures": "thất bại", -"modalityBridgeStatsLastUsed": "được sử dụng lần cuối", -"modalityBridgeStatsNever": "không bao giờ", -"modalityBridgeTestButton": "Kiểm tra với hình ảnh mẫu", -"modalityBridgeTestRunning": "Đang kiểm tra…", -"modalityBridgeTestOk": "Cầu OK — {count} hình ảnh được mô tả bởi {model}", -"modalityBridgeTestReroute": "Bridge đã chuyển hướng yêu cầu đến {model}", -"modalityBridgeTestNoop": "Cầu không được kích hoạt (mô hình có thể hỗ trợ tầm nhìn một cách tự nhiên hoặc cầu đã bị vô hiệu hóa)", -"modalityBridgeTestError": "Kiểm tra không thành công: {message}", -"modalityBridgeAudioComingSoon": "Cầu nối Âm thanh (nói → văn bản qua /v1/audio/transcriptions) sẽ được phát hành trong bản tiếp theo. Các khóa cài đặt của nó đã được đặt trước.", -"modalityBridgeVideoComingSoon": "Video bridging (frame sampling + captioning) đang ở trong danh sách chờ — xem vấn đề #9760.", -"modalityBridgeMovedTitle": "Vision Bridge đã được di chuyển", -"modalityBridgeMovedBody": "Cài đặt Vision Bridge hiện đã có trên trang Modality Bridge chuyên dụng.", -"modalityBridgeMovedCta": "Mở cài đặt Cầu Modality", -"modalityBridgeAudioTitle": "Cầu Nối Âm Thanh", -"modalityBridgeAudioDesc": "Chuyển đổi âm thanh thành văn bản bằng mô hình nhận diện giọng nói trước khi tiếp tục với mô hình văn bản đã chọn.", -"modalityBridgeAudioEnabled": "Bật Cầu Nối Âm Thanh", -"modalityBridgeAudioEnabledDesc": "Thay thế các phần âm thanh bằng bản sao khi mô hình mục tiêu không thể xử lý âm thanh.", -"modalityBridgeAudioModel": "Mô hình chuyển đổi giọng nói thành văn bản", -"modalityBridgeAudioModelAuto": "Tự động (nhà cung cấp STT được kết nối đầu tiên)", -"modalityBridgeAudioMaxClips": "Số lượng clip âm thanh tối đa cho mỗi yêu cầu", -"modalityBridgeAudioTestButton": "Kiểm tra với âm thanh mẫu", -"modalityBridgeAudioTestRunning": "Đang kiểm tra âm thanh…", -"modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) đã được chuyển ngữ bởi {model}", -"modalityBridgeAudioTestNoop": "Audio Bridge không được kích hoạt (mục tiêu có thể hỗ trợ âm thanh, không có nhà cung cấp STT nào được kết nối, hoặc cầu nối bị vô hiệu hóa)", -"modalityBridgeAudioTestError": "Kiểm tra âm thanh không thành công: {message}", -"modelRoutingDescriptionPlaceholder": "Định tuyến các mô hình Opus đến combo frontier", -"cliproxyapiFallbackCodes": "Mã dự phòng Cliproxyapi", -"cliproxyapiFallbackDescription": "Mô tả dự phòng Cliproxyapi", -"cliproxyapiHealthLabel": "Nhãn tình trạng Cliproxyapi", -"cliproxyapiImportFailed": "Nhập Cliproxyapi thất bại", -"cliproxyapiImportResult": "Kết quả nhập Cliproxyapi", -"cliproxyapiInvalidUrl": "URL Cliproxyapi không hợp lệ", -"cliproxyapiLifecycleNoticeAfter": "Thông báo sau vòng đời Cliproxyapi", -"cliproxyapiLifecycleNoticeBefore": "Thông báo trước vòng đời Cliproxyapi", -"cliproxyapiLifecycleNoticeLink": "Liên kết thông báo vòng đời Cliproxyapi", -"cliproxyapiPortLabel": "Nhãn cổng Cliproxyapi", -"cliproxyapiStatusLabel": "Nhãn trạng thái Cliproxyapi", -"cliproxyapiVersionLabel": "Nhãn phiên bản Cliproxyapi", -"collection": "Bộ sưu tập", -"errorPage": { + "modalityBridgeIntro": "Kết nối nội dung đa phương thức với văn bản trước khi nó đến các mô hình chỉ văn bản. Hình ảnh đang hoạt động; Âm thanh đến với AudioBridge; Video đang trong lộ trình.", + "modalityBridgeVisionTab": "Tầm Nhìn", + "modalityBridgeAudioTab": "Âm thanh", + "modalityBridgeVideoTab": "Video", + "modalityBridgeSubTabsAria": "Các phần Cầu Nối Modalité", + "modalityBridgeVisionTitle": "Cầu Nhìn", + "modalityBridgeVisionDesc": "Mô tả hình ảnh bằng mô hình thị giác và tiếp tục với mô hình văn bản mà người dùng đã chọn.", + "modalityBridgeMode": "Chế Độ", + "modalityBridgeModeAuto": "Tự động (được khuyến nghị)", + "modalityBridgeModeAutoHint": "Heuristic di sản: chuyển hướng các mô hình cá nhân mà không cần thông tin xác thực; mô tả theo cách khác.", + "modalityBridgeModeDescribe": "Luôn mô tả", + "modalityBridgeModeDescribeHint": "Mô hình bạn chọn luôn trả lời; hình ảnh được thay thế bằng mô tả văn bản.", + "modalityBridgeModeReroute": "Luôn chuyển hướng", + "modalityBridgeModeRerouteHint": "Gửi toàn bộ yêu cầu đến mô hình có khả năng nhìn tốt nhất (sẽ quay lại mô tả khi không có mô hình nào khả dụng).", + "modalityBridgeVisionModel": "Mô Hình Thị Giác", + "modalityBridgeVisionModelAuto": "Tự động (tốt nhất có sẵn)", + "modalityBridgeTaskAware": "Mô tả nhận thức nhiệm vụ", + "modalityBridgeTaskAwareDesc": "Bao gồm câu hỏi của người dùng làm trọng tâm để mô hình thị giác mô tả những gì quan trọng và phiên âm văn bản nhìn thấy.", + "modalityBridgePrompt": "Mô tả yêu cầu", + "modalityBridgeAdvanced": "Nâng Cao", + "modalityBridgeTimeoutMs": "Thời Gian Chờ (ms)", + "modalityBridgeMaxImages": "Số hình ảnh tối đa mỗi yêu cầu", + "modalityBridgeCacheEnabled": "Mô tả bộ nhớ đệm", + "modalityBridgeCacheEnabledDesc": "Tái sử dụng mô tả cho các hình ảnh giống hệt nhau (khóa SHA-256, trong bộ nhớ).", + "modalityBridgeCacheTtlMinutes": "Thời Gian Sống Bộ Nhớ Đệm (phút)", + "modalityBridgeCacheMaxEntries": "Số mục tối đa trong bộ nhớ cache", + "modalityBridgeStatsBridged": "đã kết nối", + "modalityBridgeStatsCacheHits": "lượt truy cập bộ nhớ đệm", + "modalityBridgeStatsFailures": "thất bại", + "modalityBridgeStatsLastUsed": "được sử dụng lần cuối", + "modalityBridgeStatsNever": "không bao giờ", + "modalityBridgeTestButton": "Kiểm tra với hình ảnh mẫu", + "modalityBridgeTestRunning": "Đang kiểm tra…", + "modalityBridgeTestOk": "Cầu OK — {count} hình ảnh được mô tả bởi {model}", + "modalityBridgeTestReroute": "Bridge đã chuyển hướng yêu cầu đến {model}", + "modalityBridgeTestNoop": "Cầu không được kích hoạt (mô hình có thể hỗ trợ tầm nhìn một cách tự nhiên hoặc cầu đã bị vô hiệu hóa)", + "modalityBridgeTestError": "Kiểm tra không thành công: {message}", + "modalityBridgeAudioComingSoon": "Cầu nối Âm thanh (nói → văn bản qua /v1/audio/transcriptions) sẽ được phát hành trong bản tiếp theo. Các khóa cài đặt của nó đã được đặt trước.", + "modalityBridgeVideoComingSoon": "Video bridging (frame sampling + captioning) đang ở trong danh sách chờ — xem vấn đề #9760.", + "modalityBridgeMovedTitle": "Vision Bridge đã được di chuyển", + "modalityBridgeMovedBody": "Cài đặt Vision Bridge hiện đã có trên trang Modality Bridge chuyên dụng.", + "modalityBridgeMovedCta": "Mở cài đặt Cầu Modality", + "modalityBridgeAudioTitle": "Cầu Nối Âm Thanh", + "modalityBridgeAudioDesc": "Chuyển đổi âm thanh thành văn bản bằng mô hình nhận diện giọng nói trước khi tiếp tục với mô hình văn bản đã chọn.", + "modalityBridgeAudioEnabled": "Bật Cầu Nối Âm Thanh", + "modalityBridgeAudioEnabledDesc": "Thay thế các phần âm thanh bằng bản sao khi mô hình mục tiêu không thể xử lý âm thanh.", + "modalityBridgeAudioModel": "Mô hình chuyển đổi giọng nói thành văn bản", + "modalityBridgeAudioModelAuto": "Tự động (nhà cung cấp STT được kết nối đầu tiên)", + "modalityBridgeAudioMaxClips": "Số lượng clip âm thanh tối đa cho mỗi yêu cầu", + "modalityBridgeAudioTestButton": "Kiểm tra với âm thanh mẫu", + "modalityBridgeAudioTestRunning": "Đang kiểm tra âm thanh…", + "modalityBridgeAudioTestOk": "Audio Bridge OK — {count} clip(s) đã được chuyển ngữ bởi {model}", + "modalityBridgeAudioTestNoop": "Audio Bridge không được kích hoạt (mục tiêu có thể hỗ trợ âm thanh, không có nhà cung cấp STT nào được kết nối, hoặc cầu nối bị vô hiệu hóa)", + "modalityBridgeAudioTestError": "Kiểm tra âm thanh không thành công: {message}", + "modelRoutingDescriptionPlaceholder": "Định tuyến các mô hình Opus đến combo frontier", + "cliproxyapiFallbackCodes": "Mã dự phòng Cliproxyapi", + "cliproxyapiFallbackDescription": "Mô tả dự phòng Cliproxyapi", + "cliproxyapiHealthLabel": "Nhãn tình trạng Cliproxyapi", + "cliproxyapiImportFailed": "Nhập Cliproxyapi thất bại", + "cliproxyapiImportResult": "Kết quả nhập Cliproxyapi", + "cliproxyapiInvalidUrl": "URL Cliproxyapi không hợp lệ", + "cliproxyapiLifecycleNoticeAfter": "Thông báo sau vòng đời Cliproxyapi", + "cliproxyapiLifecycleNoticeBefore": "Thông báo trước vòng đời Cliproxyapi", + "cliproxyapiLifecycleNoticeLink": "Liên kết thông báo vòng đời Cliproxyapi", + "cliproxyapiPortLabel": "Nhãn cổng Cliproxyapi", + "cliproxyapiStatusLabel": "Nhãn trạng thái Cliproxyapi", + "cliproxyapiVersionLabel": "Nhãn phiên bản Cliproxyapi", + "collection": "Bộ sưu tập", + "errorPage": { "description": "Hiện không thể tải cài đặt. Vui lòng thử lại sau vài giây.", "errorId": "ID lỗi: {id}", "retry": "Thử lại", "title": "Không thể tải cài đặt" }, -"host": "Máy chủ", -"notInstalled": "Chưa cài đặt", -"oneproxyActions": "Thao tác Oneproxy", -"oneproxyActive": "Oneproxy đang hoạt động", -"oneproxyAnonymity": "Tính ẩn danh Oneproxy", -"oneproxyCountry": "Quốc gia Oneproxy", -"oneproxyDelete": "Xóa Oneproxy", -"oneproxyEmpty": "Oneproxy trống", -"oneproxyHost": "Máy chủ Oneproxy", -"oneproxyLatency": "Độ trễ Oneproxy", -"oneproxyProtocol": "Giao thức Oneproxy", -"oneproxyQuality": "Chất lượng Oneproxy", -"oneproxySyncFailed": "Đồng bộ thất bại: {error}", -"oneproxySyncSuccess": "Đã đồng bộ {total} proxy ({added} mới, {updated} được cập nhật)", -"proxyDocumentationSocks5DescAfter": "Phần mô tả sau tài liệu proxy SOCKS5", -"proxyFreePoolAddProxy": "Thêm proxy vào pool miễn phí", -"proxyFreePoolAdding": "Đang thêm vào pool proxy miễn phí", -"proxyFreePoolSelectProxy": "Chọn proxy từ pool miễn phí", -"proxyStatusActive": "Trạng thái proxy: Hoạt động", -"proxyStatusInactive": "Trạng thái proxy: Không hoạt động", -"routingAddEntry": "Thêm mục", -"settingSaveFailed": "Lưu cài đặt thất bại", -"settingSaved": "Đã lưu cài đặt", -"skillsmpApiKeyHintAfter": ". Giới hạn: {limit} yêu cầu/ngày.", -"skillsmpApiKeyHintBefore": "Lấy khóa API của bạn tại", -"syncFailed": "Đồng bộ thất bại", -"unhealthy": "Không ổn định", -"oneproxyDescription": "Lấy và luân phiên các proxy miễn phí đã được xác thực từ nền tảng cộng đồng 1proxy", -"oneproxySyncing": "Đang đồng bộ...", -"oneproxySyncNow": "Đồng bộ ngay", -"oneproxyClearAll": "Xóa tất cả", -"oneproxyGoogle": "Google", -"oneproxyClearAllConfirm": "Xóa tất cả proxy 1proxy?", -"memorySkillsSkillsmpDescription": "Kết nối với SkillsMP để khám phá và cài đặt kỹ năng từ marketplace.", -"memorySkillsActiveProviderDescription": "Chọn nhà cung cấp mà trang Skills sử dụng để tìm kiếm và cài đặt.", -"memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", -"memorySkillsSkillsmpProviderDescription": "Marketplace có xác thực (sử dụng khóa API SkillsMP của bạn).", -"memorySkillsSkillsshProviderTitle": "Thư mục skills.sh", -"memorySkillsSkillsshProviderDescription": "Nhà cung cấp thư mục công khai (không cần khóa API).", -"routingCcBridgeCatalogName": "Bridge CC tương thích Anthropic", -"routingClaudeProviderName": "Claude (OAuth)", -"routingClaudeProviderDescription": "Nhà cung cấp Claude gốc với token được cấp qua OAuth.", -"routingCcBridgeName": "Claude-Code Bridge", -"routingCcBridgeDescription": "Các endpoint relay sử dụng khóa API (anthropic-compatible-cc-*).", -"routingCustomProviderDescription": "Nhà cung cấp tùy chỉnh.", -"routingUnknownOpKind": "Loại thao tác không xác định: {kind}", -"routingInvalidJson": "JSON không hợp lệ: {error}", -"routingConfigMustBeObject": "Cấu hình phải là một đối tượng JSON", -"routingEnabledMustBeBoolean": "`enabled` phải là true hoặc false", -"routingPipelineMustBeArray": "`pipeline` phải là một mảng thao tác", -"routingPipelineTooLong": "Pipeline không được vượt quá 50 thao tác", -"routingOpMissingKind": "Thao tác #{index}: thiếu hoặc `kind` không hợp lệ", -"routingOpUnknownKind": "Thao tác #{index}: loại không xác định \"{kind}\"", -"routingJsonEditorHide": "Ẩn trình chỉnh sửa JSON", -"routingJsonEditorImportExport": "Nhập / xuất JSON", -"routingJsonEditorLabel": "JSON (chỉnh sửa và áp dụng, hoặc dán để nhập)", -"routingApplyJson": "Áp dụng JSON", -"routingTransformsFootnote": "Mọi thao tác biến đổi đều có tính lũy đẳng khi chạy lại. Các thay đổi có hiệu lực ngay từ yêu cầu tiếp theo." + "host": "Máy chủ", + "notInstalled": "Chưa cài đặt", + "oneproxyActions": "Thao tác Oneproxy", + "oneproxyActive": "Oneproxy đang hoạt động", + "oneproxyAnonymity": "Tính ẩn danh Oneproxy", + "oneproxyCountry": "Quốc gia Oneproxy", + "oneproxyDelete": "Xóa Oneproxy", + "oneproxyEmpty": "Oneproxy trống", + "oneproxyHost": "Máy chủ Oneproxy", + "oneproxyLatency": "Độ trễ Oneproxy", + "oneproxyProtocol": "Giao thức Oneproxy", + "oneproxyQuality": "Chất lượng Oneproxy", + "oneproxySyncFailed": "Đồng bộ thất bại: {error}", + "oneproxySyncSuccess": "Đã đồng bộ {total} proxy ({added} mới, {updated} được cập nhật)", + "proxyDocumentationSocks5DescAfter": "Phần mô tả sau tài liệu proxy SOCKS5", + "proxyFreePoolAddProxy": "Thêm proxy vào pool miễn phí", + "proxyFreePoolAdding": "Đang thêm vào pool proxy miễn phí", + "proxyFreePoolSelectProxy": "Chọn proxy từ pool miễn phí", + "proxyStatusActive": "Trạng thái proxy: Hoạt động", + "proxyStatusInactive": "Trạng thái proxy: Không hoạt động", + "routingAddEntry": "Thêm mục", + "settingSaveFailed": "Lưu cài đặt thất bại", + "settingSaved": "Đã lưu cài đặt", + "skillsmpApiKeyHintAfter": ". Giới hạn: {limit} yêu cầu/ngày.", + "skillsmpApiKeyHintBefore": "Lấy khóa API của bạn tại", + "syncFailed": "Đồng bộ thất bại", + "unhealthy": "Không ổn định", + "oneproxyDescription": "Lấy và luân phiên các proxy miễn phí đã được xác thực từ nền tảng cộng đồng 1proxy", + "oneproxySyncing": "Đang đồng bộ...", + "oneproxySyncNow": "Đồng bộ ngay", + "oneproxyClearAll": "Xóa tất cả", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "Xóa tất cả proxy 1proxy?", + "memorySkillsSkillsmpDescription": "Kết nối với SkillsMP để khám phá và cài đặt kỹ năng từ marketplace.", + "memorySkillsActiveProviderDescription": "Chọn nhà cung cấp mà trang Skills sử dụng để tìm kiếm và cài đặt.", + "memorySkillsSkillsmpProviderTitle": "SkillsMP Marketplace", + "memorySkillsSkillsmpProviderDescription": "Marketplace có xác thực (sử dụng khóa API SkillsMP của bạn).", + "memorySkillsSkillsshProviderTitle": "Thư mục skills.sh", + "memorySkillsSkillsshProviderDescription": "Nhà cung cấp thư mục công khai (không cần khóa API).", + "routingCcBridgeCatalogName": "Bridge CC tương thích Anthropic", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "Nhà cung cấp Claude gốc với token được cấp qua OAuth.", + "routingCcBridgeName": "Claude-Code Bridge", + "routingCcBridgeDescription": "Các endpoint relay sử dụng khóa API (anthropic-compatible-cc-*).", + "routingCustomProviderDescription": "Nhà cung cấp tùy chỉnh.", + "routingUnknownOpKind": "Loại thao tác không xác định: {kind}", + "routingInvalidJson": "JSON không hợp lệ: {error}", + "routingConfigMustBeObject": "Cấu hình phải là một đối tượng JSON", + "routingEnabledMustBeBoolean": "`enabled` phải là true hoặc false", + "routingPipelineMustBeArray": "`pipeline` phải là một mảng thao tác", + "routingPipelineTooLong": "Pipeline không được vượt quá 50 thao tác", + "routingOpMissingKind": "Thao tác #{index}: thiếu hoặc `kind` không hợp lệ", + "routingOpUnknownKind": "Thao tác #{index}: loại không xác định \"{kind}\"", + "routingJsonEditorHide": "Ẩn trình chỉnh sửa JSON", + "routingJsonEditorImportExport": "Nhập / xuất JSON", + "routingJsonEditorLabel": "JSON (chỉnh sửa và áp dụng, hoặc dán để nhập)", + "routingApplyJson": "Áp dụng JSON", + "routingTransformsFootnote": "Mọi thao tác biến đổi đều có tính lũy đẳng khi chạy lại. Các thay đổi có hiệu lực ngay từ yêu cầu tiếp theo.", + "cliproxyapiUnknown": "Không xác định", + "cliproxyapiVersion": "Phiên bản", + "cliproxyapiHealth": "Sức Khỏe", + "cliproxyapiPort": "Cổng", + "qdrantHost": "Máy chủ", + "qdrantCollection": "Bộ Sưu Tập" }, "contextRtk": { "title": "RTK Engine", @@ -8535,7 +8553,8 @@ "enableDescription": "Chạy cuối cùng trong ngăn xếp (sau khi RTK/Caveman làm sạch văn bản, OmniGlyph chuyển phần còn lại thành hình ảnh) và cũng có thể chạy độc lập qua chế độ omniglyph. Đây là bản xem trước và mặc định vẫn tắt cho đến khi hoàn tất kiểm thử đầu cuối.", "saved": "Đã lưu.", "saveFailed": "Không thể lưu.", - "enableAria": "Bật bộ máy OmniGlyph" + "enableAria": "Bật bộ máy OmniGlyph", + "title": "OmniGlyph" }, "embeddedServices": { "title": "Dịch vụ nhúng", @@ -8589,7 +8608,7 @@ "networkInstallFailed": "Lỗi mạng — không thể kết nối tới endpoint cài đặt", "availableModels": "Các mô hình khả dụng", "modelsLoading": "Đang tải…", - "modelsDiscovered": "Đã phát hiện {count} mô hình", + "modelsDiscovered": "{count, plural, one {# model discovered} other {# models discovered}}", "modelsLoadFailed": "Không thể tải danh sách mô hình", "refreshing": "Đang làm mới…", "refreshNow": "Làm mới ngay", @@ -9350,18 +9369,18 @@ "budgetKpiActiveKeys": "Khóa hoạt động", "budgetPageTitle": "Ngân sách", "budgetPageDescription": "Đặt giới hạn chi tiêu hằng ngày, hằng tuần và hằng tháng cho từng khóa API.", - "budgetTemplateStorageHint": "{count} mẫu · chỉnh sửa qua localStorage:", + "budgetTemplateStorageHint": "{count, plural, one {# template} other {# templates}} · edit via localStorage:", "budgetAboveLimitShort": "vượt giới hạn ⚠", "budgetOnTrackShort": "đúng tiến độ", "budgetAtOrAboveWarning": "≥ ngưỡng cảnh báo", "budgetTemplates": "Mẫu", "budgetSelectKeysFirst": "Hãy chọn khóa trước khi áp dụng", - "budgetApplyToSelected": "Áp dụng cho {count} khóa đã chọn", - "budgetSelectedTemplateHint": "Đã chọn {count} khóa · nhấp vào một mẫu để áp dụng", + "budgetApplyToSelected": "Apply to {count, plural, one {# selected key} other {# selected keys}}", + "budgetSelectedTemplateHint": "{count, plural, one {# selected} other {# selected}} · click a template to apply", "budgetTemplateMonthlyAmount": "{amount} US$/tháng", "budgetTemplateDailyAmount": "{amount} US$/ngày", "budgetNoKeysSelected": "Chưa chọn khóa nào", - "budgetTemplateApplied": "Đã áp dụng \"{template}\" cho {count} khóa", + "budgetTemplateApplied": "Applied \"{template}\" to {count, plural, one {# key} other {# keys}}", "budgetTemplateApplyFailed": "Không thể áp dụng mẫu", "budgetTemplateNames": { "tpl-prod": "Production", @@ -9624,7 +9643,23 @@ "traeAuthorizationSuccess": "Ủy quyền Trae ✓", "traeAuthorizationFailed": "Ủy quyền Trae không thành công", "closeAuthorizationWindow": "Bạn có thể đóng cửa sổ này.", - "returnToDashboard": "Quay lại bảng điều khiển." + "returnToDashboard": "Quay lại bảng điều khiển.", + "resetViaAppData": "Đặt lại qua Dữ Liệu Ứng Dụng", + "deleteSettingsToReset": "Xóa tệp cài đặt khỏi thư mục dữ liệu ứng dụng để đặt lại mật khẩu của bạn:", + "quitAppCompletely": "Thoát hoàn toàn ứng dụng desktop OmniRoute", + "navigateToAppData": "Đi đến thư mục dữ liệu ứng dụng", + "checkAppDataFolder": "Kiểm tra thư mục dữ liệu ứng dụng hệ thống của bạn", + "deleteSettingsJson": "Xóa", + "relaunchAppFresh": "Khởi động lại ứng dụng desktop OmniRoute — nó sẽ bắt đầu thiết lập mới", + "alternativeSetPassword": "Tùy Chọn Khác: Đặt Mật Khẩu Mới", + "setNewPasswordViaEnv": "Đặt một mật khẩu khởi tạo mới thông qua tệp môi trường máy chủ:", + "openServerEnv": "Mở", + "inDataDirectory": "trong thư mục dữ liệu", + "addOrUpdate": "Thêm hoặc cập nhật", + "deleteAndRelaunch": "Xóa", + "settingsJson": "settings.json", + "fromDataDir": "từ thư mục dữ liệu", + "relaunchApp": "Khởi động lại ứng dụng máy tính để bàn OmniRoute" }, "landing": { "brandName": "OmniRoute", @@ -12317,13 +12352,13 @@ "updateProviderFailed": "Không thể cập nhật nhà cung cấp", "providerEnabled": "Đã bật {provider}", "providerDisabled": "Đã tắt {provider}", -"providerAdded": "Đã thêm {provider}", -"add": "Thêm", -"manualApiKey": "Dùng khóa API thủ công", -"createDahlTokenFailed": "Không thể tạo token Dahl", -"providerProxy": "Proxy", -"providerProxyConfigureHint": "Cấu hình proxy", -"providerProxyTitleConfigured": "Đã cấu hình proxy: {host}" + "providerAdded": "Đã thêm {provider}", + "add": "Thêm", + "manualApiKey": "Dùng khóa API thủ công", + "createDahlTokenFailed": "Không thể tạo token Dahl", + "providerProxy": "Proxy", + "providerProxyConfigureHint": "Cấu hình proxy", + "providerProxyTitleConfigured": "Đã cấu hình proxy: {host}" }, "gamification": { "leaderboardScopes": { @@ -12524,7 +12559,7 @@ "restartFailed": "Khởi động lại thất bại", "resetOverridesFailedHttp": "Không thể đặt lại ghi đè: HTTP {status}", "resetOverridesFailed": "Không thể đặt lại ghi đè", - "restartRequiredCount": "{count} thay đổi cần khởi động lại máy chủ để có hiệu lực.", + "restartRequiredCount": "{count, plural, one {# change requires} other {# changes require}} a server restart to take effect.", "restartRequiredDescription": "Các cờ này chỉ được áp dụng sau khi tiến trình tải lại. Có thể khởi động lại ngay hoặc tiếp tục chỉnh sửa — các cờ đang chờ vẫn được giữ cho đến khi bạn xác nhận.", "restartServer": "Khởi động lại máy chủ", "cancel": "Hủy", @@ -12799,7 +12834,7 @@ "segmentHint": "Mỗi đoạn là một nhóm miễn phí · đã khử trùng lặp theo nhóm, đếm đúng thực tế (không thổi phồng trần giới hạn tốc độ).", "boost": "Mở khóa thêm khoảng {tokens}/tháng bằng một lần nạp $10 vào OpenRouter (50 → 1000 yêu cầu/ngày)", "uncapped": "Miễn phí vĩnh viễn, không công bố giới hạn (bị giới hạn tốc độ) — quyền truy cập thực, không tính vào tổng nổi bật:", - "tosRestricted": "Có {count} mô hình bị đánh dấu hạn chế theo ToS — bạn tự quyết định", + "tosRestricted": "{count, plural, one {# model} other {# models}} flagged as ToS-restricted — you decide", "provider": "Nhà cung cấp", "model": "Mô hình", "modelName": "Tên mô hình", @@ -12821,7 +12856,9 @@ "avoid": "Bị hạn chế theo ToS — hãy xem lại điều khoản", "caution": "Thận trọng — điều khoản sử dụng cá nhân/proxy", "ok": "Nhìn chung cho phép" - } + }, + "allProviders": "Tất cả nhà cung cấp", + "noApiKeyRequired": "Không cần khóa API" }, "providerHealthAutopilot": { "title": "Tự động điều phối tình trạng nhà cung cấp", @@ -13024,7 +13061,7 @@ "dismissAriaLabel": "Dismiss" }, "featureFlagExposeFunctionalGatewayMirrorsDescription": "Công bố các id phản chiếu <gateway-alias>/<model> trên /v1/models cho các mô hình có chủ sở hữu chuẩn không có thông tin xác thực hoạt động nhưng một cổng chuyển tiếp có thông tin xác thực hoạt động định tuyến được chúng. Cảnh báo: khi bật, số mục trong danh mục tăng lên với mọi client.", -"radarPage": { + "radarPage": { "title": "Danh mục Radar", "subtitle": "Danh mục mô hình miễn phí được làm phong phú bởi trí tuệ cộng đồng", "loading": "Đang tải danh mục...", @@ -13080,7 +13117,7 @@ "campaignsUpsellCommunity": "Limited-time campaigns are a supporter extra. Everything on this page's fixed links stays free for everyone.", "campaignsValidUntil": "Valid until {date}" }, -"radarSetupPage": { + "radarSetupPage": { "title": "Thiết lập nhà cung cấp", "setupTitle": "Thiết lập: {provider}", "setupSubtitle": "Làm theo các bước dưới đây để cấu hình nhà cung cấp này", @@ -13105,7 +13142,7 @@ "addConnectionDescription": "Chưa có kết nối? Thêm một cái trong bảng điều khiển nhà cung cấp.", "addConnectionLink": "Đi đến các nhà cung cấp →" }, -"resilienceConnections": { + "resilienceConnections": { "title": "Khả Năng Phục Hồi Kết Nối", "table": { "status": "Trạng Thái", @@ -13199,12 +13236,12 @@ "degraded.source.modelLockouts": "Khóa Mô Hình", "degraded.source.count": "Số Lượng Kết Nối" }, -"featureFlagCapabilityFilterEnabledDescription": "Từ chối yêu cầu trước khi gửi đi khi mô hình đích thiếu các khả năng bắt buộc (thị giác, công cụ, đầu ra có cấu trúc, cửa sổ ngữ cảnh). Bảo vệ các yêu cầu trực tiếp đến một nhà cung cấp khi chúng bỏ qua bộ lọc tương thích của combo.", -"capabilityFilter.visionMismatch": "Nhà cung cấp không hỗ trợ thị giác cho yêu cầu hình ảnh này", -"capabilityFilter.toolsMismatch": "Nhà cung cấp không hỗ trợ gọi công cụ", -"capabilityFilter.structuredOutputMismatch": "Nhà cung cấp không hỗ trợ đầu ra có cấu trúc", -"capabilityFilter.contextWindowMismatch": "Yêu cầu vượt quá cửa sổ ngữ cảnh của nhà cung cấp", -"publicSystem": { + "featureFlagCapabilityFilterEnabledDescription": "Từ chối yêu cầu trước khi gửi đi khi mô hình đích thiếu các khả năng bắt buộc (thị giác, công cụ, đầu ra có cấu trúc, cửa sổ ngữ cảnh). Bảo vệ các yêu cầu trực tiếp đến một nhà cung cấp khi chúng bỏ qua bộ lọc tương thích của combo.", + "capabilityFilter.visionMismatch": "Nhà cung cấp không hỗ trợ thị giác cho yêu cầu hình ảnh này", + "capabilityFilter.toolsMismatch": "Nhà cung cấp không hỗ trợ gọi công cụ", + "capabilityFilter.structuredOutputMismatch": "Nhà cung cấp không hỗ trợ đầu ra có cấu trúc", + "capabilityFilter.contextWindowMismatch": "Yêu cầu vượt quá cửa sổ ngữ cảnh của nhà cung cấp", + "publicSystem": { "notFound": { "title": "Không tìm thấy trang", "description": "Trang bạn đang tìm không tồn tại hoặc đã được chuyển.", @@ -13341,7 +13378,7 @@ } } }, -"kiroAuthModal": { + "kiroAuthModal": { "title": "Kết nối {providerLabel}", "chooseMethod": "Chọn phương thức xác thực của bạn:", "builderId": "AWS Builder ID", @@ -13383,7 +13420,7 @@ "errorApiKeyImportFailed": "Nhập khóa API thất bại", "errorIdcStartUrlRequired": "Vui lòng nhập URL bắt đầu IDC của bạn" }, -"kiroSocialOAuthModal": { + "kiroSocialOAuthModal": { "title": "Kết nối {providerLabel} qua {providerName}", "errorStartAuthorization": "Không thể bắt đầu ủy quyền", "errorAuthorizationExpired": "Ủy quyền đã hết hạn. Hãy bắt đầu lại luồng đăng nhập.", @@ -13402,7 +13439,7 @@ "errorTitle": "Kết nối thất bại", "close": "Đóng" }, -"traeAuthModal": { + "traeAuthModal": { "errorAuthorizationFailed": "Ủy quyền thất bại", "errorPopupBlocked": "Cửa sổ bật lên bị chặn — hãy cho phép cửa sổ bật lên cho trang web này hoặc dán token theo cách thủ công bên dưới.", "errorPopupClosed": "Cửa sổ ủy quyền đã bị đóng trước khi hoàn tất.", @@ -13428,14 +13465,14 @@ "importToken": "Nhập Token", "cancel": "Hủy" }, -"sharedComponents": { + "sharedComponents": { "distributeProxies": { "distributing": "Đang phân phối...", "complete": "Hoàn tất", "defaultLabel": "Phân phối proxy" } }, -"providerTest": { + "providerTest": { "dialogLabel": "Kiểm thử {provider}", "deprecated": "đã lỗi thời", "risk": "rủi ro", @@ -13470,7 +13507,7 @@ "tokens": "Token" } }, -"proxyLog": { + "proxyLog": { "detailAriaLabel": "Chi tiết nhật ký Proxy", "event": "Sự kiện Proxy", "close": "Đóng hộp thoại chi tiết proxy", @@ -13488,7 +13525,7 @@ "error": "Lỗi", "configuration": "Cấu hình Proxy" }, -"requestTimeline": { + "requestTimeline": { "title": "Dòng thời gian yêu cầu", "modes": { "follow": "Theo dõi", @@ -13513,12 +13550,70 @@ "unknownModel": "không xác định", "pending": "đang chờ" }, -"metadata": { + "metadata": { "compressionTitle": "Compression", "compressionDescription": "Định cấu hình cài đặt nén ngữ cảnh để giảm mức sử dụng token và chi phí.", "relayTitle": "OmniRoute — Relay Proxies", "relayDescription": "Các endpoint proxy relay serverless cho hạ tầng AI của bạn", "trafficInspectorTitle": "Traffic Inspector — OmniRoute", "trafficInspectorDescription": "Theo dõi các lệnh gọi LLM và gỡ lỗi lưu lượng HTTPS của mọi ứng dụng" + }, + "conductor": { + "title": "Conductor — Đội ngũ tác nhân CLI", + "subtitle": "OmniConductor hub: runners, hàng đợi tác vụ và hội đồng, trực tiếp", + "runners": "Người Chạy", + "tasks": "Công Việc", + "colName": "Tên", + "colClis": "CLIs", + "colStatus": "Trạng Thái", + "colTask": "Nhiệm vụ", + "colMode": "Chế Độ", + "colRunner": "Người Chạy", + "colSummary": "Tóm tắt", + "online": "trực tuyến", + "offline": "ngoại tuyến", + "draining": "rút nước", + "hubOffline": "Cổng thông tin điều khiển ngoại tuyến hoặc chưa được cấu hình (CONDUCTOR_HUB_URL) — không hiển thị gì ngoài dữ liệu cũ.", + "noRunners": "Chưa có người chạy nào được đăng ký", + "noTasks": "Chưa có tác vụ nào", + "detailTitle": "Chi tiết nhiệm vụ", + "prompt": "Lời Nhắc", + "branch": "Nhánh", + "fetchHint": "Lấy kết quả với: git fetch origin {branch}", + "council": "Hội Đồng", + "candidates": "Ứng viên", + "cancel": "Hủy tác vụ", + "cancelConfirmTitle": "Hủy bỏ nhiệm vụ này?", + "cancelConfirmMessage": "Hub sẽ hủy bỏ việc thực thi trên runner. Điều này không thể hoàn tác.", + "cancelFailed": "Trung tâm đã từ chối việc hủy bỏ", + "close": "Đóng", + "error": "Lỗi", + "faroTitle": "Faro — người phát ngôn đội tàu", + "faroSubtitle": "Trò chuyện và giọng nói, gắn liền với các sự kiện thực tế của đội tàu. Các lệnh hủy diệt luôn yêu cầu xác nhận.", + "faroEmpty": "Hỏi về đội tàu — ví dụ: \"đội tàu thế nào?\"", + "faroPending": "Faro đang yêu cầu xác nhận", + "faroPlaceholder": "nói chuyện với Faro…", + "faroSend": "gửi", + "faroOffline": "Faro (người phát ngôn) đang ngoại tuyến", + "yes": "Có", + "no": "Không", + "pushToTalk": "Giữ để nói", + "speakAnswers": "nói câu trả lời", + "voiceModels": "Mô hình giọng nói (nhà cung cấp/mô hình của OmniRoute này)", + "voiceIdle": "nói", + "voiceListening": "đang lắng nghe…", + "voiceThinking": "đang suy nghĩ…", + "voiceSpeaking": "đang nói…", + "sttFailed": "Chuyển đổi văn bản không thành công (kiểm tra mô hình/cung cấp STT)", + "ttsFailed": "Không thể tổng hợp giọng nói (kiểm tra mô hình/cung cấp TTS)", + "micDenied": "Microphone không khả dụng hoặc quyền bị từ chối" + }, + "cliproxyProviderExposure": { + "title": "Tiếp Xúc Nhà Cung Cấp", + "description": "Tiết lộ các mô hình CLIProxyAPI như một mục tiêu định tuyến dưới tiền tố cliproxyapi/.", + "label": "Expose dưới dạng cliproxyapi/...", + "hint": "Khi được kích hoạt, các mô hình đã phát hiện sẽ xuất hiện trong các lựa chọn nhà cung cấp trên toàn bộ OmniRoute.", + "updateFailed": "Cập nhật không thành công (HTTP {status})", + "networkError": "Lỗi mạng — không thể cập nhật cài đặt hiển thị nhà cung cấp" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 996acaa751..f0f7367f03 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -172,6 +172,18 @@ "unselectAll": "取消全选", "visibleModels": "可见", "selectAllConfirm": "将 {count} 个模型添加到此组合?", + "testSelectedProviders": "测试提供者", + "testingSelectedProviders": "测试 {done}/{total}...", + "noProvidersSelectedToTest": "请先勾选下面至少一个提供者", + "noModelsToTestForProviders": "没有可供所选提供者测试的模型", + "testSelectedProvidersResults": "{ok} 个 {total} 个模型正在工作", + "selectWorkingModels": "添加工作中", + "unselectWorkingModels": "取消选择工作", + "noWorkingModelsToSelect": "没有可添加的工作模型了", + "providerTestHint": "提示:检查提供者 → 测试 → 添加有效。再次点击以取消选择。", + "selectAllProviders": "检查所有提供者", + "clearProviderSelection": "取消选中提供者", + "providersSelectedCount": "已检查 {count} 个提供者", "errorOccurred": "错误发生", "comboDeleted": "Combo 已删除", "hide": "隐藏", @@ -275,7 +287,7 @@ "modelNamePlaceholder": "模型名称", "mcpQuickStartStep2": "MCP 快速开始步骤 2", "quickStart": "快速开始", - "fullExportFailedWithError": "完整导出失败:{error}", + "fullExportFailedWithError": "Full Export Failed With Error", "loadingBackups": "正在加载备份", "anthropicBaseUrlPlaceholder": "Anthropic 基础 URL", "description": "描述", @@ -347,7 +359,7 @@ "rerankDesc": "重排说明", "modelsPathPlaceholder": "Model 路径", "noCombosYet": "暂无 Combo", - "connectedVerificationPendingWithError": "已连接,验证待完成:{error}", + "connectedVerificationPendingWithError": "Connected Verification Pending With Error", "comboDefaultsGuideHint1": "配置 Combo 默认策略和目标。", "enableCloudTitle": "启用云端", "configuredProvidersHint": "仅显示已配置的 Provider。", @@ -357,7 +369,7 @@ "removeProviderOverrideAria": "移除提供者覆盖", "nodeVersion": "Node 版本", "openai": "OpenAI", - "exportFailedWithError": "导出失败:{error}", + "exportFailedWithError": "Export Failed With Error", "proxyConfigured": "代理已配置", "concurrencyPerModel": "每个模型并发数", "protocolTasksLabel": "协议任务标签", @@ -933,7 +945,36 @@ "batchActionCancelError": "取消批处理失败。请重试。", "batchActionRetryError": "重试失败请求失败。请重试。", "batchConceptRetentionNote": "结果和错误文件保留 30 天(Anthropic:29 天)", - "degraded": "降级" + "batchFilesSizeColumn": "大小", + "toggleNoAuthProvider": "切换无认证提供者", + "loadingModels": "加载模型…", + "selectAModel": "选择一个模型", + "degraded": "降级", + "zeroConfigBannerTitle": "以零配置模式运行", + "zeroConfigBannerBody": "OmniRoute 在首次启动时自动生成安全加密密钥。它们被保存在 {dataDir} 中。无需任何操作 — 您的数据已加密并安全。要使用自定义密钥,请将 JWT_SECRETSTORAGE_ENCRYPTION_KEY 添加到该文件中。", + "batchRelativeTimeIn": "在 {value}", + "batchRelativeTimeAgo": "{value} 之前", + "batchDetailsTitle": "批次详情", + "batchProgress": "进度", + "batchCompletedCount": "{count} 已完成", + "batchFailedCount": "{count} 失败", + "batchPendingCount": "{count} 待处理", + "batchTimeline": "时间线", + "batchTimelineInProgress": "进行中", + "batchTimelineFinalizing": "最终确定中", + "batchTimelineCompleted": "已完成", + "batchTimelineFailed": "失败", + "batchTimelineExpires": "过期", + "batchTimelineExpired": "已过期", + "batchTimelineCancelling": "取消中", + "batchTimelineCancelled": "已取消", + "batchTokenUsage": "令牌使用情况", + "batchMetadata": "元数据", + "batchFileContents": "文件内容", + "batchFileUsedByCount": "被 {count, plural, one {# 批次} other {# 批次}} 使用", + "batchFilePreview": "预览", + "batchFilePreviewTruncated": "显示前 {shown} 行(共 {total} 行)", + "batchFileDownloadFull": "下载完整文件" }, "disabled": "已禁用", "featureFlagOmnirouteEmergencyFallbackDescription": "将预算耗尽的请求路由到紧急免费备用提供者/模型。", @@ -1008,7 +1049,6 @@ "themeOrange": "橙色", "themeCyan": "青色", "cliToolsShort": "工具", - "noResults": "无结果", "cache": "缓存", "cacheShort": "缓存", "batch": "批量任务", @@ -1169,7 +1209,6 @@ "logsSubtitle": "应用日志", "logsProxySubtitle": "代理流量日志", "consoleLogsSubtitle": "控制台输出", - "logsTimelineSubtitle": "可视化请求时间线", "logsActivitySubtitle": "用户活动日志", "healthSubtitle": "系统健康检查", "costsPricingSubtitle": "按模型定价规则", @@ -1236,10 +1275,22 @@ "groupSeparatorLabel": "隔断", "discovery": "发现", "discoverySubtitle": "扫描提供者以获取免费访问", + "conductor": "导体", + "conductorSubtitle": "CLI-代理舰队", "resilienceConnections": "连接韧性", "resilienceConnectionsSubtitle": "冷却、断路器、锁定状态", "settingsModalityBridge": "模态桥", - "settingsModalityBridgeSubtitle": "图像/音频 → 仅限文本模型的文本回退" + "settingsModalityBridgeSubtitle": "图像/音频 → 仅限文本模型的文本回退", + "commandPalette": { + "title": "命令面板", + "searchPlaceholder": "搜索页面、设置、工具...", + "clearSearch": "清除搜索", + "noResults": "没有结果", + "navigate": "导航", + "open": "打开", + "close": "关闭" + }, + "noResults": "没有结果" }, "webhooks": { "title": "Webhook", @@ -1480,7 +1531,11 @@ "settings.update_failed": "设置更新失败", "sync.token.created": "同步令牌已创建", "sync.token.revoked": "同步令牌已撤销" - } + }, + "mcpMetricCalls24h": "通话 (24小时)", + "mcpMetricSuccessRate": "成功率", + "mcpMetricAvgDuration": "平均持续时间", + "mcpMetricTopTool": "顶级工具" }, "themesPage": { "title": "主题", @@ -1739,7 +1794,64 @@ "updateAvailableDesc": "有新版本可用。点击更新。", "updateStarted": "更新已开始...", "reloadingPageAutomatically": "自动重新加载页面...", - "providerTopology": "提供者拓扑" + "providerTopology": "提供者拓扑", + "downloadDmg": "下载 DMG (macOS)", + "downloadDmgDescription": "OmniRoute 桌面应用程序的新版本可用。请下载并安装 macOS DMG 安装程序以进行更新(当前版本:v{version})。", + "downloadExe": "下载 EXE(Windows)", + "downloadExeDescription": "OmniRoute桌面应用程序的新版本可用。请下载并安装Windows EXE安装程序以进行更新(当前版本:v{version})。", + "downloadAppImage": "下载 AppImage (Linux)", + "downloadAppImageDescription": "OmniRoute桌面应用的新版本可用。请下载Linux AppImage包进行更新(当前版本:v{version})。", + "downloadUpdate": "下载更新", + "downloadUpdateDescription": "OmniRoute桌面应用程序的新版本可用。请下载适合您系统的应用程序格式以进行更新(当前:v{version})。", + "updateQueued": "已排队更新到 v{version}。", + "updateDockerRebuilding": "Docker 镜像正在后台重建。", + "updateWaitingRestart": "等待 OmniRoute 使用新版本重启。", + "updateInstalling": "正在安装 v{version}。", + "updateRunning": "OmniRoute 现在正在运行 v{version}。", + "updateCompleted": "OmniRoute 已更新至 v{version}。", + "updateDockerStillRebuilding": "Docker 镜像仍在为 v{version} 重建。", + "updateInstallingBackground": "在后台安装 v{version}。", + "updateWaitingVersion": "等待 OmniRoute 在 v{version} 上恢复。", + "updateDockerStillInProgress": "Docker 重建仍在进行中。", + "updateRestarting": "服务重启中。等待 OmniRoute 重新上线...", + "updateTimeout": "更新已开始,但 v{version} 在超时之前未变为可用。请刷新页面或检查服务器日志。", + "updateTimedOut": "更新到 v{version} 超时。", + "updateStartFailed": "更新启动失败。", + "noResponseStream": "未收到响应流。", + "updateComplete": "更新完成!", + "updateFailed": "更新失败。", + "updateNetworkError": "网络错误 — 更新期间连接丢失。", + "stepInstallPackage": "安装软件包", + "stepRebuildNativeModules": "重建本地模块", + "stepRestartService": "重启服务", + "stepComplete": "完成", + "stepError": "错误", + "updateCompleteTitle": "更新完成!", + "updateFailedTitle": "更新失败", + "updatingTitle": "正在更新 OmniRoute...", + "reloadNotice": "页面将在几秒钟内自动重新加载。", + "retryNotice": "请再试一次或通过 CLI 手动更新。", + "restartNotice": "请不要关闭此页面。系统将自动重启。", + "reloadNow": "立即重新加载", + "closeUpdate": "关闭", + "retryUpdate": "重试", + "updateAvailableTitle": "可用更新:v{version}{desktop}", + "desktopAppLabel": "(桌面应用)", + "checkingForUpdates": "检查更新中...", + "versionAvailableForDownload": "版本 v{version} 可供下载。", + "downloadingUpdate": "正在下载更新... {percent}% 完成。", + "updateDownloaded": "下载成功!点击重启并安装以应用。", + "autoUpdateFailed": "自动更新失败:{reason}。", + "unknownUpdateError": "未知错误", + "versionAvailableDesktop": "桌面应用程序可用版本 v{version}。", + "manualUpdateRequired": "此安装类型需要手动更新。", + "restartAndInstall": "重启并安装", + "checkForUpdate": "检查更新", + "manualUpdate": "手动更新", + "directDownloadHint": "或直接下载相应的安装程序格式:", + "releaseNotes": "发布说明", + "readMore": "阅读更多", + "noAuthLabel": "无认证" }, "analytics": { "title": "分析", @@ -1940,7 +2052,6 @@ "comboHealthTrendValue": "趋势: {trend}", "comboHealthFetchFailed": "无法获取组合健康数据", "unknownError": "未知错误", - "freeTierAvailable": "有免费额度", "comboHealthIntro": "按组合监控配额压力、倾斜的模型使用情况以及交付性能。", "comboHealthForecastHorizon": "{value} 预测", "comboHealthNoData": "无可用组合健康数据", @@ -2063,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "推断自此请求前后的持久化调用日志", "routeRecommendations": "建议", "routeLimitations": "限制", - "routeNoKnownLimitations": "此解释没有已知的限制。" + "routeNoKnownLimitations": "此解释没有已知的限制。", + "searchAnalyticsLoading": "加载搜索分析中…", + "searchAnalyticsNoData": "尚无搜索数据可用。", + "searchAnalyticsNoDataDescription": "搜索请求将在第一次通过 /v1/search 搜索后出现在这里。", + "searchAnalyticsToday": "今天 {count}", + "searchAnalyticsCachedRequests": "{count} 缓存请求", + "searchAnalyticsApiCosts": "搜索 API 成本", + "searchAnalyticsErrors": "{count} 个错误", + "searchAnalyticsNoErrors": "没有错误", + "searchAnalyticsProviderBreakdown": "提供者细分", + "searchAnalyticsQueries": "查询", + "searchAnalyticsEmptyDescription": "使用 POST /v1/search 开始路由网页搜索。", + "searchAnalyticsFreeTier": "可用的免费套餐: Serper (每月 2,500 次),Brave (每月 2,000 次),Exa (每月 1,000 次),Tavily (每月 1,000 次) — 每月总计 6,500 次以上的免费搜索,带自动故障转移。", + "autoRoutingNoDataAvailable": "没有可用的自动路由分析。使用 auto/ 前缀发出请求以查看指标。", + "defaultVariantLabel": "默认", + "freeTierAvailable": "免费套餐可用" }, "apiManager": { "title": "API 密钥", @@ -2128,7 +2254,7 @@ "savePermissions": "保存权限", "endpointRestrictions": "允许的端点", "allEndpointsAllowed": "此密钥可以访问所有 API 端点。", - "endpointsRestricted": "仅限 {count} 个端点。", + "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "自动解析", "autoResolveDesc": "为这个 API 密钥自动将有歧义的模型名解析到原生提供者。", "streamDefaultMode": "流默认兼容性", @@ -2352,10 +2478,9 @@ "providerCount": "{count} 个提供者", "imageToTextBridgeAvailable": "Modality Bridge 现在可以为仅文本模型描述图像。当 /api/v1/images/understanding 实现时,内联游乐场将可用。", "imageToTextBridgeCta": "在模态桥设置中配置图像→文本桥接", - "sttBridgeCta": "在模态桥设置中配置语音→文本桥接器" - , - "existingConnection": "现有连接:", - "openrouterSttDescription": "OpenRouter 语音转文本模型使用您已配置的 OpenRouter 连接。无需单独的凭证。" + "sttBridgeCta": "在模态桥设置中配置语音→文本桥接器", + "existingConnection": "现有连接", + "openrouterSttDescription": "OpenRouter 语音转文本模型使用您配置的 OpenRouter 连接。无需单独的凭据。" }, "search": { "searchQuery": "搜索词", @@ -2527,14 +2652,14 @@ "auto": "自动", "always": "始终" }, - "ccDiscoveryInfoButton": "如何在Claude Code中启用发现功能", - "ccDiscoveryInfoTooltip": "在 claude/<provider>/<model> 镜像 ID 下宣传非 Claude 模型,以便 Claude Code 的网关模型发现可以列出它们。启用全局时会为所有客户端双重目录条目。", + "ccDiscoveryInfoButton": "如何在 Claude Code 中启用发现", + "ccDiscoveryInfoTooltip": "将非 Claude 模型以 claude/<provider>/<model> 镜像 ID 发布,让 Claude Code 的网关模型可以发现它们。全局启用会使所有客户端的目录条目翻倍。", "ccDiscoveryInfoLink": "打开功能标志", - "ccOnboardingTitle": "gateway 模型发现的 settings.json", + "ccOnboardingTitle": "网关模型发现的 settings.json", "ccOnboardingCopy": "复制", "ccOnboardingCopied": "已复制", - "ccOnboardingKeyPlaceholder": "<您的 OmniRoute API 密钥>", - "ccOnboardingWindowNote": "Claude Code 假设对于任何未识别的模型 ID,使用 200K 上下文窗口。对于具有不同实际窗口的模型,请在其下方添加 CLAUDE_CODE_AUTO_COMPACT_WINDOW,以便自动压缩不会过早触发。", + "ccOnboardingKeyPlaceholder": "<你的 OmniRoute API 密钥>", + "ccOnboardingWindowNote": "Claude Code 对所有不认识的模型 ID 都假设 200K 上下文窗口。如果模型的实际窗口不同,请在下方添加 CLAUDE_CODE_AUTO_COMPACT_WINDOW,这样自动压缩就不会过早触发。", "failedSave": "保存失败", "profileSyncTitle": "CLI 配置文件自动同步", "profileSyncDescription": "在提供者模型同步后,自动从实时目录重新生成 CLI 工具配置文件。默认关闭 — 仅写入配置文件;绝不会更改活动/默认配置。", @@ -2940,24 +3065,24 @@ "hermesRoleMcpDesc": "MCP 服务器工具调用", "hermesRoleTitleGeneration": "标题生成", "hermesRoleTitleGenerationDesc": "会话标题生成", - "hermesRoleMemoryQueryRewrite": "内存查询重写", - "hermesRoleMemoryQueryRewriteDesc": "内存搜索查询重写", + "hermesRoleMemoryQueryRewrite": "记忆查询重写", + "hermesRoleMemoryQueryRewriteDesc": "记忆搜索查询重写", "hermesRoleTtsAudioTags": "TTS 音频标签", "hermesRoleTtsAudioTagsDesc": "TTS 音频标签生成", - "hermesRoleTriageSpecifier": "分类说明符", - "hermesRoleTriageSpecifierDesc": "问题和 PR 分类规范", + "hermesRoleTriageSpecifier": "分类指定器", + "hermesRoleTriageSpecifierDesc": "Issue 和 PR 分类指定", "hermesRoleKanbanDecomposer": "看板分解器", "hermesRoleKanbanDecomposerDesc": "看板任务分解", - "hermesRoleProfileDescriber": "个人资料描述器", - "hermesRoleProfileDescriberDesc": "用户个人资料描述", - "hermesRoleGoalJudge": "目标评估器", - "hermesRoleGoalJudgeDesc": "目标完成评估", + "hermesRoleProfileDescriber": "档案描述器", + "hermesRoleProfileDescriberDesc": "用户档案描述", + "hermesRoleGoalJudge": "目标评判", + "hermesRoleGoalJudgeDesc": "目标完成度评判", "hermesRoleCurator": "策展人", - "hermesRoleCuratorDesc": "技能和记忆策划", + "hermesRoleCuratorDesc": "技能和记忆策展", "hermesRoleMonitor": "监视器", - "hermesRoleMonitorDesc": "后台监控", + "hermesRoleMonitorDesc": "后台监视", "hermesRoleBackgroundReview": "背景审查", - "hermesRoleBackgroundReviewDesc": "背景代码审查", + "hermesRoleBackgroundReviewDesc": "后台代码审查", "hermesSelectBeforePreview": "在预览之前,请为角色选择模型,或确保角色已加载。", "hermesPreviewFailed": "生成预览失败", "hermesSavedTo": "已保存至 {path}", @@ -2992,36 +3117,29 @@ "copilotReloadInstruction": "然后重新加载 VS Code 并在输入提示框中设置 API 密钥。", "wireApiChatCompletions": "聊天完成 (/chat/completions)", "wireApiResponses": "响应 API (/responses)", - "ccDiscoveryInfoButton": "如何在 Claude Code 中启用发现", - "ccDiscoveryInfoTooltip": "将非 Claude 模型以 claude/<provider>/<model> 镜像 ID 发布,让 Claude Code 的网关模型可以发现它们。全局启用会使所有客户端的目录条目翻倍。", - "ccDiscoveryInfoLink": "打开功能标志", - "ccOnboardingTitle": "网关模型发现的 settings.json", - "ccOnboardingCopy": "复制", - "ccOnboardingCopied": "已复制", - "ccOnboardingKeyPlaceholder": "<你的 OmniRoute API 密钥>", - "ccOnboardingWindowNote": "Claude Code 对所有不认识的模型 ID 都假设 200K 上下文窗口。如果模型的实际窗口不同,请在下方添加 CLAUDE_CODE_AUTO_COMPACT_WINDOW,这样自动压缩就不会过早触发。", - "hermesRoleBackgroundReview": "背景审查", - "hermesRoleBackgroundReviewDesc": "后台代码审查", - "hermesRoleCurator": "策展人", - "hermesRoleCuratorDesc": "技能和记忆策展", - "hermesRoleGoalJudge": "目标评判", - "hermesRoleGoalJudgeDesc": "目标完成度评判", - "hermesRoleKanbanDecomposer": "看板分解器", - "hermesRoleKanbanDecomposerDesc": "看板任务分解", - "hermesRoleMcp": "MCP", - "hermesRoleMcpDesc": "MCP 服务器工具调用", - "hermesRoleMemoryQueryRewrite": "记忆查询重写", - "hermesRoleMemoryQueryRewriteDesc": "记忆搜索查询重写", - "hermesRoleMonitor": "监视器", - "hermesRoleMonitorDesc": "后台监视", - "hermesRoleProfileDescriber": "档案描述器", - "hermesRoleProfileDescriberDesc": "用户档案描述", - "hermesRoleTitleGeneration": "标题生成", - "hermesRoleTitleGenerationDesc": "会话标题生成", - "hermesRoleTriageSpecifier": "分类指定器", - "hermesRoleTriageSpecifierDesc": "Issue 和 PR 分类指定", - "hermesRoleTtsAudioTags": "TTS 音频标签", - "hermesRoleTtsAudioTagsDesc": "TTS 音频标签生成" + "cliproxyapiActionFailed": "操作失败", + "cliproxyapiActionSucceeded": "操作成功", + "cliproxyapiCheckUpdates": "检查更新", + "cliproxyapiDescription": "上游代理回退(基于 Go 的 OAuth)", + "cliproxyapiHealth": "健康", + "cliproxyapiHealthy": "健康", + "cliproxyapiInstall": "安装", + "cliproxyapiNotInstalledValue": "未安装", + "cliproxyapiPort": "端口", + "cliproxyapiRequestFailed": "请求失败", + "cliproxyapiRestart": "重启", + "cliproxyapiStart": "开始", + "cliproxyapiStatusError": "错误", + "cliproxyapiStatusInstalled": "已安装", + "cliproxyapiStatusNotInstalled": "未安装", + "cliproxyapiStatusRunning": "运行中", + "cliproxyapiStatusStopped": "已停止", + "cliproxyapiStop": "停止", + "cliproxyapiUnhealthy": "不健康", + "cliproxyapiUnknown": "未知", + "cliproxyapiUpdate": "更新", + "cliproxyapiUpdateAvailable": "可用更新:v{current} → v{latest}", + "cliproxyapiVersion": "版本" }, "combos": { "title": "组合", @@ -3309,16 +3427,16 @@ "routingInputsHint": "模式包与权重保留在此处;熔断器运行状态保留在健康页面。", "emailVisibilityHint": "此处账号邮箱遵循全局隐私开关。", "emailVisibilityTooltip": "使用眼睛图标可在组合、提供者与配额页面间全局切换账号邮箱的显示与隐藏。", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "逐步 (提供者 → 模型)", + "builderModeGlobal": "全局模型搜索(自定义组合)", + "builderGlobalSearchPlaceholder": "在所有提供者中搜索模型(例如 opus、sonnet、deepseek、kimi、qwen)...", + "builderGlobalAddAll": "添加全部", + "builderGlobalShortcuts": "快捷键:", + "builderGlobalNoResults": "未找到\"{query}\"的模型。", + "builderGlobalProviderLabel": "提供者:", + "builderGlobalAccountCount": "{count, plural, one {# 个账户} other {# 个账户}}", + "builderGlobalAdded": "已添加", + "builderGlobalAdd": "添加", "manualModel": "手动模型", "manualModelInvalid": "请按 provider/model 格式填写。", "manualModelUnknownProvider": "未知的提供者前缀。", @@ -3363,6 +3481,7 @@ "weightStability": "稳定性", "weightTierPriority": "层级", "weightCacheAffinity": "缓存命中亲和性", + "weightSessionAvailability": "会话可用性", "reviewIntelligentTitle": "智能路由配置", "strategyRecommendations": { "priority": { @@ -3586,7 +3705,15 @@ "sessionStickinessDisabled": "会话粘性关闭", "kimiPresetTitle": "Kimi Coding 预设", "kimiPresetDescription": "以 Kimi K3 作为主模型(Moonshot API),并在配置后自动回退到您的 Kimi Code 连接(kimi-coding、kimi-web)。", - "kimiPresetCta": "添加预设" + "kimiPresetCta": "添加预设", + "intelligentComboCount": "{count, plural, one {# 个智能组合} other {# 个智能组合}}", + "providersInScope": "{count, plural, one {# 个提供者在范围内} other {# 个提供者在范围内}}", + "savingModePack": "正在保存 {pack}…", + "errorTitle": "加载组合失败", + "errorDescription": "我们现在无法加载组合数据。请检查您的连接并重试。", + "errorId": "错误 ID: {id}", + "errorRetry": "再试一次", + "comboLabel": "组合" }, "costs": { "title": "成本", @@ -3975,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "用户名", "obsidianPassword": "密码", - "obsidianTailscaleHint": "如果从移动设备连接,请使用 Tailscale IP 而非 localhost。两台设备必须在同一 Tailscale 网络中。" + "obsidianTailscaleHint": "如果从移动设备连接,请使用 Tailscale IP 而非 localhost。两台设备必须在同一 Tailscale 网络中。", + "cloudSyncNotConfigured": "此实例未配置云同步。", + "notionConnect": "连接", + "notionConnectFailed": "连接失败", + "notionConnected": "已连接", + "notionConnectionFailed": "连接失败", + "notionDescription": "通过路由的 AI 模型搜索、阅读、查询和写入 Notion", + "notionDisconnect": "断开连接", + "notionDisconnectFailed": "断开连接失败", + "notionEnterToken": "请输入 Notion 集成令牌", + "notionIntegrationHelp": "在创建内部集成时", + "notionIntegrationToken": "Notion 内部集成令牌", + "notionNotConnected": "未连接", + "notionTokenConfigured": "令牌已配置。Notion 工具可通过 MCP 使用。" }, "endpoints": { "tabProxy": "端点代理", @@ -4191,6 +4331,12 @@ "providerModelLabel": "供应商 / 模型", "noRemoteProviders": "没有配置 API 密钥的供应商", "selectProviderModel": "选择一个模型", + "customBaseUrlLabel": "自定义基础 URL(可选)", + "customModelIdLabel": "自定义模型 ID(可选)", + "customEndpointHelp": "使用与 OpenAI 兼容的 /embeddings 端点。允许使用本地端点;云元数据目标被阻止。", + "customEndpointSave": "应用自定义端点", + "customEndpointInvalid": "输入有效的 HTTP(S) 基础 URL 和模型 ID,或者将两个字段都留空。", + "customEndpointSaveFailed": "自定义嵌入端点无法保存。", "staticEnabledLabel": "启用静态药水", "staticEnabledDesc": "在本地下载并使用 potion-base-8M 模型", "transformersEnabledLabel": "启用 Transformers.js", @@ -4270,9 +4416,7 @@ "enableDesc": "启用后,Qdrant 将作为主要向量存储使用", "banner": "第 2 层向量存储 — 内置 sqlite-vss 的外部可扩展替代方案", "hostHelp": "本地 Docker:http://localhost:6333 — Qdrant Cloud:您的集群 URL", - "hostLabel": "主机", "collectionHelp": "任意名称 — OmniRoute 在首次使用时自动创建", - "collectionLabel": "集合", "embeddingModelHelp": "首次使用时自动设置向量维度。现有记忆不会回溯填充,数据存在后更改模型需要新建集合。", "testConnection": "测试连接", "testing": "测试中...", @@ -4299,7 +4443,9 @@ "cleaning": "清理中...", "cleanNow": "立即清理", "cleanupSuccess": "已移除 {count} 点数", - "cleanupFailed": "清理失败" + "cleanupFailed": "清理失败", + "hostLabel": "主机", + "collectionLabel": "集合" }, "rerank": { "enableLabel": "启用重新排序", @@ -4797,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 层回退图", "apiKeyMgmt": "API密钥管理", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "设置免费提供者", + "description": "可选启用所选的无注册提供者。在继续之前,请查看每个提供者的通知和网站;可用性和速率限制由第三方控制。", + "loading": "加载免费提供者...", + "loadFailed": "无法加载免费提供者。", + "alreadyConfigured": "所有符合条件的免费提供者已配置完毕。", + "reviewProviderSite": "查看提供者网站和条款", + "confirmation": "我审核了这些第三方提供者,并希望 OmniRoute 创建所选的连接。", + "setupSelected": "设置所选提供者", + "settingUp": "正在设置...", + "setupFailed": "无法设置所选的提供程序。现有内容没有更改。", + "retryFailed": "重试失败的提供者", + "orUseApiKey": "或使用 API 密钥连接", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "已创建", + "skipped": "已配置", + "failed": "失败" } } }, @@ -4901,8 +5047,8 @@ "reorderByAvailabilityError": "按可用性重新排序连接失败", "distributeProxies": "分配代理", "distributing": "分配中...", - "selectedCount": "已选 {count} 个", - "accountsCount": "{count} 个账户", + "selectedCount": "{count, plural, one {# selected} other {# selected}}", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", "testAllOAuth": "测试所有 OAuth 连接", "testAllFree": "测试所有免费连接", "testAllApiKey": "测试所有 API 密钥连接", @@ -5281,18 +5427,18 @@ "interceptFetchHint": "将原生的 web_fetch 工具调用重写为 OmniRoute 的 /v1/web/fetch。", "interceptionLoadError": "加载拦截设置失败:{error}", "interceptionSaveError": "保存拦截设置失败:{error}", - "ccAliasSectionTitle": "在Claude Code中暴露 (claude/…)", - "ccAliasSectionHint": "在 claude/<provider>/<model> 镜像 ID 下宣传此提供者的模型,以便 Claude Code 的网关模型发现可以列出它们。默认情况下关闭 — 启用此选项会使所有客户端的目录条目翻倍。", - "ccAliasProviderLevelLabel": "提供者默认", - "ccAliasModelOverridesLabel": "每个模型的覆盖设置", - "ccAliasModelOverrideAriaLabel": "{modelId} 的覆盖", + "ccAliasSectionTitle": "在 Claude Code 中暴露 (claude/…)", + "ccAliasSectionHint": "将该提供者的模型以 claude/<provider>/<model> 镜像 ID 发布,让 Claude Code 的网关模型可以发现它们。默认关闭 — 启用会使所有客户端的目录条目翻倍。", + "ccAliasProviderLevelLabel": "提供者默认值", + "ccAliasModelOverridesLabel": "按模型覆盖", + "ccAliasModelOverrideAriaLabel": "覆盖 {modelId}", "ccAliasStateInherit": "继承", - "ccAliasStateOn": "开", + "ccAliasStateOn": "开启", "ccAliasStateOff": "关闭", - "ccAliasAddModelPlaceholder": "模型 ID(例如:gpt-4o)", + "ccAliasAddModelPlaceholder": "模型 ID (例如 gpt-4o)", "ccAliasAddModelButton": "添加覆盖", - "ccAliasLoadError": "无法加载 discovery-alias 设置: {error}", - "ccAliasSaveError": "无法保存 discovery-alias 设置: {error}", + "ccAliasLoadError": "加载发现别名设置失败: {error}", + "ccAliasSaveError": "保存发现别名设置失败: {error}", "compatUpstreamHeadersLabel": "上游额外请求头", "compatUpstreamHeadersHint": "与修改厂商连接/API 配置同属高权限能力,仅可信管理员应使用。这些头会在 OmniRoute 按厂商 API Key 自动加好鉴权头之后再合并。若「名称」与系统已加的头相同(例如都叫 Authorization),则以你填的值为准,会整段替换自动那条(含 Bearer 令牌),上游请求里不再使用面板里保存的密钥来生成 Authorization。填错可能导致 401,请谨慎。每个请求头单独一行;部分网关需要额外 Authentication 等可在此加。鼠标移入或聚焦「值」可暂时看明文。点空白处、关闭本面板或切走焦点即保存。", "compatUpstreamHeaderName": "请求头名称", @@ -5356,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} 兼容(产品)", "tokenRefreshed": "Token 刷新成功", "tokenRefreshFailed": "Token 刷新失败", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "会话已是当前状态", "applyCodexAuthLocal": "应用认证", "exportCodexAuthFile": "导出认证", "applyClaudeAuthLocal": "申请授权", @@ -5721,7 +5867,7 @@ "zedImportHint": "从 Zed 配置中导入 Provider。", "zedImportNetworkError": "Zed 导入网络错误", "zedImportNone": "没有可从 Zed 导入的内容", - "zedImportSuccess": "Zed导入成功", + "zedImportSuccess": "Imported {credentials} credential(s) from Zed for {providers} provider(s)", "zedImporting": "正在从Zed导入", "zedNoCredentials": "在钥匙串中未找到 Zed 凭据", "zedUnsupportedCredentials": "找到 {count} 个钥匙串凭据,但没有与支持的提供者匹配的凭据", @@ -5730,9 +5876,9 @@ "zedPasteApiKey": "粘贴 API 密钥…", "zedSaving": "正在保存…", "zedImportAction": "导入", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "启用自动光标会话续订", + "cursorAgentNudgeBody": "安装 cursor-agent 以实现自动会话续订 — 如果没有它,Cursor 连接大约每 24 小时需要手动重新连接一次。", + "cursorAgentNudgeDismiss": "关闭", "zedManualImportFailed": "手动导入失败", "zedManualImportSuccess": "已从 Zed 导入 {provider} 令牌", "grokImportTitle": "导入 Grok Build 身份验证", @@ -5920,7 +6066,6 @@ "friendliai": "无服务器推理免费层 — 无需信用卡", "gemini": "永久免费:Gemini 2.5 Flash 每天 1,500 次请求 — 无需信用卡,在 aistudio.google.com 获取密钥", "gigachat": "使用 API 密钥连接 GigaChat (Sber)。", - "github-models": "在 github.com/settings/tokens 创建具有 'models: read' 作用域的 GitHub PAT", "gitlab": "用于公共 Code Suggestions API 的 GitLab 个人访问令牌。不使用 gitlab.com 时请配置自托管 Base URL。", "gitlawb-gmi": "从 Gitlawb Opengateway 控制面板获取您的 API 密钥。", "gitlawb": "从 Gitlawb Opengateway 控制面板获取您的 API 密钥。", @@ -6059,7 +6204,8 @@ "kimi-coding": "使用现有的 OAuth 流程连接 Kimi Coding。", "kiro": "免费层:50 积分/月(约 25K–100K 令牌)。⚠️ Kiro 服务条款禁止使用第三方代理/测试框架。", "codex": "使用现有的 OAuth 流程连接 OpenAI Codex。", - "qwen": "使用现有的 OAuth 流程连接 Qwen Code。" + "qwen": "使用现有的 OAuth 流程连接 Qwen Code。", + "github-models": "在 github.com/settings/tokens 创建具有 'models: read' 作用域的 GitHub PAT" }, "passthroughModelsDescription": "{provider} 接受供应商本机模型 ID。从 /models 导入或添加用于路由的自定义 ID。", "bedrockModelsDescription": "Amazon Bedrock 模型的范围按 AWS 区域划分。从 /models 导入或添加在所选区域中启用的基岩模型 ID。", @@ -6105,8 +6251,8 @@ "overrideBaseUrlAdvanced": "高级:覆盖基础 URL", "overrideBaseUrlHint": "高级:将此内置提供者指向自定义端点。留空以使用默认值。", "apiProtocolLabel": "API 协议", - "apiProtocolDefault": "OpenAI兼容(默认)", - "apiProtocolHint": "某些提供者通过多个协议发布相同的模型。除非您需要替代方案,否则请保留默认设置。", + "apiProtocolDefault": "OpenAI 兼容(默认)", + "apiProtocolHint": "一些提供者通过多种协议发布相同的模型。除非您需要备选协议,否则请保留默认设置。", "bulkAddFormatHintCloudflare": "每行一个密钥。格式:name|accountId|apiKey(Cloudflare 账户 ID + API 令牌)。", "lmarenaWebCookieHint": "打开 arena.ai,登录,然后从网络请求中复制完整的 Cookie 请求头。包含 arena-auth-prod-v1.0 和 arena-auth-prod-v1.1(如果存在更多分块也一并包含),最好附带 cf_clearance。请勿仅粘贴空的 arena-auth-prod-v1 cookie。可选:如果 create-evaluation 仍返回 403,可提供 providerSpecificData.recaptchaV3Token。", "kimiOfficialSupporterBadge": "创始好友", @@ -6118,25 +6264,78 @@ "anonymousFallbackDesc": "当所有配置的连接耗尽(配额、积分或到期)时,临时使用此提供者的无密钥层。关闭以跳过此提供者,而不是发送匿名请求 — 当无密钥层拒绝它们时(401)建议使用。", "anonymousFallbackEnabled": "为 {provider} 启用匿名回退", "anonymousFallbackDisabled": "已禁用 {provider} 的匿名回退 — 耗尽的连接将跳过此提供者", - "anonymousFallbackUpdateFailed": "无法更新匿名回退设置" - , - "ccAliasSectionTitle": "在 Claude Code 中暴露 (claude/…)", - "ccAliasSectionHint": "将该提供者的模型以 claude/<provider>/<model> 镜像 ID 发布,让 Claude Code 的网关模型可以发现它们。默认关闭 — 启用会使所有客户端的目录条目翻倍。", - "ccAliasProviderLevelLabel": "提供者默认值", - "ccAliasModelOverridesLabel": "按模型覆盖", - "ccAliasModelOverrideAriaLabel": "覆盖 {modelId}", - "ccAliasStateInherit": "继承", - "ccAliasStateOn": "开启", - "ccAliasStateOff": "关闭", - "ccAliasAddModelPlaceholder": "模型 ID (例如 gpt-4o)", - "ccAliasAddModelButton": "添加覆盖", - "ccAliasLoadError": "加载发现别名设置失败: {error}", - "ccAliasSaveError": "保存发现别名设置失败: {error}", - "apiProtocolDefault": "OpenAI 兼容(默认)", - "apiProtocolHint": "一些提供者通过多种协议发布相同的模型。除非您需要备选协议,否则请保留默认设置。", - "apiProtocolLabel": "API 协议", - "upstreamProxyManagedTitle": "通过上游代理设置管理", - "upstreamProxyManagedDescription": "CLIProxyAPI 作为上游代理层配置,而非直接提供者连接。在 CLI 工具中管理二进制/运行时,并通过提供者代理控件在每个提供者上启用代理路由。" + "anonymousFallbackUpdateFailed": "无法更新匿名回退设置", + "batchDeleteFailed": "批量删除失败", + "batchDeleteNetworkError": "批量删除时网络错误", + "batchUpdateFailed": "批量更新失败", + "batchUpdateNetworkError": "批量更新期间网络错误", + "categoryAudio": "音频", + "categoryCloudAgent": "云代理", + "categoryIde": "集成开发环境", + "categoryLocal": "本地", + "categorySearch": "搜索", + "categoryWebCookie": "网络 Cookie", + "claudeExtraUsageBlockingDisabled": "Claude 超额使用阻止已禁用(允许超额使用)", + "claudeExtraUsageBlockingEnabled": "已启用 Claude 超额使用阻止(超额使用将被阻止)", + "claudeRoutingPreferenceDisabled": "未加前缀的Claude模型不再偏好Claude Code", + "claudeRoutingPreferenceEnabled": "未加前缀的Claude模型现在更倾向于Claude Code", + "clearMediaFilter": "清除", + "cliproxyRoutingDisabled": "请求现在使用原生 OmniRoute(直接)", + "cliproxyRoutingEnabled": "请求现在通过 CLIProxyAPI 路由(更深层次的仿真)", + "codexLimitPolicyUpdated": "Codex 限制政策已更新", + "codexServiceModeUpdated": "Codex 服务模式已更新", + "codexServiceTierActive": "Codex {tier} 服务等级已激活", + "codexTierFastLabel": "快速", + "codexTierFlexLabel": "灵活", + "commandCodeApplyFailed": "无法应用命令代码认证", + "commandCodeApplyingApproval": "浏览器已批准,正在应用…", + "commandCodeApplyingKey": "应用浏览器批准的密钥…", + "commandCodeApprovalInstructions": "打开认证 URL,批准访问,然后将返回的密钥/JSON/URL 粘贴到下面…", + "commandCodeAuthExpired": "命令代码认证已过期", + "commandCodeConnected": "命令代码已连接", + "commandCodeConnectionAdded": "命令代码连接已添加", + "commandCodeLinkExpired": "命令代码链接已过期", + "commandCodeOpeningStudio": "正在打开 Command Code Studio…", + "commandCodePopupBlocked": "弹出窗口被阻止。请允许弹出窗口,然后再次尝试 Command Code Connect。", + "commandCodeStartFailed": "无法启动命令代码 auth", + "connectionDeleted": "连接已删除", + "connectionFallback": "连接", + "coolingConnectionsDescription": "这些连接在最后一次请求时返回了429(速率限制)。OmniRoute将在计时器到期之前跳过它们 — 无需手动禁用。", + "coolingConnectionsTitle": "当前冷却中 ({count})", + "failedDeleteAlias": "删除别名失败", + "failedDeleteConnection": "无法删除连接", + "failedDistributeProxies": "无法分配代理。", + "failedSaveModelEndpointSettings": "无法保存模型端点设置", + "failedUpdateClaudeExtraUsagePolicy": "无法更新 Claude 额外使用政策", + "failedUpdateClaudeRoutingPreference": "无法更新 Claude Code 路由偏好设置", + "failedUpdateCliproxyRouting": "无法更新 CLIProxyAPI 路由", + "failedUpdateCodexLimitPolicy": "无法更新 Codex 限制策略", + "failedUpdateCodexServiceMode": "无法更新 Codex 服务模式", + "filterByMedia": "媒体", + "freeBadge": "免费", + "kimiCodeApiKeyLabel": "Kimi Code API 密钥", + "modelTestFailed": "模型测试失败", + "modelTestNetworkError": "网络错误测试模型", + "networkError": "网络错误", + "networkErrorDeletingAlias": "删除别名时网络错误", + "networkErrorSettingAlias": "设置别名时网络错误", + "noProvidersMatch": "没有提供者匹配您的搜索。", + "noSavedProxies": "未找到已保存的代理。请先在设置 → 代理中添加代理。", + "pageLoadErrorDescription": "我们现在无法加载提供者数据。请检查您的连接并重试。", + "pageLoadErrorId": "错误 ID: {id}", + "pageLoadErrorRetry": "再试一次", + "pageLoadErrorTitle": "加载提供程序失败", + "playgroundTitle": "游乐场", + "providerDetailConnectionFlexActive": "Codex flex 服务层已为此连接激活", + "providerDetailConnectionPriorityActive": "Codex 优先服务级别已为此连接激活", + "providerDetailGlobalFlexActive": "全球 Codex Flex 服务层已激活", + "providerDetailGlobalPriorityActive": "全球法典优先服务级别已激活", + "proxiesDistributed": "在 {tagLabel}{total} 个连接中分配了 {assigned} 个代理分配。", + "rerankEndpoint": "重新排序", + "savedModelEndpointSettings": "已保存的模型端点设置", + "searchByModelAria": "按型号搜索", + "selectSupportedEndpoint": "请选择至少一个支持的端点", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "设置", @@ -6520,7 +6719,24 @@ "loadFailed": "加载订阅列表失败", "toggleFailed": "切换开关失败", "refreshFailed": "刷新失败", - "deleteFailed": "删除失败" + "deleteFailed": "删除失败", + "add": "添加", + "cancel": "取消", + "configure": "配置", + "copyEndpoint": "复制端点", + "coreEndpointHint": "核心端点提示", + "coreNodesHint": "核心节点提示", + "create": "创建", + "deleteConfirm": "删除确认", + "empty": "空的", + "globalModeDescription": "全局模式描述", + "localCoreHint": "本地核心提示", + "nodeSummary": "节点摘要", + "providerRequired": "需要提供者", + "providerRouting": "提供者路由", + "refresh": "刷新", + "refreshInterval": "刷新间隔", + "ruleModeDescription": "规则模式描述" }, "bulkHealthcheck": "批量健康检查", "bulkHealthcheckDesc": "针对目标 URL 测试所有已配置代理,找出可用代理。", @@ -7171,8 +7387,6 @@ "qdrantSaved": "配置已保存", "qdrantSaveError": "保存配置失败", "qdrantHostHint": "没有端口。示例:127.0.0.1 或 http://qdrant", - "qdrantHost": "主机", - "qdrantCollection": "集合", "qdrantPort": "港口", "qdrantPortHint": "Qdrant 默认值:6333", "qdrantCollectionHint": "存储点的位置。", @@ -7271,14 +7485,6 @@ "oneproxySyncStatusTitle": "同步状态", "oneproxySuccess": "成功", "oneproxyFailed": "失败", - "oneproxyActive": "活跃", - "oneproxyHost": "主机", - "oneproxyProtocol": "协议", - "oneproxyCountry": "国家", - "oneproxyQuality": "质量", - "oneproxyLatency": "延迟", - "oneproxyAnonymity": "匿名性", - "oneproxyActions": "操作", "routingAntigravitySignatureTitle": "反重力签名缓存模式", "routingAntigravitySignatureDesc": "控制 OmniRoute 在 Antigravity 兼容的工具调用流程中是仅复用已存储的 Gemini thought 签名,还是接受经校验的客户端提交签名。", "routingAntigravitySignatureEnabledLabel": "启用", @@ -7304,6 +7510,8 @@ "visionBridgeDesc": "在将图像请求路由到纯文本模型之前,自动执行一次视觉到文本的回退。", "visionBridgeEnabledLabel": "启用", "visionBridgeEnabledDesc": "切换预调用桥接,将图像内容替换为提取出的文本。", + "visionBridgeRerouteTextOnlyLabel": "重新路由文本模型", + "visionBridgeRerouteTextOnlyDesc": "当所选模型没有图像输入时,将完整请求(包括图像)发送到桥接模型。", "visionBridgeModel": "桥梁模型", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "可使用任何支持视觉的 OmniRoute 模型 ID。", @@ -7532,10 +7740,6 @@ "cliproxyapiEnableFallback": "启用 CLIProxyAPI 回退", "cliproxyapiUrl": "CLIProxyAPI URL", "cliproxyapiStatus": "CLIProxyAPI 状态", - "cliproxyapiStatusLabel": "状态", - "cliproxyapiVersion": "版本", - "cliproxyapiHealth": "健康", - "cliproxyapiPort": "端口", "cliproxyapiNotDetected": "未检测到", "cliproxyapiImportAuthTitle": "从 CLIProxyAPI 导入账户", "cliproxyapiImportAuthDesc": "将 CLIProxyAPI 已保存在 ~/.cli-proxy-api/ 中的 OAuth 账户作为 OmniRoute 连接导入,这样您无需重新登录每个账户。支持的账户类型(Gemini、Codex、Claude、Antigravity、Qwen、Kimi)将被导入,其他类型跳过。", @@ -7670,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API 密钥缺少 manage 范围。", "BYPASS_PREFIX_NOT_ALLOWED": "其中一个或多个前缀指向可创建子进程的路由,无法被绕过。", "GENERIC": "更新授权设置失败。" - } + }, + "remove": "移除" }, "resilienceBaseCooldownLabel": "基础冷却时间", "scopeLabel": "适用范围", @@ -7811,13 +8016,6 @@ "modalityBridgeSubTabsAria": "模态桥部分", "modalityBridgeVisionTitle": "视觉桥", "modalityBridgeVisionDesc": "使用视觉模型描述图像,然后继续使用用户选择的文本模型。", - "modalityBridgeAudioTitle": "音频桥接", - "modalityBridgeAudioDesc": "在继续使用所选文本模型之前,使用语音转文本模型转录音频。", - "modalityBridgeAudioEnabled": "启用音频桥接", - "modalityBridgeAudioEnabledDesc": "当目标模型无法处理音频时,用转录文本替换音频部分。", - "modalityBridgeAudioModel": "语音转文本模型", - "modalityBridgeAudioModelAuto": "自动(首次连接的STT提供者)", - "modalityBridgeAudioMaxClips": "每个请求的最大音频剪辑数", "modalityBridgeMode": "模式", "modalityBridgeModeAuto": "自动(推荐)", "modalityBridgeModeAutoHint": "遗留启发式:在没有凭据的情况下重新路由单个模型;否则请描述。", @@ -7848,17 +8046,107 @@ "modalityBridgeTestReroute": "桥接将请求重新路由到 {model}", "modalityBridgeTestNoop": "桥接未激活(模型可能原生支持视觉或桥接已禁用)", "modalityBridgeTestError": "测试失败:{message}", - "modalityBridgeAudioTestButton": "使用示例音频进行测试", - "modalityBridgeAudioTestRunning": "测试音频…", - "modalityBridgeAudioTestOk": "音频桥接正常 — {count} 个剪辑由 {model} 转录", - "modalityBridgeAudioTestNoop": "音频桥未激活(目标可能支持音频,但未连接STT提供者,或桥接已禁用)", - "modalityBridgeAudioTestError": "音频测试失败:{message}", "modalityBridgeAudioComingSoon": "音频桥接(语音 → 文本通过 /v1/audio/transcriptions)将在下一个版本中发布。其设置键已被保留。", "modalityBridgeVideoComingSoon": "视频桥接(帧采样 + 字幕)在待办事项中 — 请参阅问题 #9760。", "modalityBridgeMovedTitle": "Vision Bridge 已移动", "modalityBridgeMovedBody": "Vision Bridge 设置现在位于专用的 Modality Bridge 页面。", "modalityBridgeMovedCta": "打开模态桥设置", - "cliproxyapiUnknown": "未知" + "modalityBridgeAudioTitle": "音频桥接", + "modalityBridgeAudioDesc": "在继续使用所选文本模型之前,使用语音转文本模型转录音频。", + "modalityBridgeAudioEnabled": "启用音频桥接", + "modalityBridgeAudioEnabledDesc": "当目标模型无法处理音频时,用转录文本替换音频部分。", + "modalityBridgeAudioModel": "语音转文本模型", + "modalityBridgeAudioModelAuto": "自动(首次连接的STT提供者)", + "modalityBridgeAudioMaxClips": "每个请求的最大音频剪辑数", + "modalityBridgeAudioTestButton": "使用示例音频进行测试", + "modalityBridgeAudioTestRunning": "测试音频…", + "modalityBridgeAudioTestOk": "音频桥接正常 — {count} 个剪辑由 {model} 转录", + "modalityBridgeAudioTestNoop": "音频桥未激活(目标可能支持音频,但未连接STT提供者,或桥接已禁用)", + "modalityBridgeAudioTestError": "音频测试失败:{message}", + "modelRoutingDescriptionPlaceholder": "将 Opus 模型路由到 frontier 组合", + "cliproxyapiFallbackCodes": "Cliproxyapi 回退代码", + "cliproxyapiFallbackDescription": "Cliproxyapi 备用描述", + "cliproxyapiHealthLabel": "Cliproxyapi 健康标签", + "cliproxyapiImportFailed": "Cliproxyapi 导入失败", + "cliproxyapiImportResult": "Cliproxyapi 导入结果", + "cliproxyapiInvalidUrl": "Cliproxyapi 无效的 URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi 生命周期通知后", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi 生命周期通知 之前", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi 生命周期通知链接", + "cliproxyapiPortLabel": "Cliproxyapi 端口标签", + "cliproxyapiStatusLabel": "状态", + "cliproxyapiVersionLabel": "Cliproxyapi 版本标签", + "collection": "集合", + "errorPage": { + "description": "我们无法立即加载设置。请在几秒钟后重试。", + "errorId": "错误 ID: {id}", + "retry": "再试一次", + "title": "无法加载设置" + }, + "host": "主机", + "notInstalled": "未安装", + "oneproxyActions": "操作", + "oneproxyActive": "活跃", + "oneproxyAnonymity": "匿名性", + "oneproxyCountry": "国家", + "oneproxyDelete": "Oneproxy 删除", + "oneproxyEmpty": "Oneproxy 为空", + "oneproxyHost": "主机", + "oneproxyLatency": "延迟", + "oneproxyProtocol": "协议", + "oneproxyQuality": "质量", + "oneproxySyncFailed": "同步失败:{error}", + "oneproxySyncSuccess": "已同步 {total} 个代理({added} 个新代理,{updated} 个已更新)", + "proxyDocumentationSocks5DescAfter": "代理文档 Socks5 描述 之后", + "proxyFreePoolAddProxy": "代理免费池 添加代理", + "proxyFreePoolAdding": "代理免费池添加", + "proxyFreePoolSelectProxy": "代理免费池 选择代理", + "proxyStatusActive": "代理状态 活动", + "proxyStatusInactive": "代理状态不活动", + "routingAddEntry": "添加条目", + "settingSaveFailed": "设置保存失败", + "settingSaved": "设置已保存", + "skillsmpApiKeyHintAfter": ". 速率限制:{limit} 请求/天。", + "skillsmpApiKeyHintBefore": "从以下位置获取您的 API 密钥", + "syncFailed": "同步失败", + "unhealthy": "不健康", + "oneproxyDescription": "从1proxy社区平台获取并轮换免费的验证代理", + "oneproxySyncing": "同步中...", + "oneproxySyncNow": "立即同步", + "oneproxyClearAll": "清除所有", + "oneproxyGoogle": "谷歌", + "oneproxyClearAllConfirm": "清除所有 1proxy 代理?", + "memorySkillsSkillsmpDescription": "连接到 SkillsMP 以发现并从市场安装技能。", + "memorySkillsActiveProviderDescription": "选择技能页面用于搜索和安装的提供者。", + "memorySkillsSkillsmpProviderTitle": "SkillsMP 市场", + "memorySkillsSkillsmpProviderDescription": "经过身份验证的市场(使用您的 SkillsMP API 密钥)。", + "memorySkillsSkillsshProviderTitle": "skills.sh 目录", + "memorySkillsSkillsshProviderDescription": "公共目录提供者(无需 API 密钥)。", + "routingCcBridgeCatalogName": "与Anthropic兼容的CC桥接", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "使用 OAuth 签发的令牌的本地 Claude 提供者。", + "routingCcBridgeName": "Claude-Code 桥接", + "routingCcBridgeDescription": "使用 API 密钥中继端点 (anthropic-compatible-cc-*)。", + "routingCustomProviderDescription": "自定义提供者。", + "routingUnknownOpKind": "未知的操作类型: {kind}", + "routingInvalidJson": "无效的 JSON: {error}", + "routingConfigMustBeObject": "配置必须是一个 JSON 对象", + "routingEnabledMustBeBoolean": "`enabled` 必须为 true 或 false", + "routingPipelineMustBeArray": "`pipeline` 必须是 ops 的数组", + "routingPipelineTooLong": "管道不能超过 50 个操作", + "routingOpMissingKind": "操作 #{index}: 缺少或无效的 `kind`", + "routingOpUnknownKind": "操作 #{index}: 未知类型 \"{kind}\"", + "routingJsonEditorHide": "隐藏 JSON 编辑器", + "routingJsonEditorImportExport": "导入 / 导出 JSON", + "routingJsonEditorLabel": "JSON(编辑并应用,或粘贴以导入)", + "routingApplyJson": "应用 JSON", + "routingTransformsFootnote": "所有转换操作在重新运行时都是幂等的。更改将在下一个请求中立即生效。", + "cliproxyapiUnknown": "未知", + "cliproxyapiVersion": "版本", + "cliproxyapiHealth": "健康", + "cliproxyapiPort": "端口", + "qdrantHost": "主机", + "qdrantCollection": "集合" }, "contextRtk": { "title": "命令输出过滤引擎", @@ -8091,6 +8379,15 @@ "full": "完整", "ultra": "极致" } + }, + "modeOptions": { + "default": "默认", + "off": "关闭", + "lite": "轻量版", + "standard": "标准", + "aggressive": "激进", + "ultra": "超极", + "responsesToolOutput": "响应工具输出" } }, "contextCombos": { @@ -8213,7 +8510,6 @@ "tokensCl100k": "Token (cl100k)" }, "omniglyph": { - "title": "OmniGlyph", "preview": "预览", "description": "上下文转图像压缩。将系统提示词、工具文档和密集历史记录渲染为紧凑的 PNG 页面,供 Claude Fable 5 读取以替代文本。图像 Token 按尺寸而非字符计费,因此转换后的区块成本降低约 10 倍。仅限 Anthropic 直连路由。", "economicsTitle": "经济效益", @@ -8257,7 +8553,8 @@ "enableDescription": "在堆栈中最后运行(在 RTK/Caveman 清理文本、OmniGlyph 将剩余部分转换为图像之后),也可以通过 omniglyph 模式独立运行。此功能为预览版,在端到端验证完成前默认保持关闭。", "saved": "已保存。", "saveFailed": "无法保存。", - "enableAria": "启用 OmniGlyph 引擎" + "enableAria": "启用 OmniGlyph 引擎", + "title": "OmniGlyph" }, "embeddedServices": { "title": "嵌入式服务", @@ -9203,7 +9500,49 @@ "unableToLoad": "无法加载系统指标", "product": "产品", "resources": "资源", - "company": "公司" + "company": "公司", + "tokenHealthTooltips": { + "allHealthy": "所有令牌正常", + "needsAttention": "某些令牌需要关注", + "refreshFailures": "检测到令牌刷新失败", + "unknown": "健康状态未知" + }, + "systemMonitor": { + "metricsAriaLabel": "系统指标", + "memory": "内存", + "memoryShort": "内存", + "uptime": "正常运行时间", + "ariaLabel": "系统监控", + "title": "系统监视器", + "version": "版本", + "connections": "连接", + "circuitBreakers": "电路断路器", + "open": "{count} 打开", + "memoryUsage": "内存使用情况" + }, + "never": "从不", + "justNow": "刚刚", + "minutesAgo": "{count}分钟前", + "hoursAgo": "{count}小时前", + "tokens": "令牌", + "costs": "成本", + "autoRefresh": "自动刷新 ({seconds}s)", + "toggleAutoRefresh": "切换自动刷新", + "activeRequests": "活动请求", + "totalRequests": "总请求数", + "totalInputTokens": "总输入令牌", + "model": "模型", + "provider": "提供者", + "requests": "请求", + "lastUsed": "最后使用时间", + "inputTokens": "输入令牌", + "totalTokens": "总令牌数", + "inputCost": "输入成本", + "outputCost": "输出成本", + "noUsageData": "尚未记录使用情况。请进行一些请求以查看此处的数据。", + "account": "账户", + "accountLabel": "账户 {id}", + "noAccountUsage": "尚未记录任何特定于帐户的使用情况。请使用 OAuth 帐户进行请求以在此处查看数据。" }, "auth": { "welcome": "欢迎", @@ -9269,7 +9608,58 @@ "nodeIncompatibleTitle": "不兼容的 Node.js 版本", "nodeIncompatibleDesc": "你当前运行的是 Node.js {version},它不在 OmniRoute 支持的安全运行时策略内。请使用已打补丁的 Node.js 20.x 或 22.x LTS 版本。", "nodeIncompatibleFixLabel": "修复:安装已打补丁的 Node.js 22 LTS 版本", - "nodeIncompatibleHint": "OmniRoute 要求 Node.js 22.22.2+(22.x LTS)或 24.0.0+(24.x LTS)。为保证稳定性,建议使用 Node 24 LTS。" + "nodeIncompatibleHint": "OmniRoute 要求 Node.js 22.22.2+(22.x LTS)或 24.0.0+(24.x LTS)。为保证稳定性,建议使用 Node 24 LTS。", + "resetViaAppDataTitle": "通过应用数据重置", + "resetViaAppDataDescription": "从应用数据文件夹中删除设置文件以重置您的密码:", + "quitDesktopApp": "完全退出 OmniRoute 桌面应用程序", + "navigateToAppDataDirectory": "导航到应用数据文件夹:", + "checkSystemAppDataFolder": "(检查您的系统应用数据文件夹)", + "relaunchDesktopFreshSetup": "重新启动 OmniRoute 桌面应用程序 — 它将开始全新设置", + "alternativeSetPasswordTitle": "替代方案:设置新密码", + "alternativeSetPasswordDescription": "通过服务器环境文件设置新的初始密码:", + "openServerEnvFilePrefix": "打开", + "relaunchDesktopApp": "重新启动 OmniRoute 桌面应用程序", + "codexLinkInvalidOrExpired": "此链接无效或已过期。", + "codexValidationServerError": "无法连接到服务器以验证此链接。", + "codexSaveConnectionError": "无法保存连接。链接可能已过期。", + "codexDeviceLoginDisabled": "此 OpenAI 账户已禁用设备代码登录。请在 ChatGPT 安全设置中启用它(或询问您的工作区管理员)。", + "codexAuthorizationTimedOut": "授权已超时。点击重新开始以重试。", + "authenticationCancelled": "身份验证已被取消。", + "unexpectedAuthenticationError": "身份验证期间发生意外错误。请再试一次。", + "connectOpenAiCodexTitle": "连接 OpenAI Codex", + "codexConnectDescription": "授权一个 ChatGPT 账户以完成此连接的设置。", + "validatingCodexLink": "验证链接…", + "codexGenerateCodeDescription": "点击下面生成一次性代码,然后登录到 OpenAI。", + "startCodexFlow": "开始", + "requestingOpenAiCode": "从 OpenAI 请求代码…", + "codexVerificationInstructions": "1. 打开 OpenAI 验证页面,然后 2. 输入此代码。授权后,此页面会自动更新。", + "yourCode": "您的代码", + "openVerificationPage": "打开验证页面", + "copyUrlShort": "复制网址", + "savingConnection": "正在保存连接…", + "codexConnected": "已连接!", + "codexConnectionRegistered": "Codex 账户已注册。您可以关闭此标签页。", + "tryAgain": "再试一次", + "traeAuthorizationSuccess": "Trae 授权 ✓", + "traeAuthorizationFailed": "Trae 授权失败", + "closeAuthorizationWindow": "您可以关闭此窗口。", + "returnToDashboard": "返回仪表板。", + "resetViaAppData": "通过应用数据重置", + "deleteSettingsToReset": "从应用数据文件夹中删除设置文件以重置您的密码:", + "quitAppCompletely": "完全退出 OmniRoute 桌面应用程序", + "navigateToAppData": "导航到应用数据文件夹", + "checkAppDataFolder": "检查您的系统应用数据文件夹", + "deleteSettingsJson": "删除", + "relaunchAppFresh": "重新启动 OmniRoute 桌面应用程序 — 它将开始全新设置", + "alternativeSetPassword": "替代方案:设置新密码", + "setNewPasswordViaEnv": "通过服务器环境文件设置新的初始密码:", + "openServerEnv": "打开", + "inDataDirectory": "在数据文件夹中", + "addOrUpdate": "添加或更新", + "deleteAndRelaunch": "删除", + "settingsJson": "settings.json", + "fromDataDir": "从数据文件夹", + "relaunchApp": "重新启动 OmniRoute 桌面应用程序" }, "landing": { "brandName": "OmniRoute", @@ -9351,7 +9741,19 @@ "ctaTitle": "准备好简化你的 AI 基础设施了吗?", "ctaDescription": "加入更多开发者,一起用 OmniRoute 简化 AI 集成流程。开源且可免费开始使用。", "startFree": "免费开始", - "readDocumentation": "阅读文档" + "readDocumentation": "阅读文档", + "company": "公司", + "pricing": "定价", + "apiReference": "API 参考", + "helpCenter": "帮助中心", + "about": "关于", + "blog": "博客", + "contact": "联系", + "terms": "条款", + "privacy": "隐私", + "license": "许可证", + "footerDescription": "现代 AI 基础设施的统一接口。安全、可观察和可扩展。", + "communityDiscussions": "社区讨论" }, "docs": { "title": "文档", @@ -9560,7 +9962,51 @@ "protocolAcpDesc": "通过 ACP 注册表注册和管理 Agent,用于 Agent 间通信和工具共享。", "protocolAcpStep1": "前往仪表盘 → Agents 查看已注册的 ACP Agent。", "protocolAcpStep2": "使用能力和端点配置注册新的 Agent。", - "protocolAcpStep3": "使用 CLI 工具配置 Agent 通信通道。" + "protocolAcpStep3": "使用 CLI 工具配置 Agent 通信通道。", + "metadataTitleTemplate": "%s — OmniRoute 文档", + "metadataDefaultTitle": "OmniRoute 文档", + "metadataDescription": "OmniRoute AI 网关的全面文档 — 设置、API、压缩、部署等。", + "layoutNavTitle": "OmniRoute 文档", + "layoutHomeLink": "文档首页", + "layoutDashboardLink": "← 返回仪表板", + "homeTitle": "OmniRoute 文档", + "homeMetadataDescription": "您所需的一切来路由、压缩和扩展您的 AI — 设置指南、API 参考、压缩、部署等。", + "homeTwitterDescription": "OmniRoute AI 网关的综合文档", + "homeDescription": "您所需的一切来路由、压缩和扩展您的 AI", + "homeSearchHint": "按 Ctrl K 搜索文档", + "featuredQuickStartTitle": "快速入门", + "featuredQuickStartDescription": "在 3 分钟内启动 OmniRoute", + "featuredAutoComboTitle": "自动连击指南", + "featuredAutoComboDescription": "让 OmniRoute 为您选择最佳的 AI", + "featuredProvidersTitle": "提供者指南", + "featuredProvidersDescription": "在几分钟内连接 AI 提供者", + "nonTechUsersTitle": "针对非技术用户", + "nonTechUsersSubtitle": "快速入门 — 无需技术背景", + "techUsersTitle": "针对技术用户", + "techUsersSubtitle": "深入探讨架构、API 和内部机制", + "apiExplorerMetadataTitle": "API Explorer — OmniRoute 文档", + "apiExplorerMetadataDescription": "交互式 API 探索器 — 实时尝试 OmniRoute 端点并获取实时响应", + "apiExplorerTitle": "API 探索器", + "apiExplorerDescription": "实时尝试 OmniRoute 端点。选择一个端点,配置您的请求,并实时查看响应。", + "apiExplorerSseStarted": "SSE 流已启动 — 请检查终端/开发者工具以获取实时输出。", + "apiExplorerError": "错误: {message}", + "apiExplorerAuth": "认证", + "apiExplorerResponseLabel": "响应", + "apiExplorerSelectEndpoint": "选择一个端点进行探索", + "apiExplorerChooseApi": "从侧边栏选择一个 API 以查看详细信息并实时尝试", + "feedbackThanks": "感谢您的反馈!", + "feedbackQuestion": "这个页面有帮助吗?", + "pageMetadataTitle": "{title} — OmniRoute 文档", + "pageMetadataDescription": "OmniRoute 文档: {title}", + "breadcrumb": "面包屑导航", + "apiReferenceTable": { + "parameters": "参数", + "name": "名称", + "type": "类型", + "description": "描述", + "returns": "返回", + "typePrefix": "类型:" + } }, "legal": { "privacyPolicy": "隐私政策", @@ -10033,7 +10479,42 @@ "successMessage": "您的 {providerName} 账户已连接。", "done": "完成", "error": "连接失败", - "tryAgain": "重试" + "tryAgain": "重试", + "errorSessionIncomplete": "OAuth 会话不完整(缺少重定向 URI 或代码验证器)。请重新启动连接并重试。", + "errorExchangeFailed": "交换失败", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch:默认的 Google OAuth 凭据仅在 localhost 上有效。要进行远程使用,请通过环境变量配置您自己的 OAuth 凭据:ANTIGRAVITY_OAUTH_CLIENT_ID 和 ANTIGRAVITY_OAUTH_CLIENT_SECRET。请参阅 README 中的“在远程服务器上使用 OAuth”部分。", + "errorSaveFailed": "保存失败", + "errorAuthorizationFailed": "授权失败", + "errorAuthorizationTimeout": "授权超时", + "errorRequestFailed": "请求失败", + "errorCallbackServerFailed": "无法启动回调服务器", + "errorBrowserUnavailable": "在当前环境中,此提供者的浏览器 OAuth 不可用。请改用支持的认证方法。", + "errorStateMismatch": "OAuth 状态不匹配。请重新启动连接并重试。", + "errorImportAccessToken": "导入访问令牌失败", + "errorSessionNotInitialized": "OAuth 会话未初始化。请重新启动连接流程并重试。", + "errorNoAuthorizationCode": "未找到授权代码。粘贴回调 URL 或身份验证代码。", + "tabDeviceCode": "设备代码", + "tabBrowserLogin": "浏览器登录", + "tabImportAuthJson": "导入 auth.json", + "tabPasteApiKey": "粘贴 API 密钥", + "windsurfPasteDescription": "在 Windsurf / VS Code IDE 中,从命令面板运行 \"Windsurf: Provide Auth Token\" 命令(或点击 Jupyter \"Get Windsurf Authentication Token\" 按钮),然后复制显示的令牌并粘贴到下面。直接打开 windsurf.com/show-auth-token 只会显示一个 \"Redirecting\" 页面 — 必须由 IDE 启动该流程。", + "grokAuthJsonDescription": "粘贴 ~/.grok/auth.json 的完整内容(不仅仅是 JWT \"key\" 字段)。裸 JWT 没有 refresh_token,因此连接在过期后会中断 (#7610)。在可用时,优先使用专用的导入 auth.json 模态。", + "devinDesktopPasteDescription": "从经过身份验证的 Devin 会话中粘贴现有的 Devin API 密钥。密钥导出可用性和步骤因 Devin 版本和帐户而异。", + "devinPasteDescription": "提供您的 WINDSURF_API_KEY(通过 `devin auth login` 获取,或通过 Windsurf IDE 的 \"Windsurf: Provide Auth Token\" 命令获取)。", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok 构建 auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API 密钥 / 令牌", + "saving": "保存中…", + "saveConnection": "保存连接", + "gheDescription": "输入您的 GitHub Enterprise 实例的基础 URL(例如 https://ghe.yourcompany.com)。", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub 企业版 URL", + "gheUrlRequired": "必须提供 GitHub Enterprise URL", + "gitlabDuoSetupTitle": "GitLab Duo OAuth 设置", + "gitlabDuoSetupMessage": "GitLab Duo OAuth 尚未配置。在 {applicationsUrl} 注册一个 OAuth 应用,使用重定向 URI {redirectUri} 和范围 \"{scopes}\",然后设置 {clientIdEnv}(可选地设置 {clientSecretEnv})并重启。", + "gitlabDuoSetupDescription": "在应用程序注册并在此 OmniRoute 实例上设置环境变量后,单击继续以开始 OAuth 登录。", + "continue": "继续" }, "cursorAuthModal": { "title": "连接 Cursor IDE", @@ -10550,7 +11031,101 @@ "noMatchingLogs": "没有匹配当前筛选器的日志。", "callLogsInfo": "调用日志也保存为JSON文件到{dataDir},并根据{retentionDays}和{maxEntries}进行轮换。", "loadMore": "加载更多", - "loadingMore": "正在加载更多..." + "loadingMore": "正在加载更多...", + "correlationId": "关联 ID", + "group": { + "showAllRows": "显示所有行", + "showLatestPerCorrelation": "按关联 ID 显示最新内容", + "grouped": "分组" + }, + "running": "运行中", + "interval": { + "decrease": "减少间隔", + "title": "自动刷新间隔(秒)", + "increase": "增加间隔" + }, + "status": { + "inProgress": "进行中", + "recoveredByRetry": "通过重试恢复", + "goToParent": "转到父请求", + "healedTitle": "失败,在 {count} 次重试后恢复", + "healed": "治愈", + "failedTitle": "所有 {count} 次尝试均失败", + "failed": "失败", + "pinnedTitle": "通过上下文缓存会话固定选择的模型", + "pinned": "固定" + }, + "attempts": "尝试次数", + "detail": { + "collapse": "折叠 {title}", + "expand": "展开 {title}", + "copyTitle": "复制 {title}", + "copied": "已复制!", + "copy": "复制", + "autoscrollOn": "自动滚动:开启", + "autoscrollOff": "自动滚动:关闭", + "payload": { + "clientRawRequest": "客户端原始请求", + "clientRequest": "客户端请求", + "openaiRequest": "OpenAI 请求", + "providerRequest": "提供者请求", + "providerResponse": "提供者响应", + "clientResponse": "客户端响应", + "pipelineError": "管道错误" + }, + "payloadMissing": "此日志条目的详细有效负载工件不再可用。", + "payloadCorrupt": "无法解析详细的有效负载工件。", + "notAvailable": "不适用", + "semanticCache": "语义 (OmniRoute)", + "upstreamCache": "上游 (提供者)", + "ariaLabel": "请求日志详细信息", + "completed": "已完成", + "upstreamStatus": "上游: {status}", + "statusDiscrepancy": "OmniRoute 返回了 {status},尽管提供者返回了 {provider}", + "previousRequest": "上一个请求", + "nextRequest": "下一个请求", + "close": "关闭详细信息模态框", + "startedAt": "开始于", + "endedAt": "结束于", + "duration": "持续时间", + "model": "模型", + "provider": "提供者", + "account": "账户", + "input": "输入", + "totalIn": "总计入: {value}", + "cacheRead": "缓存读取: {value}", + "cacheWrite": "缓存写入: {value}", + "compressed": "压缩: {from} → {to} ({percent}% 节省)", + "output": "输出", + "totalOut": "总支出: {value}", + "reasoning": "推理:{value}", + "requestedModel": "请求的模型", + "requestProtocol": "请求协议", + "cacheSource": "缓存源", + "modelPinning": "模型固定", + "activeModelPinning": "活动 — 通过会话固定选择的模型", + "rotated": "旋转: {initial} -> {final}", + "apiKey": "API 密钥", + "noApiKey": "没有 API 密钥", + "combo": "组合", + "error": "错误", + "unblockAll": "解除所有阻止", + "cleared": "已清除", + "unblock": "解锁", + "relatedRequests": "相关请求 ({count})", + "current": "当前", + "detailStatus": "详细状态", + "loadingDetails": "加载请求详情...", + "providerEventStream": "提供者事件流", + "clientEventStream": "客户端事件流", + "eventStream": "事件流", + "responsePayloadLegacy": "响应有效负载(遗留)", + "requestPayloadLegacy": "请求负载(遗留)", + "noPayload": "此日志条目没有可用的有效负载数据。", + "correlationId": "关联 ID", + "correlationIdValue": "关联 ID: {id}", + "detailedPayloadInfo": "如果您想要新请求的四阶段客户端/提供者负载视图,请先启用详细日志记录。" + } }, "proxyLogger": { "filterAll": "全部", @@ -10960,7 +11535,7 @@ "providerSsrfBlocked": "已阻止对 {target} 的 SSRF 尝试", "authLoginSuccess": "{actor} 已登录", "authLoginError": "{actor} 的登录错误", - "authLoginFailed": "{name} 登录失败", + "authLoginFailed": "{actor} 登录失败", "authLoginLocked": "{actor} 在尝试次数过多后被锁定", "authLoginMisconfigured": "身份验证配置无效", "authLoginSetupRequired": "需要进行身份验证设置", @@ -11779,7 +12354,11 @@ "providerDisabled": "{provider} 已禁用", "providerAdded": "{provider} 已添加", "add": "添加", - "manualApiKey": "使用手动 API 密钥" + "manualApiKey": "使用手动 API 密钥", + "createDahlTokenFailed": "创建 Dahl 令牌失败", + "providerProxy": "代理", + "providerProxyConfigureHint": "配置代理", + "providerProxyTitleConfigured": "代理已配置:{host}" }, "gamification": { "leaderboardScopes": { @@ -11970,7 +12549,7 @@ "danger": "危险", "requiresRestart": "需要重启", "source": "来源", - "ccDiscoveryAliasesEnvWarning": "通过环境变量激活 (EXPOSE_CC_DISCOVERY_ALIASES) — 这会覆盖下面的任何仪表板切换。", + "ccDiscoveryAliasesEnvWarning": "通过环境变量 (EXPOSE_CC_DISCOVERY_ALIASES) 激活 — 这会覆盖下面的所有仪表板开关。", "resetFlag": "将 {label} 重置为默认值", "reset": "重置", "loadFailed": "加载功能标志失败", @@ -12127,8 +12706,7 @@ "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "在技能沙箱中启用网络访问。" } - }, - "ccDiscoveryAliasesEnvWarning": "通过环境变量 (EXPOSE_CC_DISCOVERY_ALIASES) 激活 — 这会覆盖下面的所有仪表板开关。" + } }, "comboControl": { "title": "组合控制中心", @@ -12264,8 +12842,6 @@ "tokensMonth": "Token/月", "credit": "{tokens} 额度", "hideTosRestricted": "隐藏受 ToS 限制项", - "noApiKeyRequired": "无需 API 密钥", - "allProviders": "所有提供者", "sort": "排序", "freeType": { "daily": "每日", @@ -12280,7 +12856,9 @@ "avoid": "受 ToS 限制 — 请查看条款", "caution": "注意 — 个人使用 / 代理条款", "ok": "总体宽松" - } + }, + "allProviders": "所有提供者", + "noApiKeyRequired": "无需 API 密钥" }, "providerHealthAutopilot": { "title": "提供者健康自动巡航", @@ -12469,7 +13047,11 @@ "on": "开启", "off": "关闭", "availableProviders": "可用提供者 ({count})", - "noProviderOverrides": "无覆盖 — 所有活跃提供者都将使用其默认模型参与" + "noProviderOverrides": "无覆盖 — 所有活跃提供者都将使用其默认模型参与", + "resetFailed": "重置失败", + "resetSuccess": "配置重置为默认值", + "running": "运行中...", + "testFailed": "测试失败" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) 是 OmniRoute 的创始开源好友", @@ -12658,15 +13240,380 @@ "capabilityFilter.visionMismatch": "提供者不支持此图像请求的视觉效果", "capabilityFilter.toolsMismatch": "提供者不支持工具调用", "capabilityFilter.structuredOutputMismatch": "提供者不支持结构化输出", - "capabilityFilter.contextWindowMismatch": "请求超出提供者上下文窗口" - , + "capabilityFilter.contextWindowMismatch": "请求超出提供者上下文窗口", + "publicSystem": { + "notFound": { + "title": "页面未找到", + "description": "您要找的页面不存在或已被移动。", + "dashboardAriaLabel": "返回仪表板", + "statusAriaLabel": "打开系统状态页面", + "systemStatus": "系统状态" + }, + "error": { + "title": "内部服务器错误", + "description": "处理您的请求时出现了问题。我们的团队已被通知并正在修复中。", + "errorId": "错误 ID: {id}", + "detailsAriaLabel": "错误详情", + "retryAriaLabel": "重试加载页面", + "tryAgain": "再试一次", + "dashboardAriaLabel": "返回仪表板", + "statusAriaLabel": "打开系统状态", + "systemStatus": "系统状态" + }, + "globalError": { + "title": "出了点问题", + "description": "发生了意外错误。此错误已被记录,我们的团队将进行调查。", + "detailsAriaLabel": "错误详情", + "retryAriaLabel": "重试加载页面", + "tryAgain": "再试一次", + "statusAriaLabel": "打开系统状态", + "systemStatus": "系统状态" + }, + "offline": { + "title": "连接问题", + "description": "OmniRoute 目前无法连接到网络。请检查您的互联网、VPN 或代理设置。", + "connectionRestored": "连接已恢复", + "offlineModeDetected": "检测到离线模式", + "retryConnection": "重试连接", + "openStatusPage": "打开状态页面" + }, + "maintenance": { + "title": "计划维护", + "description": "某些服务在维护期间暂时不可用。核心路由通常保持在线,但管理功能可能会受到影响。", + "suggestion1": "几分钟后重试。", + "suggestion2": "在重试之前,请检查当前的健康指标和提供者状态。", + "systemStatus": "查看系统状态", + "healthDashboard": "打开健康仪表板" + }, + "status": { + "title": "系统状态", + "description": "OmniRoute 核心服务的实时操作快照。", + "loadingHealth": "加载健康指标...", + "failedToLoad": "无法加载系统健康。", + "unableToReachHealth": "无法访问健康端点。检查连接并重试。", + "healthCheckFailed": "健康检查失败", + "openConnectivityHelp": "打开连接性帮助", + "maintenanceInfo": "维护信息", + "service": "服务", + "unknown": "未知", + "notAvailable": "n/a", + "providersTracked": "已跟踪的提供者", + "circuitBreakerState": "提供者电路断路器状态", + "lastUpdate": "最后更新:{timestamp}", + "uptimeMinutes": "{minutes}分钟", + "uptimeHoursMinutes": "{hours}小时 {minutes}分钟" + }, + "statusPages": { + "400": { + "title": "错误请求", + "description": "请求负载无效或不完整。", + "suggestion1": "在重试之前,请检查必填字段和有效负载格式。", + "suggestion2": "如果您正在使用 API,请在本地验证 JSON 架构。", + "suggestion3": "如果这种情况持续发生,请在翻译器游乐场中打开请求以检查有效负载。", + "primaryAction": "打开文档", + "secondaryAction": "打开翻译器" + }, + "401": { + "title": "未授权", + "description": "访问此资源需要身份验证。", + "suggestion1": "请重新登录并重试该操作。", + "suggestion2": "对于 API 调用,请确认 Bearer 令牌存在且有效。", + "suggestion3": "如果令牌最近已被轮换,请更新您的客户端凭据。", + "primaryAction": "前往登录", + "secondaryAction": "管理 API 密钥" + }, + "403": { + "title": "禁止访问", + "description": "您的请求已被理解,但由于政策原因,访问被拒绝。", + "suggestion1": "检查设置中的 IP 允许列表/阻止列表规则。", + "suggestion2": "验证分配给您的 API 密钥的模型和预算策略。", + "suggestion3": "请向管理员请求授予所需的权限范围。", + "primaryAction": "开放获取帮助", + "secondaryAction": "打开安全设置" + }, + "408": { + "title": "请求超时", + "description": "服务器未能及时收到完整的请求。", + "suggestion1": "使用更小的有效负载重试请求。", + "suggestion2": "检查您的网络稳定性和 VPN/代理延迟。", + "suggestion3": "对于长时间操作,请启用流式传输或拆分请求。", + "primaryAction": "打开端点指南", + "secondaryAction": "检查网络状态" + }, + "429": { + "title": "请求过多", + "description": "此客户端、密钥或提供者的速率限制已被超出。", + "suggestion1": "等待冷却并在建议的间隔后重试。", + "suggestion2": "切换到带有后备提供者的组合。", + "suggestion3": "在设置中调整提供者的弹性/速率限制配置文件。", + "primaryAction": "打开弹性设置", + "secondaryAction": "打开组合" + }, + "500": { + "title": "内部服务器错误", + "description": "处理您的请求时发生了意外的服务器端错误。", + "suggestion1": "几秒钟后重试一次。", + "suggestion2": "检查健康遥测和服务器日志以获取相关的请求 ID。", + "suggestion3": "如果问题持续存在,请报告该问题的时间戳和请求上下文。", + "primaryAction": "打开健康仪表板", + "secondaryAction": "打开日志" + }, + "502": { + "title": "错误的网关", + "description": "上游提供者或网关集成返回了无效响应。", + "suggestion1": "使用其他提供者或激活组合路由重试。", + "suggestion2": "检查提供者凭据和模型可用性。", + "suggestion3": "检查翻译器输出是否涉及格式转换。", + "primaryAction": "打开提供者", + "secondaryAction": "打开翻译器" + }, + "503": { + "title": "服务不可用", + "description": "由于维护或依赖项降级,服务暂时不可用。", + "suggestion1": "请稍等片刻并重试。", + "suggestion2": "检查维护通知和系统状态。", + "suggestion3": "如果您的工作流程对延迟敏感,请使用备用提供者。", + "primaryAction": "维护详情", + "secondaryAction": "系统状态" + } + } + }, + "kiroAuthModal": { + "title": "连接 {providerLabel}", + "chooseMethod": "选择您的身份验证方法:", + "builderId": "AWS Builder ID", + "builderDescription": "推荐给大多数用户。使用与 {providerLabel} 关联的 AWS 账户登录。", + "organization": "您的组织 (AWS IAM 身份中心)", + "organizationDescription": "使用您的公司 SSO 启动 URL(示例:{url})。", + "googleAccount": "谷歌账户", + "googleDescription": "使用您的 Google 账户登录。", + "githubAccount": "GitHub 账户", + "githubDescription": "使用您的 GitHub 账户登录。", + "importToken": "导入令牌", + "importDescription": "粘贴从 {providerLabel} 导出的刷新令牌。", + "apiKey": "API 密钥", + "apiKeyDescription": "粘贴一个长期有效的 {providerLabel} / CodeWhisperer API 密钥。它作为一个无刷新令牌的承载凭证存储;配置文件发现是尽力而为的。", + "idcStartUrl": "IDC 启动 URL", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "您组织的 AWS IAM 身份中心 URL", + "awsRegion": "AWS 区域", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "您的身份中心的 AWS 区域(默认:us-east-1)", + "continue": "继续", + "back": "返回", + "autoDetecting": "自动检测令牌...", + "readingCredentials": "从 AWS SSO 缓存中读取 {providerLabel} 凭证", + "tokenNotDetected": "{providerLabel} 令牌未被自动检测到。请手动粘贴您的刷新令牌。", + "refreshToken": "刷新令牌", + "tokenPlaceholder": "令牌将自动填充...", + "importing": "导入中...", + "apiKeyPlaceholder": "粘贴您的 {providerLabel} API 密钥...", + "apiKeyStoredDescription": "以长期持有的凭证形式存储加密信息。没有刷新流程。", + "apiKeyRegionDescription": "密钥的 AWS 区域(默认:us-east-1)", + "validating": "验证中...", + "validateAndSaveApiKey": "验证并保存 API 密钥", + "errorAutoDetect": "无法自动检测令牌", + "errorAutoDetectFailed": "无法自动检测令牌", + "errorRefreshTokenRequired": "请输入刷新令牌", + "errorImportFailed": "导入失败", + "errorApiKeyRequired": "请输入 Kiro API 密钥", + "errorApiKeyImportFailed": "API 密钥导入失败", + "errorIdcStartUrlRequired": "请输入您的 IDC 启动 URL" + }, + "kiroSocialOAuthModal": { + "title": "通过 {providerName} 连接 {providerLabel}", + "errorStartAuthorization": "授权启动失败", + "errorAuthorizationExpired": "授权已过期。请重新开始登录流程。", + "errorAuthorizationFailed": "授权失败", + "initializing": "初始化中...", + "settingUp": "设置 {providerName} 身份验证", + "openIncognito": "在隐身窗口中打开此链接", + "incognitoDescription": "使用隐身/私人窗口以避免与现有帐户的会话冲突。", + "copyLink": "复制链接", + "verificationCode": "验证码", + "waiting": "等待授权...", + "cancel": "取消", + "successTitle": "连接成功!", + "successMessage": "您的 {providerLabel} 账户已通过 {providerName} 连接。", + "done": "完成", + "errorTitle": "连接失败", + "close": "关闭" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "授权失败", + "errorPopupBlocked": "弹出窗口被阻止 — 允许此站点的弹出窗口,或在下面手动粘贴令牌。", + "errorPopupClosed": "授权窗口在完成之前已关闭。", + "errorAccessTokenRequired": "需要访问令牌。", + "errorImportFailed": "导入失败", + "title": "连接 Trae SOLO", + "authorizeDescription": "通过 trae.ai 在弹出窗口中授权。导入令牌后,弹出窗口将自动关闭。", + "authorizeImportant": "重要: 您必须先在 trae.ai 浏览器中登录。授权页面仅确认现有会话——无法让您登录。如果您看到“登录失败”,请点击“打开 solo.trae.ai”,登录后再返回这里。", + "waitingForAuthorization": "等待 trae.ai…", + "authorizeWithBrowser": "使用浏览器授权", + "openSoloTrae": "打开 solo.trae.ai", + "orPasteManually": "或手动粘贴一个令牌", + "manualInstructions": "登录到 solo.trae.ai,打开 DevTools → 网络,发送任何聊天消息,并从 Authorization: Cloud-IDE-JWT {tokenPlaceholder} 请求头中复制 JWT。JWT 的有效期约为 14 天。可选身份字段来自同一请求体中的 common_params。", + "accessTokenLabel": "访问令牌 (Cloud-IDE-JWT)", + "webId": "网页 ID", + "optional": "可选", + "bizUserId": "商务用户 ID", + "userUniqueId": "用户唯一 ID", + "scope": "范围", + "tenant": "租户", + "region": "区域", + "importing": "导入中…", + "importToken": "导入令牌", + "cancel": "取消" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "正在分发...", + "complete": "完成", + "defaultLabel": "分配代理" + } + }, + "providerTest": { + "dialogLabel": "测试 {provider}", + "deprecated": "已弃用", + "risk": "风险", + "close": "关闭", + "model": "模型", + "key": "键", + "defaultKey": "默认", + "clearConversation": "清除对话", + "clear": "清除", + "tabs": { + "test": "测试", + "logs": "日志" + }, + "loadingLogs": "加载日志…", + "failedToLoadLogs": "加载日志失败", + "noLogsYet": "尚无日志", + "noLogsDescription": "从测试选项卡发送测试消息 — 此提供程序的日志将出现在这里。", + "openFullLogs": "打开完整日志页面", + "live": "实时", + "tailingLast": "尾随最后 {count}", + "refreshNow": "立即刷新", + "refresh": "刷新", + "unknownRequester": "未知请求者", + "fields": { + "timestamp": "时间戳", + "status": "状态", + "duration": "持续时间", + "model": "模型", + "requestedModel": "请求的模型", + "provider": "提供者", + "requester": "请求者", + "tokens": "令牌" + } + }, + "proxyLog": { + "detailAriaLabel": "代理日志详情", + "event": "代理事件", + "close": "关闭代理详细信息模态框", + "time": "时间", + "latency": "延迟", + "clientIp": "客户端 IP", + "proxy": "代理", + "direct": "直接", + "type": "类型", + "level": "等级", + "provider": "提供者", + "tlsFingerprint": "TLS 指纹", + "directNative": "直接", + "targetUrl": "目标 URL", + "error": "错误", + "configuration": "代理配置" + }, + "requestTimeline": { + "title": "请求时间线", + "modes": { + "follow": "关注", + "followDescription": "轴向向左滚动,NOW线保持在75%", + "now": "现在", + "nowDescription": "跳转到当前时间,NOW 行重置为居中", + "pan": "平移", + "panDescription": "拖动以探索,背景已冻结" + }, + "reset": "重置", + "started": "已开始", + "ended": "结束", + "duration": "持续时间", + "status": "状态", + "provider": "提供者", + "tokens": "令牌", + "active": "活动", + "other": "其他", + "tenMinutes": "10分钟", + "hour": "小时", + "day": "天", + "unknownModel": "未知", + "pending": "待处理" + }, + "metadata": { + "compressionTitle": "压缩", + "compressionDescription": "配置上下文压缩设置以减少令牌使用和成本。", + "relayTitle": "OmniRoute — 中继代理", + "relayDescription": "无服务器中继代理端点,用于您的 AI 基础设施", + "trafficInspectorTitle": "流量检查员 — OmniRoute", + "trafficInspectorDescription": "监控 LLM 调用 + 调试任何应用程序的 HTTPS 流量" + }, + "conductor": { + "title": "指挥官 — CLI代理舰队", + "subtitle": "OmniConductor 中心:运行者、任务队列和委员会,实时", + "runners": "跑步者", + "tasks": "任务", + "colName": "名称", + "colClis": "命令行界面", + "colStatus": "状态", + "colTask": "任务", + "colMode": "模式", + "colRunner": "跑步者", + "colSummary": "摘要", + "online": "在线", + "offline": "离线", + "draining": "排水中", + "hubOffline": "指挥中心离线或未配置 (CONDUCTOR_HUB_URL) — 显示为空而不是过时数据。", + "noRunners": "没有注册的跑步者", + "noTasks": "还没有任务", + "detailTitle": "任务详情", + "prompt": "提示", + "branch": "分支", + "fetchHint": "使用以下命令获取结果:git fetch origin {branch}", + "council": "委员会", + "candidates": "候选人", + "cancel": "取消任务", + "cancelConfirmTitle": "取消此任务?", + "cancelConfirmMessage": "中心将中止在运行器上的执行。这无法撤销。", + "cancelFailed": "中心拒绝了取消请求", + "close": "关闭", + "error": "错误", + "faroTitle": "Faro — 车队发言人", + "faroSubtitle": "聊天和语音,基于真实的舰队事件。破坏性命令总是要求确认。", + "faroEmpty": "询问舰队 — 例如:“舰队怎么样?”", + "faroPending": "Faro 正在请求确认", + "faroPlaceholder": "和法罗交谈……", + "faroSend": "发送", + "faroOffline": "Faro (发言人) 离线", + "yes": "是的", + "no": "不", + "pushToTalk": "按住说话", + "speakAnswers": "说出答案", + "voiceModels": "语音模型(此 OmniRoute 的提供者/模型)", + "voiceIdle": "谈话", + "voiceListening": "正在监听…", + "voiceThinking": "思考中…", + "voiceSpeaking": "正在讲话……", + "sttFailed": "转录失败(检查 STT 模型/提供者)", + "ttsFailed": "语音合成失败(检查 TTS 模型/提供者)", + "micDenied": "麦克风不可用或权限被拒绝" + }, "cliproxyProviderExposure": { "title": "提供者暴露", - "description": "将 CLIProxyAPI 模型以 cliproxyapi/ 前缀暴露为路由目标。", - "label": "以 cliproxyapi/... 暴露", - "hint": "启用后,发现的模型会出现在 OmniRoute 各处的提供者选择器中。", - "updateFailed": "更新失败(HTTP {status})", - "networkError": "网络错误 — 无法更新提供者暴露设置" + "description": "在cliproxyapi/前缀下将CLIProxyAPI模型暴露为路由目标。", + "label": "暴露为 cliproxyapi/...", + "hint": "启用后,发现的模型会出现在 OmniRoute 的提供者选择中。", + "updateFailed": "更新失败 (HTTP {status})", + "networkError": "网络错误 — 无法更新提供者曝光设置" } } - diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index 2851351af0..39d05e4b49 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -172,6 +172,18 @@ "unselectAll": "取消全選", "visibleModels": "可見", "selectAllConfirm": "要將 {count} 個模型加入此組合嗎?", + "testSelectedProviders": "測試提供者", + "testingSelectedProviders": "測試 {done}/{total}...", + "noProvidersSelectedToTest": "請先勾選下面至少一個提供者", + "noModelsToTestForProviders": "沒有可供選定提供者測試的模型", + "testSelectedProvidersResults": "{ok} 個 {total} 模型正在運行", + "selectWorkingModels": "添加工作中", + "unselectWorkingModels": "取消選擇工作", + "noWorkingModelsToSelect": "沒有可新增的工作模型", + "providerTestHint": "提示:檢查提供者 → 測試 → 添加有效。再次點擊以取消選擇。", + "selectAllProviders": "檢查所有提供者", + "clearProviderSelection": "取消選擇提供者", + "providersSelectedCount": "已檢查 {count} 個提供者", "errorOccurred": "錯誤發生", "comboDeleted": "Combo 已刪除", "hide": "隱藏", @@ -275,7 +287,7 @@ "modelNamePlaceholder": "模型名稱", "mcpQuickStartStep2": "MCP 快速開始步驟 2", "quickStart": "快速開始", - "fullExportFailedWithError": "完整匯出失敗:{error}", + "fullExportFailedWithError": "Full Export Failed With Error", "loadingBackups": "正在載入備份", "anthropicBaseUrlPlaceholder": "Anthropic Base URL", "description": "描述", @@ -347,7 +359,7 @@ "rerankDesc": "重排說明", "modelsPathPlaceholder": "Model 路徑", "noCombosYet": "暫無 Combo", - "connectedVerificationPendingWithError": "已連線,驗證待完成:{error}", + "connectedVerificationPendingWithError": "Connected Verification Pending With Error", "comboDefaultsGuideHint1": "設定 Combo 預設策略和目標。", "enableCloudTitle": "啟用雲端", "configuredProvidersHint": "僅顯示已設定的 Provider。", @@ -357,7 +369,7 @@ "removeProviderOverrideAria": "移除提供者覆蓋", "nodeVersion": "Node 版本", "openai": "OpenAI", - "exportFailedWithError": "匯出失敗:{error}", + "exportFailedWithError": "Export Failed With Error", "proxyConfigured": "代理已設定", "concurrencyPerModel": "每個模型併發數", "protocolTasksLabel": "協議任務標籤", @@ -932,7 +944,37 @@ "batchDetailCancelConfirm": "取消此批處理?進行中的請求將停止。", "batchActionCancelError": "取消批處理失敗。請重試。", "batchActionRetryError": "重試失敗請求失敗。請重試。", - "batchConceptRetentionNote": "結果和錯誤檔案保留 30 天(Anthropic:29 天)" + "batchConceptRetentionNote": "結果和錯誤檔案保留 30 天(Anthropic:29 天)", + "batchFilesSizeColumn": "大小", + "toggleNoAuthProvider": "切換無身份驗證提供者", + "loadingModels": "載入模型中…", + "selectAModel": "選擇一個模型", + "degraded": "降級", + "zeroConfigBannerTitle": "以零配置模式運行", + "zeroConfigBannerBody": "OmniRoute 在首次啟動時自動生成安全的加密金鑰。這些金鑰已持久化到 {dataDir}。無需任何操作 — 您的數據已加密且安全。要使用自定義金鑰,請將 JWT_SECRETSTORAGE_ENCRYPTION_KEY 添加到該文件中。", + "batchRelativeTimeIn": "在 {value}", + "batchRelativeTimeAgo": "{value} 前", + "batchDetailsTitle": "批次詳細資訊", + "batchProgress": "進度", + "batchCompletedCount": "{count} 已完成", + "batchFailedCount": "{count} 失敗", + "batchPendingCount": "{count} 待處理", + "batchTimeline": "時間軸", + "batchTimelineInProgress": "進行中", + "batchTimelineFinalizing": "最終確認中", + "batchTimelineCompleted": "已完成", + "batchTimelineFailed": "失敗", + "batchTimelineExpires": "過期", + "batchTimelineExpired": "已過期", + "batchTimelineCancelling": "取消中", + "batchTimelineCancelled": "已取消", + "batchTokenUsage": "令牌使用情況", + "batchMetadata": "元數據", + "batchFileContents": "檔案內容", + "batchFileUsedByCount": "被 {count, plural, one {# 批次} other {# 批次}} 使用", + "batchFilePreview": "預覽", + "batchFilePreviewTruncated": "顯示前 {shown} 行(共 {total} 行)", + "batchFileDownloadFull": "下載完整檔案" }, "disabled": "已停用", "featureFlagOmnirouteEmergencyFallbackDescription": "將預算耗盡的請求路由到緊急免費備用提供者/模型。", @@ -1233,10 +1275,22 @@ "groupSeparatorLabel": "隔斷", "discovery": "探索", "discoverySubtitle": "掃描提供者以尋找免費存取", + "conductor": "導體", + "conductorSubtitle": "CLI-代理艦隊", "resilienceConnections": "連線韌性", "resilienceConnectionsSubtitle": "冷卻、斷路器、鎖定狀態", "settingsModalityBridge": "模態橋接", - "settingsModalityBridgeSubtitle": "圖像/音頻 → 僅限文本模型的文本回退" + "settingsModalityBridgeSubtitle": "圖像/音頻 → 僅限文本模型的文本回退", + "commandPalette": { + "title": "命令面板", + "searchPlaceholder": "搜尋頁面、設定、工具...", + "clearSearch": "清除搜尋", + "noResults": "沒有結果", + "navigate": "導航", + "open": "打開", + "close": "關閉" + }, + "noResults": "沒有結果" }, "webhooks": { "title": "Webhook", @@ -1477,7 +1531,11 @@ "settings.update_failed": "設定更新失敗", "sync.token.created": "同步權杖已建立", "sync.token.revoked": "同步權杖已撤銷" - } + }, + "mcpMetricCalls24h": "通話 (24小時)", + "mcpMetricSuccessRate": "成功率", + "mcpMetricAvgDuration": "平均持續時間", + "mcpMetricTopTool": "頂尖工具" }, "themesPage": { "title": "主題", @@ -1736,7 +1794,64 @@ "updateAvailableDesc": "有新版本可用。點選更新。", "updateStarted": "更新已開始...", "reloadingPageAutomatically": "自動重新載入頁面...", - "providerTopology": "提供者拓撲" + "providerTopology": "提供者拓撲", + "downloadDmg": "下載 DMG (macOS)", + "downloadDmgDescription": "OmniRoute 桌面應用程式的新版本已經可用。請下載並安裝 macOS DMG 安裝程式以進行更新(目前版本:v{version})。", + "downloadExe": "下載 EXE (Windows)", + "downloadExeDescription": "OmniRoute 桌面應用程式的新版本已經可用。請下載並安裝 Windows EXE 安裝程式以進行更新(目前版本:v{version})。", + "downloadAppImage": "下載 AppImage (Linux)", + "downloadAppImageDescription": "OmniRoute 桌面應用程式的新版本已經可用。請下載 Linux AppImage 套件以進行更新(目前版本:v{version})。", + "downloadUpdate": "下載更新", + "downloadUpdateDescription": "OmniRoute 桌面應用程式的新版本已可用。請下載適合您系統的應用程式格式以進行更新(當前版本:v{version})。", + "updateQueued": "已排隊更新至 v{version}。", + "updateDockerRebuilding": "Docker 映像正在後台重建。", + "updateWaitingRestart": "等待 OmniRoute 以新版本重新啟動。", + "updateInstalling": "正在安裝 v{version}。", + "updateRunning": "OmniRoute 現在正在運行 v{version}。", + "updateCompleted": "OmniRoute 已更新至 v{version}。", + "updateDockerStillRebuilding": "Docker 映像仍在為 v{version} 重建中。", + "updateInstallingBackground": "在背景中安裝 v{version}。", + "updateWaitingVersion": "等待 OmniRoute 在 v{version} 上回來。", + "updateDockerStillInProgress": "Docker 重建仍在進行中。", + "updateRestarting": "服務重啟中。等待 OmniRoute 回到線上...", + "updateTimeout": "更新已啟動,但 v{version} 在超時之前未變為可用。請刷新頁面或檢查伺服器日誌。", + "updateTimedOut": "更新到 v{version} 超時。", + "updateStartFailed": "更新啟動失敗。", + "noResponseStream": "未收到回應串流。", + "updateComplete": "更新完成!", + "updateFailed": "更新失敗。", + "updateNetworkError": "網路錯誤 — 更新期間連線中斷。", + "stepInstallPackage": "安裝套件", + "stepRebuildNativeModules": "重建原生模組", + "stepRestartService": "重新啟動服務", + "stepComplete": "完成", + "stepError": "錯誤", + "updateCompleteTitle": "更新完成!", + "updateFailedTitle": "更新失敗", + "updatingTitle": "正在更新 OmniRoute...", + "reloadNotice": "該頁面將在幾秒鐘內自動重新加載。", + "retryNotice": "請再試一次或通過 CLI 手動更新。", + "restartNotice": "請勿關閉此頁面。系統將自動重新啟動。", + "reloadNow": "立即重新載入", + "closeUpdate": "關閉", + "retryUpdate": "重試", + "updateAvailableTitle": "可用更新:v{version}{desktop}", + "desktopAppLabel": "(桌面應用程式)", + "checkingForUpdates": "檢查更新中...", + "versionAvailableForDownload": "版本 v{version} 可供下載。", + "downloadingUpdate": "下載更新中... {percent}% 完成。", + "updateDownloaded": "下載成功!點擊重新啟動並安裝以應用。", + "autoUpdateFailed": "自動更新失敗:{reason}。", + "unknownUpdateError": "未知錯誤", + "versionAvailableDesktop": "桌面應用程式可用版本 v{version}。", + "manualUpdateRequired": "此安裝類型需要手動更新。", + "restartAndInstall": "重新啟動並安裝", + "checkForUpdate": "檢查更新", + "manualUpdate": "手動更新", + "directDownloadHint": "或直接下載相應的安裝程式格式:", + "releaseNotes": "發佈說明", + "readMore": "閱讀更多", + "noAuthLabel": "無認證" }, "analytics": { "title": "分析", @@ -2059,7 +2174,22 @@ "routeFallbackTimelineSubtitle": "根據此請求附近保存的呼叫日誌推斷", "routeRecommendations": "建議", "routeLimitations": "限制", - "routeNoKnownLimitations": "此說明無已知限制。" + "routeNoKnownLimitations": "此說明無已知限制。", + "searchAnalyticsLoading": "正在加載搜索分析…", + "searchAnalyticsNoData": "尚未有搜尋數據可用。", + "searchAnalyticsNoDataDescription": "搜尋請求將在首次透過 /v1/search 搜尋後顯示於此處。", + "searchAnalyticsToday": "{count} 今天", + "searchAnalyticsCachedRequests": "{count} 個快取請求", + "searchAnalyticsApiCosts": "搜尋 API 成本", + "searchAnalyticsErrors": "{count} 個錯誤", + "searchAnalyticsNoErrors": "沒有錯誤", + "searchAnalyticsProviderBreakdown": "提供者分析", + "searchAnalyticsQueries": "查詢", + "searchAnalyticsEmptyDescription": "使用 POST /v1/search 開始路由網頁搜尋。", + "searchAnalyticsFreeTier": "免費層級可用: Serper (每月 2,500 次),Brave (每月 2,000 次),Exa (每月 1,000 次),Tavily (每月 1,000 次) — 總計每月 6,500 次以上的免費搜尋,並自動切換。", + "autoRoutingNoDataAvailable": "沒有可用的自動路由分析。使用 auto/ 前綴發送請求以查看指標。", + "defaultVariantLabel": "預設", + "freeTierAvailable": "提供免費層級" }, "apiManager": { "title": "API 金鑰", @@ -2124,7 +2254,7 @@ "savePermissions": "儲存許可權", "endpointRestrictions": "允許的端點", "allEndpointsAllowed": "此金鑰可以訪問所有 API 端點。", - "endpointsRestricted": "僅限 {count} 個端點。", + "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}.", "autoResolve": "自動解析", "autoResolveDesc": "為這個 API 金鑰自動將有歧義的模型名解析到原生提供者。", "streamDefaultMode": "流預設相容性", @@ -2202,7 +2332,7 @@ "removeClaudeCodeDefault": "移除 Claude Code 預設", "allowedCombos": "允許的組合", "allCombosAllowed": "此金鑰可使用任何組合。", - "restrictedComboCount": "限制為 {count} 個組合。", + "restrictedComboCount": "Restricted to {count, plural, one {# combo} other {# combos}}.", "apiManagerCustomRateLimits": "自定義費率限制", "apiManagerCustomRateLimitsDesc": "覆蓋全域性預設限制。留空以使用預設值。", "apiManagerRateLimitRequestsPlaceholder": "要求", @@ -2348,7 +2478,9 @@ "providerCount": "{count} 個提供者", "imageToTextBridgeAvailable": "Modality Bridge 現在可以為純文本模型描述圖像。當 /api/v1/images/understanding 實現時,內嵌的遊樂場將可用。", "imageToTextBridgeCta": "在模態橋設定中配置圖像→文本橋接", - "sttBridgeCta": "在模態橋設定中配置語音→文本橋接器" + "sttBridgeCta": "在模態橋設定中配置語音→文本橋接器", + "existingConnection": "現有連接", + "openrouterSttDescription": "OpenRouter 語音轉文字模型使用您配置的 OpenRouter 連接。無需單獨的憑證。" }, "search": { "searchQuery": "搜尋詞", @@ -2976,7 +3108,7 @@ "loadingModels": "正在載入模型...", "advancedOptions": "進階選項", "vision": "視覺", - "copilotCopyConfigForModels": "複製設定({count} 個模型)", + "copilotCopyConfigForModels": "Copy config ({count, plural, one {# model} other {# models}})", "copilotFilterModelsPlaceholder": "過濾器型號...", "copilotMaxInputTokens": "最大輸入權杖數", "copilotMaxOutputTokens": "最大輸出代幣", @@ -2984,7 +3116,30 @@ "copilotPasteInto": "貼上到:", "copilotReloadInstruction": "然後重新載入 VS Code 並在輸入提示中設定 API 金鑰。", "wireApiChatCompletions": "聊天完成 (/chat/completions)", - "wireApiResponses": "回應 API (/responses)" + "wireApiResponses": "回應 API (/responses)", + "cliproxyapiActionFailed": "操作失敗", + "cliproxyapiActionSucceeded": "操作成功", + "cliproxyapiCheckUpdates": "檢查更新", + "cliproxyapiDescription": "上游代理回退(基於 Go 的 OAuth)", + "cliproxyapiHealth": "健康", + "cliproxyapiHealthy": "健康", + "cliproxyapiInstall": "安裝", + "cliproxyapiNotInstalledValue": "未安裝", + "cliproxyapiPort": "埠", + "cliproxyapiRequestFailed": "請求失敗", + "cliproxyapiRestart": "重新啟動", + "cliproxyapiStart": "開始", + "cliproxyapiStatusError": "錯誤", + "cliproxyapiStatusInstalled": "已安裝", + "cliproxyapiStatusNotInstalled": "未安裝", + "cliproxyapiStatusRunning": "運行中", + "cliproxyapiStatusStopped": "已停止", + "cliproxyapiStop": "停止", + "cliproxyapiUnhealthy": "不健康", + "cliproxyapiUnknown": "未知", + "cliproxyapiUpdate": "更新", + "cliproxyapiUpdateAvailable": "可用更新:v{current} → v{latest}", + "cliproxyapiVersion": "版本" }, "combos": { "title": "組合", @@ -3236,6 +3391,8 @@ "pricingMissing": "無定價", "pricingAvailableShort": "已定價", "pricingMissingShort": "無定價", + "fallbackOnlyOnQuotaExhaustion": "僅在配額耗盡時前進", + "fallbackOnlyOnQuotaExhaustionShort": "僅限配額的後備方案", "warningRoundRobinSingleModel": "輪詢策略至少有 2 個模型時才最有價值。", "warningCostOptimizedPartialPricing": "在 {total} 個模型中,只有 {priced} 個有定價資訊。路由可能只具備部分成本感知能力。", "warningCostOptimizedNoPricing": "該組合未找到任何定價資料。成本最佳化策略的路由結果可能不符合預期。", @@ -3270,16 +3427,16 @@ "routingInputsHint": "模式包與權重保留在此處;熔斷器執行狀態保留在健康頁面。", "emailVisibilityHint": "此處帳號郵箱遵循全域性隱私開關。", "emailVisibilityTooltip": "使用眼睛圖示可在組合、提供者與配額頁面間全域性切換帳號郵箱的顯示與隱藏。", - "builderModeStep": "__MISSING__:Step by step (Provider → Model)", - "builderModeGlobal": "__MISSING__:Global model search (Custom combo)", - "builderGlobalSearchPlaceholder": "__MISSING__:Search models across all providers (e.g. opus, sonnet, deepseek, kimi, qwen)...", - "builderGlobalAddAll": "__MISSING__:Add all", - "builderGlobalShortcuts": "__MISSING__:Shortcuts:", - "builderGlobalNoResults": "__MISSING__:No model found for \"{query}\".", - "builderGlobalProviderLabel": "__MISSING__:Provider:", - "builderGlobalAccountCount": "__MISSING__:{count, plural, one {# account} other {# accounts}}", - "builderGlobalAdded": "__MISSING__:Added", - "builderGlobalAdd": "__MISSING__:Add", + "builderModeStep": "逐步 (提供者 → 模型)", + "builderModeGlobal": "全域模型搜尋(自訂組合)", + "builderGlobalSearchPlaceholder": "在所有提供者中搜尋模型(例如:opus、sonnet、deepseek、kimi、qwen)...", + "builderGlobalAddAll": "全部添加", + "builderGlobalShortcuts": "快捷鍵:", + "builderGlobalNoResults": "找不到 \"{query}\" 的模型。", + "builderGlobalProviderLabel": "提供者:", + "builderGlobalAccountCount": "{count, plural, one {# 個帳戶} other {# 個帳戶}}", + "builderGlobalAdded": "已添加", + "builderGlobalAdd": "新增", "manualModel": "手動模型", "manualModelInvalid": "請按 provider/model 格式填寫。", "manualModelUnknownProvider": "未知的提供者字首。", @@ -3324,6 +3481,7 @@ "weightStability": "穩定性", "weightTierPriority": "層級", "weightCacheAffinity": "Cache Hit Affinity", + "weightSessionAvailability": "會議可用性", "reviewIntelligentTitle": "智慧路由設定", "strategyRecommendations": { "priority": { @@ -3547,7 +3705,15 @@ "sessionStickinessDisabled": "黏性關閉", "kimiPresetTitle": "Kimi Coding 預設組合", "kimiPresetDescription": "以 Kimi K3 作為主要模型(Moonshot API),設定完成後會自動備援至您的 Kimi Code 連線(kimi-coding、kimi-web)。", - "kimiPresetCta": "新增預設組合" + "kimiPresetCta": "新增預設組合", + "intelligentComboCount": "{count, plural, one {# 智能組合} other {# 智能組合}}", + "providersInScope": "{count, plural, one {# 個提供者在範圍內} other {# 個提供者在範圍內}}", + "savingModePack": "正在儲存 {pack}…", + "errorTitle": "無法載入組合", + "errorDescription": "目前無法加載組合數據。請檢查您的連接並重試。", + "errorId": "錯誤 ID: {id}", + "errorRetry": "再試一次", + "comboLabel": "組合" }, "costs": { "title": "成本", @@ -3936,7 +4102,20 @@ "obsidianWebdavUrl": "WebDAV URL", "obsidianUsername": "使用者名稱", "obsidianPassword": "密碼", - "obsidianTailscaleHint": "如果從行動裝置連線,請使用 Tailscale IP 而非 localhost。兩台裝置必須位於相同的 Tailscale 網路中。" + "obsidianTailscaleHint": "如果從行動裝置連線,請使用 Tailscale IP 而非 localhost。兩台裝置必須位於相同的 Tailscale 網路中。", + "cloudSyncNotConfigured": "此實例尚未配置雲端同步。", + "notionConnect": "連接", + "notionConnectFailed": "無法連接", + "notionConnected": "已連接", + "notionConnectionFailed": "連接失敗", + "notionDescription": "透過路由的 AI 模型搜尋、閱讀、查詢和寫入 Notion", + "notionDisconnect": "斷開連接", + "notionDisconnectFailed": "無法斷開連接", + "notionEnterToken": "請輸入 Notion 整合令牌", + "notionIntegrationHelp": "在此創建內部整合", + "notionIntegrationToken": "Notion 內部整合令牌", + "notionNotConnected": "未連接", + "notionTokenConfigured": "已配置令牌。Notion 工具可通過 MCP 使用。" }, "endpoints": { "tabProxy": "端點代理", @@ -4152,6 +4331,12 @@ "providerModelLabel": "提供者 / 模型", "noRemoteProviders": "沒有設定 API 金鑰的提供者", "selectProviderModel": "選擇一個模型", + "customBaseUrlLabel": "自訂基本 URL(可選)", + "customModelIdLabel": "自訂模型 ID(選填)", + "customEndpointHelp": "使用與 OpenAI 兼容的 /embeddings 端點。允許使用本地端點;雲端元數據目標被阻止。", + "customEndpointSave": "應用自訂端點", + "customEndpointInvalid": "請輸入有效的 HTTP(S) 基本 URL 和模型 ID,或將兩個欄位留空。", + "customEndpointSaveFailed": "無法儲存自訂嵌入端點。", "staticEnabledLabel": "啟用靜態藥水", "staticEnabledDesc": "在本地下載並使用 potion-base-8M 模型", "transformersEnabledLabel": "啟用 Transformers.js", @@ -4258,7 +4443,9 @@ "cleaning": "清理中...", "cleanNow": "立即清理", "cleanupSuccess": "已移除 {count} 點數", - "cleanupFailed": "清理失敗" + "cleanupFailed": "清理失敗", + "hostLabel": "主機", + "collectionLabel": "集合" }, "rerank": { "enableLabel": "啟用重新排序", @@ -4465,7 +4652,7 @@ "repairBackupCreated": "在變更前已建立修復備份。", "sessionActivity": "工作階段活動", "activeCount": "{count} 個作用中", - "requestCount": "{count} 個請求", + "requestCount": "{count, plural, one {# request} other {# requests}}", "idleSeconds": "閒置 {count} 秒", "ageSeconds": "已存在 {count} 秒", "quotaMonitors": "配額監控", @@ -4680,7 +4867,7 @@ "disableAutoScroll": "停用自動捲動", "enableAutoScroll": "啟用自動捲動", "autoScroll": "自動捲動", - "entryCount": "{count} 個條目", + "entryCount": "{count, plural, one {# entry} other {# entries}}", "lastHour": "過去 1 小時", "updatedAt": "更新於 {time}", "fileLoggingRequired": "確保應用程式正在將日誌寫入檔案(APP_LOG_TO_FILE=true)", @@ -4756,22 +4943,22 @@ "tierFlowDiagramAlt": "OmniRoute 3 層回退圖", "apiKeyMgmt": "API金鑰管理", "freeProviders": { - "title": "__MISSING__:Set up free providers", - "description": "__MISSING__:Optionally enable selected no-signup providers. Review each provider's notice and site before continuing; availability and rate limits are controlled by third parties.", - "loading": "__MISSING__:Loading free providers...", - "loadFailed": "__MISSING__:Could not load free providers.", - "alreadyConfigured": "__MISSING__:All eligible free providers are already configured.", - "reviewProviderSite": "__MISSING__:Review provider site and terms", - "confirmation": "__MISSING__:I reviewed these third-party providers and want OmniRoute to create the selected connections.", - "setupSelected": "__MISSING__:Set up selected providers", - "settingUp": "__MISSING__:Setting up...", - "setupFailed": "__MISSING__:Could not set up the selected providers. Nothing existing was changed.", - "retryFailed": "__MISSING__:Retry failed providers", - "orUseApiKey": "__MISSING__:or connect with an API key", + "title": "設置免費提供者", + "description": "可選擇啟用所選的無需註冊的提供者。在繼續之前,請查看每個提供者的通知和網站;可用性和速率限制由第三方控制。", + "loading": "正在加載免費提供者...", + "loadFailed": "無法載入免費提供者。", + "alreadyConfigured": "所有符合條件的免費提供者已經配置完成。", + "reviewProviderSite": "檢視提供者網站及條款", + "confirmation": "我已檢視這些第三方提供者,並希望 OmniRoute 創建所選的連接。", + "setupSelected": "設置所選的提供者", + "settingUp": "正在設置...", + "setupFailed": "無法設置所選的提供者。現有的內容未被更改。", + "retryFailed": "重試失敗的提供者", + "orUseApiKey": "或使用 API 金鑰連接", "result": { - "created": "__MISSING__:created", - "skipped": "__MISSING__:already configured", - "failed": "__MISSING__:failed" + "created": "已創建", + "skipped": "已配置", + "failed": "失敗" } } }, @@ -4860,8 +5047,8 @@ "reorderByAvailabilityError": "依可用性重新排序連線失敗", "distributeProxies": "分配代理", "distributing": "分配中...", - "selectedCount": "已選 {count} 個", - "accountsCount": "{count} 個帳戶", + "selectedCount": "{count, plural, one {# selected} other {# selected}}", + "accountsCount": "{count, plural, one {# account} other {# accounts}}", "testAllOAuth": "測試所有 OAuth 連線", "testAllFree": "測試所有免費連線", "testAllApiKey": "測試所有 API 金鑰連線", @@ -5315,7 +5502,7 @@ "compatibleProdPlaceholder": "{type} 相容(產品)", "tokenRefreshed": "Token 重新整理成功", "tokenRefreshFailed": "Token 重新整理失敗", - "cursorSessionUnchanged": "__MISSING__:Session already current", + "cursorSessionUnchanged": "會話已經是當前的", "applyCodexAuthLocal": "應用認證", "exportCodexAuthFile": "匯出認證", "applyClaudeAuthLocal": "申請授權", @@ -5680,7 +5867,7 @@ "zedImportHint": "從 Zed 設定中匯入 Provider。", "zedImportNetworkError": "Zed 匯入網路錯誤", "zedImportNone": "沒有可從 Zed 匯入的內容", - "zedImportSuccess": "Zed導入成功", + "zedImportSuccess": "Imported {credentials} credential(s) from Zed for {providers} provider(s)", "zedImporting": "正在從Zed導入", "zedNoCredentials": "在鑰匙圈中找不到 Zed 憑證", "zedUnsupportedCredentials": "找到 {count} 個鑰匙圈憑證,但均未匹配支援的提供者", @@ -5689,9 +5876,9 @@ "zedPasteApiKey": "貼上 API 金鑰…", "zedSaving": "正在儲存…", "zedImportAction": "匯入", - "cursorAgentNudgeTitle": "__MISSING__:Enable automatic Cursor session renewal", - "cursorAgentNudgeBody": "__MISSING__:Install cursor-agent for automatic session renewal — without it, Cursor connections need periodic manual reconnection roughly every 24 hours.", - "cursorAgentNudgeDismiss": "__MISSING__:Dismiss", + "cursorAgentNudgeTitle": "啟用自動游標會話續期", + "cursorAgentNudgeBody": "安裝 cursor-agent 以自動續訂會話 — 如果沒有它,Cursor 連接需要每 24 小時左右手動重新連接一次。", + "cursorAgentNudgeDismiss": "關閉", "zedManualImportFailed": "手動匯入失敗", "zedManualImportSuccess": "已從 Zed 匯入 {provider} token", "grokImportTitle": "匯入 Grok Build 驗證", @@ -5879,7 +6066,6 @@ "friendliai": "無伺服器推論的免費方案 — 無需信用卡", "gemini": "永久免費:Gemini 2.5 Flash 每天 1,500 次請求 — 無需信用卡,在 aistudio.google.com 取得金鑰", "gigachat": "使用 API 金鑰連線 GigaChat(Sber)。", - "github-models": "在 github.com/settings/tokens 建立具有 'models: read' 範圍的 GitHub PAT", "gitlab": "用於公開 Code Suggestions API 的 GitLab 個人存取權杖。不使用 gitlab.com 時,請設定自託管的基本 URL。", "gitlawb-gmi": "從 Gitlawb Opengateway 儀表板取得 API 金鑰。", "gitlawb": "從 Gitlawb Opengateway 儀表板取得 API 金鑰。", @@ -6018,7 +6204,8 @@ "kimi-coding": "使用現有的 OAuth 流程連線 Kimi Coding。", "kiro": "免費方案:每月 50 額度(約 2.5 萬至 10 萬 tokens)。⚠️ Kiro 服務條款禁止第三方代理/轉接使用。", "codex": "使用現有的 OAuth 流程連線 OpenAI Codex。", - "qwen": "使用現有的 OAuth 流程連線 Qwen Code。" + "qwen": "使用現有的 OAuth 流程連線 Qwen Code。", + "github-models": "在 github.com/settings/tokens 建立具有 'models: read' 範圍的 GitHub PAT" }, "passthroughModelsDescription": "{provider} 接受提供者本機模型 ID。從 /models 匯入或新增用於路由的自定義 ID。", "bedrockModelsDescription": "Amazon Bedrock 模型的範圍按 AWS 區域劃分。從 /models 匯入或新增在所選區域中啟用的基岩模型 ID。", @@ -6077,7 +6264,78 @@ "anonymousFallbackDesc": "當所有配置的連接耗盡(配額、積分或到期)時,暫時使用此提供者的無密鑰層級。關閉以跳過此提供者,而不是發送匿名請求 — 當無密鑰層級拒絕它們(401)時建議這樣做。", "anonymousFallbackEnabled": "為 {provider} 啟用匿名後備", "anonymousFallbackDisabled": "已禁用 {provider} 的匿名後備 — 耗盡的連接將跳過此提供者", - "anonymousFallbackUpdateFailed": "無法更新匿名回退設置" + "anonymousFallbackUpdateFailed": "無法更新匿名回退設置", + "batchDeleteFailed": "批次刪除失敗", + "batchDeleteNetworkError": "批次刪除期間發生網路錯誤", + "batchUpdateFailed": "批次更新失敗", + "batchUpdateNetworkError": "批次更新期間發生網路錯誤", + "categoryAudio": "音頻", + "categoryCloudAgent": "雲端代理", + "categoryIde": "IDE", + "categoryLocal": "本地", + "categorySearch": "搜尋", + "categoryWebCookie": "網頁 Cookie", + "claudeExtraUsageBlockingDisabled": "Claude 額外使用阻止已禁用(允許額外使用)", + "claudeExtraUsageBlockingEnabled": "已啟用 Claude 額外使用限制(額外使用將被阻止)", + "claudeRoutingPreferenceDisabled": "未加前綴的 Claude 模型不再偏好 Claude Code", + "claudeRoutingPreferenceEnabled": "未加前綴的 Claude 模型現在更偏好 Claude Code", + "clearMediaFilter": "清除", + "cliproxyRoutingDisabled": "請求現在使用原生 OmniRoute(直接)", + "cliproxyRoutingEnabled": "請求現在通過 CLIProxyAPI 路由(更深層的模擬)", + "codexLimitPolicyUpdated": "Codex 限制政策已更新", + "codexServiceModeUpdated": "Codex 服務模式已更新", + "codexServiceTierActive": "Codex {tier} 服務層級已啟用", + "codexTierFastLabel": "快速", + "codexTierFlexLabel": "彈性", + "commandCodeApplyFailed": "無法應用命令碼授權", + "commandCodeApplyingApproval": "瀏覽器已批准,正在應用…", + "commandCodeApplyingKey": "應用瀏覽器批准的密鑰…", + "commandCodeApprovalInstructions": "打開授權 URL,批准訪問,然後將返回的密鑰/JSON/URL 粘貼到下面…", + "commandCodeAuthExpired": "命令碼授權已過期", + "commandCodeConnected": "命令碼已連接", + "commandCodeConnectionAdded": "命令碼連接已添加", + "commandCodeLinkExpired": "命令碼連結已過期", + "commandCodeOpeningStudio": "正在開啟 Command Code Studio…", + "commandCodePopupBlocked": "彈出窗口被阻止。請允許彈出窗口並再次嘗試 Command Code Connect。", + "commandCodeStartFailed": "無法啟動 Command Code auth", + "connectionDeleted": "連線已刪除", + "connectionFallback": "連接", + "coolingConnectionsDescription": "這些連接在最後一次請求時返回了 429(速率限制)。OmniRoute 將跳過它們,直到計時器到期 — 無需手動禁用。", + "coolingConnectionsTitle": "目前冷卻中 ({count})", + "failedDeleteAlias": "無法刪除別名", + "failedDeleteConnection": "無法刪除連接", + "failedDistributeProxies": "無法分配代理。", + "failedSaveModelEndpointSettings": "無法儲存模型端點設定", + "failedUpdateClaudeExtraUsagePolicy": "無法更新 Claude 額外使用政策", + "failedUpdateClaudeRoutingPreference": "無法更新 Claude Code 路由偏好設定", + "failedUpdateCliproxyRouting": "無法更新 CLIProxyAPI 路由", + "failedUpdateCodexLimitPolicy": "無法更新 Codex 限制政策", + "failedUpdateCodexServiceMode": "無法更新 Codex 服務模式", + "filterByMedia": "媒體", + "freeBadge": "免費", + "kimiCodeApiKeyLabel": "Kimi Code API 金鑰", + "modelTestFailed": "模型測試失敗", + "modelTestNetworkError": "網路錯誤測試模型", + "networkError": "網路錯誤", + "networkErrorDeletingAlias": "刪除別名時發生網路錯誤", + "networkErrorSettingAlias": "設置別名時發生網絡錯誤", + "noProvidersMatch": "沒有提供者符合您的搜尋。", + "noSavedProxies": "未找到已儲存的代理。請先在設定 → 代理中添加代理。", + "pageLoadErrorDescription": "目前無法加載提供者數據。請檢查您的連接並重試。", + "pageLoadErrorId": "錯誤 ID: {id}", + "pageLoadErrorRetry": "再試一次", + "pageLoadErrorTitle": "無法載入提供者", + "playgroundTitle": "遊樂場", + "providerDetailConnectionFlexActive": "Codex Flex 服務層級已為此連接啟用", + "providerDetailConnectionPriorityActive": "Codex 優先服務層級已為此連接啟用", + "providerDetailGlobalFlexActive": "全球 Codex flex 服務層級已啟用", + "providerDetailGlobalPriorityActive": "全球 Codex 優先服務層級已啟用", + "proxiesDistributed": "在 {tagLabel}{total} 個連接中分配了 {assigned} 個代理分配。", + "rerankEndpoint": "重新排序", + "savedModelEndpointSettings": "已儲存的模型端點設定", + "searchByModelAria": "按型號搜尋", + "selectSupportedEndpoint": "請選擇至少一個受支持的端點", + "antigravityClientProfileHarness": "Harness / CLI" }, "settings": { "title": "設定", @@ -6461,7 +6719,24 @@ "loadFailed": "載入訂閱清單失敗", "toggleFailed": "切換開關失敗", "refreshFailed": "刷新失敗", - "deleteFailed": "刪除失敗" + "deleteFailed": "刪除失敗", + "add": "新增", + "cancel": "取消", + "configure": "配置", + "copyEndpoint": "複製端點", + "coreEndpointHint": "核心端點提示", + "coreNodesHint": "核心節點提示", + "create": "建立", + "deleteConfirm": "刪除確認", + "empty": "空的", + "globalModeDescription": "全域模式描述", + "localCoreHint": "本地核心提示", + "nodeSummary": "節點摘要", + "providerRequired": "需要提供者", + "providerRouting": "提供者路由", + "refresh": "重新整理", + "refreshInterval": "刷新間隔", + "ruleModeDescription": "規則模式描述" }, "bulkHealthcheck": "批次健康檢查", "bulkHealthcheckDesc": "針對目標 URL 測試所有已設定代理,找出可用代理。", @@ -7077,7 +7352,7 @@ "compressionExclusionsPlaceholder": "例如claude-opus*", "compressionExclusionsSave": "保存排除規則", "compressionExclusionsSaved": "排除規則已保存。", - "compressionExclusionsCount": "{count} 條規則", + "compressionExclusionsCount": "{count, plural, one {# exclusion} other {# exclusions}} configured", "compressionExclusionsEmpty": "尚未設定排除規則—所有模型和端點均可壓縮。", "compressionCavemanConfig": "Caveman 引擎設定", "compressionCavemanConfigDesc": "微調基於規則的壓縮引擎", @@ -7235,6 +7510,8 @@ "visionBridgeDesc": "在將影像請求路由到純文本模型之前,自動執行一次視覺到文本的回退。", "visionBridgeEnabledLabel": "啟用", "visionBridgeEnabledDesc": "切換預呼叫橋接,將影像內容替換為提取出的文本。", + "visionBridgeRerouteTextOnlyLabel": "重新路由純文字模型", + "visionBridgeRerouteTextOnlyDesc": "當選擇的模型沒有圖像輸入時,將完整請求(包括圖像)發送到橋接模型。", "visionBridgeModel": "橋樑模型", "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", "visionBridgeModelHint": "可使用任何支援視覺的 OmniRoute 模型 ID。", @@ -7373,7 +7650,7 @@ "compressionAdaptiveTarget": "自適應({mode},策略:{policy})— 目標約 {target, number} tokens(針對 {contextLimit, number} token 的視窗)", "compressionOutputStylesDescription": "注入回應塑形指令,無需改寫提供者輸出。可自由組合。", "mcpAccessibilityDescription": "限定 MCP 工具輸出範圍(獨立儲存區)。", - "compressionStylesTileSummary": "已節省 {tokens, number} tokens · {runs} 次風格執行", + "compressionStylesTileSummary": "{tokens, number} tokens saved · {runs, plural, one {# run styled} other {# runs styled}}", "compressionStylesTileEmpty": "尚無已套用風格的執行。", "compressionLevel": { "minimal": "最小", @@ -7597,7 +7874,8 @@ "INSUFFICIENT_SCOPE": "API 金鑰缺少 manage 範圍。", "BYPASS_PREFIX_NOT_ALLOWED": "其中一個或多個字首指向可建立子程式的路由,無法被繞過。", "GENERIC": "更新授權設定失敗。" - } + }, + "remove": "移除" }, "resilienceBaseCooldownLabel": "基礎冷卻時間", "scopeLabel": "適用範圍", @@ -7738,13 +8016,6 @@ "modalityBridgeSubTabsAria": "模態橋接部分", "modalityBridgeVisionTitle": "視覺橋接", "modalityBridgeVisionDesc": "使用視覺模型描述圖像,然後繼續使用用戶選擇的文本模型。", - "modalityBridgeAudioTitle": "音訊橋接", - "modalityBridgeAudioDesc": "在繼續使用選定的文本模型之前,請使用語音轉文本模型轉錄音頻。", - "modalityBridgeAudioEnabled": "啟用音訊橋接", - "modalityBridgeAudioEnabledDesc": "當目標模型無法處理音頻時,將音頻部分替換為文字稿。", - "modalityBridgeAudioModel": "語音轉文字模型", - "modalityBridgeAudioModelAuto": "自動(第一個連接的 STT 提供者)", - "modalityBridgeAudioMaxClips": "每個請求的最大音頻片段數量", "modalityBridgeMode": "模式", "modalityBridgeModeAuto": "自動(建議)", "modalityBridgeModeAutoHint": "舊版啟發式:在沒有憑證的情況下重新路由單個模型;否則請描述。", @@ -7775,16 +8046,107 @@ "modalityBridgeTestReroute": "橋接將請求重新路由到 {model}", "modalityBridgeTestNoop": "橋接未啟用(模型可能原生支持視覺或橋接已禁用)", "modalityBridgeTestError": "測試失敗:{message}", + "modalityBridgeAudioComingSoon": "音訊橋接(語音 → 文字透過 /v1/audio/transcriptions)將在下一個版本中發佈。其設定鍵已經被保留。", + "modalityBridgeVideoComingSoon": "視頻橋接(幀取樣 + 字幕)在待辦事項中 — 請參見問題 #9760。", + "modalityBridgeMovedTitle": "Vision Bridge 已移動", + "modalityBridgeMovedBody": "Vision Bridge 設定現在位於專用的 Modality Bridge 頁面。", + "modalityBridgeMovedCta": "打開 Modality Bridge 設定", + "modalityBridgeAudioTitle": "音訊橋接", + "modalityBridgeAudioDesc": "在繼續使用選定的文本模型之前,請使用語音轉文本模型轉錄音頻。", + "modalityBridgeAudioEnabled": "啟用音訊橋接", + "modalityBridgeAudioEnabledDesc": "當目標模型無法處理音頻時,將音頻部分替換為文字稿。", + "modalityBridgeAudioModel": "語音轉文字模型", + "modalityBridgeAudioModelAuto": "自動(第一個連接的 STT 提供者)", + "modalityBridgeAudioMaxClips": "每個請求的最大音頻片段數量", "modalityBridgeAudioTestButton": "使用範例音訊測試", "modalityBridgeAudioTestRunning": "測試音訊…", "modalityBridgeAudioTestOk": "音訊橋接正常 — {count} 個片段由 {model} 轉錄", "modalityBridgeAudioTestNoop": "音頻橋接未啟用(目標可能支持音頻,未連接STT提供者,或橋接已禁用)", "modalityBridgeAudioTestError": "音訊測試失敗:{message}", - "modalityBridgeAudioComingSoon": "音訊橋接(語音 → 文字透過 /v1/audio/transcriptions)將在下一個版本中發佈。其設定鍵已經被保留。", - "modalityBridgeVideoComingSoon": "視頻橋接(幀取樣 + 字幕)在待辦事項中 — 請參見問題 #9760。", - "modalityBridgeMovedTitle": "Vision Bridge 已移動", - "modalityBridgeMovedBody": "Vision Bridge 設定現在位於專用的 Modality Bridge 頁面。", - "modalityBridgeMovedCta": "打開 Modality Bridge 設定" + "modelRoutingDescriptionPlaceholder": "將 Opus 模型路由到 frontier 組合", + "cliproxyapiFallbackCodes": "Cliproxyapi 備用代碼", + "cliproxyapiFallbackDescription": "Cliproxyapi 備援描述", + "cliproxyapiHealthLabel": "Cliproxyapi 健康標籤", + "cliproxyapiImportFailed": "Cliproxyapi 匯入失敗", + "cliproxyapiImportResult": "Cliproxyapi 匯入結果", + "cliproxyapiInvalidUrl": "Cliproxyapi 無效的 URL", + "cliproxyapiLifecycleNoticeAfter": "Cliproxyapi 生命週期通知 後", + "cliproxyapiLifecycleNoticeBefore": "Cliproxyapi 生命週期通知 之前", + "cliproxyapiLifecycleNoticeLink": "Cliproxyapi 生命週期通知連結", + "cliproxyapiPortLabel": "Cliproxyapi 端口標籤", + "cliproxyapiStatusLabel": "Cliproxyapi 狀態標籤", + "cliproxyapiVersionLabel": "Cliproxyapi 版本標籤", + "collection": "集合", + "errorPage": { + "description": "我們目前無法載入設定。請在幾秒鐘後重試。", + "errorId": "錯誤 ID: {id}", + "retry": "再試一次", + "title": "無法載入設定" + }, + "host": "主機", + "notInstalled": "未安裝", + "oneproxyActions": "Oneproxy 操作", + "oneproxyActive": "Oneproxy 已啟用", + "oneproxyAnonymity": "Oneproxy 匿名性", + "oneproxyCountry": "Oneproxy 國家", + "oneproxyDelete": "Oneproxy 刪除", + "oneproxyEmpty": "Oneproxy 為空", + "oneproxyHost": "Oneproxy 主機", + "oneproxyLatency": "Oneproxy 延遲", + "oneproxyProtocol": "Oneproxy 協議", + "oneproxyQuality": "Oneproxy 品質", + "oneproxySyncFailed": "同步失敗:{error}", + "oneproxySyncSuccess": "已同步 {total} 個代理 ({added} 新增, {updated} 更新)", + "proxyDocumentationSocks5DescAfter": "代理文件 Socks5 描述後", + "proxyFreePoolAddProxy": "代理免費池 添加代理", + "proxyFreePoolAdding": "代理免費池新增中", + "proxyFreePoolSelectProxy": "代理免費池 選擇代理", + "proxyStatusActive": "代理狀態:已啟用", + "proxyStatusInactive": "代理狀態 未啟用", + "routingAddEntry": "新增條目", + "settingSaveFailed": "設定儲存失敗", + "settingSaved": "設定已儲存", + "skillsmpApiKeyHintAfter": ". 速率限制:{limit} 請求/天。", + "skillsmpApiKeyHintBefore": "從以下位置獲取您的 API 金鑰", + "syncFailed": "同步失敗", + "unhealthy": "不健康", + "oneproxyDescription": "從 1proxy 社區平台獲取並輪換免費的驗證代理伺服器", + "oneproxySyncing": "同步中...", + "oneproxySyncNow": "立即同步", + "oneproxyClearAll": "清除所有", + "oneproxyGoogle": "Google", + "oneproxyClearAllConfirm": "清除所有 1proxy 代理?", + "memorySkillsSkillsmpDescription": "連接到 SkillsMP 以從市場發現和安裝技能。", + "memorySkillsActiveProviderDescription": "選擇技能頁面使用哪個提供者進行搜索和安裝。", + "memorySkillsSkillsmpProviderTitle": "SkillsMP 市場", + "memorySkillsSkillsmpProviderDescription": "已驗證的市場(使用您的 SkillsMP API 金鑰)。", + "memorySkillsSkillsshProviderTitle": "skills.sh 目錄", + "memorySkillsSkillsshProviderDescription": "公共目錄提供者(不需要 API 金鑰)。", + "routingCcBridgeCatalogName": "與Anthropic相容的CC橋接器", + "routingClaudeProviderName": "Claude (OAuth)", + "routingClaudeProviderDescription": "具有 OAuth 發行令牌的原生 Claude 提供者。", + "routingCcBridgeName": "Claude-Code 橋接", + "routingCcBridgeDescription": "使用 API 金鑰 (anthropic-compatible-cc-*) 中繼端點。", + "routingCustomProviderDescription": "自訂提供者。", + "routingUnknownOpKind": "未知的操作類型: {kind}", + "routingInvalidJson": "無效的 JSON: {error}", + "routingConfigMustBeObject": "配置必須是一個 JSON 物件", + "routingEnabledMustBeBoolean": "`enabled` 必須為 true 或 false", + "routingPipelineMustBeArray": "`pipeline` 必須是一個 ops 陣列", + "routingPipelineTooLong": "管道不能超過 50 個操作", + "routingOpMissingKind": "Op #{index}: 缺少或無效的 `kind`", + "routingOpUnknownKind": "操作 #{index}: 未知類型 \"{kind}\"", + "routingJsonEditorHide": "隱藏 JSON 編輯器", + "routingJsonEditorImportExport": "匯入 / 匯出 JSON", + "routingJsonEditorLabel": "JSON(編輯並應用,或粘貼以導入)", + "routingApplyJson": "應用 JSON", + "routingTransformsFootnote": "所有轉換操作在重新執行時都是冪等的。變更會在下一個請求中立即生效。", + "cliproxyapiUnknown": "未知", + "cliproxyapiVersion": "版本", + "cliproxyapiHealth": "健康", + "cliproxyapiPort": "埠", + "qdrantHost": "主機", + "qdrantCollection": "集合" }, "contextRtk": { "title": "RTK 引擎", @@ -8017,6 +8379,15 @@ "full": "完整", "ultra": "極致" } + }, + "modeOptions": { + "default": "預設", + "off": "關閉", + "lite": "輕量版", + "standard": "標準", + "aggressive": "激進", + "ultra": "超級", + "responsesToolOutput": "回應工具輸出" } }, "contextCombos": { @@ -8182,7 +8553,8 @@ "enableDescription": "在堆疊中最後執行(RTK/Caveman 清理文字後,OmniGlyph 將剩餘部分轉換為圖片),也可透過 omniglyph 模式獨立執行。此為預覽功能,預設為關閉,待端到端驗證完成後才會預設開啟。", "saved": "已儲存。", "saveFailed": "無法儲存。", - "enableAria": "啟用 OmniGlyph 引擎" + "enableAria": "啟用 OmniGlyph 引擎", + "title": "OmniGlyph" }, "embeddedServices": { "title": "內嵌服務", @@ -8236,7 +8608,7 @@ "networkInstallFailed": "網路錯誤 — 無法連線至安裝端點", "availableModels": "可用模型", "modelsLoading": "載入中…", - "modelsDiscovered": "已發現 {count} 個模型", + "modelsDiscovered": "{count, plural, one {# model discovered} other {# models discovered}}", "modelsLoadFailed": "載入模型失敗", "refreshing": "重新整理中…", "refreshNow": "立即重新整理", @@ -8997,18 +9369,18 @@ "budgetKpiActiveKeys": "活動鍵", "budgetPageTitle": "預算", "budgetPageDescription": "為每個 API 金鑰設定每日、每週和每月的支出限制。", - "budgetTemplateStorageHint": "共 {count} 個模板 · 透過 localStorage 編輯:", + "budgetTemplateStorageHint": "{count, plural, one {# template} other {# templates}} · edit via localStorage:", "budgetAboveLimitShort": "超出限制 ⚠", "budgetOnTrackShort": "正常範圍", "budgetAtOrAboveWarning": "≥ 警告閾值", "budgetTemplates": "模板", "budgetSelectKeysFirst": "請先選取金鑰再套用", - "budgetApplyToSelected": "套用到 {count} 個選取金鑰", - "budgetSelectedTemplateHint": "已選取 {count} 個 · 點擊模板以套用", + "budgetApplyToSelected": "Apply to {count, plural, one {# selected key} other {# selected keys}}", + "budgetSelectedTemplateHint": "{count, plural, one {# selected} other {# selected}} · click a template to apply", "budgetTemplateMonthlyAmount": "${amount}/月", "budgetTemplateDailyAmount": "${amount}/天", "budgetNoKeysSelected": "未選取任何金鑰", - "budgetTemplateApplied": "已將「{template}」套用到 {count} 個金鑰", + "budgetTemplateApplied": "Applied \"{template}\" to {count, plural, one {# key} other {# keys}}", "budgetTemplateApplyFailed": "套用模板失敗", "budgetTemplateNames": { "tpl-prod": "生產", @@ -9128,7 +9500,49 @@ "unableToLoad": "無法載入系統指標", "product": "產品", "resources": "資源", - "company": "公司" + "company": "公司", + "tokenHealthTooltips": { + "allHealthy": "所有令牌正常", + "needsAttention": "某些代幣需要注意", + "refreshFailures": "檢測到令牌刷新失敗", + "unknown": "健康狀態未知" + }, + "systemMonitor": { + "metricsAriaLabel": "系統指標", + "memory": "記憶體", + "memoryShort": "記憶體", + "uptime": "正常運行時間", + "ariaLabel": "系統監控", + "title": "系統監視器", + "version": "版本", + "connections": "連接", + "circuitBreakers": "電路斷路器", + "open": "{count} 開啟", + "memoryUsage": "記憶體使用量" + }, + "never": "從不", + "justNow": "剛剛", + "minutesAgo": "{count}分鐘前", + "hoursAgo": "{count}小時前", + "tokens": "代幣", + "costs": "成本", + "autoRefresh": "自動刷新 ({seconds}s)", + "toggleAutoRefresh": "切換自動刷新", + "activeRequests": "活動請求", + "totalRequests": "總請求數", + "totalInputTokens": "總輸入標記數", + "model": "模型", + "provider": "提供者", + "requests": "請求", + "lastUsed": "最後使用時間", + "inputTokens": "輸入標記", + "totalTokens": "總代幣", + "inputCost": "輸入成本", + "outputCost": "輸出成本", + "noUsageData": "尚未記錄使用情況。請進行一些請求以查看此處的數據。", + "account": "帳戶", + "accountLabel": "帳戶 {id}", + "noAccountUsage": "尚未記錄任何帳戶特定的使用情況。請使用 OAuth 帳戶發送請求以在此查看數據。" }, "auth": { "welcome": "歡迎", @@ -9194,7 +9608,58 @@ "nodeIncompatibleTitle": "不相容的 Node.js 版本", "nodeIncompatibleDesc": "你當前執行的是 Node.js {version},它不在 OmniRoute 支援的安全執行時策略內。請使用已打補丁的 Node.js 20.x 或 22.x LTS 版本。", "nodeIncompatibleFixLabel": "修復:安裝已打補丁的 Node.js 22 LTS 版本", - "nodeIncompatibleHint": "OmniRoute 要求 Node.js 22.22.2+(22.x LTS)或 24.0.0+(24.x LTS)。為保證穩定性,建議使用 Node 24 LTS。" + "nodeIncompatibleHint": "OmniRoute 要求 Node.js 22.22.2+(22.x LTS)或 24.0.0+(24.x LTS)。為保證穩定性,建議使用 Node 24 LTS。", + "resetViaAppDataTitle": "透過應用程式資料重置", + "resetViaAppDataDescription": "從應用程式數據目錄中刪除設置文件以重置您的密碼:", + "quitDesktopApp": "完全退出 OmniRoute 桌面應用程式", + "navigateToAppDataDirectory": "導航至應用程式數據目錄:", + "checkSystemAppDataFolder": "(檢查您的系統應用程式數據資料夾)", + "relaunchDesktopFreshSetup": "重新啟動 OmniRoute 桌面應用程式 — 將開始全新設置", + "alternativeSetPasswordTitle": "替代方案:設定新密碼", + "alternativeSetPasswordDescription": "透過伺服器環境檔案設置新的初始密碼:", + "openServerEnvFilePrefix": "打開", + "relaunchDesktopApp": "重新啟動 OmniRoute 桌面應用程式", + "codexLinkInvalidOrExpired": "此連結無效或已過期。", + "codexValidationServerError": "無法連接到伺服器以驗證此連結。", + "codexSaveConnectionError": "無法保存連接。該連結可能已過期。", + "codexDeviceLoginDisabled": "此 OpenAI 帳戶已禁用設備代碼登錄。請在 ChatGPT 安全設置中啟用它(或詢問您的工作區管理員)。", + "codexAuthorizationTimedOut": "授權已超時。點擊重新開始以重試。", + "authenticationCancelled": "身份驗證已被取消。", + "unexpectedAuthenticationError": "驗證過程中發生意外錯誤。請再試一次。", + "connectOpenAiCodexTitle": "連接 OpenAI Codex", + "codexConnectDescription": "授權 ChatGPT 帳戶以完成此連接的設置。", + "validatingCodexLink": "驗證連結中…", + "codexGenerateCodeDescription": "點擊下面生成一次性代碼,然後登錄到 OpenAI。", + "startCodexFlow": "開始", + "requestingOpenAiCode": "從 OpenAI 請求代碼…", + "codexVerificationInstructions": "1. 打開 OpenAI 驗證頁面,然後 2. 輸入此代碼。授權後,此頁面會自動更新。", + "yourCode": "您的程式碼", + "openVerificationPage": "打開驗證頁面", + "copyUrlShort": "複製 URL", + "savingConnection": "正在保存連接…", + "codexConnected": "已連接!", + "codexConnectionRegistered": "Codex 帳戶已註冊。您可以關閉此標籤頁。", + "tryAgain": "再試一次", + "traeAuthorizationSuccess": "Trae 授權 ✓", + "traeAuthorizationFailed": "Trae 授權失敗", + "closeAuthorizationWindow": "您可以關閉此視窗。", + "returnToDashboard": "返回儀表板。", + "resetViaAppData": "透過應用程式資料重置", + "deleteSettingsToReset": "從應用程式數據目錄中刪除設置文件以重置您的密碼:", + "quitAppCompletely": "完全退出 OmniRoute 桌面應用程式", + "navigateToAppData": "導航到應用程式數據目錄", + "checkAppDataFolder": "檢查您的系統應用數據資料夾", + "deleteSettingsJson": "刪除", + "relaunchAppFresh": "重新啟動 OmniRoute 桌面應用程式 — 它將開始全新的設置", + "alternativeSetPassword": "替代方案:設定新密碼", + "setNewPasswordViaEnv": "透過伺服器環境檔案設置新的初始密碼:", + "openServerEnv": "打開", + "inDataDirectory": "在數據目錄中", + "addOrUpdate": "新增或更新", + "deleteAndRelaunch": "刪除", + "settingsJson": "settings.json", + "fromDataDir": "從資料目錄", + "relaunchApp": "重新啟動 OmniRoute 桌面應用程式" }, "landing": { "brandName": "OmniRoute", @@ -9276,7 +9741,19 @@ "ctaTitle": "準備好簡化你的 AI 基礎設施了嗎?", "ctaDescription": "加入更多開發者,一起用 OmniRoute 簡化 AI 整合流程。開源且可免費開始使用。", "startFree": "免費開始", - "readDocumentation": "閱讀檔案" + "readDocumentation": "閱讀檔案", + "company": "公司", + "pricing": "定價", + "apiReference": "API 參考", + "helpCenter": "幫助中心", + "about": "關於", + "blog": "部落格", + "contact": "聯絡", + "terms": "條款", + "privacy": "隱私", + "license": "許可證", + "footerDescription": "現代 AI 基礎設施的統一介面。安全、可觀察且可擴展。", + "communityDiscussions": "社群討論" }, "docs": { "title": "檔案", @@ -9485,7 +9962,51 @@ "protocolAcpDesc": "通過 ACP 登錄檔註冊和管理 Agent,用於 Agent 間通訊和工具共享。", "protocolAcpStep1": "前往儀表盤 → Agents 檢視已註冊的 ACP Agent。", "protocolAcpStep2": "使用能力和端點設定註冊新的 Agent。", - "protocolAcpStep3": "使用 CLI 工具設定 Agent 通訊通道。" + "protocolAcpStep3": "使用 CLI 工具設定 Agent 通訊通道。", + "metadataTitleTemplate": "%s — OmniRoute 文件", + "metadataDefaultTitle": "OmniRoute 文件說明", + "metadataDescription": "OmniRoute AI 閘道的全面文件 — 設置、API、壓縮、部署等。", + "layoutNavTitle": "OmniRoute 文件", + "layoutHomeLink": "文件首頁", + "layoutDashboardLink": "← 返回儀表板", + "homeTitle": "OmniRoute 文件說明", + "homeMetadataDescription": "您所需的一切來路由、壓縮和擴展您的 AI — 設定指南、API 參考、壓縮、部署等等。", + "homeTwitterDescription": "OmniRoute AI 閘道的完整文件", + "homeDescription": "您所需的一切來路由、壓縮和擴展您的 AI", + "homeSearchHint": "按 Ctrl K 搜尋文件", + "featuredQuickStartTitle": "快速入門", + "featuredQuickStartDescription": "在 3 分鐘內啟動 OmniRoute", + "featuredAutoComboTitle": "自動連擊指南", + "featuredAutoComboDescription": "讓 OmniRoute 為您選擇最佳的 AI", + "featuredProvidersTitle": "提供者指南", + "featuredProvidersDescription": "在幾分鐘內連接 AI 提供者", + "nonTechUsersTitle": "針對非技術用戶", + "nonTechUsersSubtitle": "快速開始 — 不需要技術背景", + "techUsersTitle": "針對技術用戶", + "techUsersSubtitle": "深入探討架構、API 和內部運作", + "apiExplorerMetadataTitle": "API 瀏覽器 — OmniRoute 文件", + "apiExplorerMetadataDescription": "互動式 API 探索器 — 實時嘗試 OmniRoute 端點並獲取即時回應", + "apiExplorerTitle": "API 瀏覽器", + "apiExplorerDescription": "即時嘗試 OmniRoute 端點。選擇一個端點,配置您的請求,並實時查看回應。", + "apiExplorerSseStarted": "SSE 流已啟動 — 請檢查終端機/開發者工具以獲取即時輸出。", + "apiExplorerError": "錯誤: {message}", + "apiExplorerAuth": "驗證", + "apiExplorerResponseLabel": "回應", + "apiExplorerSelectEndpoint": "選擇一個端點來探索", + "apiExplorerChooseApi": "從側邊欄選擇一個 API 以查看詳細資訊並實時試用", + "feedbackThanks": "感謝您的反饋!", + "feedbackQuestion": "這個頁面有幫助嗎?", + "pageMetadataTitle": "{title} — OmniRoute 文件", + "pageMetadataDescription": "OmniRoute 文件說明: {title}", + "breadcrumb": "麵包屑導航", + "apiReferenceTable": { + "parameters": "參數", + "name": "名稱", + "type": "類型", + "description": "描述", + "returns": "返回", + "typePrefix": "類型:" + } }, "legal": { "privacyPolicy": "隱私政策", @@ -9958,7 +10479,42 @@ "successMessage": "您的 {providerName} 帳戶已連線。", "done": "完成", "error": "連線失敗", - "tryAgain": "重試" + "tryAgain": "重試", + "errorSessionIncomplete": "OAuth 會話不完整(缺少重定向 URI 或代碼驗證器)。請重新啟動連接並重試。", + "errorExchangeFailed": "交換失敗", + "errorGoogleRedirectMismatch": "redirect_uri_mismatch: 預設的 Google OAuth 憑證僅在 localhost 上有效。要進行遠端使用,請通過環境變數配置您自己的 OAuth 憑證:ANTIGRAVITY_OAUTH_CLIENT_ID 和 ANTIGRAVITY_OAUTH_CLIENT_SECRET。請參閱 README 中的 'OAuth on a Remote Server' 部分。", + "errorSaveFailed": "儲存失敗", + "errorAuthorizationFailed": "授權失敗", + "errorAuthorizationTimeout": "授權超時", + "errorRequestFailed": "請求失敗", + "errorCallbackServerFailed": "無法啟動回調伺服器", + "errorBrowserUnavailable": "在當前環境中,此提供者的瀏覽器 OAuth 不可用。請改用支持的身份驗證方法。", + "errorStateMismatch": "OAuth 狀態不匹配。請重新啟動連接並再試一次。", + "errorImportAccessToken": "無法導入訪問令牌", + "errorSessionNotInitialized": "OAuth 會話尚未初始化。請重新啟動連接流程並再試一次。", + "errorNoAuthorizationCode": "找不到授權碼。請粘貼回調 URL 或身份驗證碼。", + "tabDeviceCode": "設備代碼", + "tabBrowserLogin": "瀏覽器登入", + "tabImportAuthJson": "匯入 auth.json", + "tabPasteApiKey": "貼上 API 金鑰", + "windsurfPasteDescription": "在 Windsurf / VS Code IDE 中,從命令面板運行 \"Windsurf: Provide Auth Token\" 命令(或點擊 Jupyter 的 \"Get Windsurf Authentication Token\" 按鈕),然後複製顯示的令牌並粘貼到下面。直接打開 windsurf.com/show-auth-token 只會顯示 \"Redirecting\" 頁面 — 必須由 IDE 發起此流程。", + "grokAuthJsonDescription": "請粘貼 ~/.grok/auth.json 的完整內容(不僅僅是 JWT \"key\" 欄位)。裸 JWT 沒有 refresh_token,因此連接在過期後會中斷 (#7610)。當可用時,請優先使用專用的導入 auth.json 模態。", + "devinDesktopPasteDescription": "從已驗證的 Devin 會話中粘貼現有的 Devin API 金鑰。金鑰導出可用性和步驟因 Devin 版本和帳戶而異。", + "devinPasteDescription": "提供您的 WINDSURF_API_KEY(通過 `devin auth login` 獲取,或通過 Windsurf IDE 的 \"Windsurf: Provide Auth Token\" 命令獲取)。", + "grokAuthJsonPlaceholder": "{\"https://auth.x.ai::clientId\": {\"key\": \"eyJ...\", \"refresh_token\": \"...\"}}", + "grokAuthJsonLabel": "Grok 建構 auth.json", + "apiTokenPlaceholder": "ws-...", + "apiKeyTokenLabel": "API 金鑰 / 令牌", + "saving": "儲存中…", + "saveConnection": "儲存連線", + "gheDescription": "輸入您的 GitHub Enterprise 實例的基本 URL(例如 https://ghe.yourcompany.com)。", + "gheUrlPlaceholder": "https://ghe.yourcompany.com", + "gheUrlLabel": "GitHub Enterprise 網址", + "gheUrlRequired": "必須提供 GitHub Enterprise URL", + "gitlabDuoSetupTitle": "GitLab Duo OAuth 設定", + "gitlabDuoSetupMessage": "GitLab Duo OAuth 尚未配置。在 {applicationsUrl} 註冊一個 OAuth 應用程式,使用重定向 URI {redirectUri} 和範圍 \"{scopes}\",然後設置 {clientIdEnv}(可選地設置 {clientSecretEnv})並重新啟動。", + "gitlabDuoSetupDescription": "在應用程式註冊並在此 OmniRoute 實例上設置環境變數後,點擊繼續以開始 OAuth 登錄。", + "continue": "繼續" }, "cursorAuthModal": { "title": "連線 Cursor IDE", @@ -10475,7 +11031,101 @@ "noMatchingLogs": "沒有匹配當前篩選器的日誌。", "callLogsInfo": "呼叫日誌也儲存為JSON檔案到{dataDir},並根據{retentionDays}和{maxEntries}進行輪換。", "loadMore": "載入更多", - "loadingMore": "載入更多…" + "loadingMore": "載入更多…", + "correlationId": "關聯 ID", + "group": { + "showAllRows": "顯示所有行", + "showLatestPerCorrelation": "顯示最新的相關 ID", + "grouped": "分組" + }, + "running": "運行中", + "interval": { + "decrease": "減少間隔", + "title": "自動刷新間隔(以秒為單位)", + "increase": "增加間隔" + }, + "status": { + "inProgress": "進行中", + "recoveredByRetry": "透過重試恢復", + "goToParent": "前往父請求", + "healedTitle": "失敗,經過 {count} 次重試後恢復", + "healed": "治癒", + "failedTitle": "所有 {count} 次嘗試均失敗", + "failed": "失敗", + "pinnedTitle": "透過上下文快取會話固定選擇的模型", + "pinned": "固定" + }, + "attempts": "嘗試次數", + "detail": { + "collapse": "收起 {title}", + "expand": "展開 {title}", + "copyTitle": "複製 {title}", + "copied": "已複製!", + "copy": "複製", + "autoscrollOn": "自動滾動:開啟", + "autoscrollOff": "自動滾動:關閉", + "payload": { + "clientRawRequest": "客戶原始請求", + "clientRequest": "客戶請求", + "openaiRequest": "OpenAI 請求", + "providerRequest": "提供者請求", + "providerResponse": "提供者回應", + "clientResponse": "客戶回應", + "pipelineError": "管道錯誤" + }, + "payloadMissing": "此日誌條目的詳細有效負載工件不再可用。", + "payloadCorrupt": "無法解析詳細的有效負載工件。", + "notAvailable": "不適用", + "semanticCache": "語義 (OmniRoute)", + "upstreamCache": "上游 (提供者)", + "ariaLabel": "請求日誌詳情", + "completed": "已完成", + "upstreamStatus": "上游: {status}", + "statusDiscrepancy": "OmniRoute 返回了 {status},儘管提供者返回了 {provider}", + "previousRequest": "先前的請求", + "nextRequest": "下一個請求", + "close": "關閉詳細資訊模態窗", + "startedAt": "開始於", + "endedAt": "結束於", + "duration": "持續時間", + "model": "模型", + "provider": "提供者", + "account": "帳戶", + "input": "輸入", + "totalIn": "總計進入: {value}", + "cacheRead": "快取讀取: {value}", + "cacheWrite": "快取寫入: {value}", + "compressed": "壓縮: {from} → {to} ({percent}% 節省)", + "output": "輸出", + "totalOut": "總支出: {value}", + "reasoning": "推理:{value}", + "requestedModel": "請求的模型", + "requestProtocol": "需求協議", + "cacheSource": "快取來源", + "modelPinning": "模型固定", + "activeModelPinning": "活動 — 通過會話固定選擇的模型", + "rotated": "旋轉: {initial} -> {final}", + "apiKey": "API 金鑰", + "noApiKey": "沒有 API 金鑰", + "combo": "組合", + "error": "錯誤", + "unblockAll": "解除所有封鎖", + "cleared": "已清除", + "unblock": "解除封鎖", + "relatedRequests": "相關請求 ({count})", + "current": "當前", + "detailStatus": "詳細狀態", + "loadingDetails": "正在加載請求詳情...", + "providerEventStream": "提供者事件串流", + "clientEventStream": "客戶事件串流", + "eventStream": "事件串流", + "responsePayloadLegacy": "回應有效負載 (舊版)", + "requestPayloadLegacy": "請求有效負載(舊版)", + "noPayload": "此日誌條目沒有可用的有效負載數據。", + "correlationId": "關聯 ID", + "correlationIdValue": "關聯 ID: {id}", + "detailedPayloadInfo": "如果您想要新請求的四階段客戶端/提供者有效載荷視圖,請先啟用詳細日誌記錄。" + } }, "proxyLogger": { "filterAll": "全部", @@ -10885,7 +11535,7 @@ "providerSsrfBlocked": "已阻止對 {target} 的 SSRF 嘗試", "authLoginSuccess": "{actor} 已登入", "authLoginError": "{actor} 的登入錯誤", - "authLoginFailed": "{name} 登入失敗", + "authLoginFailed": "{actor} 登入失敗", "authLoginLocked": "{actor} 在嘗試次數過多後被鎖定", "authLoginMisconfigured": "身份驗證設定無效", "authLoginSetupRequired": "需要進行身份驗證設定", @@ -11704,7 +12354,11 @@ "providerDisabled": "{provider} 已停用", "providerAdded": "{provider} 已添加", "add": "新增", - "manualApiKey": "使用手動 API 金鑰" + "manualApiKey": "使用手動 API 金鑰", + "createDahlTokenFailed": "無法創建 Dahl 令牌", + "providerProxy": "代理伺服器", + "providerProxyConfigureHint": "配置代理", + "providerProxyTitleConfigured": "代理已配置:{host}" }, "gamification": { "leaderboardScopes": { @@ -11905,7 +12559,7 @@ "restartFailed": "重新啟動失敗", "resetOverridesFailedHttp": "重設覆寫失敗:HTTP {status}", "resetOverridesFailed": "重設覆寫失敗", - "restartRequiredCount": "{count} 項變更需要重新啟動伺服器才能生效。", + "restartRequiredCount": "{count, plural, one {# change requires} other {# changes require}} a server restart to take effect.", "restartRequiredDescription": "這些旗標僅在程序重新載入後才生效。立即重新啟動或繼續編輯——待處理的旗標會保留在佇列中,直到您確認。", "restartServer": "重新啟動伺服器", "cancel": "取消", @@ -12180,7 +12834,7 @@ "segmentHint": "每個區段 = 一個免費池 · 池間去重、誠實計數(無膨脹的速率限制上限)。", "boost": "一次性 $10 OpenRouter 充值即可解鎖約 {tokens}/月(50 → 1000 請求/天)", "uncapped": "永久免費,無公佈上限(有速率限制)——真實存取,不計入標題數字:", - "tosRestricted": "{count} 個模型被標記為受 ToS 限制——由您決定", + "tosRestricted": "{count, plural, one {# model} other {# models}} flagged as ToS-restricted — you decide", "provider": "提供者", "model": "模型", "modelName": "模型名稱", @@ -12202,7 +12856,9 @@ "avoid": "受 ToS 限制——請審閱條款", "caution": "注意——個人使用/代理條款", "ok": "通常較為寬鬆" - } + }, + "allProviders": "所有提供者", + "noApiKeyRequired": "不需要 API 金鑰" }, "providerHealthAutopilot": { "title": "提供者健康自動駕駛", @@ -12391,7 +13047,11 @@ "on": "開啟", "off": "關閉", "availableProviders": "可用提供者({count})", - "noProviderOverrides": "無覆寫——所有啟用的提供者將使用其預設模型參與" + "noProviderOverrides": "無覆寫——所有啟用的提供者將使用其預設模型參與", + "resetFailed": "重置失敗", + "resetSuccess": "配置重置為預設值", + "running": "運行中...", + "testFailed": "測試失敗" }, "kimiSponsorBanner": { "foundingFriendTitle": "Kimi (Moonshot AI) 是 OmniRoute 的創始開源好友", @@ -12580,6 +13240,380 @@ "capabilityFilter.visionMismatch": "提供者不支援此影像請求的視覺效果", "capabilityFilter.toolsMismatch": "提供者不支援工具呼叫", "capabilityFilter.structuredOutputMismatch": "提供者不支援結構化輸出", - "capabilityFilter.contextWindowMismatch": "請求超出提供者上下文窗口" + "capabilityFilter.contextWindowMismatch": "請求超出提供者上下文窗口", + "publicSystem": { + "notFound": { + "title": "找不到頁面", + "description": "您尋找的頁面不存在或已被移動。", + "dashboardAriaLabel": "返回儀表板", + "statusAriaLabel": "打開系統狀態頁面", + "systemStatus": "系統狀態" + }, + "error": { + "title": "內部伺服器錯誤", + "description": "處理您的請求時發生了錯誤。我們的團隊已經收到通知並正在修復中。", + "errorId": "錯誤 ID: {id}", + "detailsAriaLabel": "錯誤詳情", + "retryAriaLabel": "重試加載頁面", + "tryAgain": "再試一次", + "dashboardAriaLabel": "返回儀表板", + "statusAriaLabel": "開啟系統狀態", + "systemStatus": "系統狀態" + }, + "globalError": { + "title": "發生了一些錯誤", + "description": "發生了意外錯誤。此錯誤已被記錄,我們的團隊將進行調查。", + "detailsAriaLabel": "錯誤詳情", + "retryAriaLabel": "重試加載頁面", + "tryAgain": "再試一次", + "statusAriaLabel": "開啟系統狀態", + "systemStatus": "系統狀態" + }, + "offline": { + "title": "連接問題", + "description": "OmniRoute 目前無法連接到網絡。請檢查您的網際網路、VPN 或代理設定。", + "connectionRestored": "連線已恢復", + "offlineModeDetected": "檢測到離線模式", + "retryConnection": "重試連接", + "openStatusPage": "打開狀態頁面" + }, + "maintenance": { + "title": "計劃維護", + "description": "某些服務在維護期間暫時無法使用。核心路由通常保持在線,但管理功能可能會受到影響。", + "suggestion1": "幾分鐘後再試一次。", + "suggestion2": "在重試之前,檢查當前的健康指標和提供者狀態。", + "systemStatus": "查看系統狀態", + "healthDashboard": "開啟健康儀表板" + }, + "status": { + "title": "系統狀態", + "description": "OmniRoute 核心服務的即時運行快照。", + "loadingHealth": "正在加載健康指標...", + "failedToLoad": "無法載入系統健康狀態。", + "unableToReachHealth": "無法連接到健康端點。檢查連接並重試。", + "healthCheckFailed": "健康檢查失敗", + "openConnectivityHelp": "開放連接性幫助", + "maintenanceInfo": "維護資訊", + "service": "服務", + "unknown": "未知", + "notAvailable": "n/a", + "providersTracked": "已追蹤的提供者", + "circuitBreakerState": "提供者電路斷路器狀態", + "lastUpdate": "最後更新:{timestamp}", + "uptimeMinutes": "{minutes}分鐘", + "uptimeHoursMinutes": "{hours}小時 {minutes}分鐘" + }, + "statusPages": { + "400": { + "title": "錯誤的請求", + "description": "請求有效負載無效或不完整。", + "suggestion1": "請在重試之前檢查所需欄位和有效負載格式。", + "suggestion2": "如果您正在使用 API,請在本地驗證 JSON 架構。", + "suggestion3": "如果這種情況持續發生,請在翻譯者遊樂場中打開請求以檢查有效載荷。", + "primaryAction": "開啟文件說明", + "secondaryAction": "開啟翻譯器" + }, + "401": { + "title": "未授權", + "description": "需要身份驗證才能訪問此資源。", + "suggestion1": "再次登入並重試該操作。", + "suggestion2": "對於 API 呼叫,確認 Bearer 令牌存在且有效。", + "suggestion3": "如果令牌最近已被旋轉,請更新您的客戶端憑證。", + "primaryAction": "前往登入", + "secondaryAction": "管理 API 金鑰" + }, + "403": { + "title": "禁止訪問", + "description": "您的請求已被理解,但根據政策拒絕訪問。", + "suggestion1": "檢查設定中的 IP 允許清單/封鎖清單規則。", + "suggestion2": "驗證分配給您的 API 金鑰的模型和預算政策。", + "suggestion3": "請向管理員請求授予所需的權限範圍。", + "primaryAction": "開放存取幫助", + "secondaryAction": "打開安全性設定" + }, + "408": { + "title": "請求超時", + "description": "伺服器未能及時收到完整的請求。", + "suggestion1": "請使用較小的有效負載重試請求。", + "suggestion2": "檢查您的網絡穩定性和 VPN/代理延遲。", + "suggestion3": "對於長時間的操作,請啟用串流或拆分請求。", + "primaryAction": "開啟端點指南", + "secondaryAction": "檢查網路狀態" + }, + "429": { + "title": "請求過多", + "description": "此客戶端、金鑰或提供者的速率限制已超過。", + "suggestion1": "等待冷卻並在建議的間隔後重試。", + "suggestion2": "切換到具有後備提供者的組合。", + "suggestion3": "在設定中調整提供者的彈性/速率限制配置檔。", + "primaryAction": "打開韌性設置", + "secondaryAction": "打開組合" + }, + "500": { + "title": "內部伺服器錯誤", + "description": "處理您的請求時發生了意外的伺服器端錯誤。", + "suggestion1": "幾秒後再試一次。", + "suggestion2": "檢查健康遙測和伺服器日誌以尋找相關的請求 ID。", + "suggestion3": "如果持續發生,請報告問題並附上時間戳和請求上下文。", + "primaryAction": "開啟健康儀表板", + "secondaryAction": "打開日誌" + }, + "502": { + "title": "錯誤的網關", + "description": "上游提供者或網關整合返回了無效的回應。", + "suggestion1": "請嘗試使用其他提供者或啟用的組合路由。", + "suggestion2": "檢查提供者憑證和模型可用性。", + "suggestion3": "檢查翻譯器輸出是否涉及格式轉換。", + "primaryAction": "開啟提供者", + "secondaryAction": "開啟翻譯器" + }, + "503": { + "title": "服務不可用", + "description": "服務因維護或依賴性降級而暫時無法使用。", + "suggestion1": "請稍候並重試。", + "suggestion2": "檢查維護通知和系統狀態。", + "suggestion3": "如果您的工作流程對延遲敏感,請使用後備提供者。", + "primaryAction": "維護詳情", + "secondaryAction": "系統狀態" + } + } + }, + "kiroAuthModal": { + "title": "連接 {providerLabel}", + "chooseMethod": "選擇您的身份驗證方法:", + "builderId": "AWS Builder ID", + "builderDescription": "推薦給大多數用戶。使用與 {providerLabel} 相關聯的 AWS 帳戶登錄。", + "organization": "您的組織 (AWS IAM 身份中心)", + "organizationDescription": "使用您的公司 SSO 開始 URL(範例:{url})。", + "googleAccount": "Google 帳戶", + "googleDescription": "使用您的 Google 帳戶登入。", + "githubAccount": "GitHub 帳戶", + "githubDescription": "使用您的 GitHub 帳戶登入。", + "importToken": "導入令牌", + "importDescription": "貼上從 {providerLabel} 匯出的刷新令牌。", + "apiKey": "API 金鑰", + "apiKeyDescription": "粘貼一個長期有效的 {providerLabel} / CodeWhisperer API 金鑰。它作為一個承載憑證存儲,沒有刷新令牌;配置檔發現是最佳努力。", + "idcStartUrl": "IDC 開始網址", + "idcStartUrlPlaceholder": "https://your-org.awsapps.com/start", + "idcStartUrlDescription": "您組織的 AWS IAM 身份中心 URL", + "awsRegion": "AWS 區域", + "regionPlaceholder": "us-east-1", + "idcRegionDescription": "您的身份中心的 AWS 區域(預設:us-east-1)", + "continue": "繼續", + "back": "返回", + "autoDetecting": "自動偵測令牌中...", + "readingCredentials": "從 AWS SSO 快取中讀取 {providerLabel} 憑證", + "tokenNotDetected": "{providerLabel} 令牌未自動檢測到。請手動粘貼您的刷新令牌。", + "refreshToken": "刷新令牌", + "tokenPlaceholder": "Token 將自動填入...", + "importing": "匯入中...", + "apiKeyPlaceholder": "貼上您的 {providerLabel} API 金鑰...", + "apiKeyStoredDescription": "以長期有效的持證人憑證形式存儲加密信息。沒有刷新流程。", + "apiKeyRegionDescription": "密鑰的 AWS 區域 (預設: us-east-1)", + "validating": "驗證中...", + "validateAndSaveApiKey": "驗證並儲存 API 金鑰", + "errorAutoDetect": "無法自動檢測令牌", + "errorAutoDetectFailed": "無法自動檢測令牌", + "errorRefreshTokenRequired": "請輸入刷新令牌", + "errorImportFailed": "匯入失敗", + "errorApiKeyRequired": "請輸入 Kiro API 金鑰", + "errorApiKeyImportFailed": "API 金鑰匯入失敗", + "errorIdcStartUrlRequired": "請輸入您的 IDC 開始 URL" + }, + "kiroSocialOAuthModal": { + "title": "透過 {providerName} 連接 {providerLabel}", + "errorStartAuthorization": "授權啟動失敗", + "errorAuthorizationExpired": "授權已過期。請重新開始登錄流程。", + "errorAuthorizationFailed": "授權失敗", + "initializing": "初始化中...", + "settingUp": "設定 {providerName} 認證", + "openIncognito": "在隱身窗口中打開此連結", + "incognitoDescription": "使用隱身/私人窗口以避免與現有帳戶的會話衝突。", + "copyLink": "複製連結", + "verificationCode": "驗證碼", + "waiting": "等待授權中...", + "cancel": "取消", + "successTitle": "成功連接!", + "successMessage": "您的 {providerLabel} 帳戶已通過 {providerName} 連接。", + "done": "完成", + "errorTitle": "連接失敗", + "close": "關閉" + }, + "traeAuthModal": { + "errorAuthorizationFailed": "授權失敗", + "errorPopupBlocked": "彈出窗口被阻止 — 允許此網站的彈出窗口,或在下面手動粘貼令牌。", + "errorPopupClosed": "授權窗口在完成之前已關閉。", + "errorAccessTokenRequired": "需要訪問令牌。", + "errorImportFailed": "導入失敗", + "title": "連接 Trae SOLO", + "authorizeDescription": "透過 trae.ai 在彈出視窗中授權。當令牌被導入後,彈出視窗將自動關閉。", + "authorizeImportant": "重要: 您必須先在 trae.ai 瀏覽器中登入。授權頁面僅確認現有會話 — 它無法讓您登入。如果您看到「登入失敗」,請點擊「打開 solo.trae.ai」,登入後再返回這裡。", + "waitingForAuthorization": "等待 trae.ai…", + "authorizeWithBrowser": "使用瀏覽器授權", + "openSoloTrae": "打開 solo.trae.ai", + "orPasteManually": "或手動粘貼一個令牌", + "manualInstructions": "登入 solo.trae.ai,打開 DevTools → Network,發送任何聊天訊息,並從 Authorization: Cloud-IDE-JWT {tokenPlaceholder} 請求標頭中複製 JWT。JWT 的有效期約為 14 天。可選的身份欄位來自同一請求主體中的 common_params。", + "accessTokenLabel": "存取令牌 (Cloud-IDE-JWT)", + "webId": "網頁 ID", + "optional": "可選的", + "bizUserId": "商業用戶 ID", + "userUniqueId": "用戶唯一識別碼", + "scope": "範圍", + "tenant": "租戶", + "region": "區域", + "importing": "匯入中…", + "importToken": "導入令牌", + "cancel": "取消" + }, + "sharedComponents": { + "distributeProxies": { + "distributing": "分發中...", + "complete": "完成", + "defaultLabel": "分配代理伺服器" + } + }, + "providerTest": { + "dialogLabel": "測試 {provider}", + "deprecated": "已棄用", + "risk": "風險", + "close": "關閉", + "model": "模型", + "key": "鍵", + "defaultKey": "預設", + "clearConversation": "清除對話", + "clear": "清除", + "tabs": { + "test": "測試", + "logs": "日誌" + }, + "loadingLogs": "正在加載日誌…", + "failedToLoadLogs": "無法加載日誌", + "noLogsYet": "尚無日誌", + "noLogsDescription": "從測試標籤發送測試消息 — 此提供者的日誌將顯示在這裡。", + "openFullLogs": "打開完整日誌頁面", + "live": "直播", + "tailingLast": "尾隨最後 {count}", + "refreshNow": "立即刷新", + "refresh": "重新整理", + "unknownRequester": "未知的請求者", + "fields": { + "timestamp": "時間戳記", + "status": "狀態", + "duration": "持續時間", + "model": "模型", + "requestedModel": "請求的模型", + "provider": "提供者", + "requester": "請求者", + "tokens": "代幣" + } + }, + "proxyLog": { + "detailAriaLabel": "代理日誌詳情", + "event": "代理事件", + "close": "關閉代理詳細資訊視窗", + "time": "時間", + "latency": "延遲", + "clientIp": "客戶端 IP", + "proxy": "代理伺服器", + "direct": "直接", + "type": "類型", + "level": "等級", + "provider": "提供者", + "tlsFingerprint": "TLS 指紋", + "directNative": "直接", + "targetUrl": "目標 URL", + "error": "錯誤", + "configuration": "代理設定" + }, + "requestTimeline": { + "title": "請求時間線", + "modes": { + "follow": "跟隨", + "followDescription": "軸向向左滾動,現在線保持在75%", + "now": "現在", + "nowDescription": "跳至當前時間,NOW 行重置為中心", + "pan": "平移", + "panDescription": "拖曳以探索,背景已凍結" + }, + "reset": "重置", + "started": "已開始", + "ended": "結束", + "duration": "持續時間", + "status": "狀態", + "provider": "提供者", + "tokens": "代幣", + "active": "啟用", + "other": "其他", + "tenMinutes": "10分鐘", + "hour": "小時", + "day": "天", + "unknownModel": "未知", + "pending": "待處理" + }, + "metadata": { + "compressionTitle": "壓縮", + "compressionDescription": "配置上下文壓縮設置以減少令牌使用量和成本。", + "relayTitle": "OmniRoute — 中繼代理", + "relayDescription": "無伺服器中繼代理端點,用於您的 AI 基礎設施", + "trafficInspectorTitle": "流量檢查員 — OmniRoute", + "trafficInspectorDescription": "監控 LLM 呼叫 + 偵錯任何應用程式的 HTTPS 流量" + }, + "conductor": { + "title": "指揮官 — CLI代理群組", + "subtitle": "OmniConductor 中樞:執行者、任務佇列和委員會,實時", + "runners": "跑者", + "tasks": "任務", + "colName": "名稱", + "colClis": "命令列介面", + "colStatus": "狀態", + "colTask": "任務", + "colMode": "模式", + "colRunner": "執行者", + "colSummary": "摘要", + "online": "在線", + "offline": "離線", + "draining": "排水中", + "hubOffline": "指揮中心集線器離線或未配置 (CONDUCTOR_HUB_URL) — 顯示空白而不是過時的數據。", + "noRunners": "尚未註冊任何執行者", + "noTasks": "尚未有任務", + "detailTitle": "任務詳情", + "prompt": "提示", + "branch": "分支", + "fetchHint": "使用以下命令獲取結果:git fetch origin {branch}", + "council": "議會", + "candidates": "候選人", + "cancel": "取消任務", + "cancelConfirmTitle": "取消此任務?", + "cancelConfirmMessage": "集線器將在執行者上中止執行。這無法撤銷。", + "cancelFailed": "中心拒絕了取消請求", + "close": "關閉", + "error": "錯誤", + "faroTitle": "Faro — 車隊發言人", + "faroSubtitle": "聊天和語音,基於真實艦隊事件。破壞性命令總是要求確認。", + "faroEmpty": "詢問艦隊 — 例如「艦隊怎麼樣?」", + "faroPending": "Faro 正在要求確認", + "faroPlaceholder": "跟Faro談談…", + "faroSend": "發送", + "faroOffline": "Faro (發言人) 離線中", + "yes": "是的", + "no": "不", + "pushToTalk": "按住說話", + "speakAnswers": "說出答案", + "voiceModels": "語音模型(此 OmniRoute 的提供者/模型)", + "voiceIdle": "談話", + "voiceListening": "聆聽中…", + "voiceThinking": "思考中…", + "voiceSpeaking": "正在講話…", + "sttFailed": "轉錄失敗(檢查 STT 模型/提供者)", + "ttsFailed": "語音合成失敗(檢查 TTS 模型/提供者)", + "micDenied": "麥克風不可用或權限被拒絕" + }, + "cliproxyProviderExposure": { + "title": "提供者暴露", + "description": "將 CLIProxyAPI 模型作為路由目標,位於 cliproxyapi/ 前綴下。", + "label": "暴露為 cliproxyapi/...", + "hint": "啟用後,發現的模型將出現在 OmniRoute 的提供者選擇中。", + "updateFailed": "更新失敗 (HTTP {status})", + "networkError": "網絡錯誤 — 無法更新提供者曝光設置" + } } - diff --git a/src/lib/agentSkills/catalog.ts b/src/lib/agentSkills/catalog.ts index fe6274526a..68ef64b649 100644 --- a/src/lib/agentSkills/catalog.ts +++ b/src/lib/agentSkills/catalog.ts @@ -1,5 +1,5 @@ /** - * catalog.ts — single source of truth for the 45-entry Agent Skills catalog. + * catalog.ts — single source of truth for the 46-entry Agent Skills catalog. * * Consumers: REST routes (/api/agent-skills/*), MCP tools, A2A skill, Generator. * Do NOT import this from UI components directly — use the REST API instead. @@ -125,7 +125,7 @@ export function filterCatalog(opts: { } /** - * Computes coverage stats: filesystem has SKILL.md vs the 45-entry catalog. + * Computes coverage stats: filesystem has SKILL.md vs the 46-entry catalog. * Reads `skills/` relative to the project root (CWD). */ export function computeCoverage(): SkillCoverage { diff --git a/src/lib/agentSkills/generator.ts b/src/lib/agentSkills/generator.ts index bdcb0a307c..dd106b42ba 100644 --- a/src/lib/agentSkills/generator.ts +++ b/src/lib/agentSkills/generator.ts @@ -204,9 +204,9 @@ export function buildSkillMarkdown( const bodyLines = skill.category === "api" ? buildApiBody(skill, sources) - : skill.category === "cli" - ? buildCliBody(skill, sources) - : ""; // external: content lives in the custom block below + : skill.category === "external" + ? "" // external: content lives in the custom block below + : buildCliBody(skill, sources); // cli + config share the CLI-shaped body // Re-inject custom block if present in existing content let customBlock = ""; diff --git a/src/lib/db/apiKeys.ts b/src/lib/db/apiKeys.ts index 5129df0a7e..29439b38b4 100644 --- a/src/lib/db/apiKeys.ts +++ b/src/lib/db/apiKeys.ts @@ -1468,14 +1468,14 @@ export async function isModelAllowedForKey( } // Only explicit allow-all permits an empty list; restricted + [] is deny-all. - if (!allowedModels || allowedModels.length === 0) { - return modelAccessMode !== "restricted"; - } + // No early return here: group deny rules (checked below) must still apply to + // keys with an empty per-key allow-list (#8817 regression guard — groups only + // AND-deny, so restricted+[] stays deny-all). // Support exact match and prefix match (e.g., "openai/*" allows all OpenAI models) let allowed = - !allowedModels || - allowedModels.length === 0 || - allowedModels.some((pattern) => modelPatternMatches(pattern, modelPermissionCandidates)); + !allowedModels || allowedModels.length === 0 + ? modelAccessMode !== "restricted" + : allowedModels.some((pattern) => modelPatternMatches(pattern, modelPermissionCandidates)); // Extract model target and optional provider prefix if present (e.g. "openai/gpt-4" -> modelTarget: "gpt-4", provider: "openai") const hasProviderPrefix = modelId?.includes("/"); diff --git a/src/lib/db/modelCapabilityOverrides.ts b/src/lib/db/modelCapabilityOverrides.ts index 4792b870c5..4dcaae9e83 100644 --- a/src/lib/db/modelCapabilityOverrides.ts +++ b/src/lib/db/modelCapabilityOverrides.ts @@ -76,7 +76,8 @@ export function getModelCapabilityOverride( if (!target || !isSupportedKey(key)) return null; if (bulkMaxTokenOverrides) { - if (key !== "max_output_tokens") return null; + // The caller pairs the bulk map with the key it was built for + // (max_output_tokens or max_input_tokens in the #9199 snapshot). return bulkMaxTokenOverrides.get(target.provider)?.get(target.modelId) ?? null; } diff --git a/src/lib/modelCapabilities.ts b/src/lib/modelCapabilities.ts index 237336eb22..a4416925b0 100644 --- a/src/lib/modelCapabilities.ts +++ b/src/lib/modelCapabilities.ts @@ -597,15 +597,19 @@ function getCapabilityOverride( : null; } -function getContextOverride(resolved: { - provider: string | null; - model: string | null; - rawModel: string | null; -}): number | null { - const canonical = getModelContextOverride(resolved.provider, resolved.model); +function getContextOverride( + resolved: { + provider: string | null; + model: string | null; + rawModel: string | null; + }, + snapshot?: ModelCapabilityResolutionSnapshot | null +): number | null { + const bulk = snapshot?.contextOverrides ?? null; + const canonical = getModelContextOverride(resolved.provider, resolved.model, bulk); if (canonical !== null) return canonical; return resolved.rawModel && resolved.rawModel !== resolved.model - ? getModelContextOverride(resolved.provider, resolved.rawModel) + ? getModelContextOverride(resolved.provider, resolved.rawModel, bulk) : null; } @@ -655,6 +659,27 @@ function getMaxTokenCapabilityOverride( ); } +/** + * Bulk-load friendly max_input_tokens override lookup (#9199): resolves from the + * snapshot's preloaded map instead of a per-model SQLite read. + */ +function getMaxInputTokenCapabilityOverride( + resolved: { + provider: string | null; + model: string | null; + rawModel: string | null; + }, + snapshot: ModelCapabilityResolutionSnapshot +): number | null { + const bulk = snapshot.maxInputTokenOverrides; + return ( + getModelCapabilityOverride(resolved.provider, resolved.model, "max_input_tokens", bulk) ?? + (resolved.rawModel && resolved.rawModel !== resolved.model + ? getModelCapabilityOverride(resolved.provider, resolved.rawModel, "max_input_tokens", bulk) + : null) + ); +} + export function getExplicitModelOutputCap( input: CapabilityInput, snapshot?: ModelCapabilityResolutionSnapshot | null @@ -743,7 +768,7 @@ export function getResolvedModelCapabilities( // reflects the real *total* window and wins over every static/synced source. // `maxInputTokens` still follows its own precedence chain; only when that // chain has no narrower source does it naturally fall back to this window. - const persistedContextWindow = usePersistedOverrides ? getContextOverride(resolved) : null; + const persistedContextWindow = usePersistedOverrides ? getContextOverride(resolved, snapshot) : null; const contextWindow = persistedContextWindow ?? authoritativeContextWindow ?? @@ -752,7 +777,11 @@ export function getResolvedModelCapabilities( spec?.contextWindow ?? null; - const maxInputOverride = usePersistedOverrides ? getInputTokenCapabilityOverride(resolved) : null; + const maxInputOverride = !usePersistedOverrides + ? null + : snapshot + ? getMaxInputTokenCapabilityOverride(resolved, snapshot) + : getInputTokenCapabilityOverride(resolved); const maxTokenOverride = snapshot ? getMaxTokenCapabilityOverride(resolved, snapshot) : usePersistedOverrides diff --git a/src/lib/modelCapabilityResolutionSnapshot.ts b/src/lib/modelCapabilityResolutionSnapshot.ts index e4f208ac93..1ef49e680f 100644 --- a/src/lib/modelCapabilityResolutionSnapshot.ts +++ b/src/lib/modelCapabilityResolutionSnapshot.ts @@ -21,6 +21,7 @@ export type NestedOverrideMap = ReadonlyMap> export interface ModelCapabilityResolutionSnapshot { readonly synced: CapabilitiesByProvider; readonly maxTokenOverrides: NestedOverrideMap; + readonly maxInputTokenOverrides: NestedOverrideMap; readonly contextOverrides: NestedOverrideMap; } @@ -47,9 +48,13 @@ export function createModelCapabilityResolutionSnapshot(): ModelCapabilityResolu const synced = loadAllSyncedCapabilitiesUncached(); const maxTokenOverrides = new Map>(); + const maxInputTokenOverrides = new Map>(); for (const entry of listModelCapabilityOverrides()) { - if (entry.key !== "max_output_tokens") continue; - setNestedOverride(maxTokenOverrides, entry.provider, entry.modelId, entry.value); + if (entry.key === "max_output_tokens") { + setNestedOverride(maxTokenOverrides, entry.provider, entry.modelId, entry.value); + } else if (entry.key === "max_input_tokens") { + setNestedOverride(maxInputTokenOverrides, entry.provider, entry.modelId, entry.value); + } } const contextOverrides = new Map>(); @@ -60,6 +65,7 @@ export function createModelCapabilityResolutionSnapshot(): ModelCapabilityResolu return { synced, maxTokenOverrides, + maxInputTokenOverrides, contextOverrides, }; } diff --git a/src/lib/usage/comboScoringInspector.ts b/src/lib/usage/comboScoringInspector.ts index 9f6c9eb0b3..764f7ed0fb 100644 --- a/src/lib/usage/comboScoringInspector.ts +++ b/src/lib/usage/comboScoringInspector.ts @@ -80,7 +80,10 @@ const FACTOR_KEYS: ComboScoringInspectorFactorKey[] = [ "tierAffinity", "specificityMatch", "contextAffinity", + "cacheAffinity", + "sessionAvailability", "resetWindowAffinity", + "connectionDensity", ]; function roundNumber(value: number, digits = 4): number { diff --git a/src/server/authz/routeGuard.ts b/src/server/authz/routeGuard.ts index a5b3f9b991..d8a219d91c 100644 --- a/src/server/authz/routeGuard.ts +++ b/src/server/authz/routeGuard.ts @@ -89,6 +89,7 @@ export const LOCAL_ONLY_API_PREFIXES: ReadonlyArray = [ * gated, matching the `/login` precedent's narrow-scoping rationale. */ export const LOCAL_ONLY_API_PATTERNS: ReadonlyArray = [ + /^\/api\/providers\/[^/]+\/login\/?$/, /^\/api\/providers\/[^/]+\/refresh-cursor\/?$/, /^\/api\/providers\/[^/]+\/chatgpt-web-codex-doctor\/?$/, ]; diff --git a/src/shared/components/DistributeProxiesButton.test.tsx b/src/shared/components/DistributeProxiesButton.test.tsx index fa59f49be5..3165760a5f 100644 --- a/src/shared/components/DistributeProxiesButton.test.tsx +++ b/src/shared/components/DistributeProxiesButton.test.tsx @@ -3,6 +3,9 @@ import React from "react"; import { act } from "react"; import { createRoot } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { NextIntlClientProvider } from "next-intl"; + +import messages from "../../i18n/messages/en.json"; const cleanupCallbacks: Array<() => void> = []; @@ -42,10 +45,15 @@ describe("DistributeProxiesButton", () => { const root = createRoot(container); await act(async () => { root.render( - + + + ); }); return { container, root }; diff --git a/src/shared/constants/providers/apikey/gateways.ts b/src/shared/constants/providers/apikey/gateways.ts index 81b1cfb087..860117943d 100644 --- a/src/shared/constants/providers/apikey/gateways.ts +++ b/src/shared/constants/providers/apikey/gateways.ts @@ -352,6 +352,21 @@ export const APIKEY_PROVIDERS_GATEWAYS = { apiHint: "Create a ZeroLimitAI Bearer token, then use https://www.zerolimitai.com/api/v1 as the OpenAI-compatible base URL.", }, + chatanywhere: { + id: "chatanywhere", + alias: "chatanywhere", + name: "ChatAnywhere", + icon: "router", + color: "#2563EB", + textIcon: "CA", + passthroughModels: true, + website: "https://chatanywhere.tech", + hasFree: true, + freeNote: + "Personal, educational or research use only: public documentation cites 10,000 points/day and 200 requests/day per IP/key; do not use for commercial traffic.", + apiHint: + "Create a ChatAnywhere key linked to GitHub, then use https://api.chatanywhere.org/v1 outside China. Review the non-commercial terms before enabling it.", + }, helyxai: { id: "helyxai", alias: "helyxai", diff --git a/src/shared/types/utilization.ts b/src/shared/types/utilization.ts index 7a257e5470..20ec1850d1 100644 --- a/src/shared/types/utilization.ts +++ b/src/shared/types/utilization.ts @@ -269,7 +269,10 @@ export type ComboScoringInspectorFactorKey = | "tierAffinity" | "specificityMatch" | "contextAffinity" - | "resetWindowAffinity"; + | "cacheAffinity" + | "sessionAvailability" + | "resetWindowAffinity" + | "connectionDensity"; export type ComboScoringInspectorSource = "combo_health" | "combo_forecast" | "combo_autopilot" | "runtime" | "default"; diff --git a/stryker.conf.json b/stryker.conf.json index 46d31ea2e2..dbbf0c7446 100644 --- a/stryker.conf.json +++ b/stryker.conf.json @@ -39,7 +39,9 @@ "incremental": true, "incrementalFile": "reports/mutation/stryker-incremental.json", "testRunner": "tap", - "plugins": ["@stryker-mutator/tap-runner"], + "plugins": [ + "@stryker-mutator/tap-runner" + ], "tap": { "testFiles": [ "tests/unit/7993-noauth-proxy-routing.test.ts", @@ -61,16 +63,17 @@ "tests/unit/adaptive-admission-route-matrix.test.ts", "tests/unit/adaptive-admission-runtime.test.ts", "tests/unit/adobe-firefly.test.ts", + "tests/unit/alibaba-free-tier-exhaustion.test.ts", "tests/unit/anthropic-thinking-signature-recovery.test.ts", "tests/unit/antigravity-429-quota-tdd.test.ts", "tests/unit/antigravity-prefer-stored-project.test.ts", "tests/unit/api-key-policy-noauth-allowed-connections.test.ts", - "tests/unit/api/jobs.test.ts", - "tests/unit/api-key-rotator-health.test.ts", "tests/unit/api-key-policy-noauth-allowed-connections.test.ts", + "tests/unit/api-key-rotator-health.test.ts", + "tests/unit/api/jobs.test.ts", "tests/unit/appearance-widget-settings-schema.test.ts", - "tests/unit/auth-antigravity-account-retry-v2.test.ts", "tests/unit/auth-anonymous-fallback-toggle.test.ts", + "tests/unit/auth-antigravity-account-retry-v2.test.ts", "tests/unit/auth-clear-account-error.test.ts", "tests/unit/auth-disable-cooling-2997.test.ts", "tests/unit/auth-extract-api-key.test.ts", @@ -87,10 +90,12 @@ "tests/unit/auto-combo-context-advertising.test.ts", "tests/unit/auto-combo-engine.test.ts", "tests/unit/auto-combo-scoring-clamp.test.ts", + "tests/unit/breaker-network-error-guard.test.ts", "tests/unit/bug-7940-gemini-retrydelay.test.ts", "tests/unit/bug-9204-agy-provider-alias-credentials.test.ts", "tests/unit/build/check-circular-deps.test.ts", "tests/unit/cache-sweeps.test.ts", + "tests/unit/capability-filter.test.ts", "tests/unit/cc-bridge-openai-image-7777.test.ts", "tests/unit/cc-compatible-provider.test.ts", "tests/unit/chat-adaptive-admission-binding.test.ts", @@ -141,6 +146,7 @@ "tests/unit/cliproxyapi-model-mapping-dispatch.test.ts", "tests/unit/codex-failover.test.ts", "tests/unit/codex-quota-selection-hydration.test.ts", + "tests/unit/codex-responses-to-chat-9161.test.ts", "tests/unit/codex-session-affinity-reset-aware-5903.test.ts", "tests/unit/codex-stream-false.test.ts", "tests/unit/collect-metrics-module-coverage.test.ts", @@ -170,6 +176,7 @@ "tests/unit/combo-provider-cooldown.test.ts", "tests/unit/combo-provider-diversity-wiring.test.ts", "tests/unit/combo-quality-validator-reasoning.test.ts", + "tests/unit/combo-quota-exhaustion-only-fallback.test.ts", "tests/unit/combo-quota-share-cooldown-wait.test.ts", "tests/unit/combo-quota-soft-penalty.test.ts", "tests/unit/combo-resource-404-health.test.ts", @@ -221,8 +228,8 @@ "tests/unit/format-provider-error-cause.test.ts", "tests/unit/forwarded-header-budget.test.ts", "tests/unit/gemini-web-capabilities-9356.test.ts", - "tests/unit/gemini-web-missing-browser-3516.test.ts", "tests/unit/gemini-web-capabilities-9356.test.ts", + "tests/unit/gemini-web-missing-browser-3516.test.ts", "tests/unit/grok-cli-oauth.test.ts", "tests/unit/guardrails-api-3496.test.ts", "tests/unit/headroom-codex-quota-snapshot-6379.test.ts", @@ -268,6 +275,7 @@ "tests/unit/plan3-p0.test.ts", "tests/unit/plugin-sandbox-permissions.test.ts", "tests/unit/plugins-route-error-sanitization.test.ts", + "tests/unit/provider-breaker-halfopen-recovery.test.ts", "tests/unit/provider-error-rules.test.ts", "tests/unit/provider-health-matrix.test.ts", "tests/unit/provider-request-failure-pipeline.test.ts", @@ -282,13 +290,14 @@ "tests/unit/qwen-web-content-array-serialization.test.ts", "tests/unit/rate-limit-enhanced.test.ts", "tests/unit/rate-limit-execution-timeout-message-4165.test.ts", + "tests/unit/rate-limit-local-capacity-classification.test.ts", "tests/unit/rate-limit-local-error-classification.test.ts", "tests/unit/rate-limit-manager.test.ts", "tests/unit/rate-limit-queue-timeout-lockout.test.ts", "tests/unit/repro-7503-no-choices.test.ts", "tests/unit/repro-9486.test.ts", - "tests/unit/repro-9630-combo-false-503.test.ts", "tests/unit/repro-9486.test.ts", + "tests/unit/repro-9630-combo-false-503.test.ts", "tests/unit/repro-antigravity-404-family-cooldown-hijack.test.ts", "tests/unit/resilience-connections.test.ts", "tests/unit/responses-handler.test.ts", @@ -340,9 +349,8 @@ "tests/unit/upstream-timeout-model-override.test.ts", "tests/unit/usage-service-hardening.test.ts", "tests/unit/validate-response-quality.test.ts", - "tests/unit/xai-agent-tools-passthrough.test.ts", - "tests/unit/capability-filter.test.ts", - "tests/unit/vertex-passthrough-model-lockout.test.ts" + "tests/unit/vertex-passthrough-model-lockout.test.ts", + "tests/unit/xai-agent-tools-passthrough.test.ts" ], "nodeArgs": [ "--import", @@ -451,7 +459,11 @@ ".worktrees", ".stryker-tmp" ], - "reporters": ["progress", "html", "json"], + "reporters": [ + "progress", + "html", + "json" + ], "htmlReporter": { "fileName": "reports/mutation/mutation.html" }, diff --git a/tests/unit/agentSkillTools-mcp.test.ts b/tests/unit/agentSkillTools-mcp.test.ts index 7c6ed46e5f..72b9d14500 100644 --- a/tests/unit/agentSkillTools-mcp.test.ts +++ b/tests/unit/agentSkillTools-mcp.test.ts @@ -58,11 +58,12 @@ test("each agentSkillTool has name, description, inputSchema, and handler", () = // ─── omniroute_agent_skills_list ──────────────────────────────────────────── -test("omniroute_agent_skills_list with no filters returns all 45 skills", async () => { +// 46 since #9058 added the ponytail external entry (45 canonical + 1 external). +test("omniroute_agent_skills_list with no filters returns all 46 skills", async () => { const result = await agentSkillTools.omniroute_agent_skills_list.handler({}); - assert.equal(result.count, 45, `Expected 45 but got ${result.count}`); + assert.equal(result.count, 46, `Expected 46 but got ${result.count}`); assert.ok(Array.isArray(result.skills)); - assert.equal(result.skills.length, 45); + assert.equal(result.skills.length, 46); }); test("omniroute_agent_skills_list({category:'api'}) returns exactly 23 entries", async () => { diff --git a/tests/unit/agentSkills-generator.test.ts b/tests/unit/agentSkills-generator.test.ts index 95475887d9..df0f5d8d47 100644 --- a/tests/unit/agentSkills-generator.test.ts +++ b/tests/unit/agentSkills-generator.test.ts @@ -61,11 +61,12 @@ test("dry-run (default) returns report without writing any files", async () => { outputDir: tmpDir, }); - // All 45 skills should appear as generated (would-write) since dir is empty + // All 46 skills (45 canonical + ponytail external, #9058) should appear as + // generated (would-write) since dir is empty assert.equal( report.generated.length + report.unchanged.length, - 45, - `Expected 45 total (generated+unchanged), got generated=${report.generated.length} unchanged=${report.unchanged.length}`, + 46, + `Expected 46 total (generated+unchanged), got generated=${report.generated.length} unchanged=${report.unchanged.length}`, ); assert.equal(report.errors.length, 0, `Unexpected errors: ${JSON.stringify(report.errors)}`); @@ -81,7 +82,7 @@ test("dry-run (default) returns report without writing any files", async () => { } }); -test("dry-run generates report with 45 total (generated+unchanged)", async () => { +test("dry-run generates report with 46 total (generated+unchanged)", async () => { const tmpDir = mkTmpDir(); try { refreshCatalog(); @@ -91,7 +92,7 @@ test("dry-run generates report with 45 total (generated+unchanged)", async () => outputDir: tmpDir, }); const total = report.generated.length + report.unchanged.length; - assert.equal(total, 45); + assert.equal(total, 46); } finally { rmTmpDir(tmpDir); } @@ -134,7 +135,7 @@ test("apply mode writes SKILL.md with valid frontmatter for omni-providers", asy } }); -test("apply mode writes all 45 SKILL.md files when no onlyIds filter", async () => { +test("apply mode writes all 46 SKILL.md files when no onlyIds filter", async () => { const tmpDir = mkTmpDir(); try { refreshCatalog(); @@ -145,7 +146,7 @@ test("apply mode writes all 45 SKILL.md files when no onlyIds filter", async () }); assert.equal(report.errors.length, 0, `Errors: ${JSON.stringify(report.errors)}`); - assert.equal(report.generated.length, 45); + assert.equal(report.generated.length, 46); // Verify all dirs exist const catalog = getCatalog(); diff --git a/tests/unit/agentSkills-routes.test.ts b/tests/unit/agentSkills-routes.test.ts index 1af09c6cfd..d2eaa5fbb8 100644 --- a/tests/unit/agentSkills-routes.test.ts +++ b/tests/unit/agentSkills-routes.test.ts @@ -5,7 +5,7 @@ * Auth tested via requireManagementAuth with live DB in temp directory. * * Coverage goals: - * - GET /api/agent-skills — happy path (45 skills), filters, invalid category + * - GET /api/agent-skills — happy path (46 skills), filters, invalid category * - GET /api/agent-skills/[id] — found, 404 not found * - GET /api/agent-skills/[id]/raw — found, 404 not found, 502 on GitHub failure * - GET /api/agent-skills/coverage — happy path @@ -101,15 +101,16 @@ test.after(() => { // GET /api/agent-skills // ═════════════════════════════════════════════════════════════════════════════ -test("GET /api/agent-skills — returns 45 skills with count and coverage", async () => { +// 46 = 23 api + 21 cli + 1 config + 1 external ("ponytail", added in #9058 / 2e799b33a7). +test("GET /api/agent-skills — returns 46 skills with count and coverage", async () => { const req = makeRequest("GET", "http://localhost/api/agent-skills"); const res = await listRoute.GET(req); assert.equal(res.status, 200); const body = (await res.json()) as { skills: unknown[]; count: number; coverage: unknown }; - assert.equal(body.count, 45, `Expected 45 skills but got ${body.count}`); + assert.equal(body.count, 46, `Expected 46 skills but got ${body.count}`); assert.equal(Array.isArray(body.skills), true); - assert.equal(body.skills.length, 45); + assert.equal(body.skills.length, 46); assert.ok(body.coverage !== undefined, "coverage should be present"); }); diff --git a/tests/unit/api/compression/compression-api.test.ts b/tests/unit/api/compression/compression-api.test.ts index ea3b5688ba..85f735d564 100644 --- a/tests/unit/api/compression/compression-api.test.ts +++ b/tests/unit/api/compression/compression-api.test.ts @@ -9,6 +9,19 @@ import path from "node:path"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); +// Top-level awaits MUST run before any describe registers: under +// --test-force-exit (the CI runner flag) the process exits when the already- +// registered tests finish, so a mid-file `await import` raced the runner and the +// whole second describe died as "Promise resolution is still pending" on slow +// CI machines (base-reds round 3, #9985). +const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-compression-route-")); +const ORIGINAL_DATA_DIR = process.env.DATA_DIR; +process.env.DATA_DIR = TEST_DATA_DIR; + +const core = await import("../../../../src/lib/db/core.ts"); +const route = await import("../../../../src/app/api/settings/compression/route.ts"); + + describe("Compression Settings API Schema Validation", () => { const compressionModeValues = [ "off", @@ -115,13 +128,6 @@ describe("Compression Settings API Schema Validation", () => { // Mirrors the mcp-accessibility-config test harness: allocate a temp DATA_DIR, // import route + DB modules, tear down in after(). -const TEST_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-compression-route-")); -const ORIGINAL_DATA_DIR = process.env.DATA_DIR; -process.env.DATA_DIR = TEST_DATA_DIR; - -const core = await import("../../../../src/lib/db/core.ts"); -const route = await import("../../../../src/app/api/settings/compression/route.ts"); - function makeRequest(method: string, body?: unknown): Request { return new Request("http://localhost/api/settings/compression", { method, diff --git a/tests/unit/chat-helpers.test.ts b/tests/unit/chat-helpers.test.ts index 735e763f9c..6b85e58291 100644 --- a/tests/unit/chat-helpers.test.ts +++ b/tests/unit/chat-helpers.test.ts @@ -164,11 +164,15 @@ test("resolveModelOrError routes Codex native compact gpt-5.5 requests to Codex" }); test("resolveModelOrError routes bare gpt-5.5 Responses requests to Codex regardless of client user-agent", async () => { - // #9275: gpt-5.5 is now in CODEX_NATIVE_UNPREFIXED_MODELS — bare-id requests - // always route to codex, even from a non-Codex-CLI client, so the Codex CLI - // default is honored deterministically instead of racing other providers - // that also catalog the id. Prefix the model id (e.g. openai/gpt-5.5) to opt - // into a different provider. + // #9275: gpt-5.5 is in CODEX_NATIVE_UNPREFIXED_MODELS — bare-id requests + // route to codex even from a non-Codex-CLI client, so the Codex CLI default + // is honored deterministically instead of racing other providers that also + // catalog the id. #9447 bounded that precedence: it only PREEMPTS another + // provider when a codex connection is actually ACTIVE, so this case seeds + // one first. Prefix the model id (e.g. openai/gpt-5.5) to opt into a + // different provider. + await seedConnection("codex"); + const result = await resolveModelOrError( "gpt-5.5", { model: "gpt-5.5", input: "hello" }, @@ -195,12 +199,12 @@ test("resolveModelOrError routes bare gpt-5.5 to Codex medium when Codex is the assert.equal(result.targetFormat, "openai-responses"); }); -test("resolveModelOrError routes bare gpt-5.5 to Codex even when OpenAI is the only active account", async () => { - // #9275: the codex-first default for gpt-5.5 is unconditional — it does not - // fall back to whichever OTHER provider happens to be active. If codex has - // no active connection, execution surfaces a "No active credentials" error - // with candidate-prefix hints (see handleNoCredentials, #9275) rather than - // silently routing to openai here. +test("resolveModelOrError keeps bare gpt-5.5 on OpenAI when OpenAI is the only active account", async () => { + // #9447 bounded the #9275 codex-first default: the Codex-native preference + // may only PREEMPT another provider when a codex connection is ACTIVE. An + // OpenAI-only install must not have bare gpt-5.5 sent to codex only to fail + // with "no active credentials for provider: codex" on a model OpenAI + // serves — it routes to the provider that can actually serve it. await seedConnection("openai"); const result = await resolveModelOrError( @@ -210,7 +214,7 @@ test("resolveModelOrError routes bare gpt-5.5 to Codex even when OpenAI is the o { "user-agent": "OpenAI/Node" } ); - assert.equal(result.provider, "codex"); + assert.equal(result.provider, "openai"); assert.equal(result.model, "gpt-5.5"); }); diff --git a/tests/unit/chat-rate-limit-body-lock.test.ts b/tests/unit/chat-rate-limit-body-lock.test.ts index 7be2cdac2b..82b8a8ea1d 100644 --- a/tests/unit/chat-rate-limit-body-lock.test.ts +++ b/tests/unit/chat-rate-limit-body-lock.test.ts @@ -66,7 +66,16 @@ test("handleChat applies body-derived retry-after to the runtime limiter", async "gpt-4.1" ); assert.ok(limiterState, "expected limiter state to exist for the active connection"); - assert.equal(limiterState.reservoir, null, "RPM is enforced by the rolling lease gate"); + // #9604's rolling-lease gate (reservoir: null) was clobbered by the #9041 merge; + // the underlying Bottleneck heartbeat defect it worked around is now fixed at the + // root (bottleneckPatch.ts, base-reds round 3 #9985), so RPM enforcement is back + // on the reservoir: the body-derived 429 lock must leave it drained (0), never + // refilled-and-forgotten (the pre-patch heartbeat bug) nor untracked. + assert.equal( + limiterState.reservoir, + 0, + "body-derived retry-after must drain the runtime reservoir" + ); }); test("handleChat tolerates non-JSON rate-limit bodies without breaking fallback flow", async () => { diff --git a/tests/unit/chatcore-extracted-modules-3821.test.ts b/tests/unit/chatcore-extracted-modules-3821.test.ts index e8a689f6ca..b49a1adc56 100644 --- a/tests/unit/chatcore-extracted-modules-3821.test.ts +++ b/tests/unit/chatcore-extracted-modules-3821.test.ts @@ -35,7 +35,10 @@ test("sanitizeChatRequestBody: Responses target maps max_completion_tokens → m }); test("sanitizeChatRequestBody: Responses target maps max_tokens → max_output_tokens", () => { - const out = sanitizeChatRequestBody({ max_tokens: 128 }, FORMATS.OPENAI_RESPONSES, FORMATS.OPENAI); + // #9161: token-field selection keys on the OUTBOUND (target) protocol only — a + // Responses-shaped SOURCE no longer forces max_output_tokens (see + // codex-responses-to-chat-9161.test.ts for that direction). + const out = sanitizeChatRequestBody({ max_tokens: 128 }, FORMATS.OPENAI, FORMATS.OPENAI_RESPONSES); assert.equal(out.max_output_tokens, 128); assert.equal(out.max_tokens, undefined); }); diff --git a/tests/unit/check-docs-counts-sync.test.ts b/tests/unit/check-docs-counts-sync.test.ts index 5557e5f10c..e91e18ba58 100644 --- a/tests/unit/check-docs-counts-sync.test.ts +++ b/tests/unit/check-docs-counts-sync.test.ts @@ -8,9 +8,6 @@ import { tallyDrift, readProviderTotal, countLocales, - readMcpFactsFromSource, - listLocalizedDocs, - makeRequiredCountsValidator, } from "../../scripts/check/check-docs-counts-sync.mjs"; // Explicit types for the .mjs exports — keep the test at 0 no-explicit-any warnings. @@ -27,11 +24,6 @@ const tally = tallyDrift as ( ) => { strict: number; soft: number; lines: string[] }; const readTotal = readProviderTotal as () => number; const locales = countLocales as () => number; -const mcpFacts = readMcpFactsFromSource as () => { tools: number; scopes: number } | null; -const localizedDocs = listLocalizedDocs as (relativePath: string) => string[]; -const requireCounts = makeRequiredCountsValidator as ( - requirements: { label: string; value: number }[] -) => (content: string) => { ok: boolean; detail: string }; const here = path.dirname(fileURLToPath(import.meta.url)); const GATE = path.resolve(here, "../../scripts/check/check-docs-counts-sync.mjs"); @@ -100,31 +92,6 @@ test("countLocales reads a real, positive locale count from config/i18n.json", ( assert.ok(locales() >= 40, "i18n config should define at least 40 locales"); }); -test("source-only MCP fallback matches the canonical inventory and scope union", () => { - assert.deepEqual(mcpFacts(), { tools: 107, scopes: 32 }); -}); - -test("localized-doc discovery returns every locale root document", () => { - const readmes = localizedDocs("README.md"); - assert.equal(readmes.length, 42); - assert.ok(readmes.includes("docs/i18n/pt-BR/README.md")); - assert.ok(readmes.includes("docs/i18n/zh-CN/README.md")); -}); - -test("required-count validator reports precisely which live markers are missing", () => { - const validate = requireCounts([ - { label: "providers", value: 327 }, - { label: "MCP tools", value: 107 }, - { label: "MCP scopes", value: 32 }, - ]); - assert.equal(validate("327 providers; 107 tools; 32 scopes").ok, true); - const stale = validate("290 providers; 104 tools; 31 scopes"); - assert.equal(stale.ok, false); - assert.match(stale.detail, /providers=327/); - assert.match(stale.detail, /MCP tools=107/); - assert.match(stale.detail, /MCP scopes=32/); -}); - // --- live gate smoke ----------------------------------------------------------------- test("the gate exits 0 against the current (synced) repo state", () => { @@ -138,7 +105,6 @@ test("the gate exits 0 against the current (synced) repo state", () => { // down to 1.37B, because no gate watched that number. import { checkFreeTierHeadline, - checkFreeTierInventory, extractHeadlineClaims, } from "../../scripts/check/check-docs-counts-sync.mjs"; @@ -180,23 +146,6 @@ test("free-tier gate passes when a file carries no headline at all", () => { assert.equal(checkHeadline("no figures here", TOTALS).ok, true); }); -const checkInventory = checkFreeTierInventory as ( - content: string, - totals: { pools: number; models: number } -) => { ok: boolean; detail: string }; - -test("free-tier inventory gate accepts the live pool/model counts", () => { - assert.equal( - checkInventory("43 provider pools / 522 model budget entries", { pools: 43, models: 522 }).ok, - true - ); -}); - -test("free-tier inventory gate rejects stale model counts", () => { - const result = checkInventory("43 provider pools / 516 models", { pools: 43, models: 522 }); - assert.equal(result.ok, false); - assert.match(result.detail, /live catalog has 43 pools \/ 522 model budget entries/); -}); // --- Generic numeric-claim gate (engines / MCP tools / scopes / CLI) -------- // Extends the same drift guard to the counts that silently drifted in v3.8.49: diff --git a/tests/unit/check-migration-numbering.test.ts b/tests/unit/check-migration-numbering.test.ts index b7b98a0341..91148703d3 100644 --- a/tests/unit/check-migration-numbering.test.ts +++ b/tests/unit/check-migration-numbering.test.ts @@ -106,7 +106,8 @@ test("frozen allowlists match the documented legacy and stacked-series gaps", () assert.equal((KNOWN_GAPS as Set).has("143"), false); assert.ok((KNOWN_GAPS as Set).has("144")); assert.ok((KNOWN_GAPS as Set).has("145")); - assert.ok((KNOWN_GAPS as Set).has("147")); + // 147 left the gap list when 147_api_keys_model_access_mode.sql landed (same pattern as 143). + assert.equal((KNOWN_GAPS as Set).has("147"), false); assert.ok((KNOWN_GAPS as Set).has("148")); assert.ok((KNOWN_GAPS as Set).has("149")); // "041" was removed from KNOWN_DUPLICATE_VERSIONS in 6A.3 (stale: no physical diff --git a/tests/unit/cloudflare-ai-catalog-8717.test.ts b/tests/unit/cloudflare-ai-catalog-8717.test.ts index 1567e0c699..000d3016ff 100644 --- a/tests/unit/cloudflare-ai-catalog-8717.test.ts +++ b/tests/unit/cloudflare-ai-catalog-8717.test.ts @@ -9,22 +9,32 @@ test("Cloudflare Workers AI free catalog matches registry active models", () => const registryModelIds = new Set(cfRegistry.models.map((m) => m.id)); - // 4 active free models expected + // Active free models per the #8717 audit as landed in c7be8a4870 (#8804), + // which superseded the earlier #8808 list: llama-3.3-70b-instruct and + // gemma-3-12b-it were re-classified as dead (Workers AI 400/403/410) and + // replaced by llama-3.3-70b-instruct-fp8-fast / gemma-4-26b-a4b-it, while + // mistral-7b-instruct-v0.2-lora stayed active. const expectedModels = [ - "@cf/meta/llama-3.3-70b-instruct", - "@cf/google/gemma-3-12b-it", + "@cf/mistral/mistral-7b-instruct-v0.2-lora", "@cf/qwen/qwen2.5-coder-32b-instruct", "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", + "@cf/meta/llama-3.3-70b-instruct-fp8-fast", + "@cf/meta/llama-3.2-3b-instruct", + "@cf/qwen/qwq-32b", + "@cf/zai-org/glm-4.7-flash", + "@cf/moonshotai/kimi-k2.6", + "@cf/google/gemma-4-26b-a4b-it", ]; for (const id of expectedModels) { assert.ok(registryModelIds.has(id), `registry should contain ${id}`); } - // Dead model IDs should be removed + // Dead model IDs should be removed (see #8717 comment in the registry file) const deadModels = [ + "@cf/meta/llama-3.3-70b-instruct", "@cf/meta/llama-3.1-8b-instruct", - "@cf/mistral/mistral-7b-instruct-v0.2-lora", + "@cf/google/gemma-3-12b-it", "@cf/qwen/qwen2.5-coder-15b-instruct", ]; diff --git a/tests/unit/codebuddy-cn-provider.test.ts b/tests/unit/codebuddy-cn-provider.test.ts index c87db2afdb..0417b72bc0 100644 --- a/tests/unit/codebuddy-cn-provider.test.ts +++ b/tests/unit/codebuddy-cn-provider.test.ts @@ -263,7 +263,17 @@ test("CodeBuddyCnExecutor retries a sensitive-content rejection with compact too assert.equal(status, 200); assert.equal(calls.length, 2, "known rejection should dispatch exactly one compact retry"); - assert.deepEqual(calls[0].body.tools, input.tools, "the first request must remain unchanged"); + // #9723 (55c2b35eb7): transformRequest now proactively strips descriptions from + // oversized (>=64KB) tool payloads BEFORE the first dispatch, so the first + // request already ships compact tools — it is no longer sent unchanged. + const firstTools = calls[0].body.tools as ToolDefinition[]; + assert.deepEqual( + firstTools.map((tool) => tool.function.name), + ["read_file", "run_workflow"], + "the first request must preserve tool order and names" + ); + assert.equal("description" in firstTools[0].function, false); + assert.equal("description" in firstTools[1].function, false); const retryTools = calls[1].body.tools as ToolDefinition[]; assert.deepEqual( @@ -287,13 +297,41 @@ test("CodeBuddyCnExecutor retries a sensitive-content rejection with compact too } }); -test("CodeBuddyCnExecutor sends successful tool requests once without compacting them", async () => { +test("CodeBuddyCnExecutor sends successful oversized tool requests once, proactively compacted (#9723)", async () => { const input = toolRequestBody(); const { calls, status } = await executeWithMockedUpstream(input, [successResponse()]); + assert.equal(status, 200); + assert.equal(calls.length, 1, "a successful request must not trigger the rejection retry"); + // #9723: >=64KB of tool metadata is stripped up-front to dodge the content + // filter — names, order and parameter schemas survive; descriptions do not. + const sentTools = calls[0].body.tools as ToolDefinition[]; + assert.deepEqual( + sentTools.map((tool) => tool.function.name), + ["read_file", "run_workflow"] + ); + assert.equal("description" in sentTools[0].function, false); + assert.equal("description" in sentTools[1].function, false); + assert.deepEqual( + sentTools.map((tool) => tool.function.parameters), + (input.tools as ToolDefinition[]).map((tool) => tool.function.parameters) + ); +}); + +test("CodeBuddyCnExecutor sends normal-sized tool requests once and unchanged", async () => { + const input = toolRequestBody(); + for (const tool of input.tools as ToolDefinition[]) { + tool.function.description = "A normal-sized tool description"; + } + const { calls, status } = await executeWithMockedUpstream(input, [successResponse()]); + assert.equal(status, 200); assert.equal(calls.length, 1); - assert.deepEqual(calls[0].body.tools, input.tools); + assert.deepEqual( + calls[0].body.tools, + input.tools, + "sub-64KB tool payloads must pass through untouched" + ); }); test("CodeBuddyCnExecutor does not retry the rejection without tools", async () => { diff --git a/tests/unit/codex-tools-strict-default.test.ts b/tests/unit/codex-tools-strict-default.test.ts index 8cc3df8b3c..5b008ff04e 100644 --- a/tests/unit/codex-tools-strict-default.test.ts +++ b/tests/unit/codex-tools-strict-default.test.ts @@ -114,7 +114,10 @@ test("hosted, namespace, and custom tools are unchanged by function strict defau assert.deepEqual(tools, before); }); -test("production-like enum and oneOf schema is preserved exactly", () => { +// Since #9828 (16bf95fe33), normalizeCodexTools strips a `oneOf` that is fully +// redundant with a sibling `enum` (Codex private Responses 502 workaround); the +// rest of the production-like schema must still be preserved exactly. +test("production-like enum and oneOf schema keeps everything but the redundant oneOf", () => { const parameters = { type: "object", description: "Dynamic action parameters", @@ -151,6 +154,8 @@ test("production-like enum and oneOf schema is preserved exactly", () => { function: { name: "dynamic_tool", parameters }, } as JsonRecord; const expected = structuredClone(parameters); + // #9828: the const set exactly matches the sibling enum, so oneOf is dropped. + delete (expected.properties.action as { oneOf?: unknown }).oneOf; normalizeCodexTools({ tools: [tool] }); diff --git a/tests/unit/combo-provider-wildcard.test.ts b/tests/unit/combo-provider-wildcard.test.ts index e6c7e3808b..b328d09a4d 100644 --- a/tests/unit/combo-provider-wildcard.test.ts +++ b/tests/unit/combo-provider-wildcard.test.ts @@ -55,10 +55,17 @@ async function seedSyncedModels( const db = core.getDbInstance(); const now = new Date().toISOString(); + // Upsert, not REPLACE: REPLACE deletes+reinserts the whole row, silently wiping + // provider_specific_data on connections pre-created via createProviderConnection() + // (which the Alibaba drained-models test depends on). db.prepare( - `INSERT OR REPLACE INTO provider_connections + `INSERT INTO provider_connections (id, provider, is_active, created_at, updated_at) - VALUES (?, ?, ?, ?, ?)` + VALUES (?, ?, ?, ?, ?) + ON CONFLICT(id) DO UPDATE SET + provider = excluded.provider, + is_active = excluded.is_active, + updated_at = excluded.updated_at` ).run(connectionId, providerId, isActive ? 1 : 0, now, now); await replaceSyncedAvailableModelsForConnection( diff --git a/tests/unit/combo-scoring-inspector.test.ts b/tests/unit/combo-scoring-inspector.test.ts index 473dc1e4ff..0173cc6f36 100644 --- a/tests/unit/combo-scoring-inspector.test.ts +++ b/tests/unit/combo-scoring-inspector.test.ts @@ -215,10 +215,13 @@ test("scoring inspector reports mode packs over explicit auto weights", async () }); test("scoring inspector reports valid explicit auto weights", async () => { + // Shift 0.05 from costInv to latencyInv so the override stays sum-normalized no matter + // what the DEFAULT_WEIGHTS values are (validateWeights requires sum ≈ 1.0 — the previous + // hardcoded override only summed to 1.0 against the pre-#8940 default values). const explicitWeights = { ...DEFAULT_WEIGHTS, - latencyInv: 0.2, - costInv: 0.07, + latencyInv: DEFAULT_WEIGHTS.latencyInv + 0.05, + costInv: DEFAULT_WEIGHTS.costInv - 0.05, }; const combo = await combosDb.createCombo({ name: "combo-scoring-explicit-weights", diff --git a/tests/unit/db-migrationrunner-constants-split.test.ts b/tests/unit/db-migrationrunner-constants-split.test.ts index a95cc1f52c..ef1dc9f873 100644 --- a/tests/unit/db-migrationrunner-constants-split.test.ts +++ b/tests/unit/db-migrationrunner-constants-split.test.ts @@ -113,7 +113,8 @@ describe("migrationRunner/constants — large-table integrity", () => { "144", ] ); - assert.ok(devin.every((e) => e.toVersion === "147")); + // 147 collided with 147_api_keys_model_access_mode — renumbered to 151 in #8228 + assert.ok(devin.every((e) => e.toVersion === "151")); assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-2), { fromVersion: "134", fromName: "ccr_blocks", diff --git a/tests/unit/devin-providers.test.ts b/tests/unit/devin-providers.test.ts index 54424f773c..0009246c50 100644 --- a/tests/unit/devin-providers.test.ts +++ b/tests/unit/devin-providers.test.ts @@ -122,9 +122,17 @@ test("OAuth modal Desktop branch gives honest import guidance without public Win new URL("../../src/shared/components/OAuthModal.tsx", import.meta.url), "utf8" ); + // #9245 (7ca73697b0) localized the hardcoded modal copy: the guidance now + // lives in the i18n catalog under `devinDesktopPasteDescription` and the + // modal renders it via t(). Assert both halves of that contract. + const enMessages = await readFile( + new URL("../../src/i18n/messages/en.json", import.meta.url), + "utf8" + ); - assert.match(source, /Paste an existing Devin API key/); - assert.match(source, /vary by Devin version and account/); + assert.match(source, /devinDesktopPasteDescription/); + assert.match(enMessages, /Paste an existing Devin API key/); + assert.match(enMessages, /vary by Devin version and account/); assert.doesNotMatch(source, /Devin: Copy API Key to Clipboard/); assert.doesNotMatch(source, /provider === ["']windsurf["']/); }); diff --git a/tests/unit/docs/skillManifestsLint.test.ts b/tests/unit/docs/skillManifestsLint.test.ts index 50902d30ee..800f878733 100644 --- a/tests/unit/docs/skillManifestsLint.test.ts +++ b/tests/unit/docs/skillManifestsLint.test.ts @@ -41,8 +41,10 @@ test("each skill dir has SKILL.md with frontmatter", async () => { } // Skills `omni-*` são GERADOS por src/lib/agentSkills/generator.ts (alguns em // estado "no endpoints mapped yet", sem refs de uso) — o invariante de uso vale - // só para os manifests manuscritos (cli-* e config-*). - if (!dir.startsWith("omni-")) { + // só para os manifests manuscritos (cli-* e config-*). `ponytail` é a entrada + // `external` do catálogo (#9058, conteúdo MIT de terceiro) — não descreve uso + // do OmniRoute, então também fica fora do invariante. + if (!dir.startsWith("omni-") && dir !== "ponytail") { assert.ok( content.includes("OMNIROUTE_") || content.includes("omniroute "), `${dir}: missing usage references (OMNIROUTE_* env vars or omniroute CLI commands)` diff --git a/tests/unit/executor-antigravity.test.ts b/tests/unit/executor-antigravity.test.ts index 8e96db1dd0..abdd7474a5 100644 --- a/tests/unit/executor-antigravity.test.ts +++ b/tests/unit/executor-antigravity.test.ts @@ -842,11 +842,12 @@ test("AntigravityExecutor.execute bounds a persistent short-retry 429 instead of const calls: string[] = []; seedAntigravityIdeVersionCache("2.1.1"); - // "rate limited" classifies as rate_limited → decide429 returns 60s - // (≤ LONG_RETRY_THRESHOLD_MS), i.e. the short-retry branch. A persistent 429 - // must NOT loop forever on one endpoint — it must exhaust MAX_AUTO_RETRIES per - // endpoint, advance through every base URL, then return the 429 so the - // account-fallback layer can switch accounts. + // "rate limited" with no parseable retry hint classifies as rate_limited → + // decide429 returns short_cooldown_switch_auth (60s default). Since #9351 the + // switchAuth signal is propagated to the retry guard, which declines the + // same-URL sleep branch entirely: one attempt per base URL, then the 429 is + // returned so the account-fallback layer can switch accounts immediately + // instead of sleeping 60s × MAX_AUTO_RETRIES against a rate-limited account. globalThis.fetch = async (url) => { calls.push(String(url)); return new Response(JSON.stringify({ error: { message: "rate limited" } }), { @@ -871,8 +872,9 @@ test("AntigravityExecutor.execute bounds a persistent short-retry 429 instead of // Returns the 429 rather than hanging. assert.equal(result.response.status, 429); - // Bounded: 2 live runtime endpoints × (1 initial + MAX_AUTO_RETRIES=3) = 8 attempts total. - assert.equal(calls.length, 8); + // Bounded: switchAuth declines same-URL retries → 2 live runtime endpoints + // × 1 attempt each = 2 attempts total (#9351). + assert.equal(calls.length, 2); // Tried every distinct live runtime base URL before giving up. const distinctHosts = new Set(calls.map((u) => new URL(u).host)); diff --git a/tests/unit/executor-xai.test.ts b/tests/unit/executor-xai.test.ts index d6f762a11e..fdfeea3d1e 100644 --- a/tests/unit/executor-xai.test.ts +++ b/tests/unit/executor-xai.test.ts @@ -23,7 +23,11 @@ test("XaiExecutor is registered under the 'xai' key and set as the registry exec test("XaiExecutor can target the separate xAI OAuth provider config", () => { const executor = new XaiExecutor("xai-oauth"); assert.equal(executor.getProvider(), "xai-oauth"); - assert.equal(executor.buildUrl("grok-4.5", false), "https://api.x.ai/v1/responses"); + // a367bf62f5 (#9994) scoped model-level targetFormat to the DECLARING provider's + // catalog: xai-oauth's own catalog lists grok-4.5 without a targetFormat tag, so + // it stays on /v1/chat/completions instead of importing a global entry's + // openai-responses tag (the transient #9612 global-fallback behavior). + assert.equal(executor.buildUrl("grok-4.5", false), "https://api.x.ai/v1/chat/completions"); }); test("strips a -{level} suffix from an allow-listed model and sets reasoning_effort", () => { diff --git a/tests/unit/github-copilot-custom-model-target-format.test.ts b/tests/unit/github-copilot-custom-model-target-format.test.ts index a7e0fe25b2..e8a92d7590 100644 --- a/tests/unit/github-copilot-custom-model-target-format.test.ts +++ b/tests/unit/github-copilot-custom-model-target-format.test.ts @@ -15,10 +15,14 @@ import assert from "node:assert/strict"; import { GithubExecutor } from "../../open-sse/executors/github.ts"; import { resolveExecutionCredentials } from "../../open-sse/handlers/chatCore/executionCredentials.ts"; +// NOTE: the "custom model" id must stay ABSENT from the gh registry for these +// tests to exercise the override path — #9050 (ea4bbdf7c0) promoted the original +// gpt-5.6-terra/luna ids into the curated registry with +// targetFormat:"openai-responses", so we use a fictional gpt-5.7-nova instead. test("BUG: GithubExecutor.buildUrl ignores a per-model targetFormat:'openai-responses' override and still returns the chat/completions URL", () => { const executor = new GithubExecutor(); const credentialsWithoutOverride = { apiKey: "test-token" }; - const url = executor.buildUrl("gpt-5.6-terra", false, 0, credentialsWithoutOverride); + const url = executor.buildUrl("gpt-5.7-nova", false, 0, credentialsWithoutOverride); assert.ok( !url.endsWith("/responses"), "sanity check: with no override and a non-codex custom model id, buildUrl falls back to chat/completions" @@ -31,7 +35,7 @@ test("FIX: GithubExecutor.buildUrl honors providerSpecificData.targetFormat:'ope apiKey: "test-token", providerSpecificData: { targetFormat: "openai-responses" }, }; - const url = executor.buildUrl("gpt-5.6-terra", false, 0, credentialsWithOverride); + const url = executor.buildUrl("gpt-5.7-nova", false, 0, credentialsWithOverride); assert.ok( url.endsWith("/responses"), `expected the /responses endpoint when the override is set, got: ${url}` diff --git a/tests/unit/gitlab-duo-oauth-setup-8688.test.ts b/tests/unit/gitlab-duo-oauth-setup-8688.test.ts index dee8a84999..a86e3b69f1 100644 --- a/tests/unit/gitlab-duo-oauth-setup-8688.test.ts +++ b/tests/unit/gitlab-duo-oauth-setup-8688.test.ts @@ -69,9 +69,17 @@ test("#8688 OAuthModal skips auto-start and renders GitlabDuoSetupStep (#8688)", ); const setup = read("../../src/shared/components/oauthModal/GitlabDuoSetupStep.tsx"); - assert.match(setup, /GITLAB_DUO_OAUTH_SETUP_MESSAGE/); + // #9245 localized the step: the literal GITLAB_DUO_OAUTH_SETUP_MESSAGE became + // t("gitlabDuoSetupMessage", {...}) interpolating the same shared constants — + // still the single source of truth for the recipe values. + assert.match(setup, /gitlabDuoSetupMessage/); + assert.match(setup, /GITLAB_DUO_OAUTH_APPLICATIONS_URL/); + assert.match(setup, /GITLAB_DUO_OAUTH_DEFAULT_REDIRECT_URI/); + assert.match(setup, /GITLAB_DUO_OAUTH_SCOPES/); + assert.match(setup, /GITLAB_DUO_OAUTH_CLIENT_ID/); + assert.match(setup, /GITLAB_DUO_OAUTH_CLIENT_SECRET/); assert.match(setup, /LinkifiedText/); - assert.match(setup, /Continue/); + assert.match(setup, /onContinue/); }); test("#8688 error Try Again returns gitlab-duo to the setup step", () => { diff --git a/tests/unit/guardrails/vision-bridge-claude-wire.test.ts b/tests/unit/guardrails/vision-bridge-claude-wire.test.ts index 93f6a7e680..7cba4f4044 100644 --- a/tests/unit/guardrails/vision-bridge-claude-wire.test.ts +++ b/tests/unit/guardrails/vision-bridge-claude-wire.test.ts @@ -13,7 +13,6 @@ const { test("isClaudeWireFormatModel: true for anthropic and claude-format registry providers", () => { assert.strictEqual(isClaudeWireFormatModel("anthropic/claude-sonnet-4"), true); - assert.strictEqual(isClaudeWireFormatModel("minimax/MiniMax-M3"), true); assert.strictEqual(isClaudeWireFormatModel("zai/glm-5"), true); assert.strictEqual(isClaudeWireFormatModel("claude/claude-opus"), true); assert.strictEqual(isClaudeWireFormatModel("wafer/wafer-model"), true); @@ -21,6 +20,8 @@ test("isClaudeWireFormatModel: true for anthropic and claude-format registry pro test("isClaudeWireFormatModel: false for openai-format providers", () => { assert.strictEqual(isClaudeWireFormatModel("openai/gpt-4o-mini"), false); + // minimax deliberately moved claude→openai format so images work (#9463). + assert.strictEqual(isClaudeWireFormatModel("minimax/MiniMax-M3"), false); assert.strictEqual(isClaudeWireFormatModel("kiro/minimax-m2.5"), false); assert.strictEqual(isClaudeWireFormatModel("auto/best-vision"), false); assert.strictEqual(isClaudeWireFormatModel(null), false); @@ -46,7 +47,7 @@ test("ensureBase64ImagesForClaudeWire: passthrough for non-claude-wire models", test("ensureBase64ImagesForClaudeWire: keeps data-URI images as-is", async () => { const dataUri = "data:image/png;base64,iVBORw0KGgo="; const body = { - model: "minimax/MiniMax-M3", + model: "zai/glm-5", messages: [ { role: "user", @@ -54,7 +55,7 @@ test("ensureBase64ImagesForClaudeWire: keeps data-URI images as-is", async () => }, ], }; - const out = await ensureBase64ImagesForClaudeWire(body, "minimax/MiniMax-M3"); + const out = await ensureBase64ImagesForClaudeWire(body, "zai/glm-5"); const part = out.messages[0].content[0]; assert.strictEqual(part.image_url.url, dataUri); }); @@ -70,7 +71,7 @@ test("ensureBase64ImagesForClaudeWire: resolves remote URLs to base64 for claude try { const body = { - model: "minimax/MiniMax-M3", + model: "zai/glm-5", messages: [ { role: "user", @@ -83,7 +84,7 @@ test("ensureBase64ImagesForClaudeWire: resolves remote URLs to base64 for claude }; const out = await ensureBase64ImagesForClaudeWire( body, - "minimax/MiniMax-M3", + "zai/glm-5", async () => new Response(new Uint8Array(Buffer.from(pngBase64, "base64")), { status: 200, @@ -109,7 +110,7 @@ test("ensureBase64ImagesForClaudeWire: fail-open when the remote fetch fails", a try { const body = { - model: "minimax/MiniMax-M3", + model: "zai/glm-5", messages: [ { role: "user", @@ -117,7 +118,9 @@ test("ensureBase64ImagesForClaudeWire: fail-open when the remote fetch fails", a }, ], }; - const out = await ensureBase64ImagesForClaudeWire(body, "minimax/MiniMax-M3"); + const out = await ensureBase64ImagesForClaudeWire(body, "zai/glm-5", async () => { + throw new Error("network down"); + }); const part = out.messages[0].content[0]; assert.strictEqual(part.image_url.url, "https://example.com/cat.png"); } finally { diff --git a/tests/unit/guardrails/visionBridge.test.ts b/tests/unit/guardrails/visionBridge.test.ts index 286af2a3d4..90bb516ee7 100644 --- a/tests/unit/guardrails/visionBridge.test.ts +++ b/tests/unit/guardrails/visionBridge.test.ts @@ -268,7 +268,14 @@ test("VB-S02d: Conol text-only models remain eligible for the vision bridge", as assert.equal(getResolvedModelCapabilities(model).supportsVision, false); assert.strictEqual(result.block, false); assert.notStrictEqual(result.modifiedPayload, undefined); - assert.strictEqual(visionCallCount, 1); + // #9759: with a configured vision model, individual text-only models REROUTE + // to it (images kept) instead of describing through an intermediate vision + // call — same contract as VB-S07. The point of this case is unchanged: conol + // text-only models must not be skipped by the bridge. + const modified = result.modifiedPayload as { model?: string }; + assert.ok(modified.model, "rerouted model should be set"); + assert.notStrictEqual(modified.model, model, "model should be different from original"); + assert.strictEqual(visionCallCount, 0, "reroute keeps images; no describe call"); }); test("VB-S02: model capabilities returns supportsVision for known models", () => { diff --git a/tests/unit/listCapabilities-a2a.test.ts b/tests/unit/listCapabilities-a2a.test.ts index 64b1968653..998bed4ea1 100644 --- a/tests/unit/listCapabilities-a2a.test.ts +++ b/tests/unit/listCapabilities-a2a.test.ts @@ -3,7 +3,9 @@ * * Verifies: * - Return shape matches §3.7 contract - * - Markdown table contains all 45 skill IDs + * - Markdown table contains all 45 categorized skill IDs (the 46th catalog + * entry, "ponytail", is category "external" and lives outside the + * api/cli/config canonical lists — #9058) * - Coverage bounds are within declared totals * - metadata.source === "agent-skills-catalog" * - metadata.generatedAt is an ISO datetime string @@ -35,7 +37,7 @@ test("executeListCapabilities returns shape matching §3.7 contract", async () = const { metadata } = result; assert.ok(metadata, "metadata exists"); assert.equal(metadata.source, "agent-skills-catalog", "metadata.source matches"); - assert.equal(metadata.totalSkills, 45, "metadata.totalSkills === 45"); + assert.equal(metadata.totalSkills, 46, "metadata.totalSkills === 46"); assert.ok(metadata.coverage, "metadata.coverage exists"); assert.ok(metadata.coverage.api, "metadata.coverage.api exists"); assert.ok(metadata.coverage.cli, "metadata.coverage.cli exists"); @@ -44,12 +46,14 @@ test("executeListCapabilities returns shape matching §3.7 contract", async () = assert.equal(metadata.coverage.config.total, 1, "config.total === 1"); }); -test("executeListCapabilities markdown table contains all 45 skill IDs", async () => { +test("executeListCapabilities markdown table contains all categorized skill IDs", async () => { const result = await executeListCapabilities(stubTask); const content = result.artifacts[0].content; + // 45 categorized IDs; the 46th catalog entry ("ponytail") is category + // "external" and intentionally absent from these canonical lists (#9058). const allIds = [...API_SKILL_IDS, ...CLI_SKILL_IDS, ...CONFIG_SKILL_IDS] as string[]; - assert.equal(allIds.length, 45, "catalog declares 45 skill IDs"); + assert.equal(allIds.length, 45, "canonical api/cli/config lists declare 45 skill IDs"); for (const id of allIds) { assert.ok(content.includes(id), `Markdown table missing skill ID: ${id}`); diff --git a/tests/unit/memory-settings.test.ts b/tests/unit/memory-settings.test.ts index 9f7ccb4549..00b80fc919 100644 --- a/tests/unit/memory-settings.test.ts +++ b/tests/unit/memory-settings.test.ts @@ -26,6 +26,9 @@ describe("memory settings helpers", () => { // Plan 21 — Memory Engine Redesign extended fields (default values) embeddingSource: DEFAULT_MEMORY_SETTINGS.embeddingSource, embeddingProviderModel: DEFAULT_MEMORY_SETTINGS.embeddingProviderModel, + // #10010 — custom remote embedding endpoint fields (default values) + customBaseUrl: DEFAULT_MEMORY_SETTINGS.customBaseUrl, + customModelId: DEFAULT_MEMORY_SETTINGS.customModelId, transformersEnabled: DEFAULT_MEMORY_SETTINGS.transformersEnabled, staticEnabled: DEFAULT_MEMORY_SETTINGS.staticEnabled, rerankEnabled: DEFAULT_MEMORY_SETTINGS.rerankEnabled, diff --git a/tests/unit/minimax-thinking-signature-2706.test.ts b/tests/unit/minimax-thinking-signature-2706.test.ts index dc0fb2ef0e..38976c776b 100644 --- a/tests/unit/minimax-thinking-signature-2706.test.ts +++ b/tests/unit/minimax-thinking-signature-2706.test.ts @@ -5,6 +5,15 @@ import { FORMATS } from "../../open-sse/translator/formats.ts"; import { getRegistryEntry } from "../../open-sse/config/providerRegistry.ts"; import { createPassthroughStreamWithLogger } from "../../open-sse/utils/stream.ts"; +// History: #9256 (aff021e78f) added ensureThinkingSignature normalization for the +// MiniMax Anthropic-compatible endpoint (issue 2706). PR #9463 (c61cdc30aa, +// 2026-08-11) then deliberately switched minimax/minimax-cn from claude to +// openai format (images 403'd on /anthropic/v1/messages) and REMOVED the +// ensureThinkingSignature opt-in — the claude-shaped thinking-signature +// placeholder no longer applies to these providers. This file now pins that +// NEW contract: MiniMax streams pass through untouched, exactly like any other +// non-opted-in provider. + const encoder = new TextEncoder(); async function runPassthrough(provider: string, input: string, chunkSize = input.length) { @@ -56,12 +65,14 @@ function thinkingStart(signature?: string) { }; } -test("MiniMax registries opt into thinking signature normalization", () => { - assert.equal(getRegistryEntry("minimax")?.ensureThinkingSignature, true); - assert.equal(getRegistryEntry("minimax-cn")?.ensureThinkingSignature, true); +test("MiniMax registries no longer opt into thinking signature normalization (#9463)", () => { + // c61cdc30aa switched both providers to openai format and dropped the + // claude-format ensureThinkingSignature opt-in added by #9256. + assert.equal(getRegistryEntry("minimax")?.ensureThinkingSignature, undefined); + assert.equal(getRegistryEntry("minimax-cn")?.ensureThinkingSignature, undefined); }); -test("unsigned MiniMax thinking block starts receive an empty signature", async () => { +test("unsigned MiniMax thinking block starts pass through without a signature placeholder", async () => { const event = thinkingStart(); const output = await runPassthrough( "minimax", @@ -69,7 +80,11 @@ test("unsigned MiniMax thinking block starts receive an empty signature", async ); const firstEvent = parseDataEvents(output)[0]; - assert.equal((firstEvent.content_block as Record).signature, ""); + assert.equal( + "signature" in (firstEvent.content_block as Record), + false, + "since #9463 minimax must not receive the empty-signature placeholder" + ); }); test("fragmented MiniMax streams preserve real signatures and later signature deltas", async () => { @@ -84,7 +99,7 @@ test("fragmented MiniMax streams preserve real signatures and later signature de `event: content_block_delta\ndata: ${JSON.stringify(signatureDelta)}\n\n`; const events = parseDataEvents(await runPassthrough("minimax-cn", input, 7)); - assert.equal((events[0].content_block as Record).signature, ""); + assert.equal("signature" in (events[0].content_block as Record), false); assert.deepEqual(events[1].delta, signatureDelta.delta); const existing = parseDataEvents( diff --git a/tests/unit/model-alias-seed.test.ts b/tests/unit/model-alias-seed.test.ts index 513c074593..3a56098def 100644 --- a/tests/unit/model-alias-seed.test.ts +++ b/tests/unit/model-alias-seed.test.ts @@ -44,10 +44,12 @@ test("default model alias seed writes missing aliases and is idempotent", async const routed = await sseModelService.getModelInfo("gemini-3.1-pro"); // The stored alias target is "agy/gemini-pro-agent", but getModelInfo canonicalizes // the "agy" alias to its provider id "antigravity" (ALIAS_TO_PROVIDER_ID, #8013). + // supportsThinking is surfaced from the registry's supportsReasoning flag since #9485. assert.deepEqual(routed, { provider: "antigravity", model: "gemini-pro-agent", extendedContext: false, + supportsThinking: true, }); const second = await seedDefaultModelAliases(); diff --git a/tests/unit/model-catalog-policy-invalidation-8728.test.ts b/tests/unit/model-catalog-policy-invalidation-8728.test.ts index 4c9c7e2744..e23b672e97 100644 --- a/tests/unit/model-catalog-policy-invalidation-8728.test.ts +++ b/tests/unit/model-catalog-policy-invalidation-8728.test.ts @@ -159,7 +159,8 @@ test("quota pools and quota-group renames signal model-catalog invalidation as e assert.equal(catalogVersion(), version + 1); version = catalogVersion(); - assert.equal(quotaPools.deletePool(pool.id), true); + // deletePool became async in #8906 (managed-combo cleanup on pool deletion). + assert.equal(await quotaPools.deletePool(pool.id), true); assert.equal(catalogVersion(), version + 1); }); @@ -171,7 +172,8 @@ test("deletePool clears primed key metadata after allowed_quotas rewrite", async const before = await apiKeys.getApiKeyMetadata(key.key); assert.deepEqual(before?.allowedQuotas, [pool.id]); - assert.equal(quotaPools.deletePool(pool.id), true); + // deletePool became async in #8906 (managed-combo cleanup on pool deletion). + assert.equal(await quotaPools.deletePool(pool.id), true); const after = await apiKeys.getApiKeyMetadata(key.key); assert.deepEqual(after?.allowedQuotas, [], "allowed_quotas cache must reflect direct rewrite"); diff --git a/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts b/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts index b02562162e..aa08055fd7 100644 --- a/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts +++ b/tests/unit/oauth-modal-grok-cli-paste-7610.test.ts @@ -25,7 +25,17 @@ test("#7610: OAuthModal rejects bare Grok JWT paste instructions", () => { }); test("#7610: OAuthModal paste UI is auth.json-oriented for grok-cli", () => { - assert.match(modalSource, /Import auth\.json/); - assert.match(modalSource, /Grok Build auth\.json/); - assert.match(modalSource, /refresh_token/); + // #9245 localized the hardcoded copy: the modal now renders i18n keys and the + // English source strings live in oauthModal.* inside en.json. + assert.match(modalSource, /tabImportAuthJson/); + assert.match(modalSource, /grokAuthJsonDescription/); + assert.match(modalSource, /grokAuthJsonPlaceholder/); + assert.match(modalSource, /grokAuthJsonLabel/); + + const enMessages = readFileSync(join(here, "../../src/i18n/messages/en.json"), "utf8"); + const oauthModal = (JSON.parse(enMessages) as { oauthModal: Record }).oauthModal; + assert.equal(oauthModal.tabImportAuthJson, "Import auth.json"); + assert.equal(oauthModal.grokAuthJsonLabel, "Grok Build auth.json"); + assert.match(oauthModal.grokAuthJsonDescription, /refresh_token/); + assert.match(oauthModal.grokAuthJsonPlaceholder, /refresh_token/); }); diff --git a/tests/unit/production-build-module-integrity.test.ts b/tests/unit/production-build-module-integrity.test.ts index d2ad8f478c..87a4113398 100644 --- a/tests/unit/production-build-module-integrity.test.ts +++ b/tests/unit/production-build-module-integrity.test.ts @@ -120,6 +120,14 @@ test("conolDiscovery resolves getProviderOutboundGuard from the policy module (# path.join(repoRoot, "src/shared/network/outboundUrlGuard.ts"), "utf8" ); + // Positive anchor: prove we are still reading the real guard module — a stable + // top-level export — so the negative guard below cannot rot into a vacuous pass + // against an empty/moved file (source-scanner-guards rule). + assert.match( + guardSource, + /export class OutboundUrlGuardError extends Error/, + "outboundUrlGuard.ts moved or was emptied — re-anchor this guard before trusting it" + ); assert.doesNotMatch( guardSource, /^\s*(import|export)[^\n]*from\s+["']@\//m, diff --git a/tests/unit/providers-constants-split.test.ts b/tests/unit/providers-constants-split.test.ts index 8eef7c706b..32632cd2c7 100644 --- a/tests/unit/providers-constants-split.test.ts +++ b/tests/unit/providers-constants-split.test.ts @@ -19,6 +19,9 @@ // (removed specialty-media duplicate) to 194, #8861 (Xiaomi MiMo Token Plan, regional) to 195, and // the Cheaper Inference gateway (OSS-sponsor reseller, gateways family) to 198 (UnoRouter #9009, // Raycast Pro #8895), then later additions to 199; retiring GitHub Models brings it to 198. +// The v3.8.50 free-tier gateway waves (#9631 registry cycle, waves 2-5, #9210 phase 3) grew the +// gateways family to 228 measured on the tip; Puter retired (#10210) and chatanywhere restored +// (base-reds round 3, #9985) are both included in that measurement. import { test } from "node:test"; import assert from "node:assert/strict"; @@ -47,12 +50,12 @@ test("barrel still exports every catalog + key helpers", () => { } }); -test("APIKEY_PROVIDERS merges the 6 family files into 198 entries (no loss / no dup)", async () => { +test("APIKEY_PROVIDERS merges the 6 family files into 228 entries (no loss / no dup)", async () => { const keys = Object.keys((P as Record).APIKEY_PROVIDERS); - assert.equal(keys.length, 198); - assert.equal(new Set(keys).size, 198, "duplicate keys after spread-merge"); + assert.equal(keys.length, 228); + assert.equal(new Set(keys).size, 228, "duplicate keys after spread-merge"); // the merged object's entry-count equals the sum of the 6 semantic family files; families are a - // strict partition (every provider in exactly one), so the sum must be exactly 198. + // strict partition (every provider in exactly one), so the sum must be exactly 228. const families: [string, string][] = [ ["gateways", "APIKEY_PROVIDERS_GATEWAYS"], ["frontier-labs", "APIKEY_PROVIDERS_FRONTIER"], @@ -72,7 +75,7 @@ test("APIKEY_PROVIDERS merges the 6 family files into 198 entries (no loss / no seen.add(k); } } - assert.equal(famTotal, 198, "families must partition all 198 providers"); + assert.equal(famTotal, 228, "families must partition all 228 providers"); }); test("AI_PROVIDERS Proxy aggregates all sections; lookups resolve", () => { diff --git a/tests/unit/providers-g4f-batch3.test.ts b/tests/unit/providers-g4f-batch3.test.ts index c60f6a9843..98339468d9 100644 --- a/tests/unit/providers-g4f-batch3.test.ts +++ b/tests/unit/providers-g4f-batch3.test.ts @@ -49,8 +49,10 @@ const PROVIDERS: Record { const block = jobBlock("fast-gates"); assert.match(block, /typescript@7\.0\.2/, "TS7 diagnostics must use the reviewed compiler"); + // The ratchet is folded into the non-fail-fast aggregation step (#8542 — a + // separate blocking step would let an earlier red gate mask it), so its base + // ref arrives via that step's PR_BASE_SHA env binding. assert.match( block, - /TS7_BASE_REF:\s*\$\{\{ github\.event\.pull_request\.base\.sha \}\}/, + /PR_BASE_SHA:\s*\$\{\{ github\.event\.pull_request\.base\.sha \}\}/, "the ratchet must compare against the exact pull-request base commit" ); + assert.match( + block, + /check:ts7-diagnostics-ratchet -- --base-ref "\$PR_BASE_SHA"/, + "the ratchet invocation must consume the pull-request base sha" + ); assert.ok( block.includes("tsconfig.typecheck-core.json"), "the advisory shadow must use the same core scope as the blocking ratchet" diff --git a/tests/unit/quota-connection-recovery.test.ts b/tests/unit/quota-connection-recovery.test.ts index fe23a591ee..4e7b3a0241 100644 --- a/tests/unit/quota-connection-recovery.test.ts +++ b/tests/unit/quota-connection-recovery.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, it, vi } from "vitest"; +import { describe, it, mock } from "node:test"; +import assert from "node:assert/strict"; import { CREDITS_EXHAUSTED_STATUS, isCreditsExhaustedReprobeCandidate, @@ -17,7 +18,7 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { testStatus: CREDITS_EXHAUSTED_STATUS, rateLimitedUntil: new Date(nowMs - 5000).toISOString(), }; - expect(isRecoverableCooldownConnection(conn, nowMs)).toBe(false); + assert.equal(isRecoverableCooldownConnection(conn, nowMs), false); }); it("should reprobe credits_exhausted when >30m has elapsed since lastErrorAt", () => { @@ -27,7 +28,7 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { testStatus: CREDITS_EXHAUSTED_STATUS, lastErrorAt: thirtyOneMinAgo, }; - expect(isCreditsExhaustedReprobeCandidate(conn, nowMs)).toBe(true); + assert.equal(isCreditsExhaustedReprobeCandidate(conn, nowMs), true); }); it("should NOT reprobe credits_exhausted when <30m has elapsed since lastErrorAt", () => { @@ -37,7 +38,7 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { testStatus: CREDITS_EXHAUSTED_STATUS, lastErrorAt: tenMinAgo, }; - expect(isCreditsExhaustedReprobeCandidate(conn, nowMs)).toBe(false); + assert.equal(isCreditsExhaustedReprobeCandidate(conn, nowMs), false); }); it("should reprobe credits_exhausted if no timestamp is present (first tick after startup)", () => { @@ -45,7 +46,7 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { id: "conn-1", testStatus: CREDITS_EXHAUSTED_STATUS, }; - expect(isCreditsExhaustedReprobeCandidate(conn, nowMs)).toBe(true); + assert.equal(isCreditsExhaustedReprobeCandidate(conn, nowMs), true); }); it("selectRecoverableConnections includes both transient cooldowns and expired credits_exhausted", () => { @@ -69,18 +70,18 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { [activeTransient, expiredCredits, freshCredits], nowMs ); - expect(selected.map((c) => c.id)).toEqual(["t-1", "c-1"]); + assert.deepEqual(selected.map((c) => c.id), ["t-1", "c-1"]); }); it("runConnectionRecoveryTick calls clearConnectionError for reprobe candidates", async () => { - const loadConnections = vi.fn().mockResolvedValue([ + const loadConnections = mock.fn(async () => [ { id: "c-1", testStatus: CREDITS_EXHAUSTED_STATUS, lastErrorAt: new Date(nowMs - thirtyMinMs - 1000).toISOString(), }, ]); - const clearConnectionError = vi.fn().mockResolvedValue(undefined); + const clearConnectionError = mock.fn(async () => undefined); const res = await runConnectionRecoveryTick({ nowMs, @@ -88,8 +89,10 @@ describe("connectionRecovery — credits_exhausted reprobe", () => { clearConnectionError, }); - expect(res.recovered).toBe(1); - expect(res.recoveredIds).toEqual(["c-1"]); - expect(clearConnectionError).toHaveBeenCalledWith("c-1", expect.anything()); + assert.equal(res.recovered, 1); + assert.deepEqual(res.recoveredIds, ["c-1"]); + assert.equal(clearConnectionError.mock.callCount(), 1); + assert.equal(clearConnectionError.mock.calls[0].arguments[0], "c-1"); + assert.notEqual(clearConnectionError.mock.calls[0].arguments[1], undefined); }); }); diff --git a/tests/unit/rate-limit-local-error-classification.test.ts b/tests/unit/rate-limit-local-error-classification.test.ts index aad8ebb57d..f7c140a380 100644 --- a/tests/unit/rate-limit-local-error-classification.test.ts +++ b/tests/unit/rate-limit-local-error-classification.test.ts @@ -110,7 +110,7 @@ test.after(() => { fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true }); }); -test("trusted provenance, not a public code string, classifies local limiter failures", () => { +test("execution-timeout classification requires trusted provenance; queue codes classify by string (#9164/#9342)", () => { const executionError = markLocalRateLimitError( new Error("local execution expiration"), RATE_LIMIT_EXECUTION_TIMEOUT_CODE @@ -142,11 +142,16 @@ test("trusted provenance, not a public code string, classifies local limiter fai }), true ); + // #9164 (3898305df0) deliberately widened the contract: the rate_limit_queue_* + // code strings are OmniRoute-owned backpressure codes and classify as + // request-scoped even without WeakMap provenance (an upstream collision is + // accepted as fail-safe: worst case a colliding provider 503 skips health + // penalties, it never amplifies into fallback storms). assert.equal( isComboRequestScopedFailure(collisionResponse, "provider collision", { code: RATE_LIMIT_QUEUE_WEDGED_CODE, }), - false + true ); assert.equal( shouldTripProviderBreakerForResult( @@ -170,8 +175,8 @@ test("trusted provenance, not a public code string, classifies local limiter fai false, false ), - true, - "an untrusted upstream collision must remain a provider-health failure" + false, + "#9342 (47c819df66): RATE_LIMIT_QUEUE_* codes are OmniRoute backpressure and never trip the provider breaker, provenance or not" ); assert.equal( shouldSkipConnDisable( @@ -197,7 +202,8 @@ test("trusted provenance, not a public code string, classifies local limiter fai false, "openai" ), - false + true, + "#9164: the queue-code string alone marks the failure request-scoped, so the connection is not disabled" ); assert.equal( shouldRecordProviderBreakerFailure({ @@ -213,7 +219,7 @@ test("trusted provenance, not a public code string, classifies local limiter fai ); }); -test("legacy queue-timeout compatibility also requires trusted local provenance", () => { +test("legacy queue-timeout code classifies as request-scoped with or without provenance (#9164)", () => { const untrusted = new Response("legacy collision", { status: 503 }); const legacyError = markLocalRateLimitError( new Error("legacy local timeout"), @@ -224,11 +230,14 @@ test("legacy queue-timeout compatibility also requires trusted local provenance" legacyError ); + // #9164 added rate_limit_queue_timeout to REQUEST_SCOPED_UPSTREAM_ERROR_CODES, + // so the code string is sufficient — trusted provenance is no longer required + // for this classification (it still works, next assertion). assert.equal( isComboRequestScopedFailure(untrusted, "legacy collision", { code: LEGACY_RATE_LIMIT_QUEUE_TIMEOUT_CODE, }), - false + true ); assert.equal( isComboRequestScopedFailure(trusted, "legacy local timeout", { @@ -315,7 +324,7 @@ for (const strategy of ["priority", "round-robin"] as const) { }); } -test("an untrusted upstream code collision retains ordinary health penalties", async () => { +test("an upstream body colliding with local queue codes is treated as local backpressure (#9164)", async () => { const connection = await providersDb.createProviderConnection({ provider: "openai", authType: "apikey", @@ -348,8 +357,15 @@ test("an untrusted upstream code collision retains ordinary health penalties", a }); assert.equal(result.status, 503); - assert.ok( - (accountFallback.getProviderBreakerState("openai")?.failureCount ?? 0) >= 1, - "the upstream 503 must remain eligible for provider-breaker accounting" + // #9164 (3898305df0): isLocalQueueCapacityErrorBody matches the queue-code + // string in the body, so the combo returns the 503 without upstream fallback + // and without counting it toward provider health — the collision is accepted + // as fail-safe (no breaker/cooldown penalties, but also no retry amplification). + assert.equal( + accountFallback.getProviderBreakerState("openai")?.failureCount ?? 0, + 0, + "a queue-code collision body is classified local backpressure and skips breaker accounting" ); + const storedConnection = await providersDb.getProviderConnectionById(connection.id); + assert.equal(storedConnection?.testStatus, "active", "the connection must not be disabled"); }); diff --git a/tests/unit/reactive-context-compaction-policy.test.mjs b/tests/unit/reactive-context-compaction-policy.test.mjs index dec9833505..0726ecefa2 100644 --- a/tests/unit/reactive-context-compaction-policy.test.mjs +++ b/tests/unit/reactive-context-compaction-policy.test.mjs @@ -12,9 +12,13 @@ test("global compression off gates reactive and last-resort context compaction", source, /reactiveContextCompactionEnabled\s*=\s*compressionSettingsResult\.enabled\s*&&\s*!compressionExcluded;/ ); - assert.match(source, /reactiveContextCompactionEnabled\s*&&\s*estimatedTokens\s*>\s*threshold/); + // #8949 added the !nativeCodexPassthrough guard between the flag and the token check. assert.match( source, - /reactiveContextCompactionEnabled\s*&&\s*finalEstimatedInputTokens\s*>=\s*finalContextLimit/ + /reactiveContextCompactionEnabled\s*&&\s*!nativeCodexPassthrough\s*&&\s*estimatedTokens\s*>\s*threshold/ + ); + assert.match( + source, + /reactiveContextCompactionEnabled\s*&&\s*!nativeCodexPassthrough\s*&&\s*finalEstimatedInputTokens\s*>=\s*finalContextLimit/ ); }); diff --git a/tests/unit/request-log-detail-layout.test.ts b/tests/unit/request-log-detail-layout.test.ts index 4e2a035ed1..dc55b715b0 100644 --- a/tests/unit/request-log-detail-layout.test.ts +++ b/tests/unit/request-log-detail-layout.test.ts @@ -1,11 +1,33 @@ import test from "node:test"; import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, resolve } from "node:path"; import React from "react"; -import { renderToStaticMarkup } from "react-dom/server"; +import { renderToStaticMarkup as reactRenderToStaticMarkup } from "react-dom/server"; +import { NextIntlClientProvider } from "next-intl"; const { default: RequestLoggerDetail } = await import("../../src/shared/components/RequestLoggerDetail.tsx"); +// #9245 localized RequestLoggerDetail (useTranslations("requestLogger.detail")), so the +// component must render inside NextIntlClientProvider. Use the REAL English messages — +// the assertions below pin the actual en.json copy, not a stub. +const here = dirname(fileURLToPath(import.meta.url)); +const enMessages = JSON.parse( + readFileSync(resolve(here, "../../src/i18n/messages/en.json"), "utf8") +); + +function renderToStaticMarkup(element: React.ReactElement) { + return reactRenderToStaticMarkup( + React.createElement( + NextIntlClientProvider, + { locale: "en", timeZone: "UTC", messages: { requestLogger: enMessages.requestLogger } }, + element + ) + ); +} + function renderDetailWithSourceFormat(sourceFormat: string) { return renderToStaticMarkup( React.createElement(RequestLoggerDetail, { diff --git a/tests/unit/request-log-detail-stream.test.ts b/tests/unit/request-log-detail-stream.test.ts index b1f5388a5e..10785a5c94 100644 --- a/tests/unit/request-log-detail-stream.test.ts +++ b/tests/unit/request-log-detail-stream.test.ts @@ -1,11 +1,33 @@ import test from "node:test"; import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, resolve } from "node:path"; import React from "react"; -import { renderToStaticMarkup } from "react-dom/server"; +import { renderToStaticMarkup as reactRenderToStaticMarkup } from "react-dom/server"; +import { NextIntlClientProvider } from "next-intl"; const { default: RequestLoggerDetail } = await import("../../src/shared/components/RequestLoggerDetail.tsx"); +// #9245 (7ca73697b0) localized RequestLoggerDetail (useTranslations("requestLogger.detail")), +// so the component must render inside NextIntlClientProvider. Use the REAL English +// messages — the assertions below pin the actual en.json copy, not a stub. +const here = dirname(fileURLToPath(import.meta.url)); +const enMessages = JSON.parse( + readFileSync(resolve(here, "../../src/i18n/messages/en.json"), "utf8") +); + +function renderToStaticMarkup(element: React.ReactElement) { + return reactRenderToStaticMarkup( + React.createElement( + NextIntlClientProvider, + { locale: "en", timeZone: "UTC", messages: { requestLogger: enMessages.requestLogger } }, + element + ) + ); +} + test("event stream shows only when debugEnabled and appears above legacy response", () => { const html = renderToStaticMarkup( React.createElement(RequestLoggerDetail, { diff --git a/tests/unit/sidebar-tools-group.test.ts b/tests/unit/sidebar-tools-group.test.ts index 3a1f145c86..9625d4f6c5 100644 --- a/tests/unit/sidebar-tools-group.test.ts +++ b/tests/unit/sidebar-tools-group.test.ts @@ -25,10 +25,10 @@ function getToolsGroup() { }; } -test("TOOLS_GROUP items follow plan 14 order: cli-code → cli-agents → acp-agents → cloud-agents → agent-bridge → traffic-inspector → discovery", () => { +test("TOOLS_GROUP items follow plan 14 order: cli-code → cli-agents → acp-agents → cloud-agents → conductor → agent-bridge → traffic-inspector → discovery", () => { const toolsGroup = getToolsGroup(); const itemIds = toolsGroup.items.map((item) => item.id); - // cli-code/cli-agents/acp-agents/cloud-agents from plan 14 (#2839); agent-bridge/traffic-inspector from plans 11/12 (#2858); discovery from #5939. + // cli-code/cli-agents/acp-agents/cloud-agents from plan 14 (#2839); agent-bridge/traffic-inspector from plans 11/12 (#2858); discovery from #5939; conductor from the Conductor panel (PRD RF3, #8221). assert.deepEqual( itemIds, [ @@ -36,11 +36,12 @@ test("TOOLS_GROUP items follow plan 14 order: cli-code → cli-agents → acp-ag "cli-agents", "acp-agents", "cloud-agents", + "conductor", "agent-bridge", "traffic-inspector", "discovery", ], - "TOOLS_GROUP items order must be cli-code, cli-agents, acp-agents, cloud-agents, agent-bridge, traffic-inspector, discovery" + "TOOLS_GROUP items order must be cli-code, cli-agents, acp-agents, cloud-agents, conductor, agent-bridge, traffic-inspector, discovery" ); }); diff --git a/tests/unit/skills-injection.test.ts b/tests/unit/skills-injection.test.ts index 777ac88de1..d9b941331d 100644 --- a/tests/unit/skills-injection.test.ts +++ b/tests/unit/skills-injection.test.ts @@ -9,9 +9,17 @@ process.env.DATA_DIR = TEST_DATA_DIR; const coreDb = await import("../../src/lib/db/core.ts"); const { skillRegistry } = await import("../../src/lib/skills/registry.ts"); -const { injectSkills, injectSkillTools, detectProvider } = +const { injectSkills, injectSkillTools, detectProvider, decodeSkillToolName } = await import("../../src/lib/skills/injection.ts"); +// Since #9058, identifiers that violate the provider tool-name pattern +// (^[a-zA-Z0-9_-]+$ — every name@version here, because of "@" and ".") are +// encoded as omr_skill_, and bare property-map +// schemas are normalized to { type: "object", properties: {...} }. +function encodedName(identifier: string): string { + return `omr_skill_${Buffer.from(identifier, "utf8").toString("base64url")}`; +} + function resetRegistryState() { skillRegistry["registeredSkills"].clear(); skillRegistry["versionCache"].clear(); @@ -71,24 +79,25 @@ test("injectSkills renders enabled tools in provider-specific shapes", async () assert.deepEqual(openaiTools[0], { type: "function", function: { - name: "search@1.0.0", + name: "omr_skill_c2VhcmNoQDEuMC4w", // encodedName("search@1.0.0") description: "search the web", - parameters: { query: "string" }, + parameters: { type: "object", properties: { query: "string" } }, }, }); + assert.equal(decodeSkillToolName("omr_skill_c2VhcmNoQDEuMC4w"), "search@1.0.0"); assert.deepEqual(openaiTools[1], { name: "existing-tool" }); assert.deepEqual(claudeTools, [ { - name: "search@1.0.0", + name: "omr_skill_c2VhcmNoQDEuMC4w", description: "search the web", - input_schema: { query: "string" }, + input_schema: { type: "object", properties: { query: "string" } }, }, ]); assert.deepEqual(geminiTools, [ { - name: "search@1.0.0", + name: "omr_skill_c2VhcmNoQDEuMC4w", description: "search the web", - parameters: { query: "string" }, + parameters: { type: "object", properties: { query: "string" } }, }, ]); assert.deepEqual(fallbackTools, [openaiTools[0]]); @@ -179,9 +188,9 @@ test("injectSkills auto mode matches message/context semantics and applies score assert.deepEqual(tools[0], { type: "function", function: { - name: "issueSearch@1.0.0", + name: encodedName("issueSearch@1.0.0"), description: "search github issues and pull requests", - parameters: { query: "string" }, + parameters: { type: "object", properties: { query: "string" } }, }, }); }); @@ -207,7 +216,9 @@ test("injectSkills auto mode only scores name tokens with at least three charact }); assert.deepEqual( - tools.map((tool) => (tool as { function: { name: string } }).function.name), + tools.map((tool) => + decodeSkillToolName((tool as { function: { name: string } }).function.name) + ), ["apiSearch@1.0.0"] ); }); @@ -252,7 +263,7 @@ test("injectSkills auto mode prefers provider-matching tagged skills", async () (tool): tool is { function: { name: string } } => !!tool && typeof tool === "object" && "function" in tool ) - .map((tool) => tool.function.name); + .map((tool) => decodeSkillToolName(tool.function.name)); assert.equal(injectedNames[0], "openaiDocTool@1.0.0"); assert.equal(injectedNames.includes("claudeDocTool@1.0.0"), true); }); @@ -292,7 +303,9 @@ test("injectSkills auto mode limits selected auto skills and keeps on-mode skill // 1 always-on + max 5 auto assert.equal(tools.length, 6); - const names = tools.map((tool) => (tool as { function: { name: string } }).function.name); + const names = tools.map((tool) => + decodeSkillToolName((tool as { function: { name: string } }).function.name) + ); assert.equal(names.includes("alwaysOnUtility@1.0.0"), true); assert.equal(names.filter((name) => name.startsWith("searchSkill")).length, 5); }); diff --git a/tests/unit/sse-auth.test.ts b/tests/unit/sse-auth.test.ts index 5a81d97b64..4924eb741c 100644 --- a/tests/unit/sse-auth.test.ts +++ b/tests/unit/sse-auth.test.ts @@ -758,7 +758,12 @@ test("getProviderCredentials intersects forcedConnectionId with allowedConnectio } ); - assert.equal(selected, null); + // #8893: a forced pin outside the eligible pool is DROPPED (not honored) so a + // stale reset-aware pin cannot brick the request — selection falls back to the + // policy-allowed pool. The policy-blocked connection must never be selected. + assert.equal(selected.connectionId, allowedConn.id); + assert.equal(selected.apiKey, "sk-allowed"); + assert.notEqual(selected.connectionId, blockedConn.id); }); test("getProviderCredentials retains rate-limited accounts when allowSuppressedConnections is enabled", async () => { diff --git a/tests/unit/synced-capability-warmup-8697.test.ts b/tests/unit/synced-capability-warmup-8697.test.ts index 90045d8cdd..033b1eb371 100644 --- a/tests/unit/synced-capability-warmup-8697.test.ts +++ b/tests/unit/synced-capability-warmup-8697.test.ts @@ -1,19 +1,51 @@ import assert from "node:assert/strict"; import { describe, it, mock } from "node:test"; import { getDbInstance } from "../../src/lib/db/core.ts"; -import { getSyncedCapability } from "../../src/lib/modelsDevSync.ts"; +import { + getSyncedCapabilities, + getSyncedCapability, + loadAllSyncedCapabilitiesUncached, +} from "../../src/lib/modelsDevSync.ts"; + +// #8697 guarded the cold /v1/models catalog build against one SQLite round-trip per +// distinct model lookup. #9199 deliberately moved that contract: getSyncedCapability() +// no longer self-warms the module cache — bulk callers (catalog builds) must pass a +// build-local snapshot (`bulk`, from loadAllSyncedCapabilitiesUncached()), and warm +// runtime lookups are served from the module cache. Both paths must stay off SQLite +// per model, otherwise the #8697 cold-catalog freeze regresses. +describe("getSyncedCapability bulk/warm lookups (#8697-adjacent, contract per #9199)", () => { + it("does not touch SQLite per model when a bulk snapshot is supplied (catalog build path)", () => { + const bulk = loadAllSyncedCapabilitiesUncached(); + + const db = getDbInstance(); + const prepareSpy = mock.method(db, "prepare"); + const callsBefore = prepareSpy.mock.calls.length; + + const N = 200; + for (let i = 0; i < N; i++) { + getSyncedCapability("openai", `synthetic-model-${i}`, bulk); + } + + const callsAfter = prepareSpy.mock.calls.length; + prepareSpy.mock.restore(); + + assert.equal( + callsAfter - callsBefore, + 0, + `expected 0 db.prepare() calls across ${N} distinct model lookups with a bulk ` + + `snapshot, got ${callsAfter - callsBefore} — the catalog build path may have ` + + `regressed to a per-model SQLite round-trip (#8697)` + ); + }); + + it("does not touch SQLite per model once the whole-table cache is warm", () => { + // Warm the module cache the way runtime callers do (one bulk read + table guard). + getSyncedCapabilities(); -describe("getSyncedCapability warm-up (#8697-adjacent)", () => { - it("does not run a DB round-trip per distinct model lookup (regression guard for the missing bulk warm-up)", () => { const db = getDbInstance(); const prepareSpy = mock.method(db, "prepare"); const callsBefore = prepareSpy.mock.calls.length; - // A catalog rebuild calls getSyncedCapability() once per distinct model — this - // used to run one SQLite SELECT per call on a cold cache (no warm-up caller sits - // in the /v1/models build path). Self-warmed, only the one-time bulk load (plus - // its CREATE TABLE IF NOT EXISTS guard) should touch the DB, regardless of how - // many distinct models are looked up afterward. const N = 200; for (let i = 0; i < N; i++) { getSyncedCapability("openai", `synthetic-model-${i}`); @@ -22,11 +54,12 @@ describe("getSyncedCapability warm-up (#8697-adjacent)", () => { const callsAfter = prepareSpy.mock.calls.length; prepareSpy.mock.restore(); - assert.ok( - callsAfter - callsBefore <= 2, - `expected at most 2 db.prepare() calls (bulk load + table guard) across ${N} distinct ` + - `model lookups, got ${callsAfter - callsBefore} — getSyncedCapability() may have regressed ` + - `to a per-model SQLite round-trip` + assert.equal( + callsAfter - callsBefore, + 0, + `expected 0 db.prepare() calls across ${N} distinct model lookups on a warm ` + + `cache, got ${callsAfter - callsBefore} — warm-path lookups may have regressed ` + + `to a per-model SQLite round-trip (#8697)` ); }); }); diff --git a/tests/unit/tls-proxy-context.test.ts b/tests/unit/tls-proxy-context.test.ts index 57b4a3e08d..8312e8b584 100644 --- a/tests/unit/tls-proxy-context.test.ts +++ b/tests/unit/tls-proxy-context.test.ts @@ -659,7 +659,14 @@ test("proxy dispatcher failures sanitize logs and propagated errors", async () = caught = error; } assert.ok(caught instanceof Error); - assert.equal(caught.message, "Proxy request failed"); + // #10032: the underlying reason is kept for diagnosability, with the + // proxy URL (credentials included) redacted before propagation (#9837). + assert.equal( + caught.message, + "Proxy request failed: connect failed via [redacted-proxy]", + ); + assert.equal(caught.message.includes("user:password"), false); + assert.equal(caught.message.includes("placeholder.proxy"), false); assert.equal("code" in caught ? caught.code : undefined, "PROXY_UNREACHABLE"); assert.equal(errors.some((line) => line.includes("user:password")), false); assert.equal(errors.some((line) => line.includes("placeholder.proxy")), false); diff --git a/tests/unit/unorouter-registry.test.ts b/tests/unit/unorouter-registry.test.ts index 3cfcd246a3..752f7490b9 100644 --- a/tests/unit/unorouter-registry.test.ts +++ b/tests/unit/unorouter-registry.test.ts @@ -5,7 +5,9 @@ const { APIKEY_PROVIDERS } = await import("../../src/shared/constants/providers. const { REGISTRY: providerRegistry } = await import("../../open-sse/config/providerRegistry.ts"); const { isValidModel } = await import("../../src/shared/constants/models.ts"); -const UNOROUTER_CHAT_URL = "https://api.unorouter.ai/v1/chat/completions"; +// Canonical host is .com — api.unorouter.ai 301-redirects there (verified live 2026-08-12, +// base-reds round 3 #9985); wave4 (#9584) moved the registry to the canonical host. +const UNOROUTER_CHAT_URL = "https://api.unorouter.com/v1/chat/completions"; test("unorouter is registered as an API-key gateway provider", () => { const entry = APIKEY_PROVIDERS.unorouter; @@ -30,10 +32,11 @@ test("unorouter registry entry uses OpenAI format with bearer API-key auth", () assert.equal(entry.passthroughModels, true); }); -test("unorouter ships with auto model", () => { - assert.deepEqual(providerRegistry.unorouter.models, [ - { id: "auto", name: "Auto (Best Available)" }, - ]); +test("unorouter discovers models live via passthrough (no static seed list)", () => { + // Wave4 (#9584) replaced the static auto-model seed with live /v1/models discovery. + assert.deepEqual(providerRegistry.unorouter.models, []); + assert.equal(providerRegistry.unorouter.passthroughModels, true); + assert.equal(providerRegistry.unorouter.modelsUrl, "https://api.unorouter.com/v1/models"); }); test("unorouter accepts any model id via passthrough", () => { diff --git a/tests/unit/v1-models-discovery-conformance.test.ts b/tests/unit/v1-models-discovery-conformance.test.ts index 9941d18ca5..549fc28ffa 100644 --- a/tests/unit/v1-models-discovery-conformance.test.ts +++ b/tests/unit/v1-models-discovery-conformance.test.ts @@ -108,7 +108,7 @@ test("3. stale-first: an expired 200 entry within the staleness window is served ); }); -test("4. an ordinary TTL expiry remains stale-first regardless of snapshot age", async () => { +test("4. an ordinary TTL expiry inside the SWR window remains stale-first", async () => { const makeRequest = () => new Request("http://localhost/v1/models"); const res1 = await v1ModelsCatalog.getUnifiedModelsResponse(makeRequest()); @@ -117,9 +117,12 @@ test("4. an ordinary TTL expiry remains stale-first regardless of snapshot age", const runsAfterFirst = v1ModelsCatalog.__getCatalogBuilderRunsForTest(); assert.equal(runsAfterFirst, 1); - // Age well past the historical 30-second bound. Ordinary expiry must not turn a - // refresh failure into a client-visible cold-build wait. - v1ModelsCatalog.__expireCatalogCacheForTest(24 * 60 * 60 * 1000); + // #9199/#10198 bounded the stale window (CATALOG_STALE_WHILE_REVALIDATE_MS = 30s) + // so a refresh that keeps failing cannot pin an old catalog forever — the old + // "stale-first regardless of snapshot age" contract is gone (the past-the-window + // rebuild path is pinned by model-catalog-cache-swr-8728.test.ts). Inside the + // window, expiry must stay stale-first and never impose a cold-build wait. + v1ModelsCatalog.__expireCatalogCacheForTest(); const res2 = await v1ModelsCatalog.getUnifiedModelsResponse(makeRequest()); assert.equal(res2.status, 200); diff --git a/tests/unit/video-fal-grok.test.ts b/tests/unit/video-fal-grok.test.ts index 51512554b4..8a18c1accc 100644 --- a/tests/unit/video-fal-grok.test.ts +++ b/tests/unit/video-fal-grok.test.ts @@ -114,7 +114,9 @@ test("handleVideoGeneration rejects malformed Fal video URL payloads", async () assert.equal(result.success, false); assert.equal(result.status, 502); - assert.match(result.error, /no video URL/); + // #9982 folded the video path into the provider-neutral mediaGeneration/fal.ts, + // whose wording is media-kind agnostic ("no media URL"). + assert.match(result.error, /no media URL/); } finally { globalThis.fetch = originalFetch; } diff --git a/tests/unit/web-session-credentials.test.ts b/tests/unit/web-session-credentials.test.ts index 04035c459f..91e90a7881 100644 --- a/tests/unit/web-session-credentials.test.ts +++ b/tests/unit/web-session-credentials.test.ts @@ -99,6 +99,8 @@ test("web session credential metadata identifies cookie, token, and no-auth prov credentialName: "__Secure-better-auth.session_token", placeholder: "__Secure-better-auth.session_token=... or full Cookie header from conol.ai", acceptsFullCookieHeader: true, + // #8974 defines storageKeys on the conol-web entry (src/shared/providers/webSessionCredentials.ts) + storageKeys: ["cookie", "__Secure-better-auth.session_token"], }); });