From b0391ac3abe013546d2dd87dbdb6ce4bc50886ec Mon Sep 17 00:00:00 2001 From: hanafish <1106510024@qq.com> Date: Fri, 17 Jul 2026 14:01:18 +0800 Subject: [PATCH] fix(i18n): complete locale coverage Pre-commit hook ran. Total eslint: 1, total circular: 0 --- package.json | 3 +- scripts/quality/check-missing-i18n-keys.mjs | 164 +++++++++++++-- src/i18n/locales/de/common.json | 209 +++++++++++++++++++- src/i18n/locales/de/integrations.json | 139 ++++++++++++- src/i18n/locales/de/navigation.json | 25 ++- src/i18n/locales/de/sessions.json | 62 +++++- src/i18n/locales/de/settings.json | 11 +- src/i18n/locales/en/common.json | 20 ++ src/i18n/locales/es/common.json | 207 ++++++++++++++++++- src/i18n/locales/es/integrations.json | 139 ++++++++++++- src/i18n/locales/es/navigation.json | 25 ++- src/i18n/locales/es/sessions.json | 60 +++++- src/i18n/locales/es/settings.json | 11 +- src/i18n/locales/fr/common.json | 191 ++++++++++++++++++ src/i18n/locales/fr/integrations.json | 125 +++++++++++- src/i18n/locales/fr/navigation.json | 21 ++ src/i18n/locales/fr/sessions.json | 42 ++++ src/i18n/locales/fr/settings.json | 9 + src/i18n/locales/ja/common.json | 198 ++++++++++++++++++- src/i18n/locales/ja/integrations.json | 133 ++++++++++++- src/i18n/locales/ja/navigation.json | 29 ++- src/i18n/locales/ja/sessions.json | 55 +++++- src/i18n/locales/ja/settings.json | 9 + src/i18n/locales/ko/common.json | 204 ++++++++++++++++++- src/i18n/locales/ko/integrations.json | 135 ++++++++++++- src/i18n/locales/ko/navigation.json | 33 +++- src/i18n/locales/ko/sessions.json | 53 ++++- src/i18n/locales/ko/settings.json | 9 + src/i18n/locales/pl/common.json | 205 ++++++++++++++++++- src/i18n/locales/pl/integrations.json | 166 +++++++++++++++- src/i18n/locales/pl/navigation.json | 39 +++- src/i18n/locales/pl/sessions.json | 84 +++++++- src/i18n/locales/pl/settings.json | 9 + src/i18n/locales/pt/common.json | 196 ++++++++++++++++++ src/i18n/locales/pt/integrations.json | 131 +++++++++++- src/i18n/locales/pt/navigation.json | 21 ++ src/i18n/locales/pt/sessions.json | 42 ++++ src/i18n/locales/pt/settings.json | 9 + src/i18n/locales/ru/common.json | 191 ++++++++++++++++++ src/i18n/locales/ru/integrations.json | 125 +++++++++++- src/i18n/locales/ru/navigation.json | 23 +++ src/i18n/locales/ru/sessions.json | 42 ++++ src/i18n/locales/ru/settings.json | 9 + src/i18n/locales/tr/common.json | 191 ++++++++++++++++++ src/i18n/locales/tr/integrations.json | 125 +++++++++++- src/i18n/locales/tr/navigation.json | 23 +++ src/i18n/locales/tr/sessions.json | 42 ++++ src/i18n/locales/tr/settings.json | 9 + src/i18n/locales/vi/common.json | 202 ++++++++++++++++++- src/i18n/locales/vi/integrations.json | 133 ++++++++++++- src/i18n/locales/vi/navigation.json | 27 ++- src/i18n/locales/vi/sessions.json | 57 +++++- src/i18n/locales/vi/settings.json | 9 + src/i18n/locales/zh-Hant/common.json | 168 ++++++++++++++++ src/i18n/locales/zh-Hant/integrations.json | 39 ++++ src/i18n/locales/zh-Hant/navigation.json | 23 +++ src/i18n/locales/zh-Hant/sessions.json | 39 ++++ src/i18n/locales/zh-Hant/settings.json | 9 + src/i18n/locales/zh/common.json | 147 ++++++++++++++ src/i18n/locales/zh/integrations.json | 5 + src/i18n/locales/zh/navigation.json | 25 ++- src/i18n/locales/zh/sessions.json | 13 +- src/scaffold/AppUpdater/index.test.ts | 49 ++++- src/scaffold/AppUpdater/index.tsx | 114 ++++++++--- 64 files changed, 4872 insertions(+), 190 deletions(-) diff --git a/package.json b/package.json index c1d6e529d..bee347106 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "test:watch": "vitest", "check:unused-exports": "ts-unused-exports tsconfig.json --excludePathsFromReport='src/index.tsx;src/app/;src/i18n/;.test.ts;.test.tsx;/types.ts;/index.ts;src/scaffold/;src/types/ambient/'", "check:unused-exports:all": "ts-unused-exports tsconfig.json", - "check:e2e-oauth-guards": "node scripts/quality/check-e2e-oauth-guards.mjs" + "check:e2e-oauth-guards": "node scripts/quality/check-e2e-oauth-guards.mjs", + "check:i18n": "node scripts/quality/check-missing-i18n-keys.mjs" }, "keywords": [ "orgii", diff --git a/scripts/quality/check-missing-i18n-keys.mjs b/scripts/quality/check-missing-i18n-keys.mjs index 23fc10ed5..3b409276b 100644 --- a/scripts/quality/check-missing-i18n-keys.mjs +++ b/scripts/quality/check-missing-i18n-keys.mjs @@ -2,7 +2,7 @@ * Missing i18n Keys Detector * * Compares English (source-of-truth) locale keys against all other locales - * and reports keys that exist in English but are missing in other languages. + * and reports missing keys plus interpolation-placeholder mismatches. * * Usage: * node scripts/quality/check-missing-i18n-keys.mjs [--namespace market] [--fix] @@ -12,13 +12,10 @@ * --fix Copy missing keys from English into other locale files * --verbose Show all keys, not just missing ones */ -import { readFileSync, writeFileSync, readdirSync } from "fs"; -import { join, basename } from "path"; +import { readFileSync, readdirSync, writeFileSync } from "fs"; +import { basename, join } from "path"; -const LOCALES_DIR = join( - import.meta.dirname, - "../../src/i18n/locales" -); +const LOCALES_DIR = join(import.meta.dirname, "../../src/i18n/locales"); const SOURCE_LANG = "en"; @@ -29,9 +26,85 @@ const nsFilter = args.includes("--namespace") const shouldFix = args.includes("--fix"); const verbose = args.includes("--verbose"); +function findDuplicateJsonKeys(text) { + const duplicates = []; + let index = text.charCodeAt(0) === 0xfeff ? 1 : 0; + + const skipWhitespace = () => { + while (/\s/.test(text[index] ?? "")) index++; + }; + + const parseString = () => { + const start = index++; + while (index < text.length) { + if (text[index] === "\\") { + index += 2; + } else if (text[index++] === '"') { + return JSON.parse(text.slice(start, index)); + } + } + throw new Error("Unterminated JSON string"); + }; + + const parseValue = (path) => { + skipWhitespace(); + if (text[index] === "{") return parseObject(path); + if (text[index] === "[") return parseArray(path); + if (text[index] === '"') return void parseString(); + while (index < text.length && !/[\]},]/.test(text[index])) index++; + }; + + const parseObject = (path) => { + index++; + skipWhitespace(); + const seen = new Set(); + while (index < text.length && text[index] !== "}") { + const key = parseString(); + const keyPath = path ? `${path}.${key}` : key; + if (seen.has(key)) duplicates.push(keyPath); + seen.add(key); + skipWhitespace(); + if (text[index++] !== ":") throw new Error(`Expected ':' at ${keyPath}`); + parseValue(keyPath); + skipWhitespace(); + if (text[index] === ",") { + index++; + skipWhitespace(); + } else if (text[index] !== "}") { + throw new Error(`Expected ',' or '}' at ${keyPath}`); + } + } + index++; + }; + + const parseArray = (path) => { + index++; + skipWhitespace(); + let itemIndex = 0; + while (index < text.length && text[index] !== "]") { + parseValue(`${path}[${itemIndex++}]`); + skipWhitespace(); + if (text[index] === ",") { + index++; + skipWhitespace(); + } else if (text[index] !== "]") { + throw new Error(`Expected ',' or ']' at ${path}`); + } + } + index++; + }; + + parseValue(""); + return duplicates; +} + // Locale files may carry a UTF-8 BOM; strip it so JSON.parse doesn't choke. function readJson(filePath) { - return JSON.parse(readFileSync(filePath, "utf-8").replace(/^/, "")); + const text = readFileSync(filePath, "utf-8"); + return { + data: JSON.parse(text.replace(/^/, "")), + duplicateKeys: findDuplicateJsonKeys(text), + }; } function flattenKeys(obj, prefix = "") { @@ -47,6 +120,17 @@ function flattenKeys(obj, prefix = "") { return keys; } +function getPlaceholders(value) { + if (typeof value !== "string") return []; + return [ + ...new Set( + [...value.matchAll(/\{\{\s*([^},\s]+)[^}]*\}\}/g)].map( + (match) => match[1] + ) + ), + ].sort(); +} + function getNestedValue(obj, keyPath) { const parts = keyPath.split("."); let current = obj; @@ -80,13 +164,23 @@ const namespaceFiles = readdirSync(sourceDir) .map((fileName) => basename(fileName, ".json")); let totalMissing = 0; +let totalPlaceholderMismatches = 0; +let totalDuplicateKeys = 0; +let totalInvalidFiles = 0; let totalFixed = 0; for (const ns of namespaceFiles) { if (nsFilter && ns !== nsFilter) continue; const enPath = join(sourceDir, `${ns}.json`); - const enData = readJson(enPath); + const { data: enData, duplicateKeys: enDuplicateKeys } = readJson(enPath); + if (enDuplicateKeys.length > 0) { + console.log( + `\n en/${ns}.json — ${enDuplicateKeys.length} duplicate key(s):` + ); + for (const key of enDuplicateKeys) console.log(` - ${key}`); + totalDuplicateKeys += enDuplicateKeys.length; + } const enKeys = flattenKeys(enData); let nsMissing = 0; @@ -94,20 +188,38 @@ for (const ns of namespaceFiles) { for (const lang of languages) { const langPath = join(LOCALES_DIR, lang, `${ns}.json`); let langData; + let duplicateKeys; try { - langData = readJson(langPath); + ({ data: langData, duplicateKeys } = readJson(langPath)); } catch { console.error(` ✗ ${lang}/${ns}.json — file missing or invalid`); + totalInvalidFiles++; continue; } + if (duplicateKeys.length > 0) { + console.log( + `\n ${lang}/${ns}.json — ${duplicateKeys.length} duplicate key(s):` + ); + for (const key of duplicateKeys) console.log(` - ${key}`); + totalDuplicateKeys += duplicateKeys.length; + } + const langKeys = new Set(flattenKeys(langData)); const missing = enKeys.filter((key) => !langKeys.has(key)); + const placeholderMismatches = enKeys + .filter((key) => langKeys.has(key)) + .map((key) => { + const expected = getPlaceholders(getNestedValue(enData, key)); + const actual = getPlaceholders(getNestedValue(langData, key)); + return { key, expected, actual }; + }) + .filter( + ({ expected, actual }) => expected.join("|") !== actual.join("|") + ); if (missing.length > 0) { - console.log( - `\n ${lang}/${ns}.json — ${missing.length} missing key(s):` - ); + console.log(`\n ${lang}/${ns}.json — ${missing.length} missing key(s):`); for (const key of missing) { const enValue = getNestedValue(enData, key); console.log(` - ${key}: ${JSON.stringify(enValue)}`); @@ -121,12 +233,26 @@ for (const ns of namespaceFiles) { if (shouldFix && missing.length > 0) { writeFileSync(langPath, JSON.stringify(langData, null, 2) + "\n"); - console.log(` → Fixed: wrote ${missing.length} key(s) to ${lang}/${ns}.json`); + console.log( + ` → Fixed: wrote ${missing.length} key(s) to ${lang}/${ns}.json` + ); } } else if (verbose) { console.log(` ✓ ${lang}/${ns}.json — all ${enKeys.length} keys present`); } + if (placeholderMismatches.length > 0) { + console.log( + `\n ${lang}/${ns}.json — ${placeholderMismatches.length} placeholder mismatch(es):` + ); + for (const { key, expected, actual } of placeholderMismatches) { + console.log( + ` - ${key}: expected [${expected.join(", ")}], found [${actual.join(", ")}]` + ); + } + totalPlaceholderMismatches += placeholderMismatches.length; + } + const extraKeys = [...langKeys].filter((key) => !enKeys.includes(key)); if (extraKeys.length > 0 && verbose) { console.log( @@ -146,10 +272,20 @@ for (const ns of namespaceFiles) { console.log(`\n${"═".repeat(50)}`); console.log(`Total missing: ${totalMissing}`); +console.log(`Placeholder mismatches: ${totalPlaceholderMismatches}`); +console.log(`Duplicate keys: ${totalDuplicateKeys}`); +console.log(`Invalid files: ${totalInvalidFiles}`); if (shouldFix) { console.log(`Total fixed: ${totalFixed} (copied English value)`); } if (totalMissing > 0 && !shouldFix) { console.log(`Run with --fix to copy English values into missing slots.`); +} +if ( + totalMissing > 0 || + totalPlaceholderMismatches > 0 || + totalDuplicateKeys > 0 || + totalInvalidFiles > 0 +) { process.exit(1); } diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 0c5ab9310..b042cd36b 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -203,7 +203,14 @@ "openWorkspace": "Workspace öffnen", "skipThisVersion": "Diese Version überspringen", "later": "Später", - "link": "Verknüpfen" + "link": "Verknüpfen", + "newIssue": "Neues Issue", + "closeIssue": "Issue schließen", + "reopenIssue": "Issue erneut öffnen", + "addComment": "Kommentar hinzufügen", + "editIssue": "Issue bearbeiten", + "openOnGitHub": "Auf GitHub öffnen", + "createPullRequest": "Pull Request erstellen" }, "refreshToast": { "successName": "{{name}} aktualisiert", @@ -438,7 +445,26 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", - "committedRate": "Committed" + "committedRate": "Committed", + "noPullRequestForBranch": "Für diesen Branch gibt es noch keinen Pull Request.", + "creatingPullRequest": "Wird erstellt…", + "failedToLoadPullRequest": "Pull Request konnte nicht geladen werden", + "noCommitsInPullRequest": "Dieser Pull Request enthält keine Commits", + "prStatus": { + "open": "Offen", + "merged": "Gemergt", + "closed": "Geschlossen", + "draft": "Entwurf" + }, + "sendingNow": "wird jetzt gesendet…", + "issues": "Issues", + "noIssues": "Keine Issues", + "openIssues": "Offen", + "closedIssues": "Geschlossen", + "issueComments": "{{count}} Kommentar", + "issueComments_one": "1 Kommentar", + "issueComments_other": "{{count}} Kommentare", + "tokens": "Token" }, "searchModes": { "keywordLabel": "Stichwort", @@ -960,7 +986,8 @@ "scanningFileExtensions": "Scanning file extensions...", "startBrowsingMarket": "Start browsing the marketplace", "previewUnavailable": "Vorschau nicht verfügbar", - "selectPrCommitToViewDiff": "Select a pull request commit from the header to view its diff." + "selectPrCommitToViewDiff": "Select a pull request commit from the header to view its diff.", + "noResults": "Keine Ergebnisse" }, "inbox": { "searchPlaceholder": "Nachrichten durchsuchen...", @@ -1117,7 +1144,10 @@ "tryHeading": "Versuchen Sie:", "tryCheckConnection": "Ihre Internetverbindung prüfen", "tryVerifyUrl": "Die URL auf Tippfehler prüfen", - "tryAgainLater": "Später erneut versuchen" + "tryAgainLater": "Später erneut versuchen", + "embeddedFallbackTitle": "Diese Website funktioniert möglicherweise nicht im eingebetteten Browser", + "embeddedFallbackBody": "Einige Websites blockieren die Darstellung in App-WebViews oder werden darin nicht korrekt dargestellt. Öffnen Sie die Seite im Systembrowser, falls sie leer bleibt.", + "currentUrl": "Aktuelle URL" }, "selectRepoFromHome": "Please select a repo from the home page", "cloneRepoAgain": "Please clone the repo again from the home page", @@ -1213,6 +1243,85 @@ "closed": "Geschlossen", "completed": "Abgeschlossen", "notPlanned": "Nicht geplant" + }, + "title": "Issues", + "loading": "Issues werden geladen…", + "empty": "Keine {{state}} Issues", + "failedToLoad": "Issues konnten nicht geladen werden", + "failedToCreate": "Issue konnte nicht erstellt werden", + "failedToUpdate": "Issue konnte nicht aktualisiert werden", + "failedToComment": "Kommentar konnte nicht hinzugefügt werden", + "filterAll": "Alle", + "filterOpen": "Offen", + "filterClosed": "Geschlossen", + "noGitHubRepo": "Verbinden Sie ein GitHub-Repository, um Issues zu verwalten", + "commentPlaceholder": "Kommentar hinterlassen…", + "submitComment": "Kommentieren", + "newIssueTitlePlaceholder": "Issue-Titel", + "newIssueBodyPlaceholder": "Beschreiben Sie das Issue (optional)…", + "authRequired": { + "title": "GitHub verbinden", + "description": "Gehen Sie zu Einstellungen → Integrationen → Git, um Ihr GitHub-Konto zu verbinden." + }, + "reAuthRequired": "GitHub-Autorisierung erforderlich", + "reAuthDescription": "Ihr GitHub-Token ist abgelaufen. Gehen Sie zu Einstellungen → Integrationen → Git, um die Verbindung erneut herzustellen.", + "goToSettings": "Zu den Einstellungen" + }, + "pr": { + "title": "Pull Request", + "baseBranch": "Basis", + "noDescription": "Keine Beschreibung vorhanden.", + "loadingConversation": "Wird geladen…", + "reviewNoBody": "Review-Kommentare hinterlassen.", + "commentPlaceholder": "Kommentar hinterlassen…", + "comment": "Kommentieren", + "approve": "Genehmigen", + "requestChanges": "Änderungen anfordern", + "reply": "Antworten", + "replyPlaceholder": "Antworten…", + "reviewThreads": "Review-Kommentare", + "tabs": { + "conversation": "Unterhaltung", + "commits": "Commits", + "checks": "Prüfungen", + "changes": "Änderungen" + }, + "checks": { + "none": "Keine Prüfungen gemeldet", + "noneHint": "Für den Head-Commit dieses Pull Requests wurden keine CI-Prüfungen oder Statusprüfungen ausgeführt.", + "allPassed": "Alle Prüfungen bestanden", + "someFailed": "Einige Prüfungen fehlgeschlagen", + "pending": "Prüfungen laufen" + }, + "commits": { + "backToList": "Alle Commits", + "none": "Keine Commits" + }, + "changes": { + "title": "Geänderte Dateien", + "noFiles": "Keine Dateiänderungen", + "tooLarge": "Datei zu groß für Diff", + "unavailable": "Änderungen nicht verfügbar", + "unavailableHint": "Basis- und Head-Commit des Pull Requests konnten nicht aufgelöst werden." + }, + "creating": "Pull Request wird erstellt…", + "createError": "Pull Request konnte nicht erstellt werden", + "readyHint": "Branch wurde gepusht und ist bereit für einen Pull Request", + "neutralHint": "Pushen Sie Ihren Branch, um einen Pull Request zu erstellen", + "noBranch": "Kein Branch ausgewählt", + "noRepoPath": "Kein Repository-Pfad verfügbar", + "notAuthenticated": "Melden Sie sich an, um Pull Requests zu erstellen", + "noOriginRemote": "Kein origin-Remote konfiguriert", + "cannotParseRepoName": "Repository-Name konnte nicht aus dem origin-Remote ermittelt werden", + "status": { + "open": "Offen", + "merged": "Gemergt", + "closed": "Geschlossen", + "draft": "Entwurf" + }, + "authRequired": { + "title": "GitHub verbinden", + "description": "Gehen Sie zu Einstellungen → Integrationen → Git, um Ihr GitHub-Konto zu verbinden." } } }, @@ -1261,7 +1370,8 @@ "repo": "Repositories", "systemPaths": "Systempfade", "usedElsewhere": "Andernorts verwendet", - "workspace": "Workspace" + "workspace": "Workspace", + "recent": "Zuletzt verwendet" }, "tabs": { "repositories": "Repositories", @@ -1812,7 +1922,14 @@ "overview": "Übersicht", "cursor": "Cursor", "cli": "CLI" - } + }, + "cost": "Kosten", + "estimatedCost": "Geschätzte Kosten", + "estimated": "GESCHÄTZT", + "estimatedTooltip": "Geschätzte Kosten — Token × Listenpreis (für diese Quelle liegen keine gemessenen Ausgaben vor)", + "totalEstimatedCost": "Geschätzte Kosten", + "viewCost": "Kosten", + "viewTokens": "Token" }, "devActivity": { "title": "Entwicklerprofil", @@ -1963,6 +2080,14 @@ }, "sessionFilter": { "allSessions": "Alle Sitzungen" + }, + "scope": { + "local": "Lokal", + "main": "Haupt-Checkout", + "worktrees": "Worktrees", + "searchPlaceholder": "Worktrees filtern…", + "switchScope": "Bereich der Quellcodeverwaltung wechseln", + "switchScopeActive": "Bereich der Quellcodeverwaltung wechseln: {{repo}}, {{branch}}" } }, "contextInfo": { @@ -2003,7 +2128,26 @@ "manualCompactNoRuntime": "Sende zuerst eine Nachricht, bevor du komprimierst", "manualCompactFailed": "Komprimierung fehlgeschlagen: {{message}}", "manualCompactChannelAttached": "Diese Sitzung wird von einem Channel verwaltet — nutze dort /compact", - "manualCompactInstructionsPlaceholder": "Optional: worauf die Zusammenfassung fokussieren soll" + "manualCompactInstructionsPlaceholder": "Optional: worauf die Zusammenfassung fokussieren soll", + "cacheSaved": "Cache-Einsparung: {{read}} Lesen, {{write}} Schreiben", + "remaining": "Frei: {{tokens}} verbleibend", + "cacheHero": "{{pct}} % aus dem Cache · ~{{tokens}} in diesem Durchlauf wiederverwendet", + "cacheHeroSub": "Prompt-Caching kann die Kosten um bis zu 90 % senken", + "headroom": "Noch Platz für {{tokens}}", + "manualCompactSectionTitle": "Manuelle Komprimierung", + "miniCpmCompactTitle": "Automatische stille MiniCPM-Komprimierung", + "miniCpmCompactDescription": "Verarbeitet älteren Kontext asynchron", + "miniCpmCompactToggleAria": "Automatische stille MiniCPM-Komprimierung aktivieren", + "miniCpmCompactDisabled": "Stille Komprimierung ist deaktiviert", + "miniCpmCompactEnabled": "Stille Komprimierung ist aktiviert", + "miniCpmCompactRunning": "MiniCPM komprimiert den Kontext", + "miniCpmCompactComplete": "Komprimierung abgeschlossen", + "miniCpmCompactBusy": "Die aktuelle Sitzung ist beschäftigt", + "miniCpmCompactUnavailable": "MiniCPM ist nicht verfügbar", + "miniCpmCompactError": "MiniCPM-Komprimierung fehlgeschlagen", + "miniCpmCompactMetrics": "{{covered}} Nachrichten · {{source}} → {{summary}} Token", + "miniCpmCompactAction": "Jetzt komprimieren", + "miniCpmCompactRunningAction": "Wird komprimiert" }, "relativeDate": { "today": "Heute", @@ -2057,7 +2201,8 @@ "statusReadyToCreate": "Bereit zum Erstellen", "defaultName": "Workspace", "defaultNameWithRepo": "Workspace {{repo}}", - "windowTitle": "Workspace" + "windowTitle": "Workspace", + "statusMaxRepos": "Maximal 5 Repositories ausgewählt" }, "database": { "addConnection": "Add Database Connection", @@ -2276,6 +2421,52 @@ "progressPercent": "{{percent}} %", "downloadedOfTotal": "{{downloaded}} von {{total}}", "preparingDownload": "Download wird vorbereitet…", - "downloadingAndInstalling": "Update wird heruntergeladen und installiert (v{{version}})…" + "downloadingAndInstalling": "Update wird heruntergeladen und installiert (v{{version}})…", + "available": "Update verfügbar", + "versionReady": "Version {{version}} steht zum Download bereit.", + "upToDateVersion": "ORGII ist auf dem neuesten Stand (v{{version}}).", + "upToDate": "ORGII ist auf dem neuesten Stand.", + "checkFailed": "Update-Prüfung fehlgeschlagen", + "checking": "Updates werden gesucht…", + "downloadingEllipsis": "Update wird heruntergeladen…", + "downloadingWithSize": "Update wird heruntergeladen ({{size}})…", + "downloadingDownloaded": "Update wird heruntergeladen… {{downloaded}}", + "downloadingPercent": "Update wird heruntergeladen… {{percent}} %", + "installingEllipsis": "Update wird installiert…", + "installed": "Update installiert", + "installFailed": "Installation des Updates fehlgeschlagen", + "downloadTimedOut": "Zeitüberschreitung beim Download. Prüfe dein Netzwerk oder deinen Proxy und versuche es erneut.", + "restarting": "ORGII wird neu gestartet, um das Update abzuschließen.", + "preparingVersion": "Download von v{{version}} wird vorbereitet…" + }, + "sqlEditor": { + "placeholder": "SQL-Abfrage eingeben…", + "format": "Formatieren", + "runQueryToSeeResults": "Führen Sie eine Abfrage aus, um Ergebnisse anzuzeigen", + "executingQuery": "Abfrage wird ausgeführt…", + "queryFailed": "Abfrage fehlgeschlagen", + "queryCompleted": "Abfrage abgeschlossen", + "noResults": "Die Abfrage lieferte keine Ergebnisse", + "rowCount_one": "{{count}} Zeile", + "rowCount_other": "{{count}} Zeilen", + "press": "Drücken Sie", + "toRun": "zum Ausführen", + "nullValue": "NULL", + "booleanTrue": "wahr", + "booleanFalse": "falsch" + }, + "uploadZone": { + "clickOrDrag": "Klicken Sie hier oder ziehen Sie eine Datei in diesen Bereich, um sie hochzuladen", + "supportFormats": "Unterstützt: {{accept}}" + }, + "chatImage": { + "maxReached": "Maximal {{max}} Bilder zulässig", + "remainingWarning": "Es können nur noch {{remaining}} weitere Bilder hinzugefügt werden (max. {{max}})", + "processFailed": "Bild konnte nicht verarbeitet werden", + "loadFailed": "Bild konnte nicht geladen werden: {{fileName}}" + }, + "codeViewer": { + "original": "Original", + "modified": "Geändert" } } diff --git a/src/i18n/locales/de/integrations.json b/src/i18n/locales/de/integrations.json index e54be908a..ef79097ad 100644 --- a/src/i18n/locales/de/integrations.json +++ b/src/i18n/locales/de/integrations.json @@ -32,14 +32,17 @@ "refreshed": "{{name}} erfolgreich aktualisiert", "refreshFailed": "{{name}} Validierung fehlgeschlagen - Anmeldedaten prüfen", "allRefreshed": "Alle Konten aktualisiert", - "refreshError": "{{name}} konnte nicht aktualisiert werden", + "refreshError": "{{name}} konnte nicht aktualisiert werden: {{error}}", "localRemoved": "{{name}} entfernt", "unlistPending": "{{name}} Entfernung angefordert. Wird nach Ende aktiver Session entfernt.", "listingRemoved": "{{name}} vom Marktplatz entfernt", "listingDeleted": "{{name}} gelöscht", "deleteError": "{{name}} konnte nicht gelöscht werden", "published": "{{name}} im Marktplatz veröffentlicht", - "publishError": "{{name}} konnte nicht veröffentlicht werden" + "publishError": "{{name}} konnte nicht veröffentlicht werden", + "refreshedDelta": "Modelle aktualisiert: +{{added}} hinzugefügt, -{{removed}} entfernt", + "refreshedNoChange": "Modelle aktualisiert — keine Änderungen", + "refreshPartial": "Modelle aktualisiert (+{{added}} / -{{removed}}), aber {{failed}} von {{total}} Konten sind fehlgeschlagen" }, "configure": "{{provider}} konfigurieren", "providerGroups": { @@ -477,7 +480,9 @@ "refreshModels": { "button": "Cursor-Modellliste aktualisieren", "failed": "Aktualisierung von Cursor fehlgeschlagen: {{error}}" - } + }, + "confirmRemoveActiveSessions_one": "{{count}} aktive Sitzung verwendet dieses Konto noch und schlägt beim nächsten Durchlauf fehl:", + "confirmRemoveActiveSessions_other": "{{count}} aktive Sitzungen verwenden dieses Konto noch und schlagen beim nächsten Durchlauf fehl:" }, "integrations": { "title": "Integrationen", @@ -1031,7 +1036,8 @@ "tools": "Integrierte Tools", "computerUse": "Computer Use", "rulesMemoryEvolution": "Regeln, Speicher & Entwicklung", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "MiniCPM Housekeeper" }, "projectConnections": { "linear": "Linear", @@ -1341,7 +1347,9 @@ "oauthDeviceCodeDesc": "Öffne die URL unten und gib diesen Code ein", "oauthOpenGithub": "GitHub öffnen", "oauthCancel": "Abbrechen", - "oauthFailed": "Autorisierung fehlgeschlagen" + "oauthFailed": "Autorisierung fehlgeschlagen", + "autoCreatePr": "Pull Requests automatisch erstellen", + "autoCreatePrDesc": "Erstellt automatisch einen Pull Request in der Workstation-Quellcodeverwaltung, wenn ein Feature-Branch vollständig gepusht und sauber ist" }, "skillsHub": { "title": "Skills Hub", @@ -2300,7 +2308,36 @@ "orgSaveFailed": "Team konnte nicht gespeichert werden", "orgDeleteFailed": "Team konnte nicht gelöscht werden", "deleteOrgTitle": "Team löschen?", - "deleteOrgMessage": "\"{{name}}\" wird dauerhaft entfernt. Dies kann nicht rückgängig gemacht werden." + "deleteOrgMessage": "\"{{name}}\" wird dauerhaft entfernt. Dies kann nicht rückgängig gemacht werden.", + "cliManagedConfig": { + "title": "CLI-Konfigurationswechsel", + "modeLabel": "Modus", + "modeDesc": "„Standard“ stellt die eigene Konfiguration der CLI wieder her. „Von ORGII verwaltet“ schreibt eine gesicherte Proxy-Konfiguration.", + "modeDefault": "Standard", + "modeOrgii": "Von ORGII verwaltet", + "conflict": "Externe Änderung", + "conflictTitle": "Konflikt", + "conflictDesc": "Die aktive CLI-Konfiguration wurde geändert, nachdem ORGII sie geschrieben hatte.", + "proxyStatus": "Proxy", + "proxyDefault": "Standardmodus", + "proxyReady": "Proxy bereit", + "proxyNotReady": "Proxy nicht bereit", + "proxyDesc": "Lokale Anfragen werden über ORGII KeyVault geleitet.", + "keyLabel": "Schlüssel", + "keyDesc": "Es werden nur API-Schlüssel angezeigt, die mit dieser CLI und dem verwalteten Proxy kompatibel sind.", + "selectKey": "Schlüssel auswählen", + "modelLabel": "Modell", + "selectModel": "Modell auswählen", + "configFile": "Konfigurationsdateien", + "actions": "Aktionen", + "addKey": "Schlüssel hinzufügen", + "apply": "Anwenden", + "restore": "Standard wiederherstellen", + "forceApply": "Anwendung erzwingen", + "forceRestore": "Wiederherstellung erzwingen", + "applySuccess": "Von ORGII verwaltete Konfiguration angewendet", + "restoreSuccess": "Standardkonfiguration wiederhergestellt" + } }, "databases": { "title": "Datenbanken", @@ -2394,7 +2431,8 @@ "queuedMessages": "Warteschlange-Nachrichten", "fileReview": "Dateiüberprüfung", "terminalProcesses": "Terminalprozesse", - "workspaceMemory": "Workspace-Speicher" + "workspaceMemory": "Workspace-Speicher", + "modeSessionLink": "Sitzungsverknüpfung" }, "rulesTabs": { "rules": "Regeln", @@ -2553,7 +2591,14 @@ "diagnostics": "Diagnose" }, "health": { - "status": "Nicht geprüft" + "status": "Nicht geprüft", + "title": "Integritätsprüfung", + "idle": "Prüft /v1/models und sendet eine kleine Chat-Anfrage.", + "checking": "Lokaler vLLM-MiniCPM-Dienst wird geprüft…", + "checkButton": "Verbindung prüfen", + "configureFirst": "Konfigurieren Sie zuerst ein vLLM-MiniCPM-Konto.", + "connectedTo": "Verbunden mit {{baseUrl}}", + "failed": "MiniCPM-Integritätsprüfung fehlgeschlagen." }, "benchmark": { "title": "MiniCPM-Ausgabegeschwindigkeit", @@ -2565,6 +2610,51 @@ "tokensPerSecond": "Ausgabegeschwindigkeit: {{value}} tokens/s", "completionTokens": "Ausgabe-tokens: {{value}}", "elapsed": "Gesamtzeit: {{value}}s" + }, + "eyebrow": "Permanenter MiniCPM Housekeeper", + "title": "Permanenter Housekeeper", + "description": "Lokales MiniCPM übernimmt die Optimierung von Prompts, kurze Erklärungen einzelner Schritte und eine leichtgewichtige UI-Steuerung. Coding-Aufgaben und komplexe ADE-Einrichtungen verwenden weiterhin das primäre Agent-Modell.", + "autoAccount": "MiniCPM-vLLM-Konto automatisch auswählen", + "tiles": { + "model": "Modell", + "endpoint": "Endpunkt", + "safeContext": "Sicherer Kontext" + }, + "settings": { + "enabled": { + "title": "Housekeeper aktivieren", + "description": "Wenn deaktiviert, verwenden Prompt-Optimierung, Schritterklärungen und leichtgewichtige UI-Steuerung MiniCPM nicht." + }, + "account": { + "title": "vLLM-MiniCPM-Konto", + "description": "Verwendet ein vorhandenes KeyVault-Konto vom Typ vllm_api; es wird kein separater Anmeldedatenspeicher angelegt." + }, + "model": { + "title": "Modell-ID", + "description": "Docker vLLM MiniCPM5-1B verwendet standardmäßig openbmb/MiniCPM5-1B." + }, + "context": { + "title": "Sicheres Kontextbudget", + "description": "Verwenden Sie auf GPUs mit 4 GB ein konservatives Budget von 10000 Token, statt sich auf das theoretische Limit von 32k zu verlassen." + } + }, + "features": { + "promptPolish": { + "title": "Prompt-Optimierung", + "description": "Optimieren Sie die Eingabe vor dem Senden an das leistungsfähigere Coding-Modell manuell." + }, + "stepExplain": { + "title": "Erklärungen zu Agent-Schritten", + "description": "Erzeugt ein oder zwei kurze chinesische Erklärungen für Schritte in der Sitzungswiedergabe." + }, + "uiControl": { + "title": "Leichtgewichtige ADE-/UI-Steuerung", + "description": "MiniCPM darf Anfragen ausschließlich Aktionen aus einer strikten lokalen Positivliste zuordnen." + }, + "contextCompact": { + "title": "Automatische Kontextpflege", + "description": "MiniCPM pflegt eine isolierte, fortlaufende Zusammenfassung älteren Kontexts, während aktivierte Sitzungen inaktiv sind." + } } }, "cliLaunchProfiles": { @@ -2581,5 +2671,38 @@ "unavailable": "Startprofil nicht verfügbar", "saved": "Startprofil gespeichert", "resetDone": "Startprofil zurückgesetzt" + }, + "gitProfiles": { + "tab": "Git-Profile", + "title": "Git-Profile", + "add": "Profil hinzufügen", + "refresh": "Profile aktualisieren", + "refreshed": "Globales Git-Profil aktualisiert", + "loading": "Ihr globales Git-Profil wird geladen…", + "defaultProfile": "Standardprofil", + "newProfile": "Neues Profil", + "copyName": "Kopie von {{name}}", + "profileName": "Profilname", + "authorName": "Autorenname", + "email": "E-Mail", + "selectEmail": "E-Mail auswählen", + "signingKey": "Signaturschlüssel", + "signingKeyPlaceholder": "ID des GPG- oder SSH-Signaturschlüssels", + "signCommits": "Commits signieren", + "active": "Aktiv", + "activate": "Profil aktivieren", + "activated": "{{name}} ist jetzt das globale Git-Profil", + "editRaw": "Rohkonfiguration bearbeiten", + "hideRaw": "Rohkonfiguration ausblenden", + "rawTitle": "Git-Profil im Rohformat", + "rawConfig": "Git-Konfiguration", + "updateFromRaw": "Profil aus Konfiguration aktualisieren", + "rawUpdated": "Profil aus der Git-Rohkonfiguration aktualisiert", + "rawInvalid": "Das Git-Profil im Rohformat ist ungültig", + "nameEmailRequired": "Autorenname und E-Mail sind erforderlich", + "deleteTitle": "Git-Profil löschen", + "deleteMessage": "Profil „{{name}}“ löschen? Ihre aktuelle globale Git-Konfiguration wird dadurch nicht geändert.", + "loadFailed": "Globales Git-Profil konnte nicht geladen werden", + "applyFailed": "Git-Profil konnte nicht aktiviert werden" } } diff --git a/src/i18n/locales/de/navigation.json b/src/i18n/locales/de/navigation.json index ee6885fcd..a467e8c5e 100644 --- a/src/i18n/locales/de/navigation.json +++ b/src/i18n/locales/de/navigation.json @@ -46,7 +46,8 @@ "projectManager": "Project Manager", "diff": "Diff", "colleagues": "Kolleg:innen", - "terminals": "Terminals" + "terminals": "Terminals", + "openSourceRepo": "Open-Source-Repository" }, "trajectoryPanel": { "title": "Trajektorie", @@ -335,7 +336,27 @@ "addWorkspace": "Workspace hinzufügen" }, "explore": { - "title": "Entdecken" + "title": "Entdecken", + "search": "Suchen", + "searching": "Suche läuft…", + "searchPlaceholder": "GitHub-Repositories durchsuchen (z. B. language:rust tauri)", + "clone": "Klonen", + "cloning": "Wird geklont…", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} geklont", + "cloneFailed": "Klonen fehlgeschlagen", + "cloneNoTarget": "Kein Standardordner für Workspaces konfiguriert. Legen Sie einen in den Einstellungen fest.", + "errorTitle": "Suche fehlgeschlagen", + "noResultsTitle": "Keine passenden Repositories", + "noResultsSubtitle": "Versuchen Sie eine andere Abfrage oder Sortierung.", + "resultsCount": "{{shown}} von {{total}} Repositories", + "partial": "(unvollständig — Zeitüberschreitung bei der Suche)", + "sort": { + "bestMatch": "Beste Übereinstimmung", + "stars": "Sterne", + "updated": "Kürzlich aktualisiert", + "forks": "Forks" + } }, "workstation": { "dockFilter": { diff --git a/src/i18n/locales/de/sessions.json b/src/i18n/locales/de/sessions.json index 44a342f80..3aaa03238 100644 --- a/src/i18n/locales/de/sessions.json +++ b/src/i18n/locales/de/sessions.json @@ -139,7 +139,9 @@ "installed": "Installiert", "notInstalled": "Nicht erkannt", "disabled": "Deaktiviert" - } + }, + "rescanUpdate": "Aktualisieren", + "rescanClear": "Löschen + neu scannen" }, "list": { "updated": "Aktualisiert", @@ -196,7 +198,11 @@ "views": "Ansichten", "cliAgent": "CLI Agent", "rustAgent": "Rust Agent", - "removeDraft": "Entwurf entfernen" + "removeDraft": "Entwurf entfernen", + "githubIssues": "GitHub Issues", + "githubPrs": "GitHub PRs", + "showSubagents": "Subagents anzeigen", + "hideSubagents": "Subagents ausblenden" }, "resultStatus": { "completed": "Abgeschlossen", @@ -439,7 +445,17 @@ "empty": "Noch keine Einreichungen", "selectSubmission": "Wählen Sie eine Einreichung aus, um Details anzuzeigen", "noCommits": "Noch keine Commits", - "noPullRequests": "Noch keine Pull Requests" + "noPullRequests": "Noch keine Pull Requests", + "labels": { + "created": { + "commit": "Commit erstellt", + "pullRequest": "PR erstellt" + }, + "mentioned": { + "commit": "Commit erwähnt", + "pullRequest": "PR erwähnt" + } + } } }, "channelsSidebar": { @@ -606,7 +622,17 @@ "trajectoryThisApp": "Dieser App folgen", "followAgent": "Agent folgen", "followThisApp": "Dieser App folgen", - "followApp": "{{appName}} folgen" + "followApp": "{{appName}} folgen", + "filters": { + "tooltip": "Ereignisse filtern", + "allEvents": "Alle Ereignisse", + "keyInteractions": "Wichtige Interaktionen", + "fileChanges": "Dateiänderungen", + "terminalEvents": "Terminal-Ereignisse", + "explore": "Erkunden", + "other": "Sonstige", + "selectedCount": "{{count}} Filter" + } }, "codeEditor": { "switchToListView": "Zur Listenansicht wechseln", @@ -719,7 +745,11 @@ "insert": "Einfügen" }, "compactArgHint": "", - "compactCommandDescription": "Älteren Kontext zusammenfassen, um Platz freizugeben. Optional: /compact " + "compactCommandDescription": "Älteren Kontext zusammenfassen, um Platz freizugeben. Optional: /compact ", + "pr": { + "open": "PR öffnen", + "creating": "PR wird erstellt…" + } }, "listPanel": { "showingOf": "{{filtered}} von {{total}} angezeigt", @@ -1044,7 +1074,8 @@ "filters": "Filters", "openInGitHub": "Open in GitHub" } - } + }, + "restoreCheckpoint": "Checkpoint wiederherstellen" }, "chatStatus": { "approved": "Genehmigt", @@ -1918,7 +1949,8 @@ "branchesTouched": "Branches" }, "modelPill": { - "immutableInSession": "Schlüsselquelle, Agent-Typ und Preisstufe sind beim Sitzungsstart festgelegt. Starten Sie eine neue Sitzung, um sie zu ändern." + "immutableInSession": "Schlüsselquelle, Agent-Typ und Preisstufe sind beim Sitzungsstart festgelegt. Starten Sie eine neue Sitzung, um sie zu ändern.", + "appliesNextTurn": "Konto gewechselt. Die aktuelle Antwort wird noch mit dem vorherigen Konto ausgeführt; das neue Konto gilt ab dem nächsten Durchlauf." }, "creator": { "createTarget": { @@ -2580,7 +2612,8 @@ "list": { "title": "Aufgabenliste anzeigen", "count": "{{taskCount}} Aufgaben", - "empty": "Keine Aufgaben" + "empty": "Keine Aufgaben", + "countLabel": "Aufgaben" }, "statusLabel": "Status", "assignedBadge": "Zugewiesen", @@ -2682,6 +2715,9 @@ "directory": "Verzeichnis", "file": "Datei", "emptyDirectory": "Leeres Verzeichnis" + }, + "session": { + "open": "Sitzung öffnen" } }, "codePreview": { @@ -2706,6 +2742,14 @@ "close": "Schließen", "summarize": "Mit Agent zusammenfassen", "waiting": "Warte auf Inhalt…", - "empty": "Kein Inhalt" + "empty": "Kein Inhalt", + "reactDisabledTitle": "React-Vorschau wird im Simulator ausgeführt", + "reactDisabledDescription": "Agent-JavaScript wird im Chat nicht ausgeführt. Öffnen Sie die Vorschau im Simulator, um sie in der React-Sandbox auszuführen.", + "viewInSimulator": "Im Simulator anzeigen" + }, + "canvasApp": { + "empty": "Noch kein Canvas gerendert", + "sidebarTitle": "Canvas-Bereiche", + "noCanvases": "Noch keine Canvases" } } diff --git a/src/i18n/locales/de/settings.json b/src/i18n/locales/de/settings.json index de94b81f1..cff71ff0d 100644 --- a/src/i18n/locales/de/settings.json +++ b/src/i18n/locales/de/settings.json @@ -910,7 +910,16 @@ "diskCategory_screenshots": "Browser-Screenshots", "diskCategory_agentWorktrees": "Agent Session Worktrees", "diskCategory_lspBin": "LSP Server Binaries", - "loadZeroRows": "Klicken, um {{count}} weitere zu laden" + "loadZeroRows": "Klicken, um {{count}} weitere zu laden", + "diskCategory_toolResults": "Übergroße Tool-Ergebnisse", + "diskCategory_diagnostics": "Diagnosewarteschlange", + "diskCategory_models": "Heruntergeladene Modelle", + "diskCategory_codeMap": "Code-Map-Indizes", + "diskCategory_semanticIndex": "Semantischer Suchindex", + "diskCategory_cursorCliProfiles": "Cursor-CLI-Profile", + "diskCategory_kiroCliProfiles": "Kiro-CLI-Profile", + "diskCategory_opencodeCliProfiles": "OpenCode-CLI-Profile", + "diskCategory_sidecarBin": "Heruntergeladene Sidecar-Binärdateien" }, "dependencies": { "systemDependencies": "System-Dependencies", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index c29cd9830..c12248e80 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -2434,11 +2434,31 @@ "confirm": "Quit" }, "update": { + "available": "Update available", + "versionReady": "Version {{version}} is ready to download.", + "upToDateVersion": "ORGII is up to date (v{{version}}).", + "upToDate": "ORGII is up to date.", + "checkFailed": "Update check failed", + "checking": "Checking for updates…", "downloading": "Downloading update", + "downloadingEllipsis": "Downloading update…", + "downloadingWithSize": "Downloading update ({{size}})…", + "downloadingDownloaded": "Downloading update… {{downloaded}}", + "downloadingPercent": "Downloading update… {{percent}}%", "installing": "Installing update", + "installingEllipsis": "Installing update…", + "installed": "Update installed", + "installFailed": "Update install failed", + "downloadTimedOut": "The download timed out. Check your network or proxy, then retry.", + "restarting": "Restarting ORGII to finish the update.", + "preparingVersion": "Preparing to download v{{version}}…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} of {{total}}", "preparingDownload": "Preparing download…", "downloadingAndInstalling": "Downloading and installing update (v{{version}})…" + }, + "codeViewer": { + "original": "Original", + "modified": "Modified" } } diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index a3c70d3a8..6d0fb5e99 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -203,7 +203,14 @@ "openWorkspace": "Abrir workspace", "skipThisVersion": "Omitir esta versión", "later": "Más tarde", - "link": "Vincular" + "link": "Vincular", + "openOnGitHub": "Abrir en GitHub", + "createPullRequest": "Crear pull request", + "newIssue": "Nueva incidencia", + "closeIssue": "Cerrar incidencia", + "reopenIssue": "Reabrir incidencia", + "addComment": "Añadir comentario", + "editIssue": "Editar incidencia" }, "refreshToast": { "successName": "{{name}} actualizado", @@ -438,7 +445,26 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", - "committedRate": "Confirmado" + "committedRate": "Confirmado", + "noPullRequestForBranch": "Todavía no hay ningún pull request para esta rama.", + "creatingPullRequest": "Creando…", + "failedToLoadPullRequest": "No se pudo cargar el pull request", + "noCommitsInPullRequest": "No hay commits en este pull request", + "prStatus": { + "open": "Abierto", + "merged": "Fusionado", + "closed": "Cerrado", + "draft": "Borrador" + }, + "sendingNow": "enviando ahora…", + "issues": "Incidencias", + "noIssues": "Sin incidencias", + "openIssues": "Abiertas", + "closedIssues": "Cerradas", + "issueComments": "{{count}} comentario", + "issueComments_one": "1 comentario", + "issueComments_other": "{{count}} comentarios", + "tokens": "Tokens" }, "searchModes": { "keywordLabel": "Palabra clave", @@ -960,7 +986,8 @@ "scanningFileExtensions": "Scanning file extensions...", "startBrowsingMarket": "Start browsing the marketplace", "previewUnavailable": "Vista previa no disponible", - "selectPrCommitToViewDiff": "Select a pull request commit from the header to view its diff." + "selectPrCommitToViewDiff": "Select a pull request commit from the header to view its diff.", + "noResults": "Sin resultados" }, "inbox": { "searchPlaceholder": "Buscar mensajes...", @@ -1117,7 +1144,10 @@ "tryHeading": "Prueba:", "tryCheckConnection": "Comprobar tu conexión a Internet", "tryVerifyUrl": "Verificar que la URL sea correcta", - "tryAgainLater": "Intentar de nuevo más tarde" + "tryAgainLater": "Intentar de nuevo más tarde", + "embeddedFallbackTitle": "Es posible que este sitio no funcione en el navegador integrado", + "embeddedFallbackBody": "Algunos sitios bloquean las vistas web de las aplicaciones o no se renderizan en ellas. Si la página permanece en blanco, ábrela en el navegador del sistema.", + "currentUrl": "URL actual" }, "selectRepoFromHome": "Please select a repo from the home page", "cloneRepoAgain": "Please clone the repo again from the home page", @@ -1213,6 +1243,85 @@ "closed": "Cerrado", "completed": "Completado", "notPlanned": "No planificado" + }, + "title": "Incidencias", + "loading": "Cargando incidencias…", + "empty": "No hay incidencias {{state}}", + "failedToLoad": "No se pudieron cargar las incidencias", + "failedToCreate": "No se pudo crear la incidencia", + "failedToUpdate": "No se pudo actualizar la incidencia", + "failedToComment": "No se pudo añadir el comentario", + "filterAll": "Todas", + "filterOpen": "Abiertas", + "filterClosed": "Cerradas", + "noGitHubRepo": "Conecta un repositorio de GitHub para gestionar incidencias", + "commentPlaceholder": "Deja un comentario…", + "submitComment": "Comentar", + "newIssueTitlePlaceholder": "Título de la incidencia", + "newIssueBodyPlaceholder": "Describe la incidencia (opcional)…", + "authRequired": { + "title": "Conectar GitHub", + "description": "Ve a Ajustes → Integraciones → Git para conectar tu cuenta de GitHub." + }, + "reAuthRequired": "Se requiere autorización de GitHub", + "reAuthDescription": "Tu token de GitHub ha caducado. Ve a Ajustes → Integraciones → Git para volver a conectarte.", + "goToSettings": "Ir a Ajustes" + }, + "pr": { + "title": "Pull request", + "baseBranch": "base", + "noDescription": "No se proporcionó ninguna descripción.", + "loadingConversation": "Cargando…", + "reviewNoBody": "Dejó comentarios de revisión.", + "commentPlaceholder": "Deja un comentario…", + "comment": "Comentar", + "approve": "Aprobar", + "requestChanges": "Solicitar cambios", + "reply": "Responder", + "replyPlaceholder": "Responder…", + "reviewThreads": "Comentarios de revisión", + "tabs": { + "conversation": "Conversación", + "commits": "Commits", + "checks": "Comprobaciones", + "changes": "Cambios" + }, + "checks": { + "none": "No se notificaron comprobaciones", + "noneHint": "No se ejecutaron comprobaciones de CI ni estados sobre el commit de cabecera de este pull request.", + "allPassed": "Todas las comprobaciones pasaron", + "someFailed": "Algunas comprobaciones fallaron", + "pending": "Comprobaciones en curso" + }, + "commits": { + "backToList": "Todos los commits", + "none": "Sin commits" + }, + "changes": { + "title": "Archivos modificados", + "noFiles": "Sin cambios en archivos", + "tooLarge": "El archivo es demasiado grande para mostrar el diff", + "unavailable": "Cambios no disponibles", + "unavailableHint": "No se pudieron resolver los commits base y de cabecera del pull request." + }, + "creating": "Creando pull request…", + "createError": "No se pudo crear el pull request", + "readyHint": "La rama se ha enviado y está lista para un pull request", + "neutralHint": "Envía tu rama para crear un pull request", + "noBranch": "Ninguna rama seleccionada", + "noRepoPath": "No hay una ruta de repositorio disponible", + "notAuthenticated": "Inicia sesión para crear pull requests", + "noOriginRemote": "No hay ningún remoto origin configurado", + "cannotParseRepoName": "No se pudo obtener el nombre del repositorio a partir del remoto origin", + "status": { + "open": "Abierto", + "merged": "Fusionado", + "closed": "Cerrado", + "draft": "Borrador" + }, + "authRequired": { + "title": "Conectar GitHub", + "description": "Ve a Ajustes → Integraciones → Git para conectar tu cuenta de GitHub." } } }, @@ -1261,7 +1370,8 @@ "repo": "Repositorios", "systemPaths": "Rutas del sistema", "usedElsewhere": "Usado en otros lugares", - "workspace": "Espacio de trabajo" + "workspace": "Espacio de trabajo", + "recent": "Recientes" }, "tabs": { "repositories": "Repositorios", @@ -1804,7 +1914,14 @@ "overview": "Resumen", "cursor": "Cursor", "cli": "CLI" - } + }, + "cost": "Coste", + "estimatedCost": "Coste est.", + "estimated": "EST.", + "estimatedTooltip": "Coste estimado: tokens × precio de lista (sin gasto medido para esta fuente)", + "totalEstimatedCost": "Coste est.", + "viewCost": "Coste", + "viewTokens": "Tokens" }, "devActivity": { "title": "Perfil de Desarrollo", @@ -1955,6 +2072,14 @@ }, "sessionFilter": { "allSessions": "Todas las sesiones" + }, + "scope": { + "local": "Local", + "main": "Checkout principal", + "worktrees": "Worktrees", + "searchPlaceholder": "Filtrar worktrees…", + "switchScope": "Cambiar el ámbito del control de código fuente", + "switchScopeActive": "Cambiar el ámbito del control de código fuente: {{repo}}, {{branch}}" } }, "contextInfo": { @@ -1995,7 +2120,26 @@ "manualCompactNoRuntime": "Envía un mensaje antes de compactar", "manualCompactFailed": "Error al compactar: {{message}}", "manualCompactChannelAttached": "Esta sesión la gestiona un canal — usa /compact allí", - "manualCompactInstructionsPlaceholder": "Opcional: en qué centrarse al resumir" + "manualCompactInstructionsPlaceholder": "Opcional: en qué centrarse al resumir", + "cacheSaved": "Caché ahorrada: {{read}} de lectura, {{write}} de escritura", + "remaining": "Libre: quedan {{tokens}}", + "cacheHero": "{{pct}}% servido desde caché · ~{{tokens}} reutilizados en este turno", + "cacheHeroSub": "El almacenamiento en caché del prompt puede reducir el coste hasta un 90%", + "headroom": "Queda espacio para {{tokens}}", + "manualCompactSectionTitle": "Compactación manual", + "miniCpmCompactTitle": "Compactación automática silenciosa de MiniCPM", + "miniCpmCompactDescription": "Procesa el contexto anterior de forma asíncrona", + "miniCpmCompactToggleAria": "Activar la compactación automática silenciosa de MiniCPM", + "miniCpmCompactDisabled": "La compactación silenciosa está desactivada", + "miniCpmCompactEnabled": "La compactación silenciosa está activada", + "miniCpmCompactRunning": "MiniCPM está compactando", + "miniCpmCompactComplete": "Compactación completada", + "miniCpmCompactBusy": "La sesión actual está ocupada", + "miniCpmCompactUnavailable": "MiniCPM no está disponible", + "miniCpmCompactError": "La compactación de MiniCPM falló", + "miniCpmCompactMetrics": "{{covered}} mensajes · {{source}} → {{summary}} tokens", + "miniCpmCompactAction": "Compactar ahora", + "miniCpmCompactRunningAction": "Compactando" }, "relativeDate": { "today": "Hoy", @@ -2049,7 +2193,8 @@ "statusReadyToCreate": "Listo para crear Workspace", "defaultName": "Workspace", "defaultNameWithRepo": "Workspace {{repo}}", - "windowTitle": "Workspace" + "windowTitle": "Workspace", + "statusMaxRepos": "Se ha alcanzado el máximo de 5 repositorios seleccionados" }, "database": { "addConnection": "Add Database Connection", @@ -2263,11 +2408,57 @@ "previewAlt": "Vista previa" }, "update": { + "available": "Actualización disponible", + "versionReady": "La versión {{version}} está lista para descargar.", + "upToDateVersion": "ORGII está actualizado (v{{version}}).", + "upToDate": "ORGII está actualizado.", + "checkFailed": "No se pudo buscar actualizaciones", + "checking": "Buscando actualizaciones…", "downloading": "Descargando actualización", + "downloadingEllipsis": "Descargando actualización…", + "downloadingWithSize": "Descargando actualización ({{size}})…", + "downloadingDownloaded": "Descargando actualización… {{downloaded}}", + "downloadingPercent": "Descargando actualización… {{percent}} %", "installing": "Instalando actualización", + "installingEllipsis": "Instalando actualización…", + "installed": "Actualización instalada", + "installFailed": "No se pudo instalar la actualización", + "downloadTimedOut": "Se agotó el tiempo de descarga. Comprueba la red o el proxy e inténtalo de nuevo.", + "restarting": "Reiniciando ORGII para completar la actualización.", + "preparingVersion": "Preparando la descarga de v{{version}}…", "progressPercent": "{{percent}} %", "downloadedOfTotal": "{{downloaded}} de {{total}}", "preparingDownload": "Preparando descarga…", "downloadingAndInstalling": "Descargando e instalando actualización (v{{version}})…" + }, + "sqlEditor": { + "placeholder": "Introduce una consulta SQL...", + "format": "Formatear", + "runQueryToSeeResults": "Ejecuta una consulta para ver los resultados", + "executingQuery": "Ejecutando consulta...", + "queryFailed": "La consulta falló", + "queryCompleted": "Consulta completada", + "noResults": "La consulta no devolvió resultados", + "rowCount_one": "{{count}} fila", + "rowCount_other": "{{count}} filas", + "press": "Pulsa", + "toRun": "para ejecutar", + "nullValue": "NULL", + "booleanTrue": "verdadero", + "booleanFalse": "falso" + }, + "uploadZone": { + "clickOrDrag": "Haz clic o arrastra un archivo a esta zona para subirlo", + "supportFormats": "Formatos admitidos: {{accept}}" + }, + "chatImage": { + "maxReached": "Se permite un máximo de {{max}} imágenes", + "remainingWarning": "Solo se pueden añadir {{remaining}} imagen(es) más (máximo: {{max}})", + "processFailed": "No se pudo procesar la imagen", + "loadFailed": "No se pudo cargar la imagen: {{fileName}}" + }, + "codeViewer": { + "original": "Original", + "modified": "Modificado" } } diff --git a/src/i18n/locales/es/integrations.json b/src/i18n/locales/es/integrations.json index 7e81cf9c8..c523974ba 100644 --- a/src/i18n/locales/es/integrations.json +++ b/src/i18n/locales/es/integrations.json @@ -32,14 +32,17 @@ "refreshed": "{{name}} actualizado correctamente", "refreshFailed": "{{name}} validación fallida - verifique las credenciales", "allRefreshed": "Todas las cuentas actualizadas", - "refreshError": "Error al actualizar {{name}}", + "refreshError": "Error al actualizar {{name}}: {{error}}", "localRemoved": "{{name}} eliminado", "unlistPending": "{{name}} solicitud de eliminación enviada. Se eliminará cuando finalicen las Session activas.", "listingRemoved": "{{name}} eliminado del marketplace", "listingDeleted": "{{name}} eliminado", "deleteError": "Error al eliminar {{name}}", "published": "{{name}} publicado en el marketplace", - "publishError": "Error al publicar {{name}}" + "publishError": "Error al publicar {{name}}", + "refreshedDelta": "Modelos actualizados: +{{added}} añadidos, -{{removed}} eliminados", + "refreshedNoChange": "Modelos actualizados, sin cambios", + "refreshPartial": "Modelos actualizados (+{{added}} / -{{removed}}), pero fallaron {{failed}} de {{total}} cuentas" }, "configure": "Configurar {{provider}}", "providerGroups": { @@ -474,7 +477,9 @@ "refreshModels": { "button": "Actualizar lista de modelos de Cursor", "failed": "Falló la actualización desde Cursor: {{error}}" - } + }, + "confirmRemoveActiveSessions_one": "{{count}} sesión activa todavía usa esta cuenta y fallará en su próximo turno:", + "confirmRemoveActiveSessions_other": "{{count}} sesiones activas todavía usan esta cuenta y fallarán en su próximo turno:" }, "integrations": { "title": "Integraciones", @@ -1028,7 +1033,8 @@ "tools": "Herramientas integradas", "computerUse": "Computer Use", "rulesMemoryEvolution": "Reglas, Memoria & Evolución", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "Asistente de mantenimiento MiniCPM" }, "projectConnections": { "linear": "Linear", @@ -1338,7 +1344,9 @@ "oauthDeviceCodeDesc": "Abre la URL siguiente e introduce este código", "oauthOpenGithub": "Abrir GitHub", "oauthCancel": "Cancelar", - "oauthFailed": "Error de autorización" + "oauthFailed": "Error de autorización", + "autoCreatePr": "Crear pull requests automáticamente", + "autoCreatePrDesc": "Crear automáticamente un pull request en el control de código fuente de Workstation cuando una rama de funcionalidad se haya enviado por completo y esté limpia" }, "skillsHub": { "title": "Skills Hub", @@ -2297,7 +2305,36 @@ "orgSaveFailed": "No se pudo guardar el equipo", "orgDeleteFailed": "No se pudo eliminar el equipo", "deleteOrgTitle": "¿Eliminar equipo?", - "deleteOrgMessage": "\"{{name}}\" se eliminará permanentemente. Esta acción no se puede deshacer." + "deleteOrgMessage": "\"{{name}}\" se eliminará permanentemente. Esta acción no se puede deshacer.", + "cliManagedConfig": { + "title": "Cambio de configuración de CLI", + "modeLabel": "Modo", + "modeDesc": "Predeterminado restaura la configuración propia de la CLI. Gestionado por ORGII escribe una configuración de proxy con copia de seguridad.", + "modeDefault": "Predeterminado", + "modeOrgii": "Gestionado por ORGII", + "conflict": "Cambio externo", + "conflictTitle": "Conflicto", + "conflictDesc": "La configuración activa de la CLI cambió después de que ORGII la escribiera.", + "proxyStatus": "Proxy", + "proxyDefault": "Modo predeterminado", + "proxyReady": "Proxy listo", + "proxyNotReady": "Proxy no disponible", + "proxyDesc": "Las solicitudes locales se enrutan a través de ORGII KeyVault.", + "keyLabel": "Clave", + "keyDesc": "Solo se muestran claves API compatibles con esta CLI y con el proxy gestionado.", + "selectKey": "Seleccionar clave", + "modelLabel": "Modelo", + "selectModel": "Seleccionar modelo", + "configFile": "Archivos de configuración", + "actions": "Acciones", + "addKey": "Añadir clave", + "apply": "Aplicar", + "restore": "Restaurar valores predeterminados", + "forceApply": "Forzar aplicación", + "forceRestore": "Forzar restauración", + "applySuccess": "Configuración gestionada por ORGII aplicada", + "restoreSuccess": "Configuración predeterminada restaurada" + } }, "databases": { "title": "Bases de datos", @@ -2391,7 +2428,8 @@ "queuedMessages": "Mensajes en cola", "fileReview": "Revisión de archivos", "terminalProcesses": "Procesos de terminal", - "workspaceMemory": "Memoria Workspace" + "workspaceMemory": "Memoria Workspace", + "modeSessionLink": "Enlace de sesión" }, "rulesTabs": { "rules": "Reglas", @@ -2550,7 +2588,14 @@ "diagnostics": "Diagnóstico" }, "health": { - "status": "Sin comprobar" + "status": "Sin comprobar", + "title": "Comprobación de estado", + "idle": "Comprueba /v1/models y envía una pequeña solicitud de chat.", + "checking": "Comprobando el servicio MiniCPM de vLLM local...", + "checkButton": "Comprobar conexión", + "configureFirst": "Configura primero una cuenta vLLM de MiniCPM.", + "connectedTo": "Conectado a {{baseUrl}}", + "failed": "La comprobación de estado de MiniCPM falló." }, "benchmark": { "title": "Velocidad de salida de MiniCPM", @@ -2562,6 +2607,51 @@ "tokensPerSecond": "Velocidad de salida: {{value}} tokens/s", "completionTokens": "Tokens de salida: {{value}}", "elapsed": "Tiempo total: {{value}}s" + }, + "eyebrow": "Asistente residente MiniCPM", + "title": "Asistente residente", + "description": "MiniCPM local se encarga de pulir prompts, ofrecer explicaciones breves de los pasos y controlar funciones ligeras de la interfaz. Las tareas de programación y la configuración compleja de ADE siguen usando el modelo principal del agente.", + "autoAccount": "Seleccionar automáticamente la cuenta vLLM de MiniCPM", + "tiles": { + "model": "Modelo", + "endpoint": "Endpoint", + "safeContext": "Contexto seguro" + }, + "settings": { + "enabled": { + "title": "Activar el asistente de mantenimiento", + "description": "Cuando está desactivado, MiniCPM no se usa para pulir prompts, explicar pasos ni controlar funciones ligeras de la interfaz." + }, + "account": { + "title": "Cuenta vLLM de MiniCPM", + "description": "Reutiliza una cuenta vllm_api existente de KeyVault; no se crea un almacén de credenciales separado." + }, + "model": { + "title": "ID del modelo", + "description": "Docker vLLM MiniCPM5-1B usa openbmb/MiniCPM5-1B de forma predeterminada." + }, + "context": { + "title": "Presupuesto de contexto seguro", + "description": "Usa un presupuesto conservador de 10000 tokens en GPU de 4 GB en lugar de confiar en el límite teórico de 32k." + } + }, + "features": { + "promptPolish": { + "title": "Pulido de prompts", + "description": "Pulir manualmente la entrada antes de enviarla al modelo de programación más potente." + }, + "stepExplain": { + "title": "Explicaciones de los pasos del agente", + "description": "Generar una o dos explicaciones breves en chino para los pasos de reproducción de la sesión." + }, + "uiControl": { + "title": "Control ligero de ADE e interfaz", + "description": "MiniCPM solo puede clasificar solicitudes dentro de una lista blanca estricta de acciones locales." + }, + "contextCompact": { + "title": "Mantenimiento automático del contexto", + "description": "Permitir que MiniCPM mantenga un resumen acumulativo aislado del contexto anterior mientras las sesiones habilitadas están inactivas." + } } }, "cliLaunchProfiles": { @@ -2578,5 +2668,38 @@ "unavailable": "Perfil de lanzamiento no disponible", "saved": "Perfil de lanzamiento guardado", "resetDone": "Perfil de lanzamiento restablecido" + }, + "gitProfiles": { + "tab": "Perfiles de Git", + "title": "Perfiles de Git", + "add": "Añadir perfil", + "refresh": "Actualizar perfiles", + "refreshed": "Perfil global de Git actualizado", + "loading": "Cargando tu perfil global de Git…", + "defaultProfile": "Perfil predeterminado", + "newProfile": "Nuevo perfil", + "copyName": "Copia de {{name}}", + "profileName": "Nombre del perfil", + "authorName": "Nombre del autor", + "email": "Correo electrónico", + "selectEmail": "Seleccionar un correo electrónico", + "signingKey": "Clave de firma", + "signingKeyPlaceholder": "ID de clave de firma GPG o SSH", + "signCommits": "Firmar commits", + "active": "Activo", + "activate": "Activar perfil", + "activated": "{{name}} es ahora el perfil global de Git", + "editRaw": "Editar configuración sin procesar", + "hideRaw": "Ocultar configuración sin procesar", + "rawTitle": "Perfil de Git sin procesar", + "rawConfig": "Configuración de Git", + "updateFromRaw": "Actualizar perfil desde la configuración", + "rawUpdated": "Perfil actualizado desde la configuración de Git sin procesar", + "rawInvalid": "El perfil de Git sin procesar no es válido", + "nameEmailRequired": "El nombre del autor y el correo electrónico son obligatorios", + "deleteTitle": "Eliminar perfil de Git", + "deleteMessage": "¿Eliminar el perfil «{{name}}»? Esto no cambia tu configuración global actual de Git.", + "loadFailed": "No se pudo cargar el perfil global de Git", + "applyFailed": "No se pudo activar el perfil de Git" } } diff --git a/src/i18n/locales/es/navigation.json b/src/i18n/locales/es/navigation.json index 60afef282..05224843f 100644 --- a/src/i18n/locales/es/navigation.json +++ b/src/i18n/locales/es/navigation.json @@ -46,7 +46,8 @@ "projectManager": "Project Manager", "diff": "Diff", "colleagues": "Colegas", - "terminals": "Terminales" + "terminals": "Terminales", + "openSourceRepo": "Abrir repositorio de código fuente" }, "trajectoryPanel": { "title": "Trayectoria", @@ -335,7 +336,27 @@ "addWorkspace": "Añadir espacio de trabajo" }, "explore": { - "title": "Explorar" + "title": "Explorar", + "search": "Buscar", + "searching": "Buscando...", + "searchPlaceholder": "Buscar repositorios de GitHub (p. ej., language:rust tauri)", + "clone": "Clonar", + "cloning": "Clonando...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} clonado", + "cloneFailed": "No se pudo clonar", + "cloneNoTarget": "No hay una carpeta de espacio de trabajo predeterminada configurada. Establécela en Ajustes.", + "errorTitle": "La búsqueda falló", + "noResultsTitle": "Ningún repositorio coincide", + "noResultsSubtitle": "Prueba con otra consulta u orden.", + "resultsCount": "{{shown}} de {{total}} repositorios", + "partial": "(parcial: la búsqueda agotó el tiempo de espera)", + "sort": { + "bestMatch": "Mejor coincidencia", + "stars": "Estrellas", + "updated": "Actualizados recientemente", + "forks": "Forks" + } }, "workstation": { "dockFilter": { diff --git a/src/i18n/locales/es/sessions.json b/src/i18n/locales/es/sessions.json index 4c9da5a0a..d1d1915fd 100644 --- a/src/i18n/locales/es/sessions.json +++ b/src/i18n/locales/es/sessions.json @@ -139,7 +139,9 @@ "installed": "Instalado", "notInstalled": "No detectado", "disabled": "Desactivado" - } + }, + "rescanUpdate": "Actualizar", + "rescanClear": "Limpiar y volver a escanear" }, "list": { "updated": "Actualizado", @@ -198,7 +200,9 @@ "rustAgent": "Rust Agent", "removeDraft": "Eliminar borrador", "showSubagents": "Mostrar subagentes", - "hideSubagents": "Ocultar subagentes" + "hideSubagents": "Ocultar subagentes", + "githubIssues": "Incidencias de GitHub", + "githubPrs": "Pull requests de GitHub" }, "resultStatus": { "completed": "Completado", @@ -441,7 +445,17 @@ "empty": "Aún no hay envíos", "selectSubmission": "Selecciona un envío para ver los detalles", "noCommits": "Aún no hay Commits", - "noPullRequests": "Aún no hay Pull Requests" + "noPullRequests": "Aún no hay Pull Requests", + "labels": { + "created": { + "commit": "Commit creado", + "pullRequest": "Pull request creado" + }, + "mentioned": { + "commit": "Commit mencionado", + "pullRequest": "Pull request mencionado" + } + } } }, "channelsSidebar": { @@ -608,7 +622,17 @@ "trajectoryThisApp": "Seguir esta app", "followAgent": "Seguir al Agent", "followThisApp": "Seguir esta app", - "followApp": "Seguir {{appName}}" + "followApp": "Seguir {{appName}}", + "filters": { + "tooltip": "Filtrar eventos", + "allEvents": "Todos los eventos", + "keyInteractions": "Interacciones clave", + "fileChanges": "Cambios en archivos", + "terminalEvents": "Eventos del terminal", + "explore": "Explorar", + "other": "Otros", + "selectedCount": "{{count}} filtros" + } }, "codeEditor": { "switchToListView": "Cambiar a vista de lista", @@ -721,7 +745,11 @@ "insert": "Insertar" }, "compactArgHint": "", - "compactCommandDescription": "Resume el contexto anterior para liberar espacio. Opcional: /compact " + "compactCommandDescription": "Resume el contexto anterior para liberar espacio. Opcional: /compact ", + "pr": { + "open": "Abrir pull request", + "creating": "Creando pull request…" + } }, "listPanel": { "showingOf": "Mostrando {{filtered}} de {{total}}", @@ -1046,7 +1074,8 @@ "filters": "Filters", "openInGitHub": "Open in GitHub" } - } + }, + "restoreCheckpoint": "Restaurar punto de control" }, "chatStatus": { "approved": "Aprobado", @@ -1920,7 +1949,8 @@ "branchesTouched": "Ramas" }, "modelPill": { - "immutableInSession": "La fuente de clave, el tipo de Agent y el nivel de precio se fijan al iniciar la sesión. Inicia una nueva sesión para cambiarlos." + "immutableInSession": "La fuente de clave, el tipo de Agent y el nivel de precio se fijan al iniciar la sesión. Inicia una nueva sesión para cambiarlos.", + "appliesNextTurn": "Cuenta cambiada. La respuesta actual sigue ejecutándose con la cuenta anterior; la nueva cuenta se aplicará a partir del próximo turno." }, "creator": { "createTarget": { @@ -2582,7 +2612,8 @@ "list": { "title": "Ver lista de tareas", "count": "{{taskCount}} tareas", - "empty": "Sin tareas" + "empty": "Sin tareas", + "countLabel": "Tareas" }, "statusLabel": "Estado", "assignedBadge": "Asignado", @@ -2684,6 +2715,9 @@ "directory": "Directorio", "file": "Archivo", "emptyDirectory": "Directorio vacío" + }, + "session": { + "open": "Abrir sesión" } }, "codePreview": { @@ -2708,6 +2742,14 @@ "close": "Cerrar", "summarize": "Resumir con Agent", "waiting": "Esperando contenido…", - "empty": "Sin contenido" + "empty": "Sin contenido", + "reactDisabledTitle": "La vista previa de React se ejecuta en el simulador", + "reactDisabledDescription": "El JavaScript del agente no se ejecuta dentro del chat. Ábrelo en el simulador para ejecutar la vista previa de React en un entorno aislado.", + "viewInSimulator": "Ver en el simulador" + }, + "canvasApp": { + "empty": "Aún no se ha renderizado ningún lienzo", + "sidebarTitle": "Lienzos", + "noCanvases": "Aún no hay lienzos" } } diff --git a/src/i18n/locales/es/settings.json b/src/i18n/locales/es/settings.json index 9dc04ec4d..3757768e9 100644 --- a/src/i18n/locales/es/settings.json +++ b/src/i18n/locales/es/settings.json @@ -910,7 +910,16 @@ "diskCategory_screenshots": "Capturas del navegador", "diskCategory_agentWorktrees": "Worktrees de Session Agent", "diskCategory_lspBin": "Binarios de LSP Server", - "loadZeroRows": "Haz clic para cargar {{count}} más" + "loadZeroRows": "Haz clic para cargar {{count}} más", + "diskCategory_toolResults": "Resultados de herramientas de gran tamaño", + "diskCategory_diagnostics": "Cola de diagnósticos", + "diskCategory_models": "Modelos descargados", + "diskCategory_codeMap": "Índices de mapas de código", + "diskCategory_semanticIndex": "Índice de búsqueda semántica", + "diskCategory_cursorCliProfiles": "Perfiles de Cursor CLI", + "diskCategory_kiroCliProfiles": "Perfiles de Kiro CLI", + "diskCategory_opencodeCliProfiles": "Perfiles de OpenCode CLI", + "diskCategory_sidecarBin": "Binarios auxiliares descargados" }, "storage": { "dataDirectory": "Directorio de datos", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 6e2a3a575..4b568ec80 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -1,4 +1,30 @@ { + "sqlEditor": { + "placeholder": "Saisissez une requête SQL...", + "format": "Formater", + "runQueryToSeeResults": "Exécutez une requête pour afficher les résultats", + "executingQuery": "Exécution de la requête...", + "queryFailed": "Échec de la requête", + "queryCompleted": "Requête terminée", + "noResults": "La requête n’a renvoyé aucun résultat", + "rowCount_one": "{{count}} ligne", + "rowCount_other": "{{count}} lignes", + "press": "Appuyez sur", + "toRun": "pour exécuter", + "nullValue": "NULL", + "booleanTrue": "true", + "booleanFalse": "false" + }, + "uploadZone": { + "clickOrDrag": "Cliquez ou déposez un fichier dans cette zone pour le téléverser", + "supportFormats": "Formats pris en charge : {{accept}}" + }, + "chatImage": { + "maxReached": "Maximum de {{max}} images autorisées", + "remainingWarning": "Vous ne pouvez ajouter que {{remaining}} image(s) supplémentaire(s) (maximum : {{max}})", + "processFailed": "Échec du traitement de l’image", + "loadFailed": "Échec du chargement de l’image : {{fileName}}" + }, "toasts": { "replyEmpty": "La réponse ne peut pas être vide", "sessionNotFound": "Session introuvable", @@ -75,6 +101,13 @@ } }, "actions": { + "openOnGitHub": "Ouvrir sur GitHub", + "createPullRequest": "Créer une pull request", + "newIssue": "Nouveau ticket", + "closeIssue": "Fermer le ticket", + "reopenIssue": "Rouvrir le ticket", + "addComment": "Ajouter un commentaire", + "editIssue": "Modifier le ticket", "save": "Enregistrer", "cancel": "Annuler", "delete": "Supprimer", @@ -345,6 +378,25 @@ "filterByLanguage": "Filtrer par langage" }, "labels": { + "noPullRequestForBranch": "Il n’y a pas encore de pull request pour cette branche.", + "creatingPullRequest": "Création…", + "failedToLoadPullRequest": "Échec du chargement de la pull request", + "noCommitsInPullRequest": "Aucun commit dans cette pull request", + "prStatus": { + "open": "Ouvrir", + "merged": "Fusionné", + "closed": "Fermé", + "draft": "Brouillon" + }, + "sendingNow": "envoyer maintenant…", + "issues": "Problèmes", + "noIssues": "Aucun problème", + "openIssues": "Ouvrir", + "closedIssues": "Fermé", + "issueComments": "Commentaire sur {{count}}", + "issueComments_one": "1 commentaire", + "issueComments_other": "Commentaires sur {{count}}", + "tokens": "Jetons", "accounts": "Comptes", "enabled": "Activé", "disabled": "Désactivé", @@ -794,6 +846,7 @@ "searchModeCycle": "Mode de recherche : {{mode}}. Cliquez pour faire défiler les modes." }, "placeholders": { + "noResults": "Aucun résultat", "loading": "Chargement...", "selectToViewConfig": "Sélectionnez un {{type}} pour voir ou configurer", "selectToViewConfigSubtitle": "Choisissez un élément dans la liste à gauche", @@ -1096,6 +1149,9 @@ "sendStyleEdits": "Envoyer", "addToChat": "Ajouter à la discussion", "browserCore": { + "embeddedFallbackTitle": "Ce site peut ne pas fonctionner dans le navigateur intégré", + "embeddedFallbackBody": "Certains sites bloquent ou ne parviennent pas à restituer les WebViews de l'application. Ouvrez-le dans votre navigateur système si la page reste vide.", + "currentUrl": "URL actuelle", "desktopOnlyTitle": "Navigateur disponible dans l’app de bureau", "desktopOnlyBody": "Le navigateur intégré n’est disponible que dans l’application de bureau Tauri.", "debugWebviewAvailable": "WebView disponible : {{value}}", @@ -1126,6 +1182,63 @@ "gitSyncMenuTitle": "Actions de synchronisation Git" }, "git": { + "pr": { + "title": "pull request", + "baseBranch": "base", + "noDescription": "Aucune description fournie.", + "loadingConversation": "Chargement…", + "reviewNoBody": "Commentaires de révision laissés.", + "commentPlaceholder": "Laisser un commentaire…", + "comment": "Commentaire", + "approve": "Approuver", + "requestChanges": "Demander des modifications", + "reply": "Répondre", + "replyPlaceholder": "Répondre…", + "reviewThreads": "Examiner les commentaires", + "tabs": { + "conversation": "Conversation", + "commits": "Commits", + "checks": "Vérifications", + "changes": "Modifications" + }, + "checks": { + "none": "Aucune vérification signalée", + "noneHint": "Aucune vérification ni aucun statut CI n’a été exécuté sur le commit de tête de cette pull request.", + "allPassed": "Toutes les vérifications ont réussi", + "someFailed": "Certaines vérifications ont échoué", + "pending": "Vérifications en cours" + }, + "commits": { + "backToList": "Tous les commits", + "none": "Aucun commit" + }, + "changes": { + "title": "Fichiers modifiés", + "noFiles": "Aucune modification de fichier", + "tooLarge": "Fichier trop volumineux pour afficher le diff", + "unavailable": "Modifications indisponibles", + "unavailableHint": "Impossible de résoudre les commits de base et de tête de la pull request." + }, + "creating": "Création d’une pull request…", + "createError": "Échec de la création de la pull request", + "readyHint": "La branche est publiée et prête pour une pull request", + "neutralHint": "Publiez votre branche pour créer une pull request", + "noBranch": "Aucune branche sélectionnée", + "noRepoPath": "Aucun chemin de dépôt disponible", + "notAuthenticated": "Connectez-vous pour créer des pull requests", + "noOriginRemote": "Aucun dépôt distant origin configuré", + "cannotParseRepoName": "Impossible d’extraire le nom du dépôt depuis le dépôt distant origin", + "status": { + "open": "Ouvrir", + "merged": "Fusionné", + "closed": "Fermé", + "draft": "Brouillon" + }, + "authRequired": { + "title": "Connectez-vous à GitHub", + "description": "Accédez à Paramètres → Intégrations → Git pour connecter votre compte GitHub." + } + }, "loading": "Chargement du statut Git...", "resolved": "Suggestions Git résolues", "noRepoSelected": "Aucun dépôt sélectionné", @@ -1203,6 +1316,28 @@ "shaCopied": "SHA copié dans le presse-papiers" }, "issues": { + "title": "Tickets", + "loading": "Chargement des tickets…", + "empty": "Aucun ticket {{state}}", + "failedToLoad": "Échec du chargement des tickets", + "failedToCreate": "Échec de la création du ticket", + "failedToUpdate": "Échec de la mise à jour du ticket", + "failedToComment": "Échec de l’ajout du commentaire", + "filterAll": "Tous", + "filterOpen": "Ouverts", + "filterClosed": "Fermés", + "noGitHubRepo": "Connectez un dépôt GitHub pour gérer les tickets", + "commentPlaceholder": "Laisser un commentaire…", + "submitComment": "Commenter", + "newIssueTitlePlaceholder": "Titre du ticket", + "newIssueBodyPlaceholder": "Décrivez le ticket (facultatif)…", + "authRequired": { + "title": "Connectez-vous à GitHub", + "description": "Accédez à Paramètres → Intégrations → Git pour connecter votre compte GitHub." + }, + "reAuthRequired": "Autorisation GitHub requise", + "reAuthDescription": "Votre jeton GitHub a expiré. Accédez à Paramètres → Intégrations → Git pour vous reconnecter.", + "goToSettings": "Allez dans Paramètres", "updated": "Dernière mise à jour", "notUpdated": "non mis à jour", "assignedTo": "Assigné à {{assignees}}", @@ -1254,6 +1389,7 @@ "addEntry": "Plus d’options d’importation", "addRepoDescription": "Ouvrir, créer ou cloner un espace de travail", "sections": { + "recent": "Récent", "coding": "Espace de travail", "nonCoding": "Espace de travail", "pinned": "Épinglé", @@ -1792,6 +1928,13 @@ "teamUsage": "Utilisation équipe" }, "otherUsage": { + "cost": "Coût", + "estimatedCost": "Coût estimé", + "estimated": "EST.", + "estimatedTooltip": "Coût estimé — tokens × tarif catalogue (aucune dépense mesurée pour cette source)", + "totalEstimatedCost": "Coût estimé", + "viewCost": "Coût", + "viewTokens": "Jetons", "title": "Autre utilisation", "noData": "Aucune donnée d'utilisation AI", "sessions": "Sessions", @@ -1930,6 +2073,14 @@ "listed": "Listé" }, "sourceControl": { + "scope": { + "local": "Local", + "main": "Checkout principal", + "worktrees": "Worktrees", + "searchPlaceholder": "Filtrer les worktrees…", + "switchScope": "Changer la portée du contrôle de source", + "switchScopeActive": "Changer la portée du contrôle de source : {{repo}}, {{branch}}" + }, "notGitInitialized": "Git non initialisé", "notGitInitializedSubtitle": "Initialisez Git pour suivre les changements, créer des commits et utiliser les outils de branche dans cet espace de travail.", "initializeGit": "Initialiser Git", @@ -1961,6 +2112,25 @@ } }, "contextInfo": { + "cacheSaved": "Cache enregistré : lecture {{read}}, écriture {{write}}", + "remaining": "Disponible : {{tokens}} tokens", + "cacheHero": "{{pct}} % servis depuis le cache · ~{{tokens}} réutilisés ce tour-ci", + "cacheHeroSub": "La mise en cache des prompts peut réduire les coûts jusqu’à 90 %", + "headroom": "{{tokens}} tokens disponibles", + "manualCompactSectionTitle": "Compactage manuel", + "miniCpmCompactTitle": "Compactage automatique silencieux par MiniCPM", + "miniCpmCompactDescription": "Traite l’ancien contexte de manière asynchrone", + "miniCpmCompactToggleAria": "Activer le compactage automatique silencieux par MiniCPM", + "miniCpmCompactDisabled": "Le compactage silencieux est désactivé", + "miniCpmCompactEnabled": "Le compactage silencieux est activé", + "miniCpmCompactRunning": "MiniCPM compacte le contexte", + "miniCpmCompactComplete": "Compactage terminé", + "miniCpmCompactBusy": "La session actuelle est occupée", + "miniCpmCompactUnavailable": "MiniCPM n’est pas disponible", + "miniCpmCompactError": "Échec du compactage par MiniCPM", + "miniCpmCompactMetrics": "{{covered}} messages · {{source}} → {{summary}} jetons", + "miniCpmCompactAction": "Compacter maintenant", + "miniCpmCompactRunningAction": "Compactage en cours", "contextUsed": "contexte utilisé", "estimatedFromRules": "estimé à partir des règles", "activeRules": "Règles actives", @@ -2035,6 +2205,7 @@ "parentFolderPlaceholder": "Choisir Parent folder" }, "workspaceForm": { + "statusMaxRepos": "Maximum 5 dépôts sélectionnés", "title": "Créer un Workspace multi-Repo", "editTitle": "Modifier le Workspace", "createWorkspace": "Créer un Workspace multi-repo", @@ -2266,11 +2437,31 @@ "previewAlt": "Aperçu" }, "update": { + "available": "Mise à jour disponible", + "versionReady": "La version {{version}} est prête à être téléchargée.", + "upToDateVersion": "ORGII est à jour (v{{version}}).", + "upToDate": "ORGII est à jour.", + "checkFailed": "Échec de la recherche de mises à jour", + "checking": "Recherche de mises à jour…", "downloading": "Téléchargement de la mise à jour", + "downloadingEllipsis": "Téléchargement de la mise à jour…", + "downloadingWithSize": "Téléchargement de la mise à jour ({{size}})…", + "downloadingDownloaded": "Téléchargement de la mise à jour… {{downloaded}}", + "downloadingPercent": "Téléchargement de la mise à jour… {{percent}} %", "installing": "Installation de la mise à jour", + "installingEllipsis": "Installation de la mise à jour…", + "installed": "Mise à jour installée", + "installFailed": "Échec de l’installation de la mise à jour", + "downloadTimedOut": "Le téléchargement a expiré. Vérifiez votre réseau ou votre proxy, puis réessayez.", + "restarting": "Redémarrage d’ORGII pour terminer la mise à jour.", + "preparingVersion": "Préparation du téléchargement de la v{{version}}…", "progressPercent": "{{percent}} %", "downloadedOfTotal": "{{downloaded}} sur {{total}}", "preparingDownload": "Préparation du téléchargement…", "downloadingAndInstalling": "Téléchargement et installation de la mise à jour (v{{version}})…" + }, + "codeViewer": { + "original": "Original", + "modified": "Modifié" } } diff --git a/src/i18n/locales/fr/integrations.json b/src/i18n/locales/fr/integrations.json index 6a1e72511..0202b71da 100644 --- a/src/i18n/locales/fr/integrations.json +++ b/src/i18n/locales/fr/integrations.json @@ -1,10 +1,45 @@ { + "gitProfiles": { + "tab": "Profils Git", + "title": "Profils Git", + "add": "Ajouter un profil", + "refresh": "Actualiser les profils", + "refreshed": "Profil Git global actualisé", + "loading": "Chargement de votre profil Git global…", + "defaultProfile": "Profil par défaut", + "newProfile": "Nouveau profil", + "copyName": "Copie {{name}}", + "profileName": "Nom du profil", + "authorName": "Nom de l'auteur", + "email": "E-mail", + "selectEmail": "Sélectionnez un e-mail", + "signingKey": "Clé de signature", + "signingKeyPlaceholder": "ID de clé de signature GPG ou SSH", + "signCommits": "Signer les commits", + "active": "Actif", + "activate": "Activer le profil", + "activated": "{{name}} est désormais le profil Git global", + "editRaw": "Modifier la configuration brute", + "hideRaw": "Masquer la configuration brute", + "rawTitle": "Profil Git brut", + "rawConfig": "Configuration Git", + "updateFromRaw": "Mettre à jour le profil à partir de la configuration", + "rawUpdated": "Profil mis à jour à partir de la configuration Git brute", + "rawInvalid": "Le profil Git brut n'est pas valide", + "nameEmailRequired": "Le nom et l'e-mail de l'auteur sont requis", + "deleteTitle": "Supprimer le profil Git", + "deleteMessage": "Supprimer le profil « {{name}} » ? Cela ne change pas votre configuration Git globale actuelle.", + "loadFailed": "Échec du chargement du profil Git global", + "applyFailed": "Échec de l'activation du profil Git" + }, "scopeLabels": { "user": "User", "repoSpecific": "Spécifique au repo", "builtIn": "Intégré" }, "keyVault": { + "confirmRemoveActiveSessions_one": "La session active {{count}} utilise toujours ce compte et échouera lors de son prochain tour :", + "confirmRemoveActiveSessions_other": "Les sessions actives {{count}} utilisent toujours ce compte et échoueront lors de leur prochain tour :", "title": "Modèles & CLIs", "overview": { "helpMyAccounts": "Ajoutez des clés API et configurez les agents CLI. Les clés sont stockées localement et ne quittent pas votre machine.", @@ -29,10 +64,13 @@ "confirmDeleteTitle": "Supprimer \"{{name}}\" ?", "confirmDeleteMessage": "Cela supprimera définitivement cette annonce du marketplace.", "toasts": { + "refreshedDelta": "Modèles actualisés : +{{added}} ajouté, -{{removed}} supprimé", + "refreshedNoChange": "Modèles actualisés — aucun changement", + "refreshPartial": "Modèles actualisés (+{{added}} / -{{removed}}), mais les comptes {{failed}} des {{total}} ont échoué", "refreshed": "{{name}} actualisé avec succès", "refreshFailed": "{{name}} validation échouée - vérifiez les identifiants", "allRefreshed": "Tous les comptes actualisés", - "refreshError": "Échec de l'actualisation de {{name}}", + "refreshError": "Échec de l'actualisation de {{name}} : {{error}}", "localRemoved": "{{name}} supprimé", "unlistPending": "{{name}} retrait demandé. Sera supprimé à la fin des Session actives.", "listingRemoved": "{{name}} retiré du marketplace", @@ -1012,6 +1050,7 @@ "allImported": "Tous les MCP servers détectés ont déjà été importés" }, "categories": { + "housekeeper": "Assistant MiniCPM", "git": "Git", "gitDesc": "Contrôle de version et hébergement de dépôts", "channels": "Agent Channels", @@ -1275,6 +1314,8 @@ "smitheryApiKeyDesc": "API key pour parcourir les serveurs MCP sur Smithery. Get your key at smithery.ai/account/api-keys" }, "git": { + "autoCreatePr": "Créer automatiquement des demandes d'extraction", + "autoCreatePrDesc": "Créez automatiquement une pull request dans Workstation Source Control lorsqu'une branche de fonctionnalité est entièrement poussée et propre", "searchPlaceholder": "Rechercher des fournisseurs git...", "connections": "Connexions Git", "noProvidersFound": "Aucun fournisseur git trouvé", @@ -1578,6 +1619,35 @@ "deleteConfirmMessage": "Cela supprimera le serveur du fichier de configuration. Les sessions actives seront déconnectées." }, "agentOrgs": { + "cliManagedConfig": { + "title": "Commutateur de configuration CLI", + "modeLabel": "Mode", + "modeDesc": "La valeur par défaut restaure la propre configuration de la CLI. ORGII Managed écrit une configuration de proxy sauvegardée.", + "modeDefault": "Défaut", + "modeOrgii": "ORGII Géré", + "conflict": "Changement externe", + "conflictTitle": "Conflit", + "conflictDesc": "La configuration CLI active a changé après que ORGII l'ait écrite.", + "proxyStatus": "Proxy", + "proxyDefault": "Mode par défaut", + "proxyReady": "Proxy prêt", + "proxyNotReady": "Proxy indisponible", + "proxyDesc": "Les requêtes locales transitent par le coffre de clés ORGII.", + "keyLabel": "Clé", + "keyDesc": "Seules les clés API compatibles avec cette CLI et ce proxy géré sont affichées.", + "selectKey": "Sélectionner la clé", + "modelLabel": "Modèle", + "selectModel": "Sélectionnez le modèle", + "configFile": "Fichiers de configuration", + "actions": "Actions", + "addKey": "Ajouter une clé", + "apply": "Appliquer", + "restore": "Restaurer les valeurs par défaut", + "forceApply": "Forcer l'application", + "forceRestore": "Forcer la restauration", + "applySuccess": "Configuration gérée ORGII appliquée", + "restoreSuccess": "Configuration par défaut restaurée" + }, "title": "Équipes d’agents", "running": "En cours", "fires": "déclenchements", @@ -2360,6 +2430,7 @@ } }, "devTools": { + "modeSessionLink": "Lien de session", "mode": "Mode", "modeUi": "Aperçu UI", "modeTool": "Outils", @@ -2546,6 +2617,51 @@ } }, "housekeeper": { + "eyebrow": "Assistant résident MiniCPM", + "title": "Assistant résident", + "description": "MiniCPM, exécuté localement, améliore les prompts, fournit de brèves explications des étapes et assure un contrôle léger de l’interface. Les tâches de codage et les configurations ADE complexes continuent d’utiliser le modèle principal de l’agent.", + "autoAccount": "Sélectionner automatiquement le compte vLLM MiniCPM", + "tiles": { + "model": "Modèle", + "endpoint": "Point de terminaison", + "safeContext": "Contexte sécurisé" + }, + "settings": { + "enabled": { + "title": "Activer l’assistant", + "description": "Lorsque cette option est désactivée, MiniCPM n’est pas utilisé pour améliorer les prompts, expliquer les étapes ou contrôler légèrement l’interface." + }, + "account": { + "title": "Compte vLLM MiniCPM", + "description": "Réutilise un compte KeyVault vllm_api existant ; aucun magasin d'informations d'identification distinct n'est créé." + }, + "model": { + "title": "ID du modèle", + "description": "Docker vLLM MiniCPM5-1B est par défaut openbmb/MiniCPM5-1B." + }, + "context": { + "title": "Budget contexte sécurisé", + "description": "Utilisez un budget conservateur de 10 000 tokens sur des GPU de 4 Go au lieu de vous fier à la limite théorique de 32 000 tokens." + } + }, + "features": { + "promptPolish": { + "title": "Polissage rapide", + "description": "Polissez manuellement l’entrée avant de l’envoyer au modèle de codage le plus puissant." + }, + "stepExplain": { + "title": "Explications des étapes de l'agent", + "description": "Générez une ou deux courtes explications en chinois pour les étapes de relecture de la session." + }, + "uiControl": { + "title": "Contrôle ADE/UI léger", + "description": "MiniCPM ne peut classer les demandes que dans une liste blanche d'actions locales stricte." + }, + "contextCompact": { + "title": "Maintenance automatique du contexte", + "description": "Laissez MiniCPM conserver un résumé continu isolé du contexte plus ancien pendant que les sessions activées sont inactives." + } + }, "addModel": "Ajouter un modèle", "sections": { "configuration": "Configuration", @@ -2553,6 +2669,13 @@ "diagnostics": "Diagnostics" }, "health": { + "title": "Bilan de santé", + "idle": "Vérifie /v1/models et envoie une petite demande de discussion.", + "checking": "Vérification du service vLLM MiniCPM local...", + "checkButton": "Vérifier la connexion", + "configureFirst": "Configurez d'abord un compte vLLM MiniCPM.", + "connectedTo": "Connecté à {{baseUrl}}", + "failed": "La vérification de l'état du MiniCPM a échoué.", "status": "Non vérifié" }, "benchmark": { diff --git a/src/i18n/locales/fr/navigation.json b/src/i18n/locales/fr/navigation.json index 4a02aee6c..e0752131b 100644 --- a/src/i18n/locales/fr/navigation.json +++ b/src/i18n/locales/fr/navigation.json @@ -1,5 +1,6 @@ { "labels": { + "openSourceRepo": "Dépôt Open Source", "devRecord": "Journal de développement", "workItems": "Éléments de travail", "codeSearch": "Recherche de code", @@ -335,6 +336,26 @@ "addWorkspace": "Ajouter un espace de travail" }, "explore": { + "search": "Recherche", + "searching": "Recherche...", + "searchPlaceholder": "Rechercher dans les dépôts GitHub (par exemple, langue : rust tauri)", + "clone": "Cloner", + "cloning": "Clonage...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} cloné", + "cloneFailed": "Le clonage a échoué", + "cloneNoTarget": "Aucun dossier d'espace de travail par défaut configuré. Définissez-en un dans Paramètres.", + "errorTitle": "La recherche a échoué", + "noResultsTitle": "Aucun dépôt ne correspond", + "noResultsSubtitle": "Essayez une autre requête ou un autre tri.", + "resultsCount": "{{shown}} dépôts sur {{total}}", + "partial": "(partiel — délai de recherche dépassé)", + "sort": { + "bestMatch": "Meilleure correspondance", + "stars": "Étoiles", + "updated": "Récemment mis à jour", + "forks": "Forks" + }, "title": "Explorer" }, "workstation": { diff --git a/src/i18n/locales/fr/sessions.json b/src/i18n/locales/fr/sessions.json index f21a0997a..3afcae939 100644 --- a/src/i18n/locales/fr/sessions.json +++ b/src/i18n/locales/fr/sessions.json @@ -1,4 +1,9 @@ { + "canvasApp": { + "empty": "Aucun canevas affiché pour le moment", + "sidebarTitle": "Canevas", + "noCanvases": "Aucun canevas pour le moment" + }, "toolUsage": { "estimatedContext": "{{tokenCount}} Token context", "followup": "{{tokenCount}} Token follow-up", @@ -89,6 +94,8 @@ "dataSource": "Sources de données" }, "dataSource": { + "rescanUpdate": "Mise à jour", + "rescanClear": "Effacer + réanalyser", "title": "Sources de données", "description": "Outils de codage externes détectés par ORGII. Les applications importables affichent leur nombre de sessions et peuvent être réanalysées ; les autres affichent l'état d'installation et l'emplacement de leur historique.", "rescanAll": "Tout réanalyser", @@ -189,6 +196,8 @@ "cancelled": "Échoué" }, "sidebar": { + "githubIssues": "Problèmes GitHub", + "githubPrs": "PR GitHub", "agentTypes": "Types d’Agent", "manageItems": "Gérer les éléments", "sessionsView": "Vue Sessions", @@ -330,6 +339,16 @@ "tasksWillAppear": "Les tâches apparaîtront ici lorsque le travail commencera sur cette session" }, "replay": { + "filters": { + "tooltip": "Filtrer les événements", + "allEvents": "Tous les événements", + "keyInteractions": "Interactions clés", + "fileChanges": "Modifications de fichiers", + "terminalEvents": "Événements terminaux", + "explore": "Explorer", + "other": "Autre", + "selectedCount": "Filtres {{count}}" + }, "following": "En cours", "freeBrowsing": "Navigation libre", "replaying": "Lecture", @@ -435,6 +454,16 @@ "emptyForFilter": "Aucun Diff pour le moment", "emptyDetail": "Sélectionnez une modification pour voir le Diff.", "submissions": { + "labels": { + "created": { + "commit": "Commit créé", + "pullRequest": "Pull request créée" + }, + "mentioned": { + "commit": "Commit mentionné", + "pullRequest": "Pull request mentionnée" + } + }, "tabLabel": "Soumissions", "commits": "Commits", "pr": "PR", @@ -703,6 +732,10 @@ "loading": "Chargement de l'éditeur..." }, "input": { + "pr": { + "open": "Ouvrir la pull request", + "creating": "Création de la pull request…" + }, "editPlaceholder": "Modifier votre message...", "defaultPlaceholder": "Discuter avec l'Agent", "finishNextStep": "Terminer. Étape suivante !", @@ -728,6 +761,7 @@ "selectedOf": "{{selected}} sur {{total}} sélectionnés" }, "chat": { + "restoreCheckpoint": "Restaurer le point de contrôle", "planApprovedLabel": "Exécution du plan approuvé", "planApprovedEditedLabel": "Exécution du plan approuvé (modifié)", "sessionStarted": "Session démarrée", @@ -1920,6 +1954,7 @@ "branchesTouched": "Branches" }, "modelPill": { + "appliesNextTurn": "Compte changé. La réponse actuelle s'exécute toujours sur le compte précédent ; le nouveau compte prend effet au tour suivant.", "immutableInSession": "La source de clé, le type d'Agent et le palier tarifaire sont fixés au démarrage de la session. Démarrez une nouvelle session pour les modifier." }, "creator": { @@ -2580,6 +2615,7 @@ "title": "Voir les détails de la tâche" }, "list": { + "countLabel": "Tâches", "title": "Voir la liste des tâches", "count": "{{taskCount}} tâches", "empty": "Aucune tâche" @@ -2621,6 +2657,9 @@ } }, "cards": { + "session": { + "open": "Ouvrir la session" + }, "openFile": "Ouvrir dans l'éditeur", "openLink": "Ouvrir le lien", "broadcast": "→ Tous les agents", @@ -2698,6 +2737,9 @@ "iframeTitle": "Aperçu du code" }, "canvasCard": { + "reactDisabledTitle": "L'aperçu de React s'exécute dans le simulateur", + "reactDisabledDescription": "L'agent JavaScript n'est pas exécuté dans le chat. Ouvrez-le dans Simulator pour exécuter l’aperçu React en bac à sable.", + "viewInSimulator": "Afficher dans le simulateur", "titleHtml": "Aperçu Agent", "titleUrl": "Aperçu Agent", "titleA2ui": "Aperçu Agent", diff --git a/src/i18n/locales/fr/settings.json b/src/i18n/locales/fr/settings.json index f75159868..2467ecb32 100644 --- a/src/i18n/locales/fr/settings.json +++ b/src/i18n/locales/fr/settings.json @@ -790,6 +790,15 @@ "currentVersion": "Version actuelle" }, "monitor": { + "diskCategory_toolResults": "Résultats d’outils volumineux", + "diskCategory_diagnostics": "File d’attente des diagnostics", + "diskCategory_models": "Modèles téléchargés", + "diskCategory_codeMap": "Index de cartographie du code", + "diskCategory_semanticIndex": "Index de recherche sémantique", + "diskCategory_cursorCliProfiles": "Profils de la CLI Cursor", + "diskCategory_kiroCliProfiles": "Profils de la CLI Kiro", + "diskCategory_opencodeCliProfiles": "Profils de la CLI OpenCode", + "diskCategory_sidecarBin": "Binaires sidecar téléchargés", "categoryTerminal": "Processus terminal/outil", "categoryWebview": "Moteur de rendu WebView", "categoryGpu": "GPU WebKit", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 1214a47e5..1894020e7 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -201,6 +201,13 @@ "addWorkspace": "Workspace を追加", "openSpotlight": "Spotlight を開く", "openWorkspace": "Workspace を開く", + "openOnGitHub": "GitHub で開く", + "createPullRequest": "プルリクエストを作成", + "newIssue": "新しい Issue", + "closeIssue": "Issue をクローズ", + "reopenIssue": "Issue を再オープン", + "addComment": "コメントを追加", + "editIssue": "Issue を編集", "skipThisVersion": "このバージョンをスキップ", "later": "後で", "link": "リンク" @@ -388,6 +395,16 @@ "gitHistory": "Git 履歴", "noPullRequest": "プルリクエストがありません", "pullRequest": "プルリクエスト", + "noPullRequestForBranch": "このブランチにはまだプルリクエストがありません。", + "creatingPullRequest": "作成中…", + "failedToLoadPullRequest": "プルリクエストの読み込みに失敗しました", + "noCommitsInPullRequest": "このプルリクエストにはコミットがありません", + "prStatus": { + "open": "オープン", + "merged": "マージ済み", + "closed": "クローズ済み", + "draft": "下書き" + }, "operationLog": "操作ログ", "gitDashboard": "ダッシュボード", "changedFiles": "変更されたファイル", @@ -397,6 +414,7 @@ "fileCount_other": "{{count}} 個のファイル", "queuedCount_one": "{{count}} 件待ち", "queuedCount_other": "{{count}} 件待ち", + "sendingNow": "今すぐ送信中…", "processCount_one": "{{count}} 件実行中", "processCount_other": "{{count}} 件実行中", "filters": "フィルター", @@ -405,6 +423,13 @@ "nearby": "近く", "renowned": "著名", "dragToReorder": "ドラッグしてメッセージの順序を変更", + "issues": "Issues", + "noIssues": "Issue はありません", + "openIssues": "オープン", + "closedIssues": "クローズ済み", + "issueComments": "{{count}} 件のコメント", + "issueComments_one": "1 件のコメント", + "issueComments_other": "{{count}} 件のコメント", "sessionBlame": "Session Blame", "agentBlame": "Agent Blame", "initializeAgentBlame": "Initialize Agent Blame", @@ -438,6 +463,7 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", + "tokens": "トークン", "committedRate": "コミット済み" }, "searchModes": { @@ -798,6 +824,7 @@ "selectToViewConfig": "{{type}} を選択して表示または設定", "selectToViewConfigSubtitle": "左のリストから項目を選んでください", "noOptions": "オプションなし", + "noResults": "結果がありません", "noResultsSubtitle": "別の検索語をお試しください", "noResultsWithFilters": "別の検索語を試すか、フィルターを調整してください", "noRows": "行がありません", @@ -1109,6 +1136,9 @@ "simulatorBrowserNotice": "このブラウザはセッション再生専用です。継続的な閲覧はメインアプリのブラウザ(ツール → ブラウザ)を使用してください。", "tlsDevNote": "注: GitHub など一部の HTTPS サイトは開発モードで証明書検証により TLS エラーが出ることがあります。HTTP や example.com などのシンプルな HTTPS を試してください。", "siteUnreachableTitle": "このサイトにアクセスできません", + "embeddedFallbackTitle": "このサイトは埋め込みブラウザで正常に動作しない可能性があります", + "embeddedFallbackBody": "一部のサイトはアプリ内 WebView での表示をブロックするか、正しく描画できません。ページが空白のままの場合は、システムブラウザで開いてください。", + "currentUrl": "現在の URL", "errorTls": "このサイトへの接続は安全ではありません。開発モードでは HTTPS サイトでよく発生します。", "errorTimeout": "接続がタイムアウトしました。サーバーの応答に時間がかかりすぎました。", "errorDns": "サーバーの DNS アドレスが見つかりません。URL の誤りを確認してください。", @@ -1199,22 +1229,101 @@ "conflictedFiles": "コンフリクトのあるファイルの解決が必要です", "gitAction": "Git アクション" }, + "pr": { + "title": "プルリクエスト", + "baseBranch": "ベース", + "noDescription": "説明はありません。", + "loadingConversation": "読み込み中…", + "reviewNoBody": "レビューコメントを残しました。", + "commentPlaceholder": "コメントを入力…", + "comment": "コメント", + "approve": "承認", + "requestChanges": "変更をリクエスト", + "reply": "返信", + "replyPlaceholder": "返信を入力…", + "reviewThreads": "レビューコメント", + "tabs": { + "conversation": "会話", + "commits": "コミット", + "checks": "チェック", + "changes": "変更" + }, + "checks": { + "none": "チェック結果はありません", + "noneHint": "このプルリクエストの最新コミットでは CI チェックやステータスが実行されていません。", + "allPassed": "すべてのチェックに合格しました", + "someFailed": "一部のチェックに失敗しました", + "pending": "チェックを実行中" + }, + "commits": { + "backToList": "すべてのコミット", + "none": "コミットはありません" + }, + "changes": { + "title": "変更されたファイル", + "noFiles": "ファイルの変更はありません", + "tooLarge": "ファイルが大きすぎるため差分を表示できません", + "unavailable": "変更を取得できません", + "unavailableHint": "プルリクエストのベースコミットと最新コミットを特定できませんでした。" + }, + "creating": "プルリクエストを作成中…", + "createError": "プルリクエストの作成に失敗しました", + "readyHint": "ブランチはプッシュ済みで、プルリクエストを作成できます", + "neutralHint": "プルリクエストを作成するにはブランチをプッシュしてください", + "noBranch": "ブランチが選択されていません", + "noRepoPath": "リポジトリのパスを取得できません", + "notAuthenticated": "プルリクエストを作成するにはサインインしてください", + "noOriginRemote": "origin リモートが設定されていません", + "cannotParseRepoName": "origin リモートからリポジトリ名を取得できませんでした", + "status": { + "open": "オープン", + "merged": "マージ済み", + "closed": "クローズ済み", + "draft": "下書き" + }, + "authRequired": { + "title": "GitHub に接続", + "description": "設定 → 連携 → Git で GitHub アカウントに接続してください。" + } + }, "commit": { "copySha": "SHAをコピー", "shaCopied": "SHAをクリップボードにコピーしました" }, "issues": { + "title": "Issues", + "loading": "Issue を読み込み中…", + "empty": "{{state}}の Issue はありません", + "failedToLoad": "Issue の読み込みに失敗しました", + "failedToCreate": "Issue の作成に失敗しました", + "failedToUpdate": "Issue の更新に失敗しました", + "failedToComment": "コメントの追加に失敗しました", + "filterAll": "すべて", + "filterOpen": "オープン", + "filterClosed": "クローズ済み", + "noGitHubRepo": "Issue を管理するには GitHub リポジトリに接続してください", + "commentPlaceholder": "コメントを入力…", "updated": "最終更新", "notUpdated": "未更新", "assignedTo": "{{assignees}} に割り当て", "commentCount_one": "{{count}} 件のコメント", "commentCount_other": "{{count}} 件のコメント", + "submitComment": "コメント", + "newIssueTitlePlaceholder": "Issue のタイトル", + "newIssueBodyPlaceholder": "Issue の説明(任意)…", "status": { "open": "オープン", "closed": "クローズ", "completed": "完了", "notPlanned": "未計画" - } + }, + "authRequired": { + "title": "GitHub に接続", + "description": "設定 → 連携 → Git で GitHub アカウントに接続してください。" + }, + "reAuthRequired": "GitHub の再認証が必要です", + "reAuthDescription": "GitHub トークンの有効期限が切れました。設定 → 連携 → Git で再接続してください。", + "goToSettings": "設定へ移動" } }, "selectors": { @@ -1259,6 +1368,7 @@ "nonCoding": "Workspace", "pinned": "ピン留め", "current": "現在", + "recent": "最近", "repo": "リポジトリ", "systemPaths": "システムパス", "usedElsewhere": "他の場所で使用", @@ -1810,7 +1920,14 @@ "overview": "概要", "cursor": "Cursor", "cli": "CLI" - } + }, + "cost": "コスト", + "estimatedCost": "推定コスト", + "estimated": "推定", + "estimatedTooltip": "推定コスト — トークン数 × 定価(このソースの従量課金額ではありません)", + "totalEstimatedCost": "推定コスト", + "viewCost": "コスト", + "viewTokens": "トークン" }, "devActivity": { "title": "コーディングプロフィール", @@ -1961,10 +2078,23 @@ }, "sessionFilter": { "allSessions": "すべてのセッション" + }, + "scope": { + "local": "ローカル", + "main": "メインチェックアウト", + "worktrees": "Worktree", + "searchPlaceholder": "Worktree を絞り込む…", + "switchScope": "ソース管理の範囲を切り替え", + "switchScopeActive": "ソース管理の範囲を切り替え: {{repo}}、{{branch}}" } }, "contextInfo": { "contextUsed": "コンテキスト使用量", + "cacheSaved": "キャッシュ節約量: 読み取り {{read}}、書き込み {{write}}", + "remaining": "残り: {{tokens}}", + "cacheHero": "{{pct}}% をキャッシュから提供 · このターンで約 {{tokens}} を再利用", + "cacheHeroSub": "プロンプトキャッシュによりコストを最大 90% 削減できます", + "headroom": "残り {{tokens}}", "estimatedFromRules": "ルールからの推定", "activeRules": "有効なルール", "title": "Context", @@ -1988,6 +2118,7 @@ "autoCompactNote": "まもなくコンテキストを要約します", "startNewSession": "新しいセッションを開始", "compactBoundaryTitle": "コンテキストを圧縮しました", + "compactBoundarySubtitle_one": "過去のメッセージ {{count}} 件を要約", "compactBoundarySubtitle_other": "{{count}}件の過去メッセージを要約", "compactBoundaryTokens": "{{before}} → {{after}} トークン", "manualCompactAction": "圧縮", @@ -2000,7 +2131,21 @@ "manualCompactNoRuntime": "圧縮する前にメッセージを送信してください", "manualCompactFailed": "圧縮に失敗しました: {{message}}", "manualCompactChannelAttached": "このセッションはチャンネル管理です — そちらで /compact を使ってください", - "manualCompactInstructionsPlaceholder": "任意: 要約で重視するポイント" + "manualCompactInstructionsPlaceholder": "任意: 要約で重視するポイント", + "manualCompactSectionTitle": "手動圧縮", + "miniCpmCompactTitle": "MiniCPM による自動サイレント圧縮", + "miniCpmCompactDescription": "古いコンテキストを非同期で処理します", + "miniCpmCompactToggleAria": "MiniCPM による自動サイレント圧縮を有効化", + "miniCpmCompactDisabled": "サイレント圧縮はオフです", + "miniCpmCompactEnabled": "サイレント圧縮はオンです", + "miniCpmCompactRunning": "MiniCPM が圧縮中です", + "miniCpmCompactComplete": "圧縮が完了しました", + "miniCpmCompactBusy": "現在のセッションは処理中です", + "miniCpmCompactUnavailable": "MiniCPM を利用できません", + "miniCpmCompactError": "MiniCPM による圧縮に失敗しました", + "miniCpmCompactMetrics": "{{covered}} 件のメッセージ · {{source}} → {{summary}} トークン", + "miniCpmCompactAction": "今すぐ圧縮", + "miniCpmCompactRunningAction": "圧縮中" }, "relativeDate": { "today": "今日", @@ -2051,6 +2196,7 @@ "workspaceNamePlaceholder": "マイ Workspace", "willInclude": "Workspace には {{count}} 個の Repo が含まれます", "statusSelectAtLeastTwo": "2つ以上の Repo を選択してください", + "statusMaxRepos": "選択できる Repo は最大 5 件です", "statusReadyToCreate": "Workspace を作成する準備ができました", "defaultName": "Workspace", "defaultNameWithRepo": "{{repo}} Workspace", @@ -2268,11 +2414,57 @@ "previewAlt": "プレビュー" }, "update": { + "available": "アップデートがあります", + "versionReady": "バージョン {{version}} をダウンロードできます。", + "upToDateVersion": "ORGII は最新です (v{{version}})。", + "upToDate": "ORGII は最新です。", + "checkFailed": "アップデートの確認に失敗しました", + "checking": "アップデートを確認中…", "downloading": "アップデートをダウンロード中", + "downloadingEllipsis": "アップデートをダウンロード中…", + "downloadingWithSize": "アップデートをダウンロード中 ({{size}})…", + "downloadingDownloaded": "アップデートをダウンロード中… {{downloaded}}", + "downloadingPercent": "アップデートをダウンロード中… {{percent}}%", "installing": "アップデートをインストール中", + "installingEllipsis": "アップデートをインストール中…", + "installed": "アップデートをインストールしました", + "installFailed": "アップデートのインストールに失敗しました", + "downloadTimedOut": "ダウンロードがタイムアウトしました。ネットワークまたはプロキシを確認して、もう一度お試しください。", + "restarting": "アップデートを完了するため ORGII を再起動します。", + "preparingVersion": "v{{version}} のダウンロードを準備中…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} / {{total}}", "preparingDownload": "ダウンロードを準備中…", "downloadingAndInstalling": "アップデートをダウンロードしてインストール中 (v{{version}})…" + }, + "sqlEditor": { + "placeholder": "SQL クエリを入力...", + "format": "整形", + "runQueryToSeeResults": "クエリを実行すると結果が表示されます", + "executingQuery": "クエリを実行中...", + "queryFailed": "クエリに失敗しました", + "queryCompleted": "クエリが完了しました", + "noResults": "クエリの結果はありません", + "rowCount_one": "{{count}} 行", + "rowCount_other": "{{count}} 行", + "press": "押す:", + "toRun": "実行", + "nullValue": "NULL", + "booleanTrue": "true", + "booleanFalse": "false" + }, + "uploadZone": { + "clickOrDrag": "クリックするか、ファイルをここにドラッグしてアップロード", + "supportFormats": "対応形式: {{accept}}" + }, + "chatImage": { + "maxReached": "画像は最大 {{max}} 枚まで追加できます", + "remainingWarning": "追加できる画像はあと {{remaining}} 枚です(最大 {{max}} 枚)", + "processFailed": "画像の処理に失敗しました", + "loadFailed": "画像の読み込みに失敗しました: {{fileName}}" + }, + "codeViewer": { + "original": "変更前", + "modified": "変更後" } } diff --git a/src/i18n/locales/ja/integrations.json b/src/i18n/locales/ja/integrations.json index b6945c13f..96fb23209 100644 --- a/src/i18n/locales/ja/integrations.json +++ b/src/i18n/locales/ja/integrations.json @@ -24,6 +24,8 @@ "unlist": "リストから削除", "confirmRemoveTitle": "\"{{name}}\" を削除しますか?", "confirmRemoveMessage": "ローカル認証情報が削除されます。この操作は元に戻せません。", + "confirmRemoveActiveSessions_one": "このアカウントを使用中のセッションが {{count}} 件あります。削除すると次のターンで失敗します:", + "confirmRemoveActiveSessions_other": "このアカウントを使用中のセッションが {{count}} 件あります。削除すると次のターンで失敗します:", "confirmUnlistTitle": "\"{{name}}\" をリストから削除しますか?", "confirmUnlistMessage": "マーケットプレイスからリストが削除されます。ローカル認証情報は保持されます。", "confirmDeleteTitle": "\"{{name}}\" を削除しますか?", @@ -32,14 +34,17 @@ "refreshed": "{{name}} の更新が完了しました", "refreshFailed": "{{name}} の検証に失敗しました - 認証情報を確認してください", "allRefreshed": "すべてのアカウントを更新しました", - "refreshError": "{{name}} の更新に失敗しました", + "refreshError": "{{name}} の更新に失敗しました: {{error}}", "localRemoved": "{{name}} を削除しました", "unlistPending": "{{name}} のリスト解除をリクエストしました。アクティブなSession終了後に削除されます。", "listingRemoved": "{{name}} をマーケットプレイスから削除しました", "listingDeleted": "{{name}} を削除しました", "deleteError": "{{name}} の削除に失敗しました", "published": "{{name}} をマーケットプレイスに公開しました", - "publishError": "{{name}} の公開に失敗しました" + "publishError": "{{name}} の公開に失敗しました", + "refreshedDelta": "モデルを更新しました: {{added}} 件追加、{{removed}} 件削除", + "refreshedNoChange": "モデルを更新しました — 変更はありません", + "refreshPartial": "モデルを更新しました(追加 {{added}} / 削除 {{removed}})。ただし {{total}} アカウント中 {{failed}} 件で失敗しました" }, "configure": "{{provider}} を設定", "providerGroups": { @@ -1031,7 +1036,8 @@ "tools": "組み込みツール", "computerUse": "Computer Use", "rulesMemoryEvolution": "ルール、メモリ & 進化", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "MiniCPM ハウスキーパー" }, "projectConnections": { "linear": "Linear", @@ -1341,7 +1347,42 @@ "oauthDeviceCodeDesc": "下記の URL を開き、このコードを入力してください", "oauthOpenGithub": "GitHub を開く", "oauthCancel": "キャンセル", - "oauthFailed": "認証に失敗しました" + "oauthFailed": "認証に失敗しました", + "autoCreatePr": "プルリクエストを自動作成", + "autoCreatePrDesc": "機能ブランチが完全にプッシュされ、変更がない状態になったら、Workstation のソース管理でプルリクエストを自動作成します" + }, + "gitProfiles": { + "tab": "Git プロファイル", + "title": "Git プロファイル", + "add": "プロファイルを追加", + "refresh": "プロファイルを更新", + "refreshed": "グローバル Git プロファイルを更新しました", + "loading": "グローバル Git プロファイルを読み込み中…", + "defaultProfile": "デフォルトプロファイル", + "newProfile": "新しいプロファイル", + "copyName": "{{name}} のコピー", + "profileName": "プロファイル名", + "authorName": "作成者名", + "email": "メールアドレス", + "selectEmail": "メールアドレスを選択", + "signingKey": "署名キー", + "signingKeyPlaceholder": "GPG または SSH 署名キー ID", + "signCommits": "コミットに署名", + "active": "使用中", + "activate": "プロファイルを有効化", + "activated": "{{name}} をグローバル Git プロファイルに設定しました", + "editRaw": "設定を直接編集", + "hideRaw": "直接編集を閉じる", + "rawTitle": "Git プロファイルの直接編集", + "rawConfig": "Git 設定", + "updateFromRaw": "設定内容からプロファイルを更新", + "rawUpdated": "Git 設定からプロファイルを更新しました", + "rawInvalid": "Git プロファイルの設定内容が無効です", + "nameEmailRequired": "作成者名とメールアドレスは必須です", + "deleteTitle": "Git プロファイルを削除", + "deleteMessage": "プロファイル「{{name}}」を削除しますか?現在のグローバル Git 設定は変更されません。", + "loadFailed": "グローバル Git プロファイルの読み込みに失敗しました", + "applyFailed": "Git プロファイルの有効化に失敗しました" }, "skillsHub": { "title": "Skills Hub", @@ -1579,6 +1620,35 @@ }, "agentOrgs": { "title": "Agentチーム", + "cliManagedConfig": { + "title": "CLI 設定の切り替え", + "modeLabel": "モード", + "modeDesc": "デフォルトでは CLI 独自の設定を復元します。ORGII 管理では、バックアップ付きのプロキシ設定を書き込みます。", + "modeDefault": "デフォルト", + "modeOrgii": "ORGII 管理", + "conflict": "外部で変更されました", + "conflictTitle": "競合", + "conflictDesc": "ORGII が書き込んだ後に、有効な CLI 設定が変更されました。", + "proxyStatus": "プロキシ", + "proxyDefault": "デフォルトモード", + "proxyReady": "プロキシ準備完了", + "proxyNotReady": "プロキシ未準備", + "proxyDesc": "ローカルリクエストを ORGII KeyVault 経由で送信します。", + "keyLabel": "キー", + "keyDesc": "この CLI と管理プロキシに対応する API キーのみ表示されます。", + "selectKey": "キーを選択", + "modelLabel": "モデル", + "selectModel": "モデルを選択", + "configFile": "設定ファイル", + "actions": "アクション", + "addKey": "キーを追加", + "apply": "適用", + "restore": "デフォルトに戻す", + "forceApply": "強制適用", + "forceRestore": "強制復元", + "applySuccess": "ORGII 管理設定を適用しました", + "restoreSuccess": "デフォルト設定を復元しました" + }, "running": "実行中", "fires": "回発火", "addRoutine": "Routine を追加", @@ -2363,6 +2433,7 @@ "mode": "モード", "modeUi": "UI プレビュー", "modeTool": "ツール", + "modeSessionLink": "セッションリンク", "modeInput": "入力", "selectionMode": "選択", "selectionModeSingle": "単一", @@ -2546,6 +2617,51 @@ } }, "housekeeper": { + "eyebrow": "MiniCPM 常駐ハウスキーパー", + "title": "常駐ハウスキーパー", + "description": "ローカルの MiniCPM が、プロンプトの推敲、短いステップ説明、軽量な UI 操作を処理します。コーディングタスクや複雑な ADE セットアップには引き続きメインの Agent モデルを使用します。", + "autoAccount": "MiniCPM vLLM アカウントを自動選択", + "tiles": { + "model": "モデル", + "endpoint": "エンドポイント", + "safeContext": "安全なコンテキスト" + }, + "settings": { + "enabled": { + "title": "ハウスキーパーを有効化", + "description": "無効にすると、プロンプトの推敲、ステップ説明、軽量な UI 操作に MiniCPM を使用しません。" + }, + "account": { + "title": "vLLM MiniCPM アカウント", + "description": "既存の KeyVault vllm_api アカウントを再利用します。個別の認証情報ストアは作成しません。" + }, + "model": { + "title": "モデル ID", + "description": "Docker vLLM MiniCPM5-1B のデフォルトは openbmb/MiniCPM5-1B です。" + }, + "context": { + "title": "安全なコンテキスト上限", + "description": "4 GB GPU では理論上の 32k 上限を前提にせず、安全を見込んだ 10000 トークンを使用します。" + } + }, + "features": { + "promptPolish": { + "title": "プロンプトの推敲", + "description": "高性能なコーディングモデルへ送信する前に、入力を手動で推敲します。" + }, + "stepExplain": { + "title": "Agent ステップの説明", + "description": "セッション再生の各ステップに、中国語の短い説明を 1~2 文生成します。" + }, + "uiControl": { + "title": "軽量な ADE / UI 操作", + "description": "MiniCPM は、厳格なローカルアクション許可リストに沿ったリクエスト分類のみ行えます。" + }, + "contextCompact": { + "title": "コンテキストの自動メンテナンス", + "description": "有効なセッションがアイドル中に、MiniCPM が古いコンテキストの独立したローリング要約を維持します。" + } + }, "addModel": "モデルを追加", "sections": { "configuration": "設定", @@ -2553,7 +2669,14 @@ "diagnostics": "診断" }, "health": { - "status": "未チェック" + "status": "未チェック", + "title": "ヘルスチェック", + "idle": "/v1/models を確認し、小さなチャットリクエストを 1 件送信します。", + "checking": "ローカル vLLM MiniCPM サービスを確認中...", + "checkButton": "接続を確認", + "configureFirst": "先に vLLM MiniCPM アカウントを設定してください。", + "connectedTo": "{{baseUrl}} に接続しました", + "failed": "MiniCPM のヘルスチェックに失敗しました。" }, "benchmark": { "title": "MiniCPM 出力速度", diff --git a/src/i18n/locales/ja/navigation.json b/src/i18n/locales/ja/navigation.json index 0a541d228..ddb877647 100644 --- a/src/i18n/locales/ja/navigation.json +++ b/src/i18n/locales/ja/navigation.json @@ -46,7 +46,8 @@ "projectManager": "Project マネージャー", "diff": "Diff", "colleagues": "同僚", - "terminals": "ターミナル" + "terminals": "ターミナル", + "openSourceRepo": "オープンソースリポジトリ" }, "trajectoryPanel": { "title": "トラジェクトリ", @@ -145,7 +146,9 @@ }, "folderCounts": { "repo": "{{count}} Repo", - "multiRepoWorkspace": "{{count}} マルチ Repo Workspace" + "repo_plural": "{{count}} Repo", + "multiRepoWorkspace": "{{count}} マルチ Repo Workspace", + "multiRepoWorkspace_plural": "{{count}} マルチ Repo Workspace" }, "bottomBar": { "settings": "設定", @@ -333,7 +336,27 @@ "addWorkspace": "Workspace を追加" }, "explore": { - "title": "探す" + "title": "探す", + "search": "検索", + "searching": "検索中...", + "searchPlaceholder": "GitHub リポジトリを検索(例: language:rust tauri)", + "clone": "クローン", + "cloning": "クローン中...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} をクローンしました", + "cloneFailed": "クローンに失敗しました", + "cloneNoTarget": "デフォルトの Workspace フォルダーが設定されていません。設定で指定してください。", + "errorTitle": "検索に失敗しました", + "noResultsTitle": "一致するリポジトリはありません", + "noResultsSubtitle": "別の検索条件または並べ替えをお試しください。", + "resultsCount": "{{total}} 件中 {{shown}} 件のリポジトリ", + "partial": "(一部のみ — 検索がタイムアウトしました)", + "sort": { + "bestMatch": "関連度順", + "stars": "スター数", + "updated": "更新日時順", + "forks": "フォーク数" + } }, "workstation": { "dockFilter": { diff --git a/src/i18n/locales/ja/sessions.json b/src/i18n/locales/ja/sessions.json index b2e207c42..519d53e77 100644 --- a/src/i18n/locales/ja/sessions.json +++ b/src/i18n/locales/ja/sessions.json @@ -94,6 +94,8 @@ "rescanAll": "すべて再スキャン", "rescan": "再スキャン", "rescanning": "再スキャン中…", + "rescanUpdate": "更新", + "rescanClear": "クリアして再スキャン", "enable": "有効化", "disable": "無効化", "lastScan": "最終スキャン {{time}}", @@ -122,6 +124,7 @@ "apps": "アプリ", "clis": "CLI" }, + "sessions_one": "{{count}} 件のセッション", "sessions_other": "{{count}} 件のセッション", "details": { "path": "パス", @@ -197,7 +200,9 @@ "rustAgent": "Rust Agent", "removeDraft": "ドラフトを削除", "showSubagents": "サブエージェントを表示", - "hideSubagents": "サブエージェントを非表示" + "hideSubagents": "サブエージェントを非表示", + "githubIssues": "GitHub Issues", + "githubPrs": "GitHub PR" }, "resultStatus": { "completed": "完了", @@ -352,6 +357,16 @@ "pause": "一時停止", "playbackSpeed": "再生速度", "noEvents": "イベントなし", + "filters": { + "tooltip": "イベントを絞り込む", + "allEvents": "すべてのイベント", + "keyInteractions": "主要なインタラクション", + "fileChanges": "ファイル変更", + "terminalEvents": "ターミナルイベント", + "explore": "探索", + "other": "その他", + "selectedCount": "{{count}} 件のフィルター" + }, "agentHasNotUsedTool": "Agent はまだこのツールを使用していません", "browser": { "tabs": { @@ -440,7 +455,17 @@ "empty": "提出はまだありません", "selectSubmission": "提出を選択して詳細を表示します", "noCommits": "Commits はまだありません", - "noPullRequests": "Pull Requests はまだありません" + "noPullRequests": "Pull Requests はまだありません", + "labels": { + "created": { + "commit": "作成したコミット", + "pullRequest": "作成した PR" + }, + "mentioned": { + "commit": "言及したコミット", + "pullRequest": "言及した PR" + } + } } }, "channelsSidebar": { @@ -720,7 +745,11 @@ "insert": "挿入" }, "compactArgHint": "<任意: 要約の重点>", - "compactCommandDescription": "古いコンテキストを要約して空きを作ります。任意: /compact <要約の重点>" + "compactCommandDescription": "古いコンテキストを要約して空きを作ります。任意: /compact <要約の重点>", + "pr": { + "open": "PR を開く", + "creating": "PR を作成中…" + } }, "listPanel": { "showingOf": "{{total}} 件中 {{filtered}} 件を表示", @@ -733,6 +762,7 @@ "contentCopied": "コンテンツをコピーしました!", "failedToCopyContent": "コンテンツのコピーに失敗しました", "regenerate": "再生成", + "restoreCheckpoint": "チェックポイントを復元", "copyTurn": "ターンをコピー", "exportAsMarkdown": "Markdownとしてエクスポート", "exportSuccess": "セッションをエクスポートしました!", @@ -1919,7 +1949,8 @@ "branchesTouched": "ブランチ" }, "modelPill": { - "immutableInSession": "キーソース、Agent タイプ、料金ティアはセッション開始時に固定されます。変更するには新しいセッションを開始してください。" + "immutableInSession": "キーソース、Agent タイプ、料金ティアはセッション開始時に固定されます。変更するには新しいセッションを開始してください。", + "appliesNextTurn": "アカウントを切り替えました。現在の返信は引き続き以前のアカウントで実行され、新しいアカウントは次のターンから適用されます。" }, "creator": { "createTarget": { @@ -2581,7 +2612,8 @@ "list": { "title": "タスクリストを表示", "count": "{{taskCount}} 件のタスク", - "empty": "タスクなし" + "empty": "タスクなし", + "countLabel": "タスク" }, "statusLabel": "ステータス", "assignedBadge": "割り当て済み", @@ -2623,6 +2655,9 @@ "openFile": "エディタで開く", "openLink": "リンクを開く", "broadcast": "→ 全 Agent", + "session": { + "open": "セッションを開く" + }, "agentMessage": { "fallbackTitle": "メッセージ", "accepted": "承認", @@ -2707,6 +2742,14 @@ "close": "閉じる", "summarize": "Agent で要約", "waiting": "コンテンツを待機中…", - "empty": "コンテンツなし" + "empty": "コンテンツなし", + "reactDisabledTitle": "React プレビューはシミュレーターで実行されます", + "reactDisabledDescription": "Agent の JavaScript はチャット内では実行されません。サンドボックス化された React プレビューを実行するには、シミュレーターで開いてください。", + "viewInSimulator": "シミュレーターで表示" + }, + "canvasApp": { + "empty": "まだキャンバスは表示されていません", + "sidebarTitle": "キャンバス", + "noCanvases": "キャンバスはまだありません" } } diff --git a/src/i18n/locales/ja/settings.json b/src/i18n/locales/ja/settings.json index e6f895c20..94e11e1e3 100644 --- a/src/i18n/locales/ja/settings.json +++ b/src/i18n/locales/ja/settings.json @@ -910,6 +910,15 @@ "diskCategory_screenshots": "ブラウザスクリーンショット", "diskCategory_agentWorktrees": "Agent Session Worktrees", "diskCategory_lspBin": "LSP Server バイナリ", + "diskCategory_toolResults": "大容量ツール結果", + "diskCategory_diagnostics": "診断キュー", + "diskCategory_models": "ダウンロード済みモデル", + "diskCategory_codeMap": "コードマップインデックス", + "diskCategory_semanticIndex": "セマンティック検索インデックス", + "diskCategory_cursorCliProfiles": "Cursor CLI プロファイル", + "diskCategory_kiroCliProfiles": "Kiro CLI プロファイル", + "diskCategory_opencodeCliProfiles": "OpenCode CLI プロファイル", + "diskCategory_sidecarBin": "ダウンロード済み Sidecar バイナリ", "loadZeroRows": "クリックしてさらに {{count}} 件を読み込む" }, "dependencies": { diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index 1c59e98cb..304f9c09f 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -203,7 +203,14 @@ "openWorkspace": "Workspace 열기", "skipThisVersion": "이 버전 건너뛰기", "later": "나중에", - "link": "연결" + "link": "연결", + "openOnGitHub": "GitHub에서 열기", + "createPullRequest": "풀 리퀘스트 만들기", + "newIssue": "새 이슈", + "closeIssue": "이슈 닫기", + "reopenIssue": "이슈 다시 열기", + "addComment": "댓글 추가", + "editIssue": "이슈 편집" }, "refreshToast": { "successName": "{{name}} 새로고침됨", @@ -438,7 +445,26 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", - "committedRate": "커밋됨" + "committedRate": "커밋됨", + "noPullRequestForBranch": "이 브랜치에는 아직 풀 리퀘스트가 없습니다.", + "creatingPullRequest": "만드는 중…", + "failedToLoadPullRequest": "풀 리퀘스트를 불러오지 못했습니다", + "noCommitsInPullRequest": "이 풀 리퀘스트에 커밋이 없습니다", + "prStatus": { + "open": "열림", + "merged": "병합됨", + "closed": "닫힘", + "draft": "초안" + }, + "sendingNow": "지금 전송 중…", + "issues": "이슈", + "noIssues": "이슈 없음", + "openIssues": "열림", + "closedIssues": "닫힘", + "issueComments": "댓글 {{count}}개", + "issueComments_one": "댓글 1개", + "issueComments_other": "댓글 {{count}}개", + "tokens": "토큰" }, "searchModes": { "keywordLabel": "키워드", @@ -795,6 +821,7 @@ }, "placeholders": { "loading": "로딩 중...", + "noResults": "결과 없음", "selectToViewConfig": "{{type}}을(를) 선택하여 보기 또는 설정", "selectToViewConfigSubtitle": "왼쪽 목록에서 항목을 선택하세요", "noOptions": "옵션 없음", @@ -1118,7 +1145,10 @@ "tryHeading": "시도:", "tryCheckConnection": "인터넷 연결 확인", "tryVerifyUrl": "URL이 올바른지 확인", - "tryAgainLater": "나중에 다시 시도" + "tryAgainLater": "나중에 다시 시도", + "embeddedFallbackTitle": "이 사이트는 내장 브라우저에서 작동하지 않을 수 있습니다", + "embeddedFallbackBody": "일부 사이트는 앱 WebView에서 표시를 차단하거나 렌더링에 실패합니다. 페이지가 계속 비어 있으면 시스템 브라우저에서 여세요.", + "currentUrl": "현재 URL" }, "selectRepoFromHome": "Please select a repo from the home page", "cloneRepoAgain": "Please clone the repo again from the home page", @@ -1214,6 +1244,85 @@ "closed": "닫힘", "completed": "완료됨", "notPlanned": "계획 없음" + }, + "title": "이슈", + "loading": "이슈 불러오는 중…", + "empty": "{{state}} 이슈 없음", + "failedToLoad": "이슈를 불러오지 못했습니다", + "failedToCreate": "이슈를 만들지 못했습니다", + "failedToUpdate": "이슈를 업데이트하지 못했습니다", + "failedToComment": "댓글을 추가하지 못했습니다", + "filterAll": "전체", + "filterOpen": "열림", + "filterClosed": "닫힘", + "noGitHubRepo": "이슈를 관리하려면 GitHub 저장소를 연결하세요", + "commentPlaceholder": "댓글 남기기…", + "submitComment": "댓글", + "newIssueTitlePlaceholder": "이슈 제목", + "newIssueBodyPlaceholder": "이슈를 설명하세요(선택 사항)…", + "authRequired": { + "title": "GitHub 연결", + "description": "설정 → 통합 → Git에서 GitHub 계정을 연결하세요." + }, + "reAuthRequired": "GitHub 인증 필요", + "reAuthDescription": "GitHub 토큰이 만료되었습니다. 설정 → 통합 → Git에서 다시 연결하세요.", + "goToSettings": "설정으로 이동" + }, + "pr": { + "title": "풀 리퀘스트", + "baseBranch": "기준", + "noDescription": "설명이 없습니다.", + "loadingConversation": "불러오는 중…", + "reviewNoBody": "리뷰 댓글을 남겼습니다.", + "commentPlaceholder": "댓글 남기기…", + "comment": "댓글", + "approve": "승인", + "requestChanges": "변경 요청", + "reply": "답장", + "replyPlaceholder": "답장…", + "reviewThreads": "리뷰 댓글", + "tabs": { + "conversation": "대화", + "commits": "커밋", + "checks": "검사", + "changes": "변경 사항" + }, + "checks": { + "none": "보고된 검사가 없습니다", + "noneHint": "이 풀 리퀘스트의 최신 커밋에서 실행된 CI 검사나 상태가 없습니다.", + "allPassed": "모든 검사를 통과했습니다", + "someFailed": "일부 검사가 실패했습니다", + "pending": "검사 진행 중" + }, + "commits": { + "backToList": "모든 커밋", + "none": "커밋 없음" + }, + "changes": { + "title": "변경된 파일", + "noFiles": "변경된 파일 없음", + "tooLarge": "파일이 너무 커서 diff를 표시할 수 없습니다", + "unavailable": "변경 사항을 사용할 수 없습니다", + "unavailableHint": "풀 리퀘스트의 기준 커밋과 최신 커밋을 확인할 수 없습니다." + }, + "creating": "풀 리퀘스트 만드는 중…", + "createError": "풀 리퀘스트를 만들지 못했습니다", + "readyHint": "브랜치가 푸시되어 풀 리퀘스트를 만들 준비가 되었습니다", + "neutralHint": "풀 리퀘스트를 만들려면 브랜치를 푸시하세요", + "noBranch": "선택된 브랜치가 없습니다", + "noRepoPath": "사용 가능한 저장소 경로가 없습니다", + "notAuthenticated": "풀 리퀘스트를 만들려면 로그인하세요", + "noOriginRemote": "origin 리모트가 구성되지 않았습니다", + "cannotParseRepoName": "origin 리모트에서 저장소 이름을 확인할 수 없습니다", + "status": { + "open": "열림", + "merged": "병합됨", + "closed": "닫힘", + "draft": "초안" + }, + "authRequired": { + "title": "GitHub 연결", + "description": "설정 → 통합 → Git에서 GitHub 계정을 연결하세요." } } }, @@ -1262,7 +1371,8 @@ "repo": "리포지토리", "systemPaths": "시스템 경로", "usedElsewhere": "다른 곳에서 사용됨", - "workspace": "Workspace" + "workspace": "Workspace", + "recent": "최근" }, "tabs": { "repositories": "저장소", @@ -1804,6 +1914,13 @@ "linesByModel": "모델별 행 수", "completed": "완료", "incomplete": "미완료", + "cost": "비용", + "estimatedCost": "예상 비용", + "estimated": "예상", + "estimatedTooltip": "예상 비용 — 토큰 × 정가(이 소스에는 실제 청구액이 제공되지 않음)", + "totalEstimatedCost": "예상 비용", + "viewCost": "비용", + "viewTokens": "토큰", "tabs": { "overview": "개요", "cursor": "Cursor", @@ -1959,6 +2076,14 @@ }, "sessionFilter": { "allSessions": "모든 세션" + }, + "scope": { + "local": "로컬", + "main": "기본 체크아웃", + "worktrees": "Worktree", + "searchPlaceholder": "Worktree 필터…", + "switchScope": "소스 제어 범위 전환", + "switchScopeActive": "소스 제어 범위 전환: {{repo}}, {{branch}}" } }, "contextInfo": { @@ -1998,7 +2123,27 @@ "manualCompactNoRuntime": "압축하기 전에 메시지를 보내세요", "manualCompactFailed": "압축 실패: {{message}}", "manualCompactChannelAttached": "이 세션은 채널에서 관리됩니다 — 그곳에서 /compact를 사용하세요", - "manualCompactInstructionsPlaceholder": "선택: 요약 시 집중할 내용" + "manualCompactInstructionsPlaceholder": "선택: 요약 시 집중할 내용", + "cacheSaved": "캐시 절감: 읽기 {{read}}, 쓰기 {{write}}", + "remaining": "여유: {{tokens}} 남음", + "cacheHero": "{{pct}}%가 캐시에서 제공됨 · 이번 턴에 약 {{tokens}} 재사용", + "cacheHeroSub": "프롬프트 캐싱으로 비용을 최대 90% 절감할 수 있습니다", + "headroom": "{{tokens}}의 여유 공간 남음", + "compactBoundarySubtitle_one": "이전 메시지 {{count}}개 요약됨", + "manualCompactSectionTitle": "수동 압축", + "miniCpmCompactTitle": "MiniCPM 자동 무음 압축", + "miniCpmCompactDescription": "이전 컨텍스트를 비동기식으로 처리합니다", + "miniCpmCompactToggleAria": "MiniCPM 자동 무음 압축 활성화", + "miniCpmCompactDisabled": "무음 압축이 꺼져 있습니다", + "miniCpmCompactEnabled": "무음 압축이 켜져 있습니다", + "miniCpmCompactRunning": "MiniCPM이 압축 중입니다", + "miniCpmCompactComplete": "압축 완료", + "miniCpmCompactBusy": "현재 세션이 사용 중입니다", + "miniCpmCompactUnavailable": "MiniCPM을 사용할 수 없습니다", + "miniCpmCompactError": "MiniCPM 압축에 실패했습니다", + "miniCpmCompactMetrics": "메시지 {{covered}}개 · {{source}} → {{summary}} 토큰", + "miniCpmCompactAction": "지금 압축", + "miniCpmCompactRunningAction": "압축 중" }, "relativeDate": { "today": "오늘", @@ -2052,7 +2197,8 @@ "statusReadyToCreate": "Workspace 생성 준비 완료", "defaultName": "Workspace", "defaultNameWithRepo": "{{repo}} Workspace", - "windowTitle": "Workspace" + "windowTitle": "Workspace", + "statusMaxRepos": "최대 5개의 Repo를 선택할 수 있습니다" }, "database": { "addConnection": "Add Database Connection", @@ -2266,11 +2412,57 @@ "previewAlt": "미리보기" }, "update": { + "available": "업데이트가 있습니다", + "versionReady": "버전 {{version}}을(를) 다운로드할 수 있습니다.", + "upToDateVersion": "ORGII가 최신 상태입니다 (v{{version}}).", + "upToDate": "ORGII가 최신 상태입니다.", + "checkFailed": "업데이트 확인에 실패했습니다", + "checking": "업데이트 확인 중…", "downloading": "업데이트 다운로드 중", + "downloadingEllipsis": "업데이트 다운로드 중…", + "downloadingWithSize": "업데이트 다운로드 중 ({{size}})…", + "downloadingDownloaded": "업데이트 다운로드 중… {{downloaded}}", + "downloadingPercent": "업데이트 다운로드 중… {{percent}}%", "installing": "업데이트 설치 중", + "installingEllipsis": "업데이트 설치 중…", + "installed": "업데이트가 설치되었습니다", + "installFailed": "업데이트 설치에 실패했습니다", + "downloadTimedOut": "다운로드 시간이 초과되었습니다. 네트워크 또는 프록시를 확인한 후 다시 시도하세요.", + "restarting": "업데이트를 완료하기 위해 ORGII를 다시 시작합니다.", + "preparingVersion": "v{{version}} 다운로드 준비 중…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} / {{total}}", "preparingDownload": "다운로드 준비 중…", "downloadingAndInstalling": "업데이트 다운로드 및 설치 중 (v{{version}})…" + }, + "sqlEditor": { + "placeholder": "SQL 쿼리를 입력하세요...", + "format": "서식 지정", + "runQueryToSeeResults": "결과를 보려면 쿼리를 실행하세요", + "executingQuery": "쿼리 실행 중...", + "queryFailed": "쿼리 실행 실패", + "queryCompleted": "쿼리 실행 완료", + "noResults": "쿼리 결과가 없습니다", + "rowCount_one": "{{count}}개 행", + "rowCount_other": "{{count}}개 행", + "press": "누르기", + "toRun": "실행", + "nullValue": "NULL", + "booleanTrue": "참", + "booleanFalse": "거짓" + }, + "uploadZone": { + "clickOrDrag": "업로드할 파일을 클릭하거나 이 영역으로 끌어다 놓으세요", + "supportFormats": "지원 형식: {{accept}}" + }, + "chatImage": { + "maxReached": "이미지는 최대 {{max}}개까지 허용됩니다", + "remainingWarning": "이미지를 {{remaining}}개만 더 추가할 수 있습니다(최대 {{max}}개)", + "processFailed": "이미지를 처리하지 못했습니다", + "loadFailed": "이미지를 불러오지 못했습니다: {{fileName}}" + }, + "codeViewer": { + "original": "변경 전", + "modified": "변경 후" } } diff --git a/src/i18n/locales/ko/integrations.json b/src/i18n/locales/ko/integrations.json index a923d0e89..2c49278b8 100644 --- a/src/i18n/locales/ko/integrations.json +++ b/src/i18n/locales/ko/integrations.json @@ -24,6 +24,8 @@ "unlist": "목록에서 제거", "confirmRemoveTitle": "\"{{name}}\"을(를) 제거하시겠습니까?", "confirmRemoveMessage": "로컬 자격 증명이 제거됩니다. 이 작업은 되돌릴 수 없습니다.", + "confirmRemoveActiveSessions_one": "활성 세션 {{count}}개가 아직 이 계정을 사용하고 있으며 다음 턴에 실패합니다:", + "confirmRemoveActiveSessions_other": "활성 세션 {{count}}개가 아직 이 계정을 사용하고 있으며 다음 턴에 실패합니다:", "confirmUnlistTitle": "\"{{name}}\"을(를) 목록에서 제거하시겠습니까?", "confirmUnlistMessage": "마켓플레이스에서 목록이 제거됩니다. 로컬 자격 증명은 유지됩니다.", "confirmDeleteTitle": "\"{{name}}\"을(를) 삭제하시겠습니까?", @@ -32,14 +34,17 @@ "refreshed": "{{name}} 새로고침 완료", "refreshFailed": "{{name}} 검증 실패 - 자격 증명을 확인하세요", "allRefreshed": "모든 계정 새로고침 완료", - "refreshError": "{{name}} 새로고침 실패", + "refreshError": "{{name}} 새로고침 실패: {{error}}", "localRemoved": "{{name}} 제거됨", "unlistPending": "{{name}} 목록 해제 요청됨. 활성 Session 종료 후 제거됩니다.", "listingRemoved": "{{name}} 마켓플레이스에서 제거됨", "listingDeleted": "{{name}} 삭제됨", "deleteError": "{{name}} 삭제 실패", "published": "{{name}} 마켓플레이스에 게시됨", - "publishError": "{{name}} 게시 실패" + "publishError": "{{name}} 게시 실패", + "refreshedDelta": "모델 새로고침 완료: +{{added}}개 추가, -{{removed}}개 제거", + "refreshedNoChange": "모델 새로고침 완료 — 변경 사항 없음", + "refreshPartial": "모델을 새로고침했지만(+{{added}} / -{{removed}}) 계정 {{total}}개 중 {{failed}}개에서 실패했습니다" }, "configure": "{{provider}} 구성", "providerGroups": { @@ -1028,7 +1033,8 @@ "tools": "기본 제공 도구", "computerUse": "Computer Use", "rulesMemoryEvolution": "규칙, 메모리 & 진화", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "MiniCPM 하우스키퍼" }, "projectConnections": { "linear": "Linear", @@ -1338,7 +1344,9 @@ "oauthDeviceCodeDesc": "아래 URL을 열고 이 코드를 입력하세요", "oauthOpenGithub": "GitHub 열기", "oauthCancel": "취소", - "oauthFailed": "인증 실패" + "oauthFailed": "인증 실패", + "autoCreatePr": "풀 리퀘스트 자동 생성", + "autoCreatePrDesc": "기능 브랜치가 완전히 푸시되고 변경 사항이 없으면 Workstation 소스 제어에서 풀 리퀘스트를 자동으로 만듭니다" }, "skillsHub": { "title": "Skills Hub", @@ -1677,6 +1685,35 @@ "tokenCount": "~{{count}} Token", "emptyConfigPreview": "설정 내용이 없습니다" }, + "cliManagedConfig": { + "title": "CLI 설정 전환", + "modeLabel": "모드", + "modeDesc": "기본 모드는 CLI 자체 설정을 복원합니다. ORGII 관리 모드는 백업된 프록시 설정을 기록합니다.", + "modeDefault": "기본", + "modeOrgii": "ORGII 관리", + "conflict": "외부 변경", + "conflictTitle": "충돌", + "conflictDesc": "ORGII가 기록한 후 활성 CLI 설정이 변경되었습니다.", + "proxyStatus": "프록시", + "proxyDefault": "기본 모드", + "proxyReady": "프록시 준비됨", + "proxyNotReady": "프록시 준비 안 됨", + "proxyDesc": "로컬 요청은 ORGII KeyVault를 통해 라우팅됩니다.", + "keyLabel": "키", + "keyDesc": "이 CLI 및 관리형 프록시와 호환되는 API 키만 표시됩니다.", + "selectKey": "키 선택", + "modelLabel": "모델", + "selectModel": "모델 선택", + "configFile": "설정 파일", + "actions": "작업", + "addKey": "키 추가", + "apply": "적용", + "restore": "기본값 복원", + "forceApply": "강제 적용", + "forceRestore": "강제 복원", + "applySuccess": "ORGII 관리 설정을 적용했습니다", + "restoreSuccess": "기본 설정을 복원했습니다" + }, "codexConfig": { "sectionTitle": "설정", "model": "모델", @@ -2356,6 +2393,39 @@ "connectionNamePlaceholder": "자동: {{provider}}" } }, + "gitProfiles": { + "tab": "Git 프로필", + "title": "Git 프로필", + "add": "프로필 추가", + "refresh": "프로필 새로고침", + "refreshed": "전역 Git 프로필을 새로고침했습니다", + "loading": "전역 Git 프로필 불러오는 중…", + "defaultProfile": "기본 프로필", + "newProfile": "새 프로필", + "copyName": "{{name}} 복사본", + "profileName": "프로필 이름", + "authorName": "작성자 이름", + "email": "이메일", + "selectEmail": "이메일 선택", + "signingKey": "서명 키", + "signingKeyPlaceholder": "GPG 또는 SSH 서명 키 ID", + "signCommits": "커밋 서명", + "active": "활성", + "activate": "프로필 활성화", + "activated": "{{name}}이(가) 전역 Git 프로필로 설정되었습니다", + "editRaw": "원시 설정 편집", + "hideRaw": "원시 설정 숨기기", + "rawTitle": "원시 Git 프로필", + "rawConfig": "Git 설정", + "updateFromRaw": "설정에서 프로필 업데이트", + "rawUpdated": "원시 Git 설정에서 프로필을 업데이트했습니다", + "rawInvalid": "원시 Git 프로필이 유효하지 않습니다", + "nameEmailRequired": "작성자 이름과 이메일이 필요합니다", + "deleteTitle": "Git 프로필 삭제", + "deleteMessage": "“{{name}}” 프로필을 삭제하시겠습니까? 현재 전역 Git 설정은 변경되지 않습니다.", + "loadFailed": "전역 Git 프로필을 불러오지 못했습니다", + "applyFailed": "Git 프로필을 활성화하지 못했습니다" + }, "devTools": { "mode": "모드", "modeUi": "UI 미리보기", @@ -2391,7 +2461,8 @@ "queuedMessages": "대기 메시지", "fileReview": "파일 검토", "terminalProcesses": "터미널 프로세스", - "workspaceMemory": "Workspace 메모리" + "workspaceMemory": "Workspace 메모리", + "modeSessionLink": "세션 링크" }, "rulesTabs": { "rules": "규칙", @@ -2544,13 +2615,65 @@ }, "housekeeper": { "addModel": "모델 추가", + "eyebrow": "MiniCPM 상주 하우스키퍼", + "title": "상주 하우스키퍼", + "description": "로컬 MiniCPM이 프롬프트 다듬기, 짧은 단계 설명, 가벼운 UI 제어를 담당합니다. 코딩 작업과 복잡한 ADE 설정에는 계속 기본 Agent 모델을 사용합니다.", + "autoAccount": "MiniCPM vLLM 계정 자동 선택", + "tiles": { + "model": "모델", + "endpoint": "엔드포인트", + "safeContext": "안전 컨텍스트" + }, + "settings": { + "enabled": { + "title": "하우스키퍼 활성화", + "description": "비활성화하면 프롬프트 다듬기, 단계 설명, 가벼운 UI 제어에 MiniCPM을 사용하지 않습니다." + }, + "account": { + "title": "vLLM MiniCPM 계정", + "description": "기존 KeyVault vllm_api 계정을 재사용하며 별도의 자격 증명 저장소를 만들지 않습니다." + }, + "model": { + "title": "모델 ID", + "description": "Docker vLLM MiniCPM5-1B의 기본값은 openbmb/MiniCPM5-1B입니다." + }, + "context": { + "title": "안전 컨텍스트 예산", + "description": "4GB GPU에서는 이론적인 32k 한도 대신 보수적인 10000 토큰 예산을 사용합니다." + } + }, + "features": { + "promptPolish": { + "title": "프롬프트 다듬기", + "description": "더 강력한 코딩 모델에 보내기 전에 입력을 수동으로 다듬습니다." + }, + "stepExplain": { + "title": "Agent 단계 설명", + "description": "세션 재생 단계에 대한 짧은 한국어 설명을 한두 문장으로 생성합니다." + }, + "uiControl": { + "title": "가벼운 ADE/UI 제어", + "description": "MiniCPM은 요청을 엄격한 로컬 작업 허용 목록으로만 분류할 수 있습니다." + }, + "contextCompact": { + "title": "자동 컨텍스트 관리", + "description": "활성화된 세션이 유휴 상태일 때 MiniCPM이 이전 컨텍스트의 독립적인 롤링 요약을 관리합니다." + } + }, "sections": { "configuration": "Configuration", "features": "Features", "diagnostics": "Diagnostics" }, "health": { - "status": "Not checked" + "status": "Not checked", + "title": "상태 확인", + "idle": "/v1/models를 확인하고 작은 채팅 요청 하나를 보냅니다.", + "checking": "로컬 vLLM MiniCPM 서비스 확인 중...", + "checkButton": "연결 확인", + "configureFirst": "먼저 vLLM MiniCPM 계정을 구성하세요.", + "connectedTo": "{{baseUrl}}에 연결됨", + "failed": "MiniCPM 상태 확인에 실패했습니다." }, "benchmark": { "title": "MiniCPM output speed", diff --git a/src/i18n/locales/ko/navigation.json b/src/i18n/locales/ko/navigation.json index 8354aadb1..6164a0b70 100644 --- a/src/i18n/locales/ko/navigation.json +++ b/src/i18n/locales/ko/navigation.json @@ -46,7 +46,8 @@ "projectManager": "Project 관리자", "diff": "Diff", "colleagues": "Colleagues", - "terminals": "터미널" + "terminals": "터미널", + "openSourceRepo": "오픈 소스 저장소 열기" }, "trajectoryPanel": { "title": "트래젝터리", @@ -145,7 +146,9 @@ }, "folderCounts": { "repo": "{{count}}개 Repo", - "multiRepoWorkspace": "{{count}}개 멀티 Repo Workspace" + "repo_plural": "{{count}}개 Repo", + "multiRepoWorkspace": "{{count}}개 멀티 Repo Workspace", + "multiRepoWorkspace_plural": "{{count}}개 멀티 Repo Workspace" }, "bottomBar": { "settings": "설정", @@ -332,9 +335,6 @@ }, "addWorkspace": "Workspace 추가" }, - "explore": { - "title": "탐색" - }, "workstation": { "dockFilter": { "all": "모든 탭", @@ -363,6 +363,29 @@ "projects": "프로젝트" } }, + "explore": { + "title": "탐색", + "search": "검색", + "searching": "검색 중...", + "searchPlaceholder": "GitHub 저장소 검색(예: language:rust tauri)", + "clone": "클론", + "cloning": "클론 중...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} 클론 완료", + "cloneFailed": "클론 실패", + "cloneNoTarget": "기본 Workspace 폴더가 구성되지 않았습니다. 설정에서 지정하세요.", + "errorTitle": "검색 실패", + "noResultsTitle": "일치하는 저장소가 없습니다", + "noResultsSubtitle": "다른 검색어나 정렬 방식을 시도하세요.", + "resultsCount": "저장소 {{total}}개 중 {{shown}}개", + "partial": "(일부만 표시 — 검색 시간 초과)", + "sort": { + "bestMatch": "관련도순", + "stars": "스타 수", + "updated": "최근 업데이트순", + "forks": "포크 수" + } + }, "changelog": { "title": "Changelog", "subtitle": "제품 업데이트", diff --git a/src/i18n/locales/ko/sessions.json b/src/i18n/locales/ko/sessions.json index 31161057d..60f35dda0 100644 --- a/src/i18n/locales/ko/sessions.json +++ b/src/i18n/locales/ko/sessions.json @@ -93,6 +93,8 @@ "description": "ORGII가 감지하는 외부 코딩 도구입니다. 가져올 수 있는 앱은 세션 수를 표시하고 다시 스캔할 수 있으며, 나머지는 설치 상태와 기록 위치를 표시합니다.", "rescanAll": "모두 다시 스캔", "rescan": "다시 스캔", + "rescanUpdate": "업데이트", + "rescanClear": "지우고 다시 스캔", "rescanning": "다시 스캔 중…", "enable": "사용", "disable": "사용 안 함", @@ -122,6 +124,7 @@ "apps": "앱", "clis": "CLI" }, + "sessions_one": "{{count}}개 세션", "sessions_other": "{{count}}개 세션", "details": { "path": "경로", @@ -197,7 +200,9 @@ "rustAgent": "Rust Agent", "removeDraft": "초안 제거", "showSubagents": "하위 에이전트 표시", - "hideSubagents": "하위 에이전트 숨기기" + "hideSubagents": "하위 에이전트 숨기기", + "githubIssues": "GitHub 이슈", + "githubPrs": "GitHub PR" }, "resultStatus": { "completed": "완료", @@ -353,6 +358,16 @@ "playbackSpeed": "재생 속도", "noEvents": "이벤트 없음", "agentHasNotUsedTool": "Agent가 아직 이 도구를 사용하지 않았습니다", + "filters": { + "tooltip": "이벤트 필터", + "allEvents": "모든 이벤트", + "keyInteractions": "주요 상호작용", + "fileChanges": "파일 변경", + "terminalEvents": "터미널 이벤트", + "explore": "탐색", + "other": "기타", + "selectedCount": "필터 {{count}}개" + }, "browser": { "tabs": { "browser": "브라우저", @@ -440,7 +455,17 @@ "empty": "아직 제출이 없습니다", "selectSubmission": "세부 정보를 보려면 제출을 선택하세요", "noCommits": "아직 Commits가 없습니다", - "noPullRequests": "아직 Pull Requests가 없습니다" + "noPullRequests": "아직 Pull Requests가 없습니다", + "labels": { + "created": { + "commit": "생성한 커밋", + "pullRequest": "생성한 PR" + }, + "mentioned": { + "commit": "언급한 커밋", + "pullRequest": "언급한 PR" + } + } } }, "channelsSidebar": { @@ -720,7 +745,11 @@ "insert": "삽입" }, "compactArgHint": "<선택: 요약의 초점>", - "compactCommandDescription": "이전 컨텍스트를 요약해 공간을 확보합니다. 선택: /compact <요약의 초점>" + "compactCommandDescription": "이전 컨텍스트를 요약해 공간을 확보합니다. 선택: /compact <요약의 초점>", + "pr": { + "open": "PR 열기", + "creating": "PR 만드는 중…" + } }, "listPanel": { "showingOf": "{{total}}개 중 {{filtered}}개 표시", @@ -739,6 +768,7 @@ "exportFailed": "내보내기 실패", "activities": "활동", "findInChat": "채팅에서 검색", + "restoreCheckpoint": "체크포인트 복원", "searchKeysOrValues": "keys 또는 values 검색...", "replyToQuestion": "질문에 답변", "workspaceIsWorking": "워크스페이스가 작동 중입니다!", @@ -1919,7 +1949,8 @@ "branchesTouched": "브랜치" }, "modelPill": { - "immutableInSession": "키 소스, Agent 유형 및 가격 티어는 세션 시작 시 고정됩니다. 변경하려면 새 세션을 시작하세요." + "immutableInSession": "키 소스, Agent 유형 및 가격 티어는 세션 시작 시 고정됩니다. 변경하려면 새 세션을 시작하세요.", + "appliesNextTurn": "계정이 전환되었습니다. 현재 응답은 이전 계정에서 계속 실행되며 새 계정은 다음 턴부터 적용됩니다." }, "creator": { "createTarget": { @@ -2582,6 +2613,7 @@ "list": { "title": "작업 목록 보기", "count": "{{taskCount}}개 작업", + "countLabel": "작업", "empty": "작업 없음" }, "statusLabel": "상태", @@ -2623,6 +2655,9 @@ "cards": { "openFile": "에디터에서 열기", "openLink": "링크 열기", + "session": { + "open": "세션 열기" + }, "broadcast": "→ 모든 Agent", "agentMessage": { "fallbackTitle": "메시지", @@ -2708,6 +2743,14 @@ "close": "닫기", "summarize": "Agent로 요약", "waiting": "콘텐츠 대기 중…", - "empty": "콘텐츠 없음" + "empty": "콘텐츠 없음", + "reactDisabledTitle": "React 미리보기는 Simulator에서 실행됩니다", + "reactDisabledDescription": "Agent JavaScript는 채팅 안에서 실행되지 않습니다. 샌드박스 React 미리보기를 실행하려면 Simulator에서 여세요.", + "viewInSimulator": "Simulator에서 보기" + }, + "canvasApp": { + "empty": "아직 렌더링된 캔버스가 없습니다", + "sidebarTitle": "캔버스", + "noCanvases": "아직 캔버스가 없습니다" } } diff --git a/src/i18n/locales/ko/settings.json b/src/i18n/locales/ko/settings.json index 45b337853..c8e129bbc 100644 --- a/src/i18n/locales/ko/settings.json +++ b/src/i18n/locales/ko/settings.json @@ -890,6 +890,15 @@ "diskCategory_personalWorkspace": "OS Agent 워크스페이스", "diskCategory_cursorConfig": "Session CLI 설정", "diskCategory_extensions": "확장", + "diskCategory_toolResults": "대용량 도구 결과", + "diskCategory_diagnostics": "진단 대기열", + "diskCategory_models": "다운로드한 모델", + "diskCategory_codeMap": "코드 맵 인덱스", + "diskCategory_semanticIndex": "시맨틱 검색 인덱스", + "diskCategory_cursorCliProfiles": "Cursor CLI 프로필", + "diskCategory_kiroCliProfiles": "Kiro CLI 프로필", + "diskCategory_opencodeCliProfiles": "OpenCode CLI 프로필", + "diskCategory_sidecarBin": "다운로드한 Sidecar 바이너리", "diskNotScanned": "아직 스캔되지 않음", "diskScanning": "스캔 중...", "tableDetail": "Detail", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index 8075e657c..13ac1a17a 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -203,7 +203,14 @@ "openWorkspace": "Otwórz Workspace", "skipThisVersion": "Pomiń tę wersję", "later": "Później", - "link": "Połącz" + "link": "Połącz", + "openOnGitHub": "Otwórz na GitHubie", + "createPullRequest": "Utwórz pull request", + "newIssue": "Nowe zgłoszenie", + "closeIssue": "Zamknij zgłoszenie", + "reopenIssue": "Otwórz zgłoszenie ponownie", + "addComment": "Dodaj komentarz", + "editIssue": "Edytuj zgłoszenie" }, "refreshToast": { "successName": "Odświeżono: {{name}}", @@ -438,7 +445,26 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", - "committedRate": "Scommitowane" + "committedRate": "Scommitowane", + "noPullRequestForBranch": "Dla tej gałęzi nie ma jeszcze pull requesta.", + "creatingPullRequest": "Tworzenie…", + "failedToLoadPullRequest": "Nie udało się załadować pull requesta", + "noCommitsInPullRequest": "Brak commitów w tym pull requeście", + "prStatus": { + "open": "Otwarty", + "merged": "Scalony", + "closed": "Zamknięty", + "draft": "Wersja robocza" + }, + "sendingNow": "wysyłanie teraz…", + "issues": "Zgłoszenia", + "noIssues": "Brak zgłoszeń", + "openIssues": "Otwarte", + "closedIssues": "Zamknięte", + "issueComments": "{{count}} komentarz", + "issueComments_one": "1 komentarz", + "issueComments_other": "{{count}} komentarzy", + "tokens": "Tokeny" }, "searchModes": { "keywordLabel": "Słowo kluczowe", @@ -795,6 +821,7 @@ }, "placeholders": { "loading": "Ładowanie...", + "noResults": "Brak wyników", "selectToViewConfig": "Wybierz {{type}}, aby wyświetlić lub skonfigurować", "selectToViewConfigSubtitle": "Wybierz element z listy po lewej", "noOptions": "Brak opcji", @@ -1117,7 +1144,10 @@ "tryHeading": "Spróbuj:", "tryCheckConnection": "Sprawdzić połączenie internetowe", "tryVerifyUrl": "Zweryfikować poprawność URL", - "tryAgainLater": "Spróbować ponownie później" + "tryAgainLater": "Spróbować ponownie później", + "embeddedFallbackTitle": "Ta witryna może nie działać we wbudowanej przeglądarce", + "embeddedFallbackBody": "Niektóre witryny blokują wyświetlanie w widokach WebView aplikacji lub nie renderują się w nich poprawnie. Jeśli strona pozostaje pusta, otwórz ją w przeglądarce systemowej.", + "currentUrl": "Bieżący URL" }, "selectRepoFromHome": "Wybierz Repo ze strony głównej", "cloneRepoAgain": "Sklonuj Repo ponownie ze strony głównej", @@ -1202,6 +1232,63 @@ "copySha": "Kopiuj SHA", "shaCopied": "SHA skopiowano do schowka" }, + "pr": { + "title": "Pull request", + "baseBranch": "gałąź bazowa", + "noDescription": "Nie podano opisu.", + "loadingConversation": "Ładowanie…", + "reviewNoBody": "Dodano komentarze do przeglądu.", + "commentPlaceholder": "Dodaj komentarz…", + "comment": "Skomentuj", + "approve": "Zatwierdź", + "requestChanges": "Poproś o zmiany", + "reply": "Odpowiedz", + "replyPlaceholder": "Odpowiedz…", + "reviewThreads": "Komentarze z przeglądu", + "tabs": { + "conversation": "Dyskusja", + "commits": "Commity", + "checks": "Kontrole", + "changes": "Zmiany" + }, + "checks": { + "none": "Brak zgłoszonych kontroli", + "noneHint": "Dla commita HEAD tego pull requesta nie uruchomiono kontroli CI ani statusów.", + "allPassed": "Wszystkie kontrole zakończone pomyślnie", + "someFailed": "Niektóre kontrole zakończyły się niepowodzeniem", + "pending": "Kontrole w toku" + }, + "commits": { + "backToList": "Wszystkie commity", + "none": "Brak commitów" + }, + "changes": { + "title": "Zmienione pliki", + "noFiles": "Brak zmian w plikach", + "tooLarge": "Plik jest zbyt duży, aby wyświetlić diff", + "unavailable": "Zmiany niedostępne", + "unavailableHint": "Nie udało się ustalić commitów bazowego i końcowego pull requesta." + }, + "creating": "Tworzenie pull requesta…", + "createError": "Nie udało się utworzyć pull requesta", + "readyHint": "Gałąź została wypchnięta i jest gotowa do utworzenia pull requesta", + "neutralHint": "Wypchnij gałąź, aby utworzyć pull request", + "noBranch": "Nie wybrano gałęzi", + "noRepoPath": "Ścieżka repozytorium jest niedostępna", + "notAuthenticated": "Zaloguj się, aby tworzyć pull requesty", + "noOriginRemote": "Nie skonfigurowano zdalnego repozytorium origin", + "cannotParseRepoName": "Nie udało się odczytać nazwy repozytorium ze zdalnego origin", + "status": { + "open": "Otwarty", + "merged": "Scalony", + "closed": "Zamknięty", + "draft": "Wersja robocza" + }, + "authRequired": { + "title": "Połącz z GitHubem", + "description": "Przejdź do Ustawienia → Integracje → Git, aby połączyć konto GitHub." + } + }, "issues": { "updated": "Ostatnia aktualizacja", "notUpdated": "niezaktualizowane", @@ -1213,7 +1300,29 @@ "closed": "Zamknięte", "completed": "Ukończone", "notPlanned": "Nieplanowane" - } + }, + "title": "Zgłoszenia", + "loading": "Ładowanie zgłoszeń…", + "empty": "Brak zgłoszeń: {{state}}", + "failedToLoad": "Nie udało się załadować zgłoszeń", + "failedToCreate": "Nie udało się utworzyć zgłoszenia", + "failedToUpdate": "Nie udało się zaktualizować zgłoszenia", + "failedToComment": "Nie udało się dodać komentarza", + "filterAll": "Wszystkie", + "filterOpen": "Otwarte", + "filterClosed": "Zamknięte", + "noGitHubRepo": "Połącz repozytorium GitHub, aby zarządzać zgłoszeniami", + "commentPlaceholder": "Dodaj komentarz…", + "submitComment": "Skomentuj", + "newIssueTitlePlaceholder": "Tytuł zgłoszenia", + "newIssueBodyPlaceholder": "Opisz zgłoszenie (opcjonalnie)…", + "authRequired": { + "title": "Połącz z GitHubem", + "description": "Przejdź do Ustawienia → Integracje → Git, aby połączyć konto GitHub." + }, + "reAuthRequired": "Wymagana autoryzacja GitHub", + "reAuthDescription": "Token GitHub wygasł. Przejdź do Ustawienia → Integracje → Git, aby ponownie nawiązać połączenie.", + "goToSettings": "Przejdź do ustawień" } }, "selectors": { @@ -1261,7 +1370,8 @@ "repo": "Repozytoria", "systemPaths": "Ścieżki systemowe", "usedElsewhere": "Używane gdzie indziej", - "workspace": "Workspace" + "workspace": "Workspace", + "recent": "Ostatnie" }, "tabs": { "repositories": "Repozytoria", @@ -1800,6 +1910,13 @@ "linesByModel": "Linie według modelu", "completed": "Ukończone", "incomplete": "Nieukończone", + "cost": "Koszt", + "estimatedCost": "Szac. koszt", + "estimated": "SZAC.", + "estimatedTooltip": "Szacowany koszt — tokeny × cena katalogowa (dla tego źródła nie są naliczane opłaty według zużycia)", + "totalEstimatedCost": "Szac. koszt", + "viewCost": "Koszt", + "viewTokens": "Tokeny", "tabs": { "overview": "Przegląd", "cursor": "Cursor", @@ -1955,6 +2072,14 @@ }, "sessionFilter": { "allSessions": "Wszystkie sesje" + }, + "scope": { + "local": "Lokalne", + "main": "Główny checkout", + "worktrees": "Worktree", + "searchPlaceholder": "Filtruj worktree…", + "switchScope": "Zmień zakres kontroli źródła", + "switchScopeActive": "Zmień zakres kontroli źródła: {{repo}}, {{branch}}" } }, "contextInfo": { @@ -1997,7 +2122,26 @@ "manualCompactNoRuntime": "Wyślij wiadomość przed kompaktowaniem", "manualCompactFailed": "Kompaktowanie nie powiodło się: {{message}}", "manualCompactChannelAttached": "Ta sesja jest zarządzana przez kanał — użyj tam /compact", - "manualCompactInstructionsPlaceholder": "Opcjonalnie: na czym skupić podsumowanie" + "manualCompactInstructionsPlaceholder": "Opcjonalnie: na czym skupić podsumowanie", + "cacheSaved": "Oszczędność dzięki pamięci podręcznej: odczyt {{read}}, zapis {{write}}", + "remaining": "Wolne: pozostało {{tokens}}", + "cacheHero": "{{pct}}% obsłużono z pamięci podręcznej · ~{{tokens}} użyto ponownie w tej turze", + "cacheHeroSub": "Buforowanie promptów może obniżyć koszt nawet o 90%", + "headroom": "Pozostałe miejsce: {{tokens}}", + "manualCompactSectionTitle": "Kompaktowanie ręczne", + "miniCpmCompactTitle": "Ciche automatyczne kompaktowanie MiniCPM", + "miniCpmCompactDescription": "Przetwarza starszy kontekst asynchronicznie", + "miniCpmCompactToggleAria": "Włącz ciche automatyczne kompaktowanie MiniCPM", + "miniCpmCompactDisabled": "Ciche kompaktowanie jest wyłączone", + "miniCpmCompactEnabled": "Ciche kompaktowanie jest włączone", + "miniCpmCompactRunning": "MiniCPM kompaktuje kontekst", + "miniCpmCompactComplete": "Kompaktowanie zakończone", + "miniCpmCompactBusy": "Bieżąca sesja jest zajęta", + "miniCpmCompactUnavailable": "MiniCPM jest niedostępny", + "miniCpmCompactError": "Kompaktowanie MiniCPM nie powiodło się", + "miniCpmCompactMetrics": "{{covered}} wiadomości · {{source}} → {{summary}} tokenów", + "miniCpmCompactAction": "Kompaktuj teraz", + "miniCpmCompactRunningAction": "Kompaktowanie" }, "relativeDate": { "today": "Dzisiaj", @@ -2051,7 +2195,8 @@ "statusReadyToCreate": "Gotowy do utworzenia Workspace", "defaultName": "Workspace", "defaultNameWithRepo": "Workspace {{repo}}", - "windowTitle": "Workspace" + "windowTitle": "Workspace", + "statusMaxRepos": "Można wybrać maksymalnie 5 repozytoriów" }, "database": { "addConnection": "Dodaj połączenie bazy danych", @@ -2264,12 +2409,58 @@ "copiedToClipboard": "Obraz skopiowano do schowka", "previewAlt": "Podgląd" }, + "sqlEditor": { + "placeholder": "Wprowadź zapytanie SQL...", + "format": "Formatuj", + "runQueryToSeeResults": "Uruchom zapytanie, aby zobaczyć wyniki", + "executingQuery": "Wykonywanie zapytania...", + "queryFailed": "Zapytanie nie powiodło się", + "queryCompleted": "Zapytanie wykonane", + "noResults": "Zapytanie nie zwróciło wyników", + "rowCount_one": "{{count}} wiersz", + "rowCount_other": "{{count}} wierszy", + "press": "Naciśnij", + "toRun": "aby uruchomić", + "nullValue": "NULL", + "booleanTrue": "prawda", + "booleanFalse": "fałsz" + }, + "uploadZone": { + "clickOrDrag": "Kliknij lub przeciągnij plik w to miejsce, aby go przesłać", + "supportFormats": "Obsługiwane formaty: {{accept}}" + }, + "chatImage": { + "maxReached": "Maksymalna liczba obrazów: {{max}}", + "remainingWarning": "Można dodać jeszcze tylko {{remaining}} obrazów (maks. {{max}})", + "processFailed": "Nie udało się przetworzyć obrazu", + "loadFailed": "Nie udało się załadować obrazu: {{fileName}}" + }, "update": { + "available": "Dostępna aktualizacja", + "versionReady": "Wersja {{version}} jest gotowa do pobrania.", + "upToDateVersion": "ORGII jest aktualne (v{{version}}).", + "upToDate": "ORGII jest aktualne.", + "checkFailed": "Nie udało się sprawdzić aktualizacji", + "checking": "Sprawdzanie aktualizacji…", "downloading": "Pobieranie aktualizacji", + "downloadingEllipsis": "Pobieranie aktualizacji…", + "downloadingWithSize": "Pobieranie aktualizacji ({{size}})…", + "downloadingDownloaded": "Pobieranie aktualizacji… {{downloaded}}", + "downloadingPercent": "Pobieranie aktualizacji… {{percent}}%", "installing": "Instalowanie aktualizacji", + "installingEllipsis": "Instalowanie aktualizacji…", + "installed": "Aktualizacja zainstalowana", + "installFailed": "Nie udało się zainstalować aktualizacji", + "downloadTimedOut": "Przekroczono limit czasu pobierania. Sprawdź sieć lub serwer proxy i spróbuj ponownie.", + "restarting": "Ponowne uruchamianie ORGII w celu ukończenia aktualizacji.", + "preparingVersion": "Przygotowywanie pobierania wersji v{{version}}…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} z {{total}}", "preparingDownload": "Przygotowywanie pobierania…", "downloadingAndInstalling": "Pobieranie i instalowanie aktualizacji (v{{version}})…" + }, + "codeViewer": { + "original": "Oryginał", + "modified": "Zmodyfikowany" } } diff --git a/src/i18n/locales/pl/integrations.json b/src/i18n/locales/pl/integrations.json index 2a171865e..ec8ae7525 100644 --- a/src/i18n/locales/pl/integrations.json +++ b/src/i18n/locales/pl/integrations.json @@ -25,6 +25,8 @@ "unlist": "Wycofaj z listy", "confirmRemoveTitle": "Usunąć „{{name}}”?", "confirmRemoveMessage": "To usunie lokalnie zapisany klucz. Tej operacji nie można cofnąć.", + "confirmRemoveActiveSessions_one": "{{count}} aktywna sesja nadal używa tego konta i zakończy się niepowodzeniem przy następnej turze:", + "confirmRemoveActiveSessions_other": "{{count}} aktywnych sesji nadal używa tego konta i zakończy się niepowodzeniem przy następnej turze:", "confirmUnlistTitle": "Wycofać „{{name}}” z listy?", "confirmUnlistMessage": "To usunie ofertę z marketplace. Lokalny klucz zostanie zachowany.", "confirmDeleteTitle": "Usunąć „{{name}}”?", @@ -33,14 +35,17 @@ "refreshed": "{{name}} odświeżono pomyślnie", "refreshFailed": "Walidacja {{name}} nie powiodła się — sprawdź swoje klucze", "allRefreshed": "Wszystkie konta odświeżone", - "refreshError": "Nie udało się odświeżyć {{name}}", + "refreshError": "Nie udało się odświeżyć {{name}}: {{error}}", "localRemoved": "{{name}} usunięto", "unlistPending": "Zgłoszono wycofanie {{name}} z listy. Zostanie usunięte po zakończeniu aktywnych sesji.", "listingRemoved": "{{name}} usunięto z marketplace", "listingDeleted": "{{name}} usunięto", "deleteError": "Nie udało się usunąć {{name}}", "published": "{{name}} opublikowano w marketplace", - "publishError": "Nie udało się opublikować {{name}}" + "publishError": "Nie udało się opublikować {{name}}", + "refreshedDelta": "Odświeżono modele: dodano {{added}}, usunięto {{removed}}", + "refreshedNoChange": "Odświeżono modele — bez zmian", + "refreshPartial": "Odświeżono modele (+{{added}} / -{{removed}}), ale odświeżenie {{failed}} z {{total}} kont nie powiodło się" }, "configure": "Konfiguruj {{provider}}", "providerGroups": { @@ -474,6 +479,23 @@ "refreshModels": { "button": "Odśwież listę modeli Cursor", "failed": "Odświeżanie z Cursor nie powiodło się: {{error}}" + }, + "usageShared": "Współdzielone", + "usageSharedDesc": "Używaj z innymi członkami zespołu", + "usagePersonal": "Osobiste", + "usagePersonalDesc": "Używaj wyłącznie dla siebie", + "usageManaged": "Zarządzane", + "usageManagedDesc": "Zarządzane przez zewnętrzny system", + "publishStatus": "Status publikacji", + "publishStatusDesc": "Stan opublikowanego konta", + "publishState": { + "draft": "Szkic", + "published": "Opublikowane", + "unpublished": "Nieopublikowane" + }, + "legacy": { + "title": "Starsze ustawienia", + "description": "Zachowaj zgodność ze starszymi integracjami" } }, "integrations": { @@ -752,7 +774,11 @@ "modelPlaceholder": "Wybierz model", "groupPerUser": "Izoluj sesje czatu grupowego per użytkownik", "groupPerUserDesc": "Każdy uczestnik czatu grupowego otrzymuje własny kontekst sesji." - } + }, + "title": "Kanały", + "description": "Integracje zewnętrznych kanałów komunikacji", + "searchPlaceholder": "Szukaj kanałów...", + "addChannel": "Dodaj kanał" }, "tabs": { "current": "Bieżące", @@ -1028,7 +1054,8 @@ "devtools": "Narzędzia deweloperskie", "tools": "Wbudowane narzędzia", "computerUse": "Computer Use", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "Opiekun MiniCPM" }, "projectConnections": { "linear": "Linear", @@ -1327,7 +1354,9 @@ "oauthDeviceCodeDesc": "Otwórz URL poniżej i wpisz ten kod", "oauthOpenGithub": "Otwórz GitHub", "oauthCancel": "Anuluj", - "oauthFailed": "Autoryzacja nie powiodła się" + "oauthFailed": "Autoryzacja nie powiodła się", + "autoCreatePr": "Automatycznie twórz pull requesty", + "autoCreatePrDesc": "Automatycznie utwórz pull request w kontroli źródła Workstation, gdy gałąź funkcji zostanie w całości wypchnięta i nie ma lokalnych zmian" }, "skillsHub": { "title": "Centrum umiejętności", @@ -1564,6 +1593,35 @@ "deleteConfirmMessage": "Serwer zostanie usunięty z pliku konfiguracyjnego. Aktywne sesje zostaną rozłączone." }, "agentOrgs": { + "cliManagedConfig": { + "title": "Przełączanie konfiguracji CLI", + "modeLabel": "Tryb", + "modeDesc": "Tryb domyślny przywraca własną konfigurację CLI. Tryb zarządzany przez ORGII zapisuje konfigurację proxy z kopią zapasową.", + "modeDefault": "Domyślny", + "modeOrgii": "Zarządzany przez ORGII", + "conflict": "Zmiana zewnętrzna", + "conflictTitle": "Konflikt", + "conflictDesc": "Aktywna konfiguracja CLI zmieniła się po zapisaniu jej przez ORGII.", + "proxyStatus": "Proxy", + "proxyDefault": "Tryb domyślny", + "proxyReady": "Proxy gotowe", + "proxyNotReady": "Proxy niegotowe", + "proxyDesc": "Lokalne żądania są kierowane przez ORGII KeyVault.", + "keyLabel": "Klucz", + "keyDesc": "Wyświetlane są tylko klucze API zgodne z tym CLI i zarządzanym proxy.", + "selectKey": "Wybierz klucz", + "modelLabel": "Model", + "selectModel": "Wybierz model", + "configFile": "Pliki konfiguracyjne", + "actions": "Akcje", + "addKey": "Dodaj klucz", + "apply": "Zastosuj", + "restore": "Przywróć domyślne", + "forceApply": "Wymuś zastosowanie", + "forceRestore": "Wymuś przywrócenie", + "applySuccess": "Zastosowano konfigurację zarządzaną przez ORGII", + "restoreSuccess": "Przywrócono konfigurację domyślną" + }, "title": "Zespoły agentów", "running": "Działa", "activeRules": "aktywne", @@ -2370,6 +2428,7 @@ "mode": "Tryb", "modeUi": "Podgląd UI", "modeTool": "Narzędzia", + "modeSessionLink": "Powiązanie sesji", "modeInput": "Wejście", "selectionMode": "Wybór", "selectionModeSingle": "Pojedynczy", @@ -2542,7 +2601,85 @@ "no_fit": "Niezalecane" } }, + "gitProfiles": { + "tab": "Profile Git", + "title": "Profile Git", + "add": "Dodaj profil", + "refresh": "Odśwież profile", + "refreshed": "Odświeżono globalny profil Git", + "loading": "Ładowanie globalnego profilu Git…", + "defaultProfile": "Profil domyślny", + "newProfile": "Nowy profil", + "copyName": "Kopia {{name}}", + "profileName": "Nazwa profilu", + "authorName": "Nazwa autora", + "email": "E-mail", + "selectEmail": "Wybierz adres e-mail", + "signingKey": "Klucz podpisujący", + "signingKeyPlaceholder": "Identyfikator klucza GPG lub SSH", + "signCommits": "Podpisuj commity", + "active": "Aktywny", + "activate": "Aktywuj profil", + "activated": "{{name}} jest teraz globalnym profilem Git", + "editRaw": "Edytuj surową konfigurację", + "hideRaw": "Ukryj surową konfigurację", + "rawTitle": "Surowy profil Git", + "rawConfig": "Konfiguracja Git", + "updateFromRaw": "Aktualizuj profil z konfiguracji", + "rawUpdated": "Zaktualizowano profil z surowej konfiguracji Git", + "rawInvalid": "Surowy profil Git jest nieprawidłowy", + "nameEmailRequired": "Nazwa autora i adres e-mail są wymagane", + "deleteTitle": "Usuń profil Git", + "deleteMessage": "Usunąć profil „{{name}}”? Nie zmieni to bieżącej globalnej konfiguracji Git.", + "loadFailed": "Nie udało się załadować globalnego profilu Git", + "applyFailed": "Nie udało się aktywować profilu Git" + }, "housekeeper": { + "eyebrow": "Lokalny opiekun MiniCPM", + "title": "Lokalny opiekun", + "description": "Lokalny MiniCPM udoskonala prompty, tworzy krótkie objaśnienia kroków i obsługuje proste sterowanie interfejsem. Zadania programistyczne i złożona konfiguracja ADE nadal korzystają z głównego modelu agenta.", + "autoAccount": "Automatycznie wybierz konto MiniCPM vLLM", + "tiles": { + "model": "Model", + "endpoint": "Punkt końcowy", + "safeContext": "Bezpieczny kontekst" + }, + "settings": { + "enabled": { + "title": "Włącz opiekuna", + "description": "Po wyłączeniu udoskonalanie promptów, objaśnienia kroków i proste sterowanie interfejsem nie będą korzystać z MiniCPM." + }, + "account": { + "title": "Konto vLLM MiniCPM", + "description": "Korzysta z istniejącego konta vllm_api w KeyVault; nie tworzy osobnego magazynu poświadczeń." + }, + "model": { + "title": "Identyfikator modelu", + "description": "Domyślny model Docker vLLM MiniCPM5-1B to openbmb/MiniCPM5-1B." + }, + "context": { + "title": "Bezpieczny budżet kontekstu", + "description": "Na kartach GPU z 4 GB pamięci używaj zachowawczego budżetu 10000 tokenów zamiast teoretycznego limitu 32 tys." + } + }, + "features": { + "promptPolish": { + "title": "Udoskonalanie promptów", + "description": "Ręcznie udoskonal dane wejściowe przed wysłaniem ich do wydajniejszego modelu programistycznego." + }, + "stepExplain": { + "title": "Objaśnienia kroków agenta", + "description": "Generuj jedno lub dwa krótkie objaśnienia po chińsku dla kroków odtwarzania sesji." + }, + "uiControl": { + "title": "Proste sterowanie ADE/interfejsem", + "description": "MiniCPM może jedynie klasyfikować żądania do ścisłej lokalnej listy dozwolonych akcji." + }, + "contextCompact": { + "title": "Automatyczna konserwacja kontekstu", + "description": "Pozwól MiniCPM utrzymywać odizolowane, kroczące podsumowanie starszego kontekstu, gdy włączone sesje są bezczynne." + } + }, "addModel": "Dodaj model", "sections": { "configuration": "Konfiguracja", @@ -2550,7 +2687,14 @@ "diagnostics": "Diagnostyka" }, "health": { - "status": "Nie sprawdzono" + "status": "Nie sprawdzono", + "title": "Kontrola kondycji", + "idle": "Sprawdza /v1/models i wysyła jedno małe żądanie czatu.", + "checking": "Sprawdzanie lokalnej usługi vLLM MiniCPM...", + "checkButton": "Sprawdź połączenie", + "configureFirst": "Najpierw skonfiguruj konto vLLM MiniCPM.", + "connectedTo": "Połączono z {{baseUrl}}", + "failed": "Kontrola kondycji MiniCPM nie powiodła się." }, "benchmark": { "title": "Szybkość wyjścia MiniCPM", @@ -2578,5 +2722,15 @@ "unavailable": "Profil uruchomienia niedostępny", "saved": "Profil uruchomienia zapisany", "resetDone": "Profil uruchomienia zresetowany" + }, + "gateway": { + "title": "Gateway", + "description": "Trasy przychodzące dla kanałów i integracji" + }, + "settings": { + "title": "Ustawienia", + "general": "Ogólne", + "advanced": "Zaawansowane", + "workspace": "Workspace" } } diff --git a/src/i18n/locales/pl/navigation.json b/src/i18n/locales/pl/navigation.json index db0b704c9..d2ac37909 100644 --- a/src/i18n/locales/pl/navigation.json +++ b/src/i18n/locales/pl/navigation.json @@ -46,7 +46,8 @@ "projectManager": "Project Manager", "diff": "Diff", "colleagues": "Współpracownicy", - "terminals": "Terminale" + "terminals": "Terminale", + "openSourceRepo": "Otwórz repozytorium źródłowe" }, "trajectoryPanel": { "title": "Trajektoria", @@ -145,7 +146,9 @@ }, "folderCounts": { "repo": "{{count}} Repo", - "multiRepoWorkspace": "{{count}} Workspace z wieloma Repo" + "repo_plural": "{{count}} repozytoriów", + "multiRepoWorkspace": "{{count}} Workspace z wieloma Repo", + "multiRepoWorkspace_plural": "{{count}} obszarów roboczych z wieloma repozytoriami" }, "bottomBar": { "settings": "Ustawienia", @@ -333,7 +336,27 @@ "addWorkspace": "Dodaj workspace" }, "explore": { - "title": "Odkrywaj" + "title": "Odkrywaj", + "search": "Szukaj", + "searching": "Wyszukiwanie...", + "searchPlaceholder": "Szukaj repozytoriów GitHub (np. language:rust tauri)", + "clone": "Klonuj", + "cloning": "Klonowanie...", + "openOnGithub": "GitHub", + "cloneSuccess": "Sklonowano {{name}}", + "cloneFailed": "Klonowanie nie powiodło się", + "cloneNoTarget": "Nie skonfigurowano domyślnego folderu obszaru roboczego. Ustaw go w Ustawieniach.", + "errorTitle": "Wyszukiwanie nie powiodło się", + "noResultsTitle": "Żadne repozytorium nie pasuje", + "noResultsSubtitle": "Spróbuj innego zapytania lub sortowania.", + "resultsCount": "{{shown}} z {{total}} repozytoriów", + "partial": "(wyniki częściowe — przekroczono limit czasu wyszukiwania)", + "sort": { + "bestMatch": "Najlepsze dopasowanie", + "stars": "Gwiazdki", + "updated": "Ostatnio aktualizowane", + "forks": "Forki" + } }, "workstation": { "dockFilter": { @@ -387,7 +410,7 @@ "supabaseAnonKey": "Supabase anon key", "orgName": "Nazwa ORG", "orgNamePlaceholder": "Team Alpha", - "inviteCode": "Link lub kod zaproszenia", + "inviteCode": "Kod zaproszenia", "inviteCodePlaceholder": "Wklej link orgii:// lub kod zaproszenia", "joinAs": "Dołącz jako", "joinAsPlaceholder": "Twoje imię", @@ -489,5 +512,13 @@ "members": { "remove": "Usuń" } + }, + "publish": { + "title": "Publikuj", + "description": "Opublikuj zmiany i udostępnij je zespołowi" + }, + "importExport": { + "import": "Import", + "export": "Eksport" } } diff --git a/src/i18n/locales/pl/sessions.json b/src/i18n/locales/pl/sessions.json index 943ac5876..36f99ba5d 100644 --- a/src/i18n/locales/pl/sessions.json +++ b/src/i18n/locales/pl/sessions.json @@ -92,6 +92,8 @@ "title": "Źródła danych", "description": "Zewnętrzne narzędzia do kodowania wykrywane przez ORGII. Aplikacje importowalne pokazują liczbę sesji i można je przeskanować ponownie; pozostałe pokazują status instalacji i lokalizację historii.", "rescanAll": "Przeskanuj wszystko", + "rescanUpdate": "Aktualizuj", + "rescanClear": "Wyczyść i przeskanuj ponownie", "rescan": "Przeskanuj", "rescanning": "Skanowanie…", "enable": "Włącz", @@ -204,7 +206,11 @@ "views": "Widoki", "cliAgent": "CLI Agent", "rustAgent": "Rust Agent", - "removeDraft": "Usuń wersję roboczą" + "removeDraft": "Usuń wersję roboczą", + "githubIssues": "Zgłoszenia GitHub", + "githubPrs": "Pull requesty GitHub", + "showSubagents": "Pokaż subagentów", + "hideSubagents": "Ukryj subagentów" }, "resultStatus": { "completed": "Ukończone", @@ -343,6 +349,16 @@ "follow": "Śledź", "dockShowChatInput": "Pokaż pole wprowadzania czatu", "dockHideChatInput": "Ukryj pole wprowadzania czatu", + "filters": { + "tooltip": "Filtruj zdarzenia", + "allEvents": "Wszystkie zdarzenia", + "keyInteractions": "Kluczowe interakcje", + "fileChanges": "Zmiany w plikach", + "terminalEvents": "Zdarzenia terminala", + "explore": "Eksploracja", + "other": "Inne", + "selectedCount": "{{count}} filtrów" + }, "bottomPanel": { "tabTrajectory": "Trajektoria", "tabTodo": "Lista zadań", @@ -449,7 +465,17 @@ "empty": "Brak zgłoszeń", "selectSubmission": "Wybierz zgłoszenie, aby zobaczyć szczegóły", "noCommits": "Brak Commits", - "noPullRequests": "Brak Pull Requests" + "noPullRequests": "Brak Pull Requests", + "labels": { + "created": { + "commit": "Utworzono commit", + "pullRequest": "Utworzono PR" + }, + "mentioned": { + "commit": "Wspomniano commit", + "pullRequest": "Wspomniano PR" + } + } } }, "channelsSidebar": { @@ -722,7 +748,11 @@ "insert": "Wstaw" }, "compactArgHint": "", - "compactCommandDescription": "Podsumuj starszy kontekst, aby zwolnić miejsce. Opcjonalnie: /compact " + "compactCommandDescription": "Podsumuj starszy kontekst, aby zwolnić miejsce. Opcjonalnie: /compact ", + "pr": { + "open": "Otwórz PR", + "creating": "Tworzenie PR…" + } }, "listPanel": { "showingOf": "Wyświetlono {{filtered}} z {{total}}", @@ -732,6 +762,7 @@ "planApprovedLabel": "Wykonywanie zatwierdzonego planu", "planApprovedEditedLabel": "Wykonywanie zatwierdzonego planu (edytowany)", "sessionStarted": "Sesja rozpoczęta", + "restoreCheckpoint": "Przywróć punkt kontrolny", "contentCopied": "Treść skopiowana!", "failedToCopyContent": "Nie udało się skopiować treści", "regenerate": "Wygeneruj ponownie", @@ -776,7 +807,9 @@ "tabs": { "work": "Praca", "manage": "Zarządzaj", - "heatmap": "Trendy" + "heatmap": "Trendy", + "history": "Historia", + "review": "Przegląd" }, "heatmap": { "loading": "Ładowanie trendów aktywności…", @@ -1053,6 +1086,30 @@ "filters": "Filters", "openInGitHub": "Open in GitHub" } + }, + "topBar": { + "title": "Czat", + "newSession": "Nowa sesja" + }, + "mode": { + "chat": "Czat", + "plan": "Plan", + "focus": "Skupienie" + }, + "attachments": { + "add": "Dodaj załącznik", + "clear": "Wyczyść załączniki", + "limitReached": "Osiągnięto limit załączników" + }, + "composer": { + "placeholder": "Wpisz wiadomość...", + "send": "Wyślij", + "cancel": "Anuluj" + }, + "status": { + "sending": "Wysyłanie...", + "sent": "Wysłano", + "failed": "Nie udało się wysłać" } }, "chatStatus": { @@ -1965,7 +2022,8 @@ "branchesTouched": "Branche" }, "modelPill": { - "immutableInSession": "Źródło klucza, typ Agenta i poziom cenowy są ustalane na początku sesji. Aby je zmienić, rozpocznij nową sesję." + "immutableInSession": "Źródło klucza, typ Agenta i poziom cenowy są ustalane na początku sesji. Aby je zmienić, rozpocznij nową sesję.", + "appliesNextTurn": "Konto zostało przełączone. Bieżąca odpowiedź nadal korzysta z poprzedniego konta; nowe konto zacznie obowiązywać od następnej tury." }, "creator": { "createTarget": { @@ -2611,7 +2669,8 @@ "list": { "title": "Wyświetl listę zadań", "count": "{{taskCount}} zadań", - "empty": "Brak zadań" + "empty": "Brak zadań", + "countLabel": "Zadania" }, "statusLabel": "Status", "assignedBadge": "Przypisane", @@ -2650,6 +2709,9 @@ } }, "cards": { + "session": { + "open": "Otwórz sesję" + }, "openFile": "Otwórz w edytorze", "openLink": "Otwórz link", "broadcast": "→ Wszyscy agenci", @@ -2737,6 +2799,14 @@ "close": "Zamknij", "summarize": "Podsumuj z Agent", "waiting": "Oczekiwanie na treść…", - "empty": "Brak treści" + "empty": "Brak treści", + "reactDisabledTitle": "Podgląd React działa w Symulatorze", + "reactDisabledDescription": "Kod JavaScript agenta nie jest wykonywany w czacie. Otwórz podgląd w Symulatorze, aby uruchomić React w piaskownicy.", + "viewInSimulator": "Wyświetl w Symulatorze" + }, + "canvasApp": { + "empty": "Nie wyrenderowano jeszcze żadnego płótna", + "sidebarTitle": "Płótna", + "noCanvases": "Brak płócien" } } diff --git a/src/i18n/locales/pl/settings.json b/src/i18n/locales/pl/settings.json index abb7a2d73..7f93055d9 100644 --- a/src/i18n/locales/pl/settings.json +++ b/src/i18n/locales/pl/settings.json @@ -795,6 +795,15 @@ "categoryGpu": "GPU WebKit", "categoryNetwork": "Sieć WebKit", "categoryOther": "Proces pomocniczy", + "diskCategory_toolResults": "Duże wyniki narzędzi", + "diskCategory_diagnostics": "Kolejka diagnostyki", + "diskCategory_models": "Pobrane modele", + "diskCategory_codeMap": "Indeksy mapy kodu", + "diskCategory_semanticIndex": "Indeks wyszukiwania semantycznego", + "diskCategory_cursorCliProfiles": "Profile Cursor CLI", + "diskCategory_kiroCliProfiles": "Profile Kiro CLI", + "diskCategory_opencodeCliProfiles": "Profile OpenCode CLI", + "diskCategory_sidecarBin": "Pobrane pliki binarne sidecar", "breakdownBackendRss": "RSS procesu backendu", "breakdownWebkitHelpers": "Pomocnicy WebKit / WebView", "breakdownToolHelpers": "Pomocnicy terminala i narzędzi", diff --git a/src/i18n/locales/pt/common.json b/src/i18n/locales/pt/common.json index 454381080..25ceecf15 100644 --- a/src/i18n/locales/pt/common.json +++ b/src/i18n/locales/pt/common.json @@ -1,4 +1,30 @@ { + "sqlEditor": { + "placeholder": "Insira a consulta SQL...", + "format": "Formatar", + "runQueryToSeeResults": "Execute uma consulta para ver os resultados", + "executingQuery": "Executando consulta...", + "queryFailed": "Falha na consulta", + "queryCompleted": "Consulta concluída", + "noResults": "A consulta não retornou resultados", + "rowCount_one": "{{count}} linha", + "rowCount_other": "{{count}} linhas", + "press": "Pressione", + "toRun": "para executar", + "nullValue": "NULL", + "booleanTrue": "verdadeiro", + "booleanFalse": "falso" + }, + "uploadZone": { + "clickOrDrag": "Clique ou arraste um arquivo para esta área para enviá-lo", + "supportFormats": "Formatos aceitos: {{accept}}" + }, + "chatImage": { + "maxReached": "Máximo de {{max}} imagens permitido", + "remainingWarning": "Só é possível adicionar mais {{remaining}} imagem(ns) (máx. {{max}})", + "processFailed": "Falha ao processar a imagem", + "loadFailed": "Falha ao carregar a imagem: {{fileName}}" + }, "toasts": { "replyEmpty": "A resposta não pode estar vazia", "sessionNotFound": "Sessão não encontrada", @@ -75,6 +101,13 @@ } }, "actions": { + "openOnGitHub": "Abrir no GitHub", + "createPullRequest": "Criar pull request", + "newIssue": "Nova issue", + "closeIssue": "Fechar issue", + "reopenIssue": "Reabrir issue", + "addComment": "Adicionar comentário", + "editIssue": "Editar issue", "all": "Todos", "save": "Salvar", "cancel": "Cancelar", @@ -345,6 +378,25 @@ "filterByLanguage": "Filtrar por linguagem" }, "labels": { + "noPullRequestForBranch": "Ainda não há pull request para esta branch.", + "creatingPullRequest": "Criando…", + "failedToLoadPullRequest": "Falha ao carregar o pull request", + "noCommitsInPullRequest": "Nenhum commit neste pull request", + "prStatus": { + "open": "Aberto", + "merged": "Mesclado", + "closed": "Fechado", + "draft": "Rascunho" + }, + "sendingNow": "enviando agora…", + "issues": "Issues", + "noIssues": "Nenhuma issue", + "openIssues": "Abertas", + "closedIssues": "Fechadas", + "issueComments": "{{count}} comentário", + "issueComments_one": "1 comentário", + "issueComments_other": "{{count}} comentários", + "tokens": "Tokens", "accounts": "Contas", "enabled": "Ativado", "disabled": "Desativado", @@ -794,6 +846,7 @@ "searchModeCycle": "Modo de pesquisa: {{mode}}. Clique para alternar modos." }, "placeholders": { + "noResults": "Nenhum resultado", "loading": "Carregando...", "selectToViewConfig": "Selecione um(a) {{type}} para visualizar ou configurar", "selectToViewConfigSubtitle": "Escolha um item da lista à esquerda", @@ -1096,6 +1149,9 @@ "sendStyleEdits": "Enviar", "addToChat": "Adicionar ao chat", "browserCore": { + "embeddedFallbackTitle": "Este site pode não funcionar no navegador incorporado", + "embeddedFallbackBody": "Alguns sites bloqueiam ou não são renderizados em WebViews de aplicativos. Se a página permanecer em branco, abra-a no navegador do sistema.", + "currentUrl": "URL atual", "desktopOnlyTitle": "Navegador disponível no app desktop", "desktopOnlyBody": "O navegador incorporado está disponível somente no aplicativo desktop Tauri.", "debugWebviewAvailable": "WebView disponível: {{value}}", @@ -1126,6 +1182,63 @@ "gitSyncMenuTitle": "Ações de sincronização Git" }, "git": { + "pr": { + "title": "Pull Request", + "baseBranch": "base", + "noDescription": "Nenhuma descrição fornecida.", + "loadingConversation": "Carregando…", + "reviewNoBody": "Deixou comentários de revisão.", + "commentPlaceholder": "Deixe um comentário…", + "comment": "Comentar", + "approve": "Aprovar", + "requestChanges": "Solicitar alterações", + "reply": "Responder", + "replyPlaceholder": "Responder…", + "reviewThreads": "Comentários da revisão", + "tabs": { + "conversation": "Conversa", + "commits": "Commits", + "checks": "Verificações", + "changes": "Alterações" + }, + "checks": { + "none": "Nenhuma verificação informada", + "noneHint": "Nenhuma verificação de CI ou status foi executada no commit mais recente deste pull request.", + "allPassed": "Todas as verificações passaram", + "someFailed": "Algumas verificações falharam", + "pending": "Verificações em andamento" + }, + "commits": { + "backToList": "Todos os commits", + "none": "Nenhum commit" + }, + "changes": { + "title": "Arquivos alterados", + "noFiles": "Nenhuma alteração de arquivo", + "tooLarge": "Arquivo grande demais para exibir o diff", + "unavailable": "Alterações indisponíveis", + "unavailableHint": "Não foi possível resolver os commits base e mais recente do pull request." + }, + "creating": "Criando pull request…", + "createError": "Falha ao criar o pull request", + "readyHint": "A branch foi enviada e está pronta para um pull request", + "neutralHint": "Envie sua branch para criar um pull request", + "noBranch": "Nenhuma branch selecionada", + "noRepoPath": "Nenhum caminho de repositório disponível", + "notAuthenticated": "Entre para criar pull requests", + "noOriginRemote": "Nenhum remote origin configurado", + "cannotParseRepoName": "Não foi possível identificar o nome do repositório pelo remote origin", + "status": { + "open": "Aberto", + "merged": "Mesclado", + "closed": "Fechado", + "draft": "Rascunho" + }, + "authRequired": { + "title": "Conectar ao GitHub", + "description": "Acesse Configurações → Integrações → Git para conectar sua conta do GitHub." + } + }, "loading": "Carregando status do Git...", "resolved": "Sugestões do Git resolvidas", "noRepoSelected": "Nenhum Repo selecionado", @@ -1203,6 +1316,28 @@ "shaCopied": "SHA copiado para a área de transferência" }, "issues": { + "title": "Issues", + "loading": "Carregando issues…", + "empty": "Nenhuma issue {{state}}", + "failedToLoad": "Falha ao carregar issues", + "failedToCreate": "Falha ao criar a issue", + "failedToUpdate": "Falha ao atualizar a issue", + "failedToComment": "Falha ao adicionar comentário", + "filterAll": "Todas", + "filterOpen": "Abertas", + "filterClosed": "Fechadas", + "noGitHubRepo": "Conecte um repositório do GitHub para gerenciar issues", + "commentPlaceholder": "Deixe um comentário…", + "submitComment": "Comentar", + "newIssueTitlePlaceholder": "Título da issue", + "newIssueBodyPlaceholder": "Descreva a issue (opcional)…", + "authRequired": { + "title": "Conectar ao GitHub", + "description": "Acesse Configurações → Integrações → Git para conectar sua conta do GitHub." + }, + "reAuthRequired": "Autorização do GitHub necessária", + "reAuthDescription": "Seu token do GitHub expirou. Acesse Configurações → Integrações → Git para se reconectar.", + "goToSettings": "Ir para Configurações", "updated": "Última atualização", "notUpdated": "não atualizado", "assignedTo": "Atribuído a {{assignees}}", @@ -1249,11 +1384,17 @@ "name": "nome" }, "repo": { + "spotlight": { + "placeholders": { + "workspace": "Workspace" + } + }, "workspaceFolders": "Pastas do Workspace", "addRepo": "Adicionar workspace", "addEntry": "Mais opções de importação", "addRepoDescription": "Abrir, criar ou clonar um workspace", "sections": { + "recent": "Recentes", "coding": "Workspace", "nonCoding": "Workspace", "pinned": "Fixado", @@ -1789,6 +1930,13 @@ "teamUsage": "Uso da equipe" }, "otherUsage": { + "cost": "Custo", + "estimatedCost": "Custo estimado", + "estimated": "EST.", + "estimatedTooltip": "Custo estimado — tokens × preço de tabela (sem gastos medidos para esta origem)", + "totalEstimatedCost": "Custo estimado", + "viewCost": "Custo", + "viewTokens": "Tokens", "title": "Outro uso", "noData": "Ainda não há dados de uso de IA", "sessions": "Sessões", @@ -1927,6 +2075,14 @@ "listed": "Listou" }, "sourceControl": { + "scope": { + "local": "Local", + "main": "Checkout principal", + "worktrees": "Worktrees", + "searchPlaceholder": "Filtrar worktrees…", + "switchScope": "Alternar escopo do controle de origem", + "switchScopeActive": "Alternar escopo do controle de origem: {{repo}}, {{branch}}" + }, "notGitInitialized": "Git não inicializado", "notGitInitializedSubtitle": "Inicialize o Git para acompanhar alterações, criar commits e usar ferramentas de branch neste workspace.", "initializeGit": "Inicializar Git", @@ -1958,6 +2114,25 @@ } }, "contextInfo": { + "cacheSaved": "Cache economizado: {{read}} de leitura, {{write}} de gravação", + "remaining": "Livre: {{tokens}} restantes", + "cacheHero": "{{pct}}% fornecido pelo cache · ~{{tokens}} reutilizados nesta rodada", + "cacheHeroSub": "O cache de prompts pode reduzir o custo em até 90%", + "headroom": "{{tokens}} de espaço restante", + "manualCompactSectionTitle": "Compactação manual", + "miniCpmCompactTitle": "Compactação automática silenciosa do MiniCPM", + "miniCpmCompactDescription": "Processa o contexto mais antigo de forma assíncrona", + "miniCpmCompactToggleAria": "Ativar compactação automática silenciosa do MiniCPM", + "miniCpmCompactDisabled": "A compactação silenciosa está desativada", + "miniCpmCompactEnabled": "A compactação silenciosa está ativada", + "miniCpmCompactRunning": "O MiniCPM está compactando", + "miniCpmCompactComplete": "Compactação concluída", + "miniCpmCompactBusy": "A sessão atual está ocupada", + "miniCpmCompactUnavailable": "O MiniCPM não está disponível", + "miniCpmCompactError": "Falha na compactação do MiniCPM", + "miniCpmCompactMetrics": "{{covered}} mensagens · {{source}} → {{summary}} tokens", + "miniCpmCompactAction": "Compactar agora", + "miniCpmCompactRunningAction": "Compactando", "contextUsed": "contexto usado", "estimatedFromRules": "estimado a partir das regras", "activeRules": "Regras ativas", @@ -2032,6 +2207,7 @@ "parentFolderPlaceholder": "Escolher pasta pai" }, "workspaceForm": { + "statusMaxRepos": "Máximo de 5 Repos selecionados", "title": "Criar Workspace multi-Repo", "editTitle": "Editar Workspace", "createWorkspace": "Criar Workspace multi-Repo", @@ -2263,11 +2439,31 @@ "previewAlt": "Pré-visualização" }, "update": { + "available": "Atualização disponível", + "versionReady": "A versão {{version}} está pronta para baixar.", + "upToDateVersion": "O ORGII está atualizado (v{{version}}).", + "upToDate": "O ORGII está atualizado.", + "checkFailed": "Falha ao verificar atualizações", + "checking": "Verificando atualizações…", + "downloadingEllipsis": "Baixando atualização…", + "downloadingWithSize": "Baixando atualização ({{size}})…", + "downloadingDownloaded": "Baixando atualização… {{downloaded}}", + "downloadingPercent": "Baixando atualização… {{percent}}%", + "installingEllipsis": "Instalando atualização…", + "installed": "Atualização instalada", + "installFailed": "Falha ao instalar a atualização", + "downloadTimedOut": "O tempo limite do download foi excedido. Verifique a rede ou o proxy e tente novamente.", + "restarting": "Reiniciando o ORGII para concluir a atualização.", + "preparingVersion": "Preparando o download da v{{version}}…", "downloading": "Baixando atualização", "installing": "Instalando atualização", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} de {{total}}", "preparingDownload": "Preparando download…", "downloadingAndInstalling": "Baixando e instalando atualização (v{{version}})…" + }, + "codeViewer": { + "original": "Original", + "modified": "Modificado" } } diff --git a/src/i18n/locales/pt/integrations.json b/src/i18n/locales/pt/integrations.json index f1bd11040..323486707 100644 --- a/src/i18n/locales/pt/integrations.json +++ b/src/i18n/locales/pt/integrations.json @@ -1,10 +1,48 @@ { + "gitProfiles": { + "tab": "Perfis do Git", + "title": "Perfis do Git", + "add": "Adicionar perfil", + "refresh": "Atualizar perfis", + "refreshed": "Perfil global do Git atualizado", + "loading": "Carregando seu perfil global do Git…", + "defaultProfile": "Perfil padrão", + "newProfile": "Novo perfil", + "copyName": "Cópia de {{name}}", + "profileName": "Nome do perfil", + "authorName": "Nome do autor", + "email": "E-mail", + "selectEmail": "Selecionar um e-mail", + "signingKey": "Chave de assinatura", + "signingKeyPlaceholder": "ID da chave de assinatura GPG ou SSH", + "signCommits": "Assinar commits", + "active": "Ativo", + "activate": "Ativar perfil", + "activated": "{{name}} agora é o perfil global do Git", + "editRaw": "Editar configuração bruta", + "hideRaw": "Ocultar configuração bruta", + "rawTitle": "Perfil bruto do Git", + "rawConfig": "Configuração do Git", + "updateFromRaw": "Atualizar perfil pela configuração", + "rawUpdated": "Perfil atualizado pela configuração bruta do Git", + "rawInvalid": "O perfil bruto do Git é inválido", + "nameEmailRequired": "O nome do autor e o e-mail são obrigatórios", + "deleteTitle": "Excluir perfil do Git", + "deleteMessage": "Excluir o perfil “{{name}}”? Isso não altera sua configuração global atual do Git.", + "loadFailed": "Falha ao carregar o perfil global do Git", + "applyFailed": "Falha ao ativar o perfil do Git" + }, + "github": { + "oauthFailed": "Falha na autorização" + }, "scopeLabels": { "user": "User", "repoSpecific": "Específico do repo", "builtIn": "Integrado" }, "keyVault": { + "confirmRemoveActiveSessions_one": "{{count}} sessão ativa ainda usa esta conta e falhará na próxima rodada:", + "confirmRemoveActiveSessions_other": "{{count}} sessões ativas ainda usam esta conta e falharão na próxima rodada:", "title": "Modelos e CLIs", "overview": { "helpMyAccounts": "Adicione chaves de API e configure CLI Agents. As chaves são armazenadas localmente e nunca saem da sua máquina.", @@ -30,10 +68,13 @@ "confirmDeleteTitle": "Excluir \"{{name}}\"?", "confirmDeleteMessage": "Isso excluirá permanentemente este anúncio do marketplace.", "toasts": { + "refreshedDelta": "Modelos atualizados: +{{added}} adicionados, -{{removed}} removidos", + "refreshedNoChange": "Modelos atualizados — nenhuma alteração", + "refreshPartial": "Modelos atualizados (+{{added}} / -{{removed}}), mas {{failed}} de {{total}} contas falharam", "refreshed": "{{name}} atualizado com sucesso", "refreshFailed": "Falha na validação de {{name}} — verifique suas chaves", "allRefreshed": "Todas as contas atualizadas", - "refreshError": "Falha ao atualizar {{name}}", + "refreshError": "Falha ao atualizar {{name}}: {{error}}", "localRemoved": "{{name}} removido", "unlistPending": "Remoção do anúncio {{name}} solicitada. Será removido quando as sessões ativas terminarem.", "listingRemoved": "{{name}} removido do marketplace", @@ -1012,6 +1053,7 @@ "allImported": "Todos os MCP servers detectados já foram importados" }, "categories": { + "housekeeper": "Assistente MiniCPM", "git": "Git", "gitDesc": "Controle de versão e hospedagem de Repos", "channels": "Agent Channels", @@ -1264,6 +1306,8 @@ "smitheryApiKeyDesc": "Chave de API para navegar pelos servidores MCP no Smithery. Obtenha sua chave em smithery.ai/account/api-keys" }, "git": { + "autoCreatePr": "Criar pull requests automaticamente", + "autoCreatePrDesc": "Criar automaticamente um pull request no Controle de Origem do Workstation quando uma branch de recurso estiver totalmente enviada e limpa", "searchPlaceholder": "Buscar provedores Git...", "connections": "Conexões Git", "noProvidersFound": "Nenhum provedor Git encontrado", @@ -1567,6 +1611,38 @@ "deleteConfirmMessage": "Isso removerá o servidor do arquivo de configuração. As sessões ativas serão desconectadas." }, "agentOrgs": { + "cliManagedConfig": { + "title": "Alternância de configuração da CLI", + "modeLabel": "Modo", + "modeDesc": "O modo Padrão restaura a configuração própria da CLI. O modo Gerenciado pela ORGII grava uma configuração de proxy com backup.", + "modeDefault": "Padrão", + "modeOrgii": "Gerenciado pela ORGII", + "conflict": "Alteração externa", + "conflictTitle": "Conflito", + "conflictDesc": "A configuração ativa da CLI foi alterada depois que a ORGII a gravou.", + "proxyStatus": "Proxy", + "proxyDefault": "Modo padrão", + "proxyReady": "Proxy pronto", + "proxyNotReady": "Proxy não está pronto", + "proxyDesc": "As requisições locais são encaminhadas pelo KeyVault da ORGII.", + "keyLabel": "Chave", + "keyDesc": "Somente chaves de API compatíveis com esta CLI e com o proxy gerenciado são exibidas.", + "selectKey": "Selecionar chave", + "modelLabel": "Modelo", + "selectModel": "Selecionar modelo", + "configFile": "Arquivos de configuração", + "actions": "Ações", + "addKey": "Adicionar chave", + "apply": "Aplicar", + "restore": "Restaurar padrão", + "forceApply": "Forçar aplicação", + "forceRestore": "Forçar restauração", + "applySuccess": "Configuração gerenciada pela ORGII aplicada", + "restoreSuccess": "Configuração padrão restaurada" + }, + "importPreview": { + "status": "Não verificado" + }, "title": "Equipes de agentes", "running": "Em execução", "activeRules": "ativas", @@ -2370,6 +2446,7 @@ } }, "devTools": { + "modeSessionLink": "Vínculo da sessão", "mode": "Modo", "modeUi": "Preview de UI", "modeTool": "Ferramentas", @@ -2546,6 +2623,51 @@ } }, "housekeeper": { + "eyebrow": "Assistente residente MiniCPM", + "title": "Assistente residente", + "description": "O MiniCPM local cuida do refinamento de prompts, de explicações curtas de etapas e do controle leve da interface. Tarefas de Coding e configurações complexas de ADE continuam usando o modelo principal do Agent.", + "autoAccount": "Selecionar automaticamente a conta vLLM do MiniCPM", + "tiles": { + "model": "Modelo", + "endpoint": "Endpoint", + "safeContext": "Contexto seguro" + }, + "settings": { + "enabled": { + "title": "Ativar assistente", + "description": "Quando desativado, o refinamento de prompts, as explicações de etapas e o controle leve da interface não usarão o MiniCPM." + }, + "account": { + "title": "Conta vLLM do MiniCPM", + "description": "Reutiliza uma conta vllm_api existente do KeyVault; nenhum armazenamento separado de credenciais é criado." + }, + "model": { + "title": "ID do modelo", + "description": "O MiniCPM5-1B no Docker vLLM usa openbmb/MiniCPM5-1B por padrão." + }, + "context": { + "title": "Orçamento de contexto seguro", + "description": "Use um orçamento conservador de 10000 tokens em GPUs de 4 GB em vez de confiar no limite teórico de 32 mil." + } + }, + "features": { + "promptPolish": { + "title": "Refinamento de prompts", + "description": "Refine manualmente a entrada antes de enviá-la ao modelo de Coding mais avançado." + }, + "stepExplain": { + "title": "Explicações das etapas do Agent", + "description": "Gere uma ou duas explicações curtas em chinês para as etapas de replay da sessão." + }, + "uiControl": { + "title": "Controle leve de ADE/interface", + "description": "O MiniCPM só pode classificar requisições em uma lista local estrita de ações permitidas." + }, + "contextCompact": { + "title": "Manutenção automática do contexto", + "description": "Permita que o MiniCPM mantenha um resumo contínuo e isolado do contexto mais antigo enquanto as sessões ativadas estiverem inativas." + } + }, "addModel": "Adicionar modelo", "sections": { "configuration": "Configuração", @@ -2553,6 +2675,13 @@ "diagnostics": "Diagnóstico" }, "health": { + "title": "Verificação de integridade", + "idle": "Verifica /v1/models e envia uma pequena requisição de chat.", + "checking": "Verificando o serviço MiniCPM local do vLLM...", + "checkButton": "Verificar conexão", + "configureFirst": "Configure primeiro uma conta vLLM do MiniCPM.", + "connectedTo": "Conectado a {{baseUrl}}", + "failed": "Falha na verificação de integridade do MiniCPM.", "status": "Não verificado" }, "benchmark": { diff --git a/src/i18n/locales/pt/navigation.json b/src/i18n/locales/pt/navigation.json index bda84f478..11a32fda0 100644 --- a/src/i18n/locales/pt/navigation.json +++ b/src/i18n/locales/pt/navigation.json @@ -1,5 +1,6 @@ { "labels": { + "openSourceRepo": "Repo de código aberto", "devRecord": "Registro de Dev", "workItems": "Itens de Trabalho", "codeSearch": "Busca de Código", @@ -335,6 +336,26 @@ "addWorkspace": "Adicionar workspace" }, "explore": { + "search": "Pesquisar", + "searching": "Pesquisando...", + "searchPlaceholder": "Pesquisar repositórios no GitHub (ex.: language:rust tauri)", + "clone": "Clonar", + "cloning": "Clonando...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} clonado", + "cloneFailed": "Falha ao clonar", + "cloneNoTarget": "Nenhuma pasta padrão de workspace configurada. Defina uma em Configurações.", + "errorTitle": "Falha na pesquisa", + "noResultsTitle": "Nenhum repositório correspondente", + "noResultsSubtitle": "Tente outra consulta ou ordenação.", + "resultsCount": "{{shown}} de {{total}} repositórios", + "partial": "(parcial — tempo limite da pesquisa esgotado)", + "sort": { + "bestMatch": "Melhor correspondência", + "stars": "Estrelas", + "updated": "Atualizados recentemente", + "forks": "Forks" + }, "title": "Explorar" }, "workstation": { diff --git a/src/i18n/locales/pt/sessions.json b/src/i18n/locales/pt/sessions.json index 96706d3ad..c72e8d028 100644 --- a/src/i18n/locales/pt/sessions.json +++ b/src/i18n/locales/pt/sessions.json @@ -1,4 +1,9 @@ { + "canvasApp": { + "empty": "Nenhum canvas renderizado ainda", + "sidebarTitle": "Canvas", + "noCanvases": "Nenhum canvas ainda" + }, "toolUsage": { "estimatedContext": "{{tokenCount}} Token de contexto", "followup": "{{tokenCount}} Token follow-up", @@ -89,6 +94,8 @@ "dataSource": "Fontes de dados" }, "dataSource": { + "rescanUpdate": "Atualizar", + "rescanClear": "Limpar e verificar novamente", "title": "Fontes de dados", "description": "Ferramentas de programação externas que o ORGII detecta. Apps importáveis mostram sua contagem de sessões e podem ser reescaneados; o restante mostra o status de instalação e onde fica seu histórico.", "rescanAll": "Reescanear tudo", @@ -195,6 +202,8 @@ "cancelled": "Falhou" }, "sidebar": { + "githubIssues": "Issues do GitHub", + "githubPrs": "PRs do GitHub", "agentTypes": "Tipos de Agent", "manageItems": "Gerenciar itens", "sessionsView": "Sessions View", @@ -330,6 +339,16 @@ "tasksWillAppear": "As tarefas aparecerão aqui quando o trabalho começar nesta sessão" }, "replay": { + "filters": { + "tooltip": "Filtrar eventos", + "allEvents": "Todos os eventos", + "keyInteractions": "Interações principais", + "fileChanges": "Alterações de arquivos", + "terminalEvents": "Eventos do terminal", + "explore": "Explorar", + "other": "Outros", + "selectedCount": "{{count}} filtros" + }, "following": "Acompanhando", "followingApp": "Acompanhando: {{appName}}", "followingAgent": "Acompanhando Agent", @@ -441,6 +460,16 @@ "emptyForFilter": "Ainda não há Diffs", "emptyDetail": "Selecione uma alteração para ver o Diff.", "submissions": { + "labels": { + "created": { + "commit": "Commit criado", + "pullRequest": "PR criado" + }, + "mentioned": { + "commit": "Commit mencionado", + "pullRequest": "PR mencionado" + } + }, "tabLabel": "Submissões", "commits": "Commits", "pr": "PR", @@ -702,6 +731,10 @@ "loading": "Carregando editor..." }, "input": { + "pr": { + "open": "Abrir PR", + "creating": "Criando PR…" + }, "editPlaceholder": "Edite sua mensagem...", "defaultPlaceholder": "Conversar com o Agent", "finishNextStep": "Concluir. Próximo passo!", @@ -727,6 +760,7 @@ "selectedOf": "{{selected}} de {{total}} selecionados" }, "chat": { + "restoreCheckpoint": "Restaurar checkpoint", "planApprovedLabel": "Executando plano aprovado", "planApprovedEditedLabel": "Executando plano aprovado (editado)", "sessionStarted": "Sessão iniciada", @@ -1935,6 +1969,7 @@ "branchesTouched": "Branches" }, "modelPill": { + "appliesNextTurn": "Conta alterada. A resposta atual ainda usa a conta anterior; a nova conta será aplicada a partir da próxima rodada.", "immutableInSession": "A origem da chave, o tipo de Agent e o nível de preço são fixados no início da sessão. Inicie uma nova sessão para alterá-los." }, "creator": { @@ -2579,6 +2614,7 @@ "title": "Ver detalhes da tarefa" }, "list": { + "countLabel": "Tarefas", "title": "Ver lista de tarefas", "count": "{{taskCount}} tarefas", "empty": "Nenhuma tarefa" @@ -2620,6 +2656,9 @@ } }, "cards": { + "session": { + "open": "Abrir sessão" + }, "openFile": "Abrir no editor", "openLink": "Abrir link", "broadcast": "→ Todos os agentes", @@ -2697,6 +2736,9 @@ "iframeTitle": "Pré-visualização de código" }, "canvasCard": { + "reactDisabledTitle": "A pré-visualização React é executada no Simulador", + "reactDisabledDescription": "O JavaScript do Agent não é executado no chat. Abra-o no Simulador para executar a pré-visualização React em sandbox.", + "viewInSimulator": "Ver no Simulador", "titleHtml": "Pré-visualização do Agent", "titleUrl": "Pré-visualização do Agent", "titleA2ui": "Pré-visualização do Agent", diff --git a/src/i18n/locales/pt/settings.json b/src/i18n/locales/pt/settings.json index 89861e639..3b9693b8f 100644 --- a/src/i18n/locales/pt/settings.json +++ b/src/i18n/locales/pt/settings.json @@ -790,6 +790,15 @@ "currentVersion": "Versão atual" }, "monitor": { + "diskCategory_toolResults": "Resultados de ferramentas muito grandes", + "diskCategory_diagnostics": "Fila de diagnósticos", + "diskCategory_models": "Modelos baixados", + "diskCategory_codeMap": "Índices do mapa de código", + "diskCategory_semanticIndex": "Índice de pesquisa semântica", + "diskCategory_cursorCliProfiles": "Perfis da CLI do Cursor", + "diskCategory_kiroCliProfiles": "Perfis da CLI do Kiro", + "diskCategory_opencodeCliProfiles": "Perfis da CLI do OpenCode", + "diskCategory_sidecarBin": "Binários auxiliares baixados", "categoryTerminal": "Processo de terminal/ferramenta", "categoryWebview": "Renderizador de WebView", "categoryGpu": "GPU do WebKit", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index a3a2e78b5..440c72062 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -1,4 +1,30 @@ { + "sqlEditor": { + "placeholder": "Введите SQL-запрос...", + "format": "Форматировать", + "runQueryToSeeResults": "Выполните запрос, чтобы увидеть результаты", + "executingQuery": "Выполнение запроса...", + "queryFailed": "Не удалось выполнить запрос", + "queryCompleted": "Запрос выполнен", + "noResults": "Запрос не вернул результатов", + "rowCount_one": "{{count}} строка", + "rowCount_other": "{{count}} строк", + "press": "Нажмите", + "toRun": "для запуска", + "nullValue": "NULL", + "booleanTrue": "истина", + "booleanFalse": "ложь" + }, + "uploadZone": { + "clickOrDrag": "Нажмите или перетащите файл в эту область для загрузки", + "supportFormats": "Поддерживаются: {{accept}}" + }, + "chatImage": { + "maxReached": "Допускается не более {{max}} изображений", + "remainingWarning": "Можно добавить ещё только {{remaining}} изображений (максимум {{max}})", + "processFailed": "Не удалось обработать изображение", + "loadFailed": "Не удалось загрузить изображение: {{fileName}}" + }, "toasts": { "replyEmpty": "Ответ не может быть пустым", "sessionNotFound": "Сессия не найдена", @@ -75,6 +101,13 @@ } }, "actions": { + "openOnGitHub": "Открыть на GitHub", + "createPullRequest": "Создать пул-реквест", + "newIssue": "Новая задача", + "closeIssue": "Закрыть задачу", + "reopenIssue": "Переоткрыть задачу", + "addComment": "Добавить комментарий", + "editIssue": "Редактировать задачу", "save": "Сохранить", "cancel": "Отмена", "delete": "Удалить", @@ -345,6 +378,25 @@ "filterByLanguage": "Фильтр по языку" }, "labels": { + "noPullRequestForBranch": "Для этой ветки пока нет пул-реквеста.", + "creatingPullRequest": "Создание…", + "failedToLoadPullRequest": "Не удалось загрузить пул-реквест", + "noCommitsInPullRequest": "В этом пул-реквесте нет коммитов", + "prStatus": { + "open": "Открыт", + "merged": "Объединён", + "closed": "Закрыт", + "draft": "Черновик" + }, + "sendingNow": "отправляется…", + "issues": "Задачи", + "noIssues": "Задач нет", + "openIssues": "Открытые", + "closedIssues": "Закрытые", + "issueComments": "{{count}} комментарий", + "issueComments_one": "1 комментарий", + "issueComments_other": "{{count}} комментариев", + "tokens": "Токены", "accounts": "Аккаунты", "enabled": "Включено", "disabled": "Отключено", @@ -794,6 +846,7 @@ "searchModeCycle": "Режим поиска: {{mode}}. Нажмите, чтобы переключать режимы." }, "placeholders": { + "noResults": "Результатов нет", "loading": "Загрузка...", "selectToViewConfig": "Выберите {{type}} для просмотра или настройки", "selectToViewConfigSubtitle": "Выберите элемент из списка слева", @@ -1096,6 +1149,9 @@ "sendStyleEdits": "Отправить", "addToChat": "Добавить в чат", "browserCore": { + "embeddedFallbackTitle": "Этот сайт может не работать во встроенном браузере", + "embeddedFallbackBody": "Некоторые сайты блокируют отображение во встроенных WebView приложения или загружаются в них некорректно. Если страница остаётся пустой, откройте её в системном браузере.", + "currentUrl": "Текущий URL", "desktopOnlyTitle": "Браузер доступен только в десктопном приложении", "desktopOnlyBody": "Встроенный браузер доступен только в настольном приложении Tauri.", "debugWebviewAvailable": "WebView доступен: {{value}}", @@ -1126,6 +1182,63 @@ "gitSyncMenuTitle": "Действия Git sync" }, "git": { + "pr": { + "title": "Пул-реквест", + "baseBranch": "базовая ветка", + "noDescription": "Описание отсутствует.", + "loadingConversation": "Загрузка…", + "reviewNoBody": "Оставлены комментарии к проверке.", + "commentPlaceholder": "Оставьте комментарий…", + "comment": "Комментировать", + "approve": "Одобрить", + "requestChanges": "Запросить изменения", + "reply": "Ответить", + "replyPlaceholder": "Ответить…", + "reviewThreads": "Комментарии к проверке", + "tabs": { + "conversation": "Обсуждение", + "commits": "Коммиты", + "checks": "Проверки", + "changes": "Изменения" + }, + "checks": { + "none": "Проверки не найдены", + "noneHint": "Для последнего коммита этого пул-реквеста не запускались проверки CI или проверки статуса.", + "allPassed": "Все проверки пройдены", + "someFailed": "Некоторые проверки завершились с ошибкой", + "pending": "Проверки выполняются" + }, + "commits": { + "backToList": "Все коммиты", + "none": "Коммитов нет" + }, + "changes": { + "title": "Изменённые файлы", + "noFiles": "Изменений файлов нет", + "tooLarge": "Файл слишком велик для сравнения", + "unavailable": "Изменения недоступны", + "unavailableHint": "Не удалось определить базовый и последний коммиты пул-реквеста." + }, + "creating": "Создание пул-реквеста…", + "createError": "Не удалось создать пул-реквест", + "readyHint": "Ветка отправлена и готова к созданию пул-реквеста", + "neutralHint": "Отправьте ветку, чтобы создать пул-реквест", + "noBranch": "Ветка не выбрана", + "noRepoPath": "Путь к репозиторию недоступен", + "notAuthenticated": "Войдите, чтобы создавать пул-реквесты", + "noOriginRemote": "Удалённый репозиторий origin не настроен", + "cannotParseRepoName": "Не удалось определить имя репозитория по адресу origin", + "status": { + "open": "Открыт", + "merged": "Объединён", + "closed": "Закрыт", + "draft": "Черновик" + }, + "authRequired": { + "title": "Подключите GitHub", + "description": "Перейдите в Настройки → Интеграции → Git и подключите аккаунт GitHub." + } + }, "loading": "Загрузка статуса Git...", "resolved": "Предложения Git выполнены", "noRepoSelected": "Репо не выбран", @@ -1203,6 +1316,28 @@ "shaCopied": "SHA скопирован в буфер обмена" }, "issues": { + "title": "Задачи", + "loading": "Загрузка задач…", + "empty": "Нет задач со статусом «{{state}}»", + "failedToLoad": "Не удалось загрузить задачи", + "failedToCreate": "Не удалось создать задачу", + "failedToUpdate": "Не удалось обновить задачу", + "failedToComment": "Не удалось добавить комментарий", + "filterAll": "Все", + "filterOpen": "Открытые", + "filterClosed": "Закрытые", + "noGitHubRepo": "Подключите репозиторий GitHub для управления задачами", + "commentPlaceholder": "Оставьте комментарий…", + "submitComment": "Комментировать", + "newIssueTitlePlaceholder": "Название задачи", + "newIssueBodyPlaceholder": "Опишите задачу (необязательно)…", + "authRequired": { + "title": "Подключите GitHub", + "description": "Перейдите в Настройки → Интеграции → Git и подключите аккаунт GitHub." + }, + "reAuthRequired": "Требуется повторная авторизация GitHub", + "reAuthDescription": "Срок действия токена GitHub истёк. Перейдите в Настройки → Интеграции → Git и подключитесь повторно.", + "goToSettings": "Перейти в настройки", "updated": "Последнее обновление", "notUpdated": "не обновлялось", "assignedTo": "Назначено: {{assignees}}", @@ -1254,6 +1389,7 @@ "addEntry": "Больше вариантов импорта", "addRepoDescription": "Открыть, создать или клонировать workspace", "sections": { + "recent": "Недавние", "coding": "Workspace", "nonCoding": "Workspace", "pinned": "Закреплено", @@ -1789,6 +1925,13 @@ "teamUsage": "Использование команды" }, "otherUsage": { + "cost": "Стоимость", + "estimatedCost": "Оценочная стоимость", + "estimated": "ОЦЕНКА", + "estimatedTooltip": "Оценочная стоимость — токены × цена по прайс-листу (для этого источника фактические расходы не учитываются)", + "totalEstimatedCost": "Оценочная стоимость", + "viewCost": "Стоимость", + "viewTokens": "Токены", "title": "Другое использование", "noData": "Нет данных об использовании AI", "sessions": "Сессии", @@ -1927,6 +2070,14 @@ "listed": "Список" }, "sourceControl": { + "scope": { + "local": "Локально", + "main": "Основная рабочая копия", + "worktrees": "Рабочие деревья", + "searchPlaceholder": "Фильтр рабочих деревьев…", + "switchScope": "Переключить область управления версиями", + "switchScopeActive": "Переключить область управления версиями: {{repo}}, {{branch}}" + }, "notGitInitialized": "Git не инициализирован", "notGitInitializedSubtitle": "Инициализируйте Git, чтобы отслеживать изменения, создавать коммиты и использовать инструменты веток в этом Workspace.", "initializeGit": "Инициализировать Git", @@ -1958,6 +2109,25 @@ } }, "contextInfo": { + "cacheSaved": "Сохранено в кэше: чтение — {{read}}, запись — {{write}}", + "remaining": "Свободно: осталось {{tokens}}", + "cacheHero": "{{pct}}% получено из кэша · ~{{tokens}} повторно использовано в этом ходе", + "cacheHeroSub": "Кэширование промптов может снизить стоимость до 90%", + "headroom": "Осталось места: {{tokens}}", + "manualCompactSectionTitle": "Ручное сжатие", + "miniCpmCompactTitle": "Фоновое автосжатие MiniCPM", + "miniCpmCompactDescription": "Асинхронно обрабатывает более ранний контекст", + "miniCpmCompactToggleAria": "Включить фоновое автосжатие MiniCPM", + "miniCpmCompactDisabled": "Фоновое сжатие отключено", + "miniCpmCompactEnabled": "Фоновое сжатие включено", + "miniCpmCompactRunning": "MiniCPM сжимает контекст", + "miniCpmCompactComplete": "Сжатие завершено", + "miniCpmCompactBusy": "Текущая сессия занята", + "miniCpmCompactUnavailable": "MiniCPM недоступна", + "miniCpmCompactError": "Не удалось выполнить сжатие MiniCPM", + "miniCpmCompactMetrics": "{{covered}} сообщений · {{source}} → {{summary}} токенов", + "miniCpmCompactAction": "Сжать сейчас", + "miniCpmCompactRunningAction": "Сжатие", "contextUsed": "контекст использован", "estimatedFromRules": "оценка по правилам", "activeRules": "Активные правила", @@ -2034,6 +2204,7 @@ "parentFolderPlaceholder": "Выбрать Parent folder" }, "workspaceForm": { + "statusMaxRepos": "Выбрано максимально допустимое число репозиториев: 5", "title": "Создать мульти-Repo Workspace", "editTitle": "Редактировать Workspace", "createWorkspace": "Создать мульти-Repo Workspace", @@ -2265,11 +2436,31 @@ "previewAlt": "Предпросмотр" }, "update": { + "available": "Доступно обновление", + "versionReady": "Версия {{version}} готова к загрузке.", + "upToDateVersion": "Установлена последняя версия ORGII (v{{version}}).", + "upToDate": "Установлена последняя версия ORGII.", + "checkFailed": "Не удалось проверить обновления", + "checking": "Проверка обновлений…", + "downloadingEllipsis": "Загрузка обновления…", + "downloadingWithSize": "Загрузка обновления ({{size}})…", + "downloadingDownloaded": "Загрузка обновления… {{downloaded}}", + "downloadingPercent": "Загрузка обновления… {{percent}} %", + "installingEllipsis": "Установка обновления…", + "installed": "Обновление установлено", + "installFailed": "Не удалось установить обновление", + "downloadTimedOut": "Время ожидания загрузки истекло. Проверьте сеть или прокси-сервер и повторите попытку.", + "restarting": "Перезапуск ORGII для завершения обновления.", + "preparingVersion": "Подготовка к загрузке v{{version}}…", "downloading": "Загрузка обновления", "installing": "Установка обновления", "progressPercent": "{{percent}} %", "downloadedOfTotal": "{{downloaded}} из {{total}}", "preparingDownload": "Подготовка загрузки…", "downloadingAndInstalling": "Загрузка и установка обновления (v{{version}})…" + }, + "codeViewer": { + "original": "Исходный", + "modified": "Изменённый" } } diff --git a/src/i18n/locales/ru/integrations.json b/src/i18n/locales/ru/integrations.json index 80d333bb9..57f69330c 100644 --- a/src/i18n/locales/ru/integrations.json +++ b/src/i18n/locales/ru/integrations.json @@ -1,10 +1,45 @@ { + "gitProfiles": { + "tab": "Профили Git", + "title": "Профили Git", + "add": "Добавить профиль", + "refresh": "Обновить профили", + "refreshed": "Глобальный профиль Git обновлён", + "loading": "Загрузка глобального профиля Git…", + "defaultProfile": "Профиль по умолчанию", + "newProfile": "Новый профиль", + "copyName": "Копия {{name}}", + "profileName": "Название профиля", + "authorName": "Имя автора", + "email": "Электронная почта", + "selectEmail": "Выберите адрес электронной почты", + "signingKey": "Ключ подписи", + "signingKeyPlaceholder": "Идентификатор ключа подписи GPG или SSH", + "signCommits": "Подписывать коммиты", + "active": "Активен", + "activate": "Активировать профиль", + "activated": "{{name}} теперь используется как глобальный профиль Git", + "editRaw": "Редактировать конфигурацию", + "hideRaw": "Скрыть конфигурацию", + "rawTitle": "Исходная конфигурация профиля Git", + "rawConfig": "Конфигурация Git", + "updateFromRaw": "Обновить профиль из конфигурации", + "rawUpdated": "Профиль обновлён из конфигурации Git", + "rawInvalid": "Исходная конфигурация профиля Git недействительна", + "nameEmailRequired": "Необходимо указать имя автора и адрес электронной почты", + "deleteTitle": "Удалить профиль Git", + "deleteMessage": "Удалить профиль «{{name}}»? Текущая глобальная конфигурация Git не изменится.", + "loadFailed": "Не удалось загрузить глобальный профиль Git", + "applyFailed": "Не удалось активировать профиль Git" + }, "scopeLabels": { "user": "User", "repoSpecific": "Для repo", "builtIn": "Встроенный" }, "keyVault": { + "confirmRemoveActiveSessions_one": "Этот аккаунт всё ещё используется в {{count}} активной сессии, которая завершится с ошибкой на следующем ходе:", + "confirmRemoveActiveSessions_other": "Этот аккаунт всё ещё используется в {{count}} активных сессиях, которые завершатся с ошибкой на следующем ходе:", "title": "Модели & CLI", "overview": { "helpMyAccounts": "Добавьте API-ключи и настройте CLI-агенты. Ключи хранятся только локально и не покидают ваш компьютер.", @@ -29,10 +64,13 @@ "confirmDeleteTitle": "Удалить \"{{name}}\"?", "confirmDeleteMessage": "Это объявление будет навсегда удалено из маркетплейса.", "toasts": { + "refreshedDelta": "Список моделей обновлён: добавлено {{added}}, удалено {{removed}}", + "refreshedNoChange": "Список моделей обновлён — изменений нет", + "refreshPartial": "Список моделей обновлён (+{{added}} / -{{removed}}), но не удалось обновить {{failed}} из {{total}} аккаунтов", "refreshed": "{{name}} успешно обновлён", "refreshFailed": "{{name}} проверка не пройдена - проверьте учётные данные", "allRefreshed": "Все аккаунты обновлены", - "refreshError": "Не удалось обновить {{name}}", + "refreshError": "Не удалось обновить {{name}}: {{error}}", "localRemoved": "{{name}} удалён", "unlistPending": "{{name}} запрос на удаление отправлен. Будет удалено после завершения активных Session.", "listingRemoved": "{{name}} удалён из маркетплейса", @@ -1012,6 +1050,7 @@ "allImported": "Все найденные MCP servers уже импортированы" }, "categories": { + "housekeeper": "MiniCPM — фоновый помощник", "git": "Git", "gitDesc": "Контроль версий и хостинг репо", "channels": "Agent Channels", @@ -1275,6 +1314,8 @@ "smitheryApiKeyDesc": "API key для просмотра MCP серверов на Smithery. Get your key at smithery.ai/account/api-keys" }, "git": { + "autoCreatePr": "Автоматически создавать пул-реквесты", + "autoCreatePrDesc": "Автоматически создавать пул-реквест в разделе управления версиями Workstation, когда функциональная ветка полностью отправлена и не содержит незакоммиченных изменений", "searchPlaceholder": "Поиск Git-провайдеров...", "connections": "Подключения Git", "noProvidersFound": "Git-провайдеры не найдены", @@ -1578,6 +1619,35 @@ "deleteConfirmMessage": "Сервер будет удалён из файла конфигурации. Активные сессии будут отключены." }, "agentOrgs": { + "cliManagedConfig": { + "title": "Переключение конфигурации CLI", + "modeLabel": "Режим", + "modeDesc": "Режим «По умолчанию» восстанавливает собственную конфигурацию CLI. Режим «Под управлением ORGII» записывает конфигурацию прокси с резервной копией.", + "modeDefault": "По умолчанию", + "modeOrgii": "Под управлением ORGII", + "conflict": "Внешнее изменение", + "conflictTitle": "Конфликт", + "conflictDesc": "Активная конфигурация CLI была изменена после её записи ORGII.", + "proxyStatus": "Прокси", + "proxyDefault": "Режим по умолчанию", + "proxyReady": "Прокси готов", + "proxyNotReady": "Прокси не готов", + "proxyDesc": "Локальные запросы направляются через хранилище ключей ORGII.", + "keyLabel": "Ключ", + "keyDesc": "Показаны только API-ключи, совместимые с этим CLI и управляемым прокси.", + "selectKey": "Выберите ключ", + "modelLabel": "Модель", + "selectModel": "Выберите модель", + "configFile": "Файлы конфигурации", + "actions": "Действия", + "addKey": "Добавить ключ", + "apply": "Применить", + "restore": "Восстановить настройки по умолчанию", + "forceApply": "Применить принудительно", + "forceRestore": "Восстановить принудительно", + "applySuccess": "Конфигурация под управлением ORGII применена", + "restoreSuccess": "Конфигурация по умолчанию восстановлена" + }, "title": "Команды агентов", "running": "Работает", "fires": "срабатываний", @@ -2360,6 +2430,7 @@ } }, "devTools": { + "modeSessionLink": "Связь с сессией", "mode": "Режим", "modeUi": "Предпросмотр UI", "modeTool": "Инструменты", @@ -2546,6 +2617,51 @@ } }, "housekeeper": { + "eyebrow": "Постоянный фоновый помощник MiniCPM", + "title": "Фоновый помощник", + "description": "Локальная MiniCPM улучшает формулировки промптов, кратко объясняет шаги и выполняет простые команды интерфейса. Задачи программирования и сложная настройка ADE по-прежнему используют основную модель агента.", + "autoAccount": "Автоматически выбирать аккаунт MiniCPM vLLM", + "tiles": { + "model": "Модель", + "endpoint": "Эндпоинт", + "safeContext": "Безопасный контекст" + }, + "settings": { + "enabled": { + "title": "Включить фонового помощника", + "description": "Если функция отключена, MiniCPM не будет улучшать промпты, объяснять шаги и выполнять простые команды интерфейса." + }, + "account": { + "title": "Аккаунт vLLM MiniCPM", + "description": "Используется существующий аккаунт vllm_api из хранилища ключей; отдельное хранилище учётных данных не создаётся." + }, + "model": { + "title": "Идентификатор модели", + "description": "Для MiniCPM5-1B в Docker vLLM по умолчанию используется openbmb/MiniCPM5-1B." + }, + "context": { + "title": "Безопасный бюджет контекста", + "description": "На GPU с 4 ГБ памяти используйте консервативный бюджет в 10000 токенов вместо теоретического предела в 32 тыс." + } + }, + "features": { + "promptPolish": { + "title": "Улучшение промптов", + "description": "Вручную улучшать ввод перед отправкой более мощной модели для программирования." + }, + "stepExplain": { + "title": "Пояснения к шагам агента", + "description": "Создавать одно или два кратких пояснения на китайском языке для шагов воспроизведения сессии." + }, + "uiControl": { + "title": "Простое управление ADE и интерфейсом", + "description": "MiniCPM может только классифицировать запросы по строгому локальному списку разрешённых действий." + }, + "contextCompact": { + "title": "Автоматическое обслуживание контекста", + "description": "Пока включённые сессии неактивны, MiniCPM поддерживает изолированное скользящее резюме более раннего контекста." + } + }, "addModel": "Добавить модель", "sections": { "configuration": "Конфигурация", @@ -2553,6 +2669,13 @@ "diagnostics": "Диагностика" }, "health": { + "title": "Проверка состояния", + "idle": "Проверяет /v1/models и отправляет один небольшой запрос чата.", + "checking": "Проверка локального сервиса vLLM MiniCPM...", + "checkButton": "Проверить подключение", + "configureFirst": "Сначала настройте аккаунт vLLM MiniCPM.", + "connectedTo": "Подключено к {{baseUrl}}", + "failed": "Проверка состояния MiniCPM завершилась с ошибкой.", "status": "Не проверено" }, "benchmark": { diff --git a/src/i18n/locales/ru/navigation.json b/src/i18n/locales/ru/navigation.json index 68e2e93e5..d6efdec5d 100644 --- a/src/i18n/locales/ru/navigation.json +++ b/src/i18n/locales/ru/navigation.json @@ -1,5 +1,6 @@ { "labels": { + "openSourceRepo": "Открыть репозиторий с исходным кодом", "devRecord": "Журнал разработки", "workItems": "Рабочие элементы", "codeSearch": "Поиск кода", @@ -144,6 +145,8 @@ "colleagues": "Поиск коллег..." }, "folderCounts": { + "repo_plural": "{{count}} репозиториев", + "multiRepoWorkspace_plural": "{{count}} рабочих пространств с несколькими репозиториями", "repo": "{{count}} репо", "multiRepoWorkspace": "{{count}} мульти-Repo Workspace" }, @@ -333,6 +336,26 @@ "addWorkspace": "Добавить workspace" }, "explore": { + "search": "Поиск", + "searching": "Поиск...", + "searchPlaceholder": "Поиск репозиториев GitHub (например, language:rust tauri)", + "clone": "Клонировать", + "cloning": "Клонирование...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} клонирован", + "cloneFailed": "Не удалось клонировать", + "cloneNoTarget": "Папка рабочего пространства по умолчанию не настроена. Укажите её в настройках.", + "errorTitle": "Не удалось выполнить поиск", + "noResultsTitle": "Подходящие репозитории не найдены", + "noResultsSubtitle": "Попробуйте изменить запрос или сортировку.", + "resultsCount": "Показано {{shown}} из {{total}} репозиториев", + "partial": "(частичные результаты — время ожидания поиска истекло)", + "sort": { + "bestMatch": "Лучшее совпадение", + "stars": "Звёзды", + "updated": "Недавно обновлённые", + "forks": "Форки" + }, "title": "Обзор" }, "workstation": { diff --git a/src/i18n/locales/ru/sessions.json b/src/i18n/locales/ru/sessions.json index d3efdf9c0..7db65a463 100644 --- a/src/i18n/locales/ru/sessions.json +++ b/src/i18n/locales/ru/sessions.json @@ -1,4 +1,9 @@ { + "canvasApp": { + "empty": "Холст пока не отображён", + "sidebarTitle": "Холсты", + "noCanvases": "Холстов пока нет" + }, "toolUsage": { "estimatedContext": "{{tokenCount}} Token контекста", "followup": "{{tokenCount}} Token follow-up", @@ -89,6 +94,8 @@ "dataSource": "Источники данных" }, "dataSource": { + "rescanUpdate": "Обновить", + "rescanClear": "Очистить и пересканировать", "title": "Источники данных", "description": "Внешние инструменты для кодинга, которые обнаруживает ORGII. Импортируемые приложения показывают число сессий и могут быть пересканированы; остальные показывают статус установки и расположение истории.", "rescanAll": "Пересканировать все", @@ -191,6 +198,8 @@ "cancelled": "Неудачно" }, "sidebar": { + "githubIssues": "Задачи GitHub", + "githubPrs": "Пул-реквесты GitHub", "agentTypes": "Типы Agent", "manageItems": "Управление элементами", "sessionsView": "Sessions View", @@ -332,6 +341,16 @@ "tasksWillAppear": "Задачи появятся здесь, когда над этой сессией начнётся работа" }, "replay": { + "filters": { + "tooltip": "Фильтр событий", + "allEvents": "Все события", + "keyInteractions": "Ключевые взаимодействия", + "fileChanges": "Изменения файлов", + "terminalEvents": "События терминала", + "explore": "Обзор", + "other": "Другое", + "selectedCount": "Выбрано фильтров: {{count}}" + }, "following": "Слежение", "freeBrowsing": "Свободный просмотр", "replaying": "Воспроизведение", @@ -439,6 +458,16 @@ "emptyForFilter": "Diff пока нет", "emptyDetail": "Выберите изменение, чтобы посмотреть Diff.", "submissions": { + "labels": { + "created": { + "commit": "Создан коммит", + "pullRequest": "Создан пул-реквест" + }, + "mentioned": { + "commit": "Упомянут коммит", + "pullRequest": "Упомянут пул-реквест" + } + }, "tabLabel": "Отправки", "commits": "Commits", "pr": "PR", @@ -707,6 +736,10 @@ "loading": "Загрузка редактора..." }, "input": { + "pr": { + "open": "Открыть пул-реквест", + "creating": "Создание пул-реквеста…" + }, "editPlaceholder": "Редактировать сообщение...", "defaultPlaceholder": "Чат с Agent", "finishNextStep": "Готово. Следующий шаг!", @@ -732,6 +765,7 @@ "selectedOf": "Выбрано {{selected}} из {{total}}" }, "chat": { + "restoreCheckpoint": "Восстановить контрольную точку", "planApprovedLabel": "Выполняется утверждённый план", "planApprovedEditedLabel": "Выполняется утверждённый план (изменён)", "sessionStarted": "Session запущена", @@ -1955,6 +1989,7 @@ "branchesTouched": "Ветки" }, "modelPill": { + "appliesNextTurn": "Аккаунт переключён. Текущий ответ по-прежнему выполняется с предыдущим аккаунтом; новый аккаунт будет использоваться со следующего хода.", "immutableInSession": "Источник ключа, тип Agent и тарифный уровень фиксируются при запуске сессии. Чтобы изменить их, начните новую сессию." }, "creator": { @@ -2616,6 +2651,7 @@ "title": "Просмотр деталей задачи" }, "list": { + "countLabel": "Задачи", "title": "Просмотр списка задач", "count": "{{taskCount}} задач", "empty": "Нет задач" @@ -2657,6 +2693,9 @@ } }, "cards": { + "session": { + "open": "Открыть сессию" + }, "openFile": "Открыть в редакторе", "openLink": "Открыть ссылку", "broadcast": "→ Все агенты", @@ -2734,6 +2773,9 @@ "iframeTitle": "Предпросмотр кода" }, "canvasCard": { + "reactDisabledTitle": "Предпросмотр React запускается в симуляторе", + "reactDisabledDescription": "JavaScript агента не выполняется внутри чата. Откройте предпросмотр в симуляторе, чтобы запустить React в песочнице.", + "viewInSimulator": "Открыть в симуляторе", "titleHtml": "Предпросмотр Agent", "titleUrl": "Предпросмотр Agent", "titleA2ui": "Предпросмотр Agent", diff --git a/src/i18n/locales/ru/settings.json b/src/i18n/locales/ru/settings.json index 8ed39e66f..17e8a0f7a 100644 --- a/src/i18n/locales/ru/settings.json +++ b/src/i18n/locales/ru/settings.json @@ -790,6 +790,15 @@ "currentVersion": "Текущая версия" }, "monitor": { + "diskCategory_toolResults": "Крупные результаты инструментов", + "diskCategory_diagnostics": "Очередь диагностики", + "diskCategory_models": "Загруженные модели", + "diskCategory_codeMap": "Индексы карты кода", + "diskCategory_semanticIndex": "Индекс семантического поиска", + "diskCategory_cursorCliProfiles": "Профили Cursor CLI", + "diskCategory_kiroCliProfiles": "Профили Kiro CLI", + "diskCategory_opencodeCliProfiles": "Профили OpenCode CLI", + "diskCategory_sidecarBin": "Загруженные вспомогательные программы", "categoryTerminal": "Процесс терминала/инструмента", "categoryWebview": "Отрисовщик WebView", "categoryGpu": "GPU WebKit", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 0ba7a3eae..c399d40f9 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -1,4 +1,30 @@ { + "sqlEditor": { + "placeholder": "SQL sorgusu girin...", + "format": "Biçimlendir", + "runQueryToSeeResults": "Sonuçları görmek için bir sorgu çalıştırın", + "executingQuery": "Sorgu çalıştırılıyor...", + "queryFailed": "Sorgu başarısız", + "queryCompleted": "Sorgu tamamlandı", + "noResults": "Sorgu sonuç döndürmedi", + "rowCount_one": "{{count}} satır", + "rowCount_other": "{{count}} satır", + "press": "Çalıştırmak için", + "toRun": "tuşlarına basın", + "nullValue": "NULL", + "booleanTrue": "doğru", + "booleanFalse": "yanlış" + }, + "uploadZone": { + "clickOrDrag": "Yüklemek için dosyayı bu alana tıklayın veya sürükleyin", + "supportFormats": "Desteklenen biçimler: {{accept}}" + }, + "chatImage": { + "maxReached": "En fazla {{max}} görsele izin verilir", + "remainingWarning": "Yalnızca {{remaining}} görsel daha eklenebilir (en fazla {{max}})", + "processFailed": "Görsel işlenemedi", + "loadFailed": "Görsel yüklenemedi: {{fileName}}" + }, "toasts": { "replyEmpty": "Yanıt boş olamaz", "sessionNotFound": "Oturum bulunamadı", @@ -75,6 +101,13 @@ } }, "actions": { + "openOnGitHub": "GitHub’da aç", + "createPullRequest": "Pull request oluştur", + "newIssue": "Yeni issue", + "closeIssue": "Issue’yu kapat", + "reopenIssue": "Issue’yu yeniden aç", + "addComment": "Yorum ekle", + "editIssue": "Issue’yu düzenle", "save": "Kaydet", "cancel": "İptal", "delete": "Sil", @@ -345,6 +378,25 @@ "filterByLanguage": "Dile göre filtrele" }, "labels": { + "noPullRequestForBranch": "Bu dal için henüz bir pull request yok.", + "creatingPullRequest": "Oluşturuluyor…", + "failedToLoadPullRequest": "Pull request yüklenemedi", + "noCommitsInPullRequest": "Bu pull request’te commit yok", + "prStatus": { + "open": "Açık", + "merged": "Birleştirildi", + "closed": "Kapalı", + "draft": "Taslak" + }, + "sendingNow": "şimdi gönderiliyor…", + "issues": "Issue’lar", + "noIssues": "Issue yok", + "openIssues": "Açık", + "closedIssues": "Kapalı", + "issueComments": "{{count}} yorum", + "issueComments_one": "1 yorum", + "issueComments_other": "{{count}} yorum", + "tokens": "Tokenlar", "accounts": "Hesaplar", "enabled": "Etkin", "disabled": "Devre dışı", @@ -794,6 +846,7 @@ "searchModeCycle": "Arama modu: {{mode}}. Modlar arasında geçiş için tıklayın." }, "placeholders": { + "noResults": "Sonuç yok", "loading": "Yükleniyor...", "selectToViewConfig": "Görüntülemek veya yapılandırmak için bir {{type}} seçin", "selectToViewConfigSubtitle": "Soldaki listeden bir öğe seçin", @@ -1097,6 +1150,9 @@ "sendStyleEdits": "Gönder", "addToChat": "Sohbete ekle", "browserCore": { + "embeddedFallbackTitle": "Bu site gömülü tarayıcıda çalışmayabilir", + "embeddedFallbackBody": "Bazı siteler uygulama içi WebView’larda görüntülenmeyi engeller veya görüntülenemez. Sayfa boş kalırsa sistem tarayıcınızda açın.", + "currentUrl": "Geçerli URL", "desktopOnlyTitle": "Tarayıcı yalnızca masaüstü uygulamasında", "desktopOnlyBody": "Gömülü tarayıcı yalnızca Tauri masaüstü uygulamasında kullanılabilir.", "debugWebviewAvailable": "WebView kullanılabilir: {{value}}", @@ -1127,6 +1183,63 @@ "gitSyncMenuTitle": "Git sync actions" }, "git": { + "pr": { + "title": "Pull Request", + "baseBranch": "temel dal", + "noDescription": "Açıklama sağlanmadı.", + "loadingConversation": "Yükleniyor…", + "reviewNoBody": "İnceleme yorumları bıraktı.", + "commentPlaceholder": "Yorum bırakın…", + "comment": "Yorum yap", + "approve": "Onayla", + "requestChanges": "Değişiklik iste", + "reply": "Yanıtla", + "replyPlaceholder": "Yanıt yazın…", + "reviewThreads": "İnceleme yorumları", + "tabs": { + "conversation": "Konuşma", + "commits": "Commitler", + "checks": "Kontroller", + "changes": "Değişiklikler" + }, + "checks": { + "none": "Bildirilen kontrol yok", + "noneHint": "Bu pull request’in son commit’inde hiçbir CI kontrolü veya durum denetimi çalışmadı.", + "allPassed": "Tüm kontroller başarılı", + "someFailed": "Bazı kontroller başarısız", + "pending": "Kontroller sürüyor" + }, + "commits": { + "backToList": "Tüm commitler", + "none": "Commit yok" + }, + "changes": { + "title": "Değiştirilen dosyalar", + "noFiles": "Dosya değişikliği yok", + "tooLarge": "Dosya diff için çok büyük", + "unavailable": "Değişiklikler kullanılamıyor", + "unavailableHint": "Pull request’in temel ve son commitleri çözümlenemedi." + }, + "creating": "Pull request oluşturuluyor…", + "createError": "Pull request oluşturulamadı", + "readyHint": "Dal push edildi ve pull request için hazır", + "neutralHint": "Pull request oluşturmak için dalınızı push edin", + "noBranch": "Dal seçilmedi", + "noRepoPath": "Depo yolu kullanılamıyor", + "notAuthenticated": "Pull request oluşturmak için giriş yapın", + "noOriginRemote": "Origin remote yapılandırılmamış", + "cannotParseRepoName": "Origin remote üzerinden depo adı ayrıştırılamadı", + "status": { + "open": "Açık", + "merged": "Birleştirildi", + "closed": "Kapalı", + "draft": "Taslak" + }, + "authRequired": { + "title": "GitHub’a bağlan", + "description": "GitHub hesabınızı bağlamak için Ayarlar → Entegrasyonlar → Git’e gidin." + } + }, "loading": "Git durumu yükleniyor...", "resolved": "Git önerileri çözüldü", "noRepoSelected": "Depo seçilmedi", @@ -1204,6 +1317,28 @@ "shaCopied": "SHA panoya kopyalandı" }, "issues": { + "title": "Issue’lar", + "loading": "Issue’lar yükleniyor…", + "empty": "{{state}} issue yok", + "failedToLoad": "Issue’lar yüklenemedi", + "failedToCreate": "Issue oluşturulamadı", + "failedToUpdate": "Issue güncellenemedi", + "failedToComment": "Yorum eklenemedi", + "filterAll": "Tümü", + "filterOpen": "Açık", + "filterClosed": "Kapalı", + "noGitHubRepo": "Issue’ları yönetmek için bir GitHub deposu bağlayın", + "commentPlaceholder": "Yorum bırakın…", + "submitComment": "Yorum yap", + "newIssueTitlePlaceholder": "Issue başlığı", + "newIssueBodyPlaceholder": "Issue’yu açıklayın (isteğe bağlı)…", + "authRequired": { + "title": "GitHub’a bağlan", + "description": "GitHub hesabınızı bağlamak için Ayarlar → Entegrasyonlar → Git’e gidin." + }, + "reAuthRequired": "GitHub yetkilendirmesi gerekli", + "reAuthDescription": "GitHub tokenınızın süresi doldu. Yeniden bağlanmak için Ayarlar → Entegrasyonlar → Git’e gidin.", + "goToSettings": "Ayarlara git", "updated": "Son güncelleme", "notUpdated": "güncellenmedi", "assignedTo": "{{assignees}} kişisine atandı", @@ -1255,6 +1390,7 @@ "addEntry": "Daha fazla içe aktarma seçeneği", "addRepoDescription": "Workspace aç, oluştur veya klonla", "sections": { + "recent": "Son kullanılanlar", "coding": "Workspace", "nonCoding": "Workspace", "pinned": "Sabitlenmiş", @@ -1794,6 +1930,13 @@ "teamUsage": "Takım kullanımı" }, "otherUsage": { + "cost": "Maliyet", + "estimatedCost": "Tahmini maliyet", + "estimated": "TAHMİNİ", + "estimatedTooltip": "Tahmini maliyet — tokenlar × liste fiyatı (bu kaynak için ölçülen harcama yok)", + "totalEstimatedCost": "Tahmini maliyet", + "viewCost": "Maliyet", + "viewTokens": "Tokenlar", "title": "Diğer Kullanım", "noData": "Henüz AI kullanım verisi yok", "sessions": "Oturumlar", @@ -1932,6 +2075,14 @@ "listed": "Listelendi" }, "sourceControl": { + "scope": { + "local": "Yerel", + "main": "Ana checkout", + "worktrees": "Worktree’ler", + "searchPlaceholder": "Worktree’leri filtrele…", + "switchScope": "Kaynak denetimi kapsamını değiştir", + "switchScopeActive": "Kaynak denetimi kapsamını değiştir: {{repo}}, {{branch}}" + }, "notGitInitialized": "Git başlatılmadı", "notGitInitializedSubtitle": "Bu Workspace içinde değişiklikleri izlemek, commit oluşturmak ve branch araçlarını kullanmak için Git'i başlatın.", "initializeGit": "Git'i başlat", @@ -1963,6 +2114,25 @@ } }, "contextInfo": { + "cacheSaved": "Önbellekten tasarruf: {{read}} okuma, {{write}} yazma", + "remaining": "Boş: {{tokens}} kaldı", + "cacheHero": "%{{pct}} önbellekten sunuldu · bu turda ~{{tokens}} yeniden kullanıldı", + "cacheHeroSub": "İstem önbellekleme maliyeti %90’a kadar azaltabilir", + "headroom": "{{tokens}} kullanılabilir alan kaldı", + "manualCompactSectionTitle": "Manuel sıkıştırma", + "miniCpmCompactTitle": "MiniCPM sessiz otomatik sıkıştırma", + "miniCpmCompactDescription": "Eski bağlamı eşzamansız işler", + "miniCpmCompactToggleAria": "MiniCPM sessiz otomatik sıkıştırmayı etkinleştir", + "miniCpmCompactDisabled": "Sessiz sıkıştırma kapalı", + "miniCpmCompactEnabled": "Sessiz sıkıştırma açık", + "miniCpmCompactRunning": "MiniCPM sıkıştırıyor", + "miniCpmCompactComplete": "Sıkıştırma tamamlandı", + "miniCpmCompactBusy": "Geçerli oturum meşgul", + "miniCpmCompactUnavailable": "MiniCPM kullanılamıyor", + "miniCpmCompactError": "MiniCPM sıkıştırması başarısız", + "miniCpmCompactMetrics": "{{covered}} mesaj · {{source}} → {{summary}} token", + "miniCpmCompactAction": "Şimdi sıkıştır", + "miniCpmCompactRunningAction": "Sıkıştırılıyor", "contextUsed": "bağlam kullanıldı", "estimatedFromRules": "kurallardan tahmini", "activeRules": "Etkin kurallar", @@ -2037,6 +2207,7 @@ "parentFolderPlaceholder": "Parent folder seçin" }, "workspaceForm": { + "statusMaxRepos": "En fazla 5 depo seçilebilir", "title": "Çoklu Repo Workspace Oluştur", "editTitle": "Workspace Düzenle", "createWorkspace": "Çoklu repo Workspace oluştur", @@ -2268,11 +2439,31 @@ "previewAlt": "Önizleme" }, "update": { + "available": "Güncelleme mevcut", + "versionReady": "{{version}} sürümü indirilmeye hazır.", + "upToDateVersion": "ORGII güncel (v{{version}}).", + "upToDate": "ORGII güncel.", + "checkFailed": "Güncellemeler denetlenemedi", + "checking": "Güncellemeler denetleniyor…", + "downloadingEllipsis": "Güncelleme indiriliyor…", + "downloadingWithSize": "Güncelleme indiriliyor ({{size}})…", + "downloadingDownloaded": "Güncelleme indiriliyor… {{downloaded}}", + "downloadingPercent": "Güncelleme indiriliyor… %{{percent}}", + "installingEllipsis": "Güncelleme yükleniyor…", + "installed": "Güncelleme yüklendi", + "installFailed": "Güncelleme yüklenemedi", + "downloadTimedOut": "İndirme zaman aşımına uğradı. Ağınızı veya proxy ayarlarınızı denetleyip yeniden deneyin.", + "restarting": "Güncellemeyi tamamlamak için ORGII yeniden başlatılıyor.", + "preparingVersion": "v{{version}} indirmeye hazırlanıyor…", "downloading": "Güncelleme indiriliyor", "installing": "Güncelleme yükleniyor", "progressPercent": "%{{percent}}", "downloadedOfTotal": "{{downloaded}} / {{total}}", "preparingDownload": "İndirme hazırlanıyor…", "downloadingAndInstalling": "Güncelleme indiriliyor ve yükleniyor (v{{version}})…" + }, + "codeViewer": { + "original": "Orijinal", + "modified": "Değiştirilmiş" } } diff --git a/src/i18n/locales/tr/integrations.json b/src/i18n/locales/tr/integrations.json index 52a936a74..d06f4842c 100644 --- a/src/i18n/locales/tr/integrations.json +++ b/src/i18n/locales/tr/integrations.json @@ -1,10 +1,45 @@ { + "gitProfiles": { + "tab": "Git profilleri", + "title": "Git profilleri", + "add": "Profil ekle", + "refresh": "Profilleri yenile", + "refreshed": "Genel Git profili yenilendi", + "loading": "Genel Git profiliniz yükleniyor…", + "defaultProfile": "Varsayılan profil", + "newProfile": "Yeni profil", + "copyName": "{{name}} kopyası", + "profileName": "Profil adı", + "authorName": "Yazar adı", + "email": "E-posta", + "selectEmail": "E-posta seçin", + "signingKey": "İmzalama anahtarı", + "signingKeyPlaceholder": "GPG veya SSH imzalama anahtarı kimliği", + "signCommits": "Commitleri imzala", + "active": "Etkin", + "activate": "Profili etkinleştir", + "activated": "{{name}} artık genel Git profili", + "editRaw": "Ham yapılandırmayı düzenle", + "hideRaw": "Ham yapılandırmayı gizle", + "rawTitle": "Ham Git profili", + "rawConfig": "Git yapılandırması", + "updateFromRaw": "Profili yapılandırmadan güncelle", + "rawUpdated": "Profil ham Git yapılandırmasından güncellendi", + "rawInvalid": "Ham Git profili geçersiz", + "nameEmailRequired": "Yazar adı ve e-posta zorunludur", + "deleteTitle": "Git profilini sil", + "deleteMessage": "“{{name}}” profili silinsin mi? Bu işlem geçerli genel Git yapılandırmanızı değiştirmez.", + "loadFailed": "Genel Git profili yüklenemedi", + "applyFailed": "Git profili etkinleştirilemedi" + }, "scopeLabels": { "user": "User", "repoSpecific": "Repo-specific", "builtIn": "Yerleşik" }, "keyVault": { + "confirmRemoveActiveSessions_one": "{{count}} etkin oturum hâlâ bu hesabı kullanıyor ve sonraki turunda başarısız olacak:", + "confirmRemoveActiveSessions_other": "{{count}} etkin oturum hâlâ bu hesabı kullanıyor ve sonraki turlarında başarısız olacak:", "title": "Modeller & CLI", "overview": { "helpMyAccounts": "API anahtarları ekleyin ve CLI aracılarını yapılandırın. Anahtarlar yalnızca yerelde saklanır ve cihazınızdan çıkmaz.", @@ -29,10 +64,13 @@ "confirmDeleteTitle": "\"{{name}}\" silinsin mi?", "confirmDeleteMessage": "Bu liste pazar yerinden kalıcı olarak silinecek.", "toasts": { + "refreshedDelta": "Modeller yenilendi: +{{added}} eklendi, -{{removed}} kaldırıldı", + "refreshedNoChange": "Modeller yenilendi — değişiklik yok", + "refreshPartial": "Modeller yenilendi (+{{added}} / -{{removed}}), ancak {{total}} hesaptan {{failed}} tanesi başarısız oldu", "refreshed": "{{name}} başarıyla yenilendi", "refreshFailed": "{{name}} doğrulama başarısız - kimlik bilgilerini kontrol edin", "allRefreshed": "Tüm hesaplar yenilendi", - "refreshError": "{{name}} yenilenemedi", + "refreshError": "{{name}} yenilenemedi: {{error}}", "localRemoved": "{{name}} kaldırıldı", "unlistPending": "{{name}} listeden çıkarma istendi. Aktif Session sona erdiğinde kaldırılacak.", "listingRemoved": "{{name}} pazar yerinden kaldırıldı", @@ -1009,6 +1047,7 @@ "allImported": "Algılanan tüm MCP servers zaten içe aktarıldı" }, "categories": { + "housekeeper": "MiniCPM Bakımcısı", "git": "Git", "gitDesc": "Sürüm kontrolü ve depo barındırma", "channels": "Agent Channels", @@ -1272,6 +1311,8 @@ "smitheryApiKeyDesc": "Smithery'de MCP sunucularını taramak için API key. Get your key at smithery.ai/account/api-keys" }, "git": { + "autoCreatePr": "Pull request’leri otomatik oluştur", + "autoCreatePrDesc": "Bir özellik dalı tamamen push edilmiş ve temiz olduğunda Workstation Kaynak Denetimi’nde otomatik olarak pull request oluştur", "searchPlaceholder": "Git sağlayıcılarını ara...", "connections": "Git Bağlantıları", "noProvidersFound": "Git sağlayıcısı bulunamadı", @@ -1575,6 +1616,35 @@ "deleteConfirmMessage": "Bu işlem sunucuyu yapılandırma dosyasından kaldıracaktır. Aktif oturumlar kesilecektir." }, "agentOrgs": { + "cliManagedConfig": { + "title": "CLI yapılandırma geçişi", + "modeLabel": "Mod", + "modeDesc": "Varsayılan, CLI’ın kendi yapılandırmasını geri yükler. ORGII Yönetimli, yedeği alınmış bir proxy yapılandırması yazar.", + "modeDefault": "Varsayılan", + "modeOrgii": "ORGII Yönetimli", + "conflict": "Harici değişiklik", + "conflictTitle": "Çakışma", + "conflictDesc": "Etkin CLI yapılandırması ORGII tarafından yazıldıktan sonra değişti.", + "proxyStatus": "Proxy", + "proxyDefault": "Varsayılan mod", + "proxyReady": "Proxy hazır", + "proxyNotReady": "Proxy hazır değil", + "proxyDesc": "Yerel istekler ORGII KeyVault üzerinden yönlendirilir.", + "keyLabel": "Anahtar", + "keyDesc": "Yalnızca bu CLI ve yönetilen proxy ile uyumlu API anahtarları gösterilir.", + "selectKey": "Anahtar seçin", + "modelLabel": "Model", + "selectModel": "Model seçin", + "configFile": "Yapılandırma dosyaları", + "actions": "Eylemler", + "addKey": "Anahtar ekle", + "apply": "Uygula", + "restore": "Varsayılanı geri yükle", + "forceApply": "Zorla uygula", + "forceRestore": "Zorla geri yükle", + "applySuccess": "ORGII yönetimli yapılandırma uygulandı", + "restoreSuccess": "Varsayılan yapılandırma geri yüklendi" + }, "title": "Agent ekipleri", "running": "Çalışıyor", "fires": "tetikleme", @@ -2357,6 +2427,7 @@ } }, "devTools": { + "modeSessionLink": "Oturum bağlantısı", "mode": "Mod", "modeUi": "UI Önizleme", "modeTool": "Araçlar", @@ -2543,6 +2614,51 @@ } }, "housekeeper": { + "eyebrow": "MiniCPM Yerleşik Bakımcı", + "title": "Yerleşik Bakımcı", + "description": "Yerel MiniCPM; istem iyileştirme, kısa adım açıklamaları ve hafif kullanıcı arayüzü denetimini üstlenir. Kodlama görevleri ve karmaşık ADE kurulumu ana agent modelini kullanmaya devam eder.", + "autoAccount": "MiniCPM vLLM hesabını otomatik seç", + "tiles": { + "model": "Model", + "endpoint": "Uç nokta", + "safeContext": "Güvenli bağlam" + }, + "settings": { + "enabled": { + "title": "Bakımcıyı etkinleştir", + "description": "Devre dışıyken istem iyileştirme, adım açıklamaları ve hafif kullanıcı arayüzü denetimi MiniCPM kullanmaz." + }, + "account": { + "title": "vLLM MiniCPM hesabı", + "description": "Mevcut bir KeyVault vllm_api hesabını yeniden kullanır; ayrı bir kimlik bilgisi deposu oluşturulmaz." + }, + "model": { + "title": "Model kimliği", + "description": "Docker vLLM MiniCPM5-1B varsayılan olarak openbmb/MiniCPM5-1B kullanır." + }, + "context": { + "title": "Güvenli bağlam bütçesi", + "description": "Teorik 32k sınırına güvenmek yerine 4 GB GPU’larda ölçülü bir 10000 token bütçesi kullanın." + } + }, + "features": { + "promptPolish": { + "title": "İstem iyileştirme", + "description": "Daha güçlü kodlama modeline göndermeden önce girdiyi manuel olarak iyileştirin." + }, + "stepExplain": { + "title": "Agent adımı açıklamaları", + "description": "Oturum tekrarındaki adımlar için bir veya iki kısa Çince açıklama oluşturun." + }, + "uiControl": { + "title": "Hafif ADE/UI denetimi", + "description": "MiniCPM istekleri yalnızca katı bir yerel eylem izin listesine göre sınıflandırabilir." + }, + "contextCompact": { + "title": "Otomatik bağlam bakımı", + "description": "Etkin oturumlar boşta olduğunda MiniCPM’in eski bağlamın yalıtılmış, sürekli bir özetini tutmasına izin verin." + } + }, "addModel": "Model Ekle", "sections": { "configuration": "Yapılandırma", @@ -2550,6 +2666,13 @@ "diagnostics": "Tanılama" }, "health": { + "title": "Durum denetimi", + "idle": "/v1/models uç noktasını denetler ve küçük bir sohbet isteği gönderir.", + "checking": "Yerel vLLM MiniCPM hizmeti denetleniyor...", + "checkButton": "Bağlantıyı denetle", + "configureFirst": "Önce bir vLLM MiniCPM hesabı yapılandırın.", + "connectedTo": "{{baseUrl}} adresine bağlandı", + "failed": "MiniCPM durum denetimi başarısız.", "status": "Kontrol edilmedi" }, "benchmark": { diff --git a/src/i18n/locales/tr/navigation.json b/src/i18n/locales/tr/navigation.json index 037588773..3652c7dca 100644 --- a/src/i18n/locales/tr/navigation.json +++ b/src/i18n/locales/tr/navigation.json @@ -1,5 +1,6 @@ { "labels": { + "openSourceRepo": "Açık kaynak deposu", "devRecord": "Geliştirme Kaydı", "workItems": "İş Öğeleri", "codeSearch": "Kod Arama", @@ -144,6 +145,8 @@ "colleagues": "Ekip arkadaşlarını ara..." }, "folderCounts": { + "repo_plural": "{{count}} depo", + "multiRepoWorkspace_plural": "{{count}} çoklu depo çalışma alanı", "repo": "{{count}} Repo", "multiRepoWorkspace": "{{count}} çoklu repo Workspace" }, @@ -333,6 +336,26 @@ "addWorkspace": "Workspace ekle" }, "explore": { + "search": "Ara", + "searching": "Aranıyor...", + "searchPlaceholder": "GitHub depolarında ara (ör. language:rust tauri)", + "clone": "Klonla", + "cloning": "Klonlanıyor...", + "openOnGithub": "GitHub", + "cloneSuccess": "{{name}} klonlandı", + "cloneFailed": "Klonlama başarısız", + "cloneNoTarget": "Varsayılan çalışma alanı klasörü yapılandırılmamış. Ayarlar’dan belirleyin.", + "errorTitle": "Arama başarısız", + "noResultsTitle": "Eşleşen depo bulunamadı", + "noResultsSubtitle": "Farklı bir sorgu veya sıralama deneyin.", + "resultsCount": "{{total}} depodan {{shown}} tanesi", + "partial": "(kısmi — arama zaman aşımına uğradı)", + "sort": { + "bestMatch": "En iyi eşleşme", + "stars": "Yıldızlar", + "updated": "Son güncellenen", + "forks": "Forklar" + }, "title": "Keşfet" }, "workstation": { diff --git a/src/i18n/locales/tr/sessions.json b/src/i18n/locales/tr/sessions.json index 219959f82..5def6e9fa 100644 --- a/src/i18n/locales/tr/sessions.json +++ b/src/i18n/locales/tr/sessions.json @@ -1,4 +1,9 @@ { + "canvasApp": { + "empty": "Henüz tuval oluşturulmadı", + "sidebarTitle": "Tuvaller", + "noCanvases": "Henüz tuval yok" + }, "toolUsage": { "estimatedContext": "{{tokenCount}} Token bağlam", "followup": "{{tokenCount}} Token follow-up", @@ -89,6 +94,8 @@ "dataSource": "Veri kaynakları" }, "dataSource": { + "rescanUpdate": "Güncelle", + "rescanClear": "Temizle ve yeniden tara", "title": "Veri kaynakları", "description": "ORGII'nin algıladığı harici kodlama araçları. İçe aktarılabilir uygulamalar oturum sayısını gösterir ve yeniden taranabilir; diğerleri kurulum durumunu ve geçmişlerinin nerede olduğunu gösterir.", "rescanAll": "Tümünü yeniden tara", @@ -189,6 +196,8 @@ "cancelled": "Başarısız" }, "sidebar": { + "githubIssues": "GitHub Issue’ları", + "githubPrs": "GitHub PR’ları", "agentTypes": "Agent Türleri", "manageItems": "Öğeleri yönet", "sessionsView": "Sessions View", @@ -330,6 +339,16 @@ "tasksWillAppear": "Bu oturumda çalışma başladığında görevler burada görünür" }, "replay": { + "filters": { + "tooltip": "Olayları filtrele", + "allEvents": "Tüm olaylar", + "keyInteractions": "Temel etkileşimler", + "fileChanges": "Dosya değişiklikleri", + "terminalEvents": "Terminal olayları", + "explore": "Keşfet", + "other": "Diğer", + "selectedCount": "{{count}} filtre" + }, "following": "Takip ediliyor", "freeBrowsing": "Serbest gezinme", "replaying": "Oynatılıyor", @@ -435,6 +454,16 @@ "emptyForFilter": "Henüz Diff yok", "emptyDetail": "Diff'i görüntülemek için bir değişiklik seçin.", "submissions": { + "labels": { + "created": { + "commit": "Commit oluşturuldu", + "pullRequest": "PR oluşturuldu" + }, + "mentioned": { + "commit": "Commit belirtildi", + "pullRequest": "PR belirtildi" + } + }, "tabLabel": "Gönderimler", "commits": "Commits", "pr": "PR", @@ -703,6 +732,10 @@ "loading": "Editör yükleniyor..." }, "input": { + "pr": { + "open": "PR aç", + "creating": "PR oluşturuluyor…" + }, "editPlaceholder": "Mesajınızı düzenleyin...", "defaultPlaceholder": "Agent ile sohbet edin", "finishNextStep": "Tamam. Sonraki adım!", @@ -728,6 +761,7 @@ "selectedOf": "{{total}} içinden {{selected}} seçildi" }, "chat": { + "restoreCheckpoint": "Kontrol noktasını geri yükle", "planApprovedLabel": "Onaylanan plan uygulanıyor", "planApprovedEditedLabel": "Onaylanan plan uygulanıyor (düzenlendi)", "sessionStarted": "Session başlatıldı", @@ -1920,6 +1954,7 @@ "branchesTouched": "Branch'ler" }, "modelPill": { + "appliesNextTurn": "Hesap değiştirildi. Geçerli yanıt önceki hesapta çalışmaya devam eder; yeni hesap sonraki turda etkinleşir.", "immutableInSession": "Anahtar kaynağı, Agent türü ve fiyat kademesi oturum başlangıcında sabittir. Değiştirmek için yeni bir oturum başlatın." }, "creator": { @@ -2581,6 +2616,7 @@ "title": "Görev ayrıntılarını görüntüle" }, "list": { + "countLabel": "Görevler", "title": "Görev listesini görüntüle", "count": "{{taskCount}} görev", "empty": "Görev yok" @@ -2622,6 +2658,9 @@ } }, "cards": { + "session": { + "open": "Oturumu aç" + }, "openFile": "Düzenleyicide aç", "openLink": "Bağlantıyı aç", "broadcast": "→ Tüm ajanlar", @@ -2699,6 +2738,9 @@ "iframeTitle": "Kod önizleme" }, "canvasCard": { + "reactDisabledTitle": "React önizlemesi Simülatör’de çalışır", + "reactDisabledDescription": "Agent JavaScript kodu sohbet içinde çalıştırılmaz. Korumalı React önizlemesini çalıştırmak için Simülatör’de açın.", + "viewInSimulator": "Simülatör’de görüntüle", "titleHtml": "Agent Önizleme", "titleUrl": "Agent Önizleme", "titleA2ui": "Agent Önizleme", diff --git a/src/i18n/locales/tr/settings.json b/src/i18n/locales/tr/settings.json index fed6d5aca..9ab7d7881 100644 --- a/src/i18n/locales/tr/settings.json +++ b/src/i18n/locales/tr/settings.json @@ -790,6 +790,15 @@ "currentVersion": "Mevcut Sürüm" }, "monitor": { + "diskCategory_toolResults": "Büyük araç sonuçları", + "diskCategory_diagnostics": "Tanılama kuyruğu", + "diskCategory_models": "İndirilen modeller", + "diskCategory_codeMap": "Kod Haritası indeksleri", + "diskCategory_semanticIndex": "Anlamsal arama indeksi", + "diskCategory_cursorCliProfiles": "Cursor CLI profilleri", + "diskCategory_kiroCliProfiles": "Kiro CLI profilleri", + "diskCategory_opencodeCliProfiles": "OpenCode CLI profilleri", + "diskCategory_sidecarBin": "İndirilen yardımcı program ikilileri", "categoryTerminal": "Terminal/araç süreci", "categoryWebview": "WebView işleyici", "categoryGpu": "WebKit GPU", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index 59f58436a..3e95bd349 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -203,7 +203,14 @@ "openWorkspace": "Mở Workspace", "skipThisVersion": "Bỏ qua phiên bản này", "later": "Để sau", - "link": "Liên kết" + "link": "Liên kết", + "openOnGitHub": "Mở trên GitHub", + "createPullRequest": "Tạo pull request", + "newIssue": "Vấn đề mới", + "closeIssue": "Đóng vấn đề", + "reopenIssue": "Mở lại vấn đề", + "addComment": "Thêm bình luận", + "editIssue": "Chỉnh sửa vấn đề" }, "refreshToast": { "successName": "Đã làm mới {{name}}", @@ -438,7 +445,26 @@ "appliedCommits": "Applied commits", "noAppliedCommit": "No linked commit yet", "noSessionsForFile": "No sessions found for this file", - "committedRate": "Đã commit" + "committedRate": "Đã commit", + "noPullRequestForBranch": "Chưa có pull request cho nhánh này.", + "creatingPullRequest": "Đang tạo…", + "failedToLoadPullRequest": "Không thể tải pull request", + "noCommitsInPullRequest": "Pull request này chưa có commit", + "prStatus": { + "open": "Đang mở", + "merged": "Đã hợp nhất", + "closed": "Đã đóng", + "draft": "Bản nháp" + }, + "sendingNow": "đang gửi ngay…", + "issues": "Vấn đề", + "noIssues": "Không có vấn đề", + "openIssues": "Đang mở", + "closedIssues": "Đã đóng", + "issueComments": "{{count}} bình luận", + "issueComments_one": "1 bình luận", + "issueComments_other": "{{count}} bình luận", + "tokens": "Token" }, "searchModes": { "keywordLabel": "Từ khóa", @@ -795,6 +821,7 @@ }, "placeholders": { "loading": "Đang tải...", + "noResults": "Không có kết quả", "selectToViewConfig": "Chọn {{type}} để xem hoặc cấu hình", "selectToViewConfigSubtitle": "Chọn một mục từ danh sách bên trái", "noOptions": "Không có tùy chọn", @@ -1118,7 +1145,10 @@ "tryHeading": "Thử:", "tryCheckConnection": "Kiểm tra kết nối internet", "tryVerifyUrl": "Xác minh URL đúng", - "tryAgainLater": "Thử lại sau" + "tryAgainLater": "Thử lại sau", + "embeddedFallbackTitle": "Trang web này có thể không hoạt động trong trình duyệt nhúng", + "embeddedFallbackBody": "Một số trang web chặn hoặc không hiển thị được trong WebView của ứng dụng. Hãy mở bằng trình duyệt hệ thống nếu trang vẫn trống.", + "currentUrl": "URL hiện tại" }, "selectRepoFromHome": "Please select a repo from the home page", "cloneRepoAgain": "Please clone the repo again from the home page", @@ -1214,6 +1244,85 @@ "closed": "Đã đóng", "completed": "Hoàn tất", "notPlanned": "Không lên kế hoạch" + }, + "title": "Vấn đề", + "loading": "Đang tải vấn đề…", + "empty": "Không có vấn đề {{state}}", + "failedToLoad": "Không thể tải vấn đề", + "failedToCreate": "Không thể tạo vấn đề", + "failedToUpdate": "Không thể cập nhật vấn đề", + "failedToComment": "Không thể thêm bình luận", + "filterAll": "Tất cả", + "filterOpen": "Đang mở", + "filterClosed": "Đã đóng", + "noGitHubRepo": "Kết nối kho lưu trữ GitHub để quản lý vấn đề", + "commentPlaceholder": "Viết bình luận…", + "submitComment": "Bình luận", + "newIssueTitlePlaceholder": "Tiêu đề vấn đề", + "newIssueBodyPlaceholder": "Mô tả vấn đề (tùy chọn)…", + "authRequired": { + "title": "Kết nối GitHub", + "description": "Đi tới Cài đặt → Tích hợp → Git để kết nối tài khoản GitHub." + }, + "reAuthRequired": "Cần cấp quyền lại cho GitHub", + "reAuthDescription": "Token GitHub của bạn đã hết hạn. Đi tới Cài đặt → Tích hợp → Git để kết nối lại.", + "goToSettings": "Đi tới Cài đặt" + }, + "pr": { + "title": "Pull Request", + "baseBranch": "nhánh cơ sở", + "noDescription": "Chưa cung cấp mô tả.", + "loadingConversation": "Đang tải…", + "reviewNoBody": "Đã để lại bình luận đánh giá.", + "commentPlaceholder": "Viết bình luận…", + "comment": "Bình luận", + "approve": "Phê duyệt", + "requestChanges": "Yêu cầu thay đổi", + "reply": "Trả lời", + "replyPlaceholder": "Trả lời…", + "reviewThreads": "Bình luận đánh giá", + "tabs": { + "conversation": "Trao đổi", + "commits": "Commit", + "checks": "Kiểm tra", + "changes": "Thay đổi" + }, + "checks": { + "none": "Không có kiểm tra nào được báo cáo", + "noneHint": "Không có kiểm tra CI hoặc trạng thái nào chạy trên commit đầu của pull request này.", + "allPassed": "Tất cả kiểm tra đều đạt", + "someFailed": "Một số kiểm tra thất bại", + "pending": "Đang kiểm tra" + }, + "commits": { + "backToList": "Tất cả commit", + "none": "Không có commit" + }, + "changes": { + "title": "Tệp đã thay đổi", + "noFiles": "Không có thay đổi tệp", + "tooLarge": "Tệp quá lớn để hiển thị diff", + "unavailable": "Không có dữ liệu thay đổi", + "unavailableHint": "Không thể phân giải commit cơ sở và commit đầu của pull request." + }, + "creating": "Đang tạo pull request…", + "createError": "Không thể tạo pull request", + "readyHint": "Nhánh đã được push và sẵn sàng tạo pull request", + "neutralHint": "Push nhánh để tạo pull request", + "noBranch": "Chưa chọn nhánh", + "noRepoPath": "Không có đường dẫn kho lưu trữ", + "notAuthenticated": "Đăng nhập để tạo pull request", + "noOriginRemote": "Chưa cấu hình remote origin", + "cannotParseRepoName": "Không thể phân tích tên kho lưu trữ từ remote origin", + "status": { + "open": "Đang mở", + "merged": "Đã hợp nhất", + "closed": "Đã đóng", + "draft": "Bản nháp" + }, + "authRequired": { + "title": "Kết nối GitHub", + "description": "Đi tới Cài đặt → Tích hợp → Git để kết nối tài khoản GitHub." } } }, @@ -1262,7 +1371,8 @@ "repo": "Kho lưu trữ", "systemPaths": "Đường dẫn hệ thống", "usedElsewhere": "Được dùng ở nơi khác", - "workspace": "Workspace" + "workspace": "Workspace", + "recent": "Gần đây" }, "tabs": { "repositories": "Kho lưu trữ", @@ -1799,6 +1909,13 @@ "viewPie": "Tròn", "viewLine": "Đường", "linesByModel": "Dòng theo mô hình", + "cost": "Chi phí", + "estimatedCost": "Chi phí ước tính", + "estimated": "ƯỚC TÍNH", + "estimatedTooltip": "Chi phí ước tính — số token × giá niêm yết (nguồn này không ghi nhận chi tiêu thực tế)", + "totalEstimatedCost": "Chi phí ước tính", + "viewCost": "Chi phí", + "viewTokens": "Token", "completed": "Hoàn thành", "incomplete": "Chưa hoàn thành", "tabs": { @@ -1956,6 +2073,14 @@ }, "sessionFilter": { "allSessions": "Tất cả phiên" + }, + "scope": { + "local": "Cục bộ", + "main": "Checkout chính", + "worktrees": "Worktree", + "searchPlaceholder": "Lọc worktree…", + "switchScope": "Chuyển phạm vi quản lý mã nguồn", + "switchScopeActive": "Chuyển phạm vi quản lý mã nguồn: {{repo}}, {{branch}}" } }, "contextInfo": { @@ -1995,7 +2120,27 @@ "manualCompactNoRuntime": "Hãy gửi một tin nhắn trước khi nén", "manualCompactFailed": "Nén thất bại: {{message}}", "manualCompactChannelAttached": "Phiên này do một kênh quản lý — hãy dùng /compact ở đó", - "manualCompactInstructionsPlaceholder": "Tùy chọn: trọng tâm khi tóm tắt" + "manualCompactInstructionsPlaceholder": "Tùy chọn: trọng tâm khi tóm tắt", + "cacheSaved": "Đã tiết kiệm bộ nhớ đệm: đọc {{read}}, ghi {{write}}", + "remaining": "Còn trống: {{tokens}}", + "cacheHero": "{{pct}}% được phục vụ từ bộ nhớ đệm · tái sử dụng khoảng {{tokens}} trong lượt này", + "cacheHeroSub": "Bộ nhớ đệm prompt có thể giảm chi phí tới 90%", + "headroom": "Còn chỗ cho {{tokens}}", + "compactBoundarySubtitle_one": "Đã tóm tắt {{count}} tin nhắn trước đó", + "manualCompactSectionTitle": "Nén thủ công", + "miniCpmCompactTitle": "Tự động nén ngầm bằng MiniCPM", + "miniCpmCompactDescription": "Xử lý ngữ cảnh cũ hơn theo cách bất đồng bộ", + "miniCpmCompactToggleAria": "Bật tự động nén ngầm bằng MiniCPM", + "miniCpmCompactDisabled": "Tính năng nén ngầm đang tắt", + "miniCpmCompactEnabled": "Tính năng nén ngầm đang bật", + "miniCpmCompactRunning": "MiniCPM đang nén", + "miniCpmCompactComplete": "Đã nén xong", + "miniCpmCompactBusy": "Phiên hiện tại đang bận", + "miniCpmCompactUnavailable": "MiniCPM không khả dụng", + "miniCpmCompactError": "MiniCPM nén thất bại", + "miniCpmCompactMetrics": "{{covered}} tin nhắn · {{source}} → {{summary}} token", + "miniCpmCompactAction": "Nén ngay", + "miniCpmCompactRunningAction": "Đang nén" }, "relativeDate": { "today": "Hôm nay", @@ -2047,6 +2192,7 @@ "willInclude": "Workspace sẽ bao gồm {{count}} repo", "statusSelectAtLeastTwo": "Chọn ít nhất 2 repo", "statusReadyToCreate": "Sẵn sàng tạo Workspace", + "statusMaxRepos": "Đã chọn tối đa 5 repo", "defaultName": "Workspace", "defaultNameWithRepo": "Workspace {{repo}}", "windowTitle": "Workspace" @@ -2263,11 +2409,57 @@ "previewAlt": "Xem trước" }, "update": { + "available": "Có bản cập nhật", + "versionReady": "Phiên bản {{version}} đã sẵn sàng để tải xuống.", + "upToDateVersion": "ORGII đang ở phiên bản mới nhất (v{{version}}).", + "upToDate": "ORGII đang ở phiên bản mới nhất.", + "checkFailed": "Không thể kiểm tra bản cập nhật", + "checking": "Đang kiểm tra bản cập nhật…", "downloading": "Đang tải bản cập nhật", + "downloadingEllipsis": "Đang tải bản cập nhật…", + "downloadingWithSize": "Đang tải bản cập nhật ({{size}})…", + "downloadingDownloaded": "Đang tải bản cập nhật… {{downloaded}}", + "downloadingPercent": "Đang tải bản cập nhật… {{percent}}%", "installing": "Đang cài đặt bản cập nhật", + "installingEllipsis": "Đang cài đặt bản cập nhật…", + "installed": "Đã cài đặt bản cập nhật", + "installFailed": "Không thể cài đặt bản cập nhật", + "downloadTimedOut": "Quá thời gian tải xuống. Hãy kiểm tra mạng hoặc proxy rồi thử lại.", + "restarting": "Đang khởi động lại ORGII để hoàn tất cập nhật.", + "preparingVersion": "Đang chuẩn bị tải v{{version}}…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} trên {{total}}", "preparingDownload": "Đang chuẩn bị tải xuống…", "downloadingAndInstalling": "Đang tải và cài đặt bản cập nhật (v{{version}})…" + }, + "sqlEditor": { + "placeholder": "Nhập truy vấn SQL...", + "format": "Định dạng", + "runQueryToSeeResults": "Chạy truy vấn để xem kết quả", + "executingQuery": "Đang thực thi truy vấn...", + "queryFailed": "Truy vấn thất bại", + "queryCompleted": "Truy vấn hoàn tất", + "noResults": "Truy vấn không trả về kết quả", + "rowCount_one": "{{count}} hàng", + "rowCount_other": "{{count}} hàng", + "press": "Nhấn", + "toRun": "để chạy", + "nullValue": "NULL", + "booleanTrue": "đúng", + "booleanFalse": "sai" + }, + "uploadZone": { + "clickOrDrag": "Nhấp hoặc kéo tệp vào khu vực này để tải lên", + "supportFormats": "Hỗ trợ: {{accept}}" + }, + "chatImage": { + "maxReached": "Chỉ được phép tối đa {{max}} hình ảnh", + "remainingWarning": "Chỉ có thể thêm {{remaining}} hình ảnh nữa (tối đa {{max}})", + "processFailed": "Không thể xử lý hình ảnh", + "loadFailed": "Không thể tải hình ảnh: {{fileName}}" + }, + "codeViewer": { + "original": "Bản gốc", + "modified": "Đã sửa đổi" } } diff --git a/src/i18n/locales/vi/integrations.json b/src/i18n/locales/vi/integrations.json index 94f217946..ae8786db6 100644 --- a/src/i18n/locales/vi/integrations.json +++ b/src/i18n/locales/vi/integrations.json @@ -24,6 +24,8 @@ "unlist": "Hủy niêm yết", "confirmRemoveTitle": "Xóa \"{{name}}\"?", "confirmRemoveMessage": "Thông tin xác thực cục bộ sẽ bị xóa. Hành động này không thể hoàn tác.", + "confirmRemoveActiveSessions_one": "{{count}} phiên đang hoạt động vẫn sử dụng tài khoản này và sẽ thất bại ở lượt tiếp theo:", + "confirmRemoveActiveSessions_other": "{{count}} phiên đang hoạt động vẫn sử dụng tài khoản này và sẽ thất bại ở lượt tiếp theo:", "confirmUnlistTitle": "Hủy niêm yết \"{{name}}\"?", "confirmUnlistMessage": "Danh sách sẽ bị xóa khỏi marketplace. Thông tin xác thực cục bộ sẽ được giữ lại.", "confirmDeleteTitle": "Xóa \"{{name}}\"?", @@ -32,14 +34,17 @@ "refreshed": "{{name}} đã làm mới thành công", "refreshFailed": "{{name}} xác thực thất bại - kiểm tra thông tin đăng nhập", "allRefreshed": "Tất cả tài khoản đã được làm mới", - "refreshError": "Không thể làm mới {{name}}", + "refreshError": "Không thể làm mới {{name}}: {{error}}", "localRemoved": "{{name}} đã xóa", "unlistPending": "{{name}} yêu cầu hủy niêm yết. Sẽ được xóa khi các Session hoạt động kết thúc.", "listingRemoved": "{{name}} đã xóa khỏi marketplace", "listingDeleted": "{{name}} đã xóa", "deleteError": "Không thể xóa {{name}}", "published": "{{name}} đã đăng lên marketplace", - "publishError": "Không thể đăng {{name}}" + "publishError": "Không thể đăng {{name}}", + "refreshedDelta": "Đã làm mới mô hình: thêm {{added}}, xóa {{removed}}", + "refreshedNoChange": "Đã làm mới mô hình — không có thay đổi", + "refreshPartial": "Đã làm mới mô hình (+{{added}} / -{{removed}}), nhưng {{failed}} trong {{total}} tài khoản thất bại" }, "configure": "Cấu hình {{provider}}", "providerGroups": { @@ -1031,7 +1036,8 @@ "tools": "Công cụ tích hợp", "computerUse": "Computer Use", "rulesMemoryEvolution": "Quy tắc, Bộ nhớ & Tiến hóa", - "externalSkillsets": "Skills, MCPs & Plugins" + "externalSkillsets": "Skills, MCPs & Plugins", + "housekeeper": "Trình quản lý MiniCPM" }, "projectConnections": { "linear": "Linear", @@ -1341,7 +1347,42 @@ "oauthDeviceCodeDesc": "Mở URL bên dưới và nhập mã này", "oauthOpenGithub": "Mở GitHub", "oauthCancel": "Hủy", - "oauthFailed": "Cấp quyền thất bại" + "oauthFailed": "Cấp quyền thất bại", + "autoCreatePr": "Tự động tạo pull request", + "autoCreatePrDesc": "Tự động tạo pull request trong Quản lý mã nguồn của Workstation khi nhánh tính năng đã được push đầy đủ và không còn thay đổi" + }, + "gitProfiles": { + "tab": "Hồ sơ Git", + "title": "Hồ sơ Git", + "add": "Thêm hồ sơ", + "refresh": "Làm mới hồ sơ", + "refreshed": "Đã làm mới hồ sơ Git toàn cục", + "loading": "Đang tải hồ sơ Git toàn cục…", + "defaultProfile": "Hồ sơ mặc định", + "newProfile": "Hồ sơ mới", + "copyName": "Bản sao của {{name}}", + "profileName": "Tên hồ sơ", + "authorName": "Tên tác giả", + "email": "Email", + "selectEmail": "Chọn email", + "signingKey": "Khóa ký", + "signingKeyPlaceholder": "ID khóa ký GPG hoặc SSH", + "signCommits": "Ký commit", + "active": "Đang hoạt động", + "activate": "Kích hoạt hồ sơ", + "activated": "{{name}} hiện là hồ sơ Git toàn cục", + "editRaw": "Chỉnh sửa cấu hình thô", + "hideRaw": "Ẩn cấu hình thô", + "rawTitle": "Hồ sơ Git thô", + "rawConfig": "Cấu hình Git", + "updateFromRaw": "Cập nhật hồ sơ từ cấu hình", + "rawUpdated": "Đã cập nhật hồ sơ từ cấu hình Git thô", + "rawInvalid": "Hồ sơ Git thô không hợp lệ", + "nameEmailRequired": "Tên tác giả và email là bắt buộc", + "deleteTitle": "Xóa hồ sơ Git", + "deleteMessage": "Xóa hồ sơ “{{name}}”? Thao tác này không thay đổi cấu hình Git toàn cục hiện tại.", + "loadFailed": "Không thể tải hồ sơ Git toàn cục", + "applyFailed": "Không thể kích hoạt hồ sơ Git" }, "skillsHub": { "title": "Skills Hub", @@ -1579,6 +1620,35 @@ }, "agentOrgs": { "title": "Nhóm Agent", + "cliManagedConfig": { + "title": "Chuyển cấu hình CLI", + "modeLabel": "Chế độ", + "modeDesc": "Mặc định khôi phục cấu hình riêng của CLI. ORGII Quản lý ghi cấu hình proxy có bản sao lưu.", + "modeDefault": "Mặc định", + "modeOrgii": "ORGII Quản lý", + "conflict": "Thay đổi bên ngoài", + "conflictTitle": "Xung đột", + "conflictDesc": "Cấu hình CLI đang hoạt động đã thay đổi sau khi ORGII ghi cấu hình.", + "proxyStatus": "Proxy", + "proxyDefault": "Chế độ mặc định", + "proxyReady": "Proxy sẵn sàng", + "proxyNotReady": "Proxy chưa sẵn sàng", + "proxyDesc": "Các yêu cầu cục bộ được định tuyến qua ORGII KeyVault.", + "keyLabel": "Khóa", + "keyDesc": "Chỉ hiển thị API key tương thích với CLI này và proxy được quản lý.", + "selectKey": "Chọn khóa", + "modelLabel": "Mô hình", + "selectModel": "Chọn mô hình", + "configFile": "Tệp cấu hình", + "actions": "Hành động", + "addKey": "Thêm khóa", + "apply": "Áp dụng", + "restore": "Khôi phục mặc định", + "forceApply": "Buộc áp dụng", + "forceRestore": "Buộc khôi phục", + "applySuccess": "Đã áp dụng cấu hình do ORGII quản lý", + "restoreSuccess": "Đã khôi phục cấu hình mặc định" + }, "running": "Đang chạy", "fires": "lần kích hoạt", "addRoutine": "Thêm Routine", @@ -2363,6 +2433,7 @@ "mode": "Chế độ", "modeUi": "Xem trước UI", "modeTool": "Công cụ", + "modeSessionLink": "Liên kết phiên", "modeInput": "Đầu vào", "selectionMode": "Chọn", "selectionModeSingle": "Đơn", @@ -2546,6 +2617,51 @@ } }, "housekeeper": { + "eyebrow": "Trình quản lý MiniCPM thường trú", + "title": "Trình quản lý thường trú", + "description": "MiniCPM cục bộ xử lý việc trau chuốt prompt, giải thích ngắn các bước và điều khiển UI nhẹ. Tác vụ lập trình và thiết lập ADE phức tạp vẫn dùng mô hình Agent chính.", + "autoAccount": "Tự động chọn tài khoản MiniCPM vLLM", + "tiles": { + "model": "Mô hình", + "endpoint": "Điểm cuối", + "safeContext": "Ngữ cảnh an toàn" + }, + "settings": { + "enabled": { + "title": "Bật trình quản lý", + "description": "Khi tắt, MiniCPM sẽ không được dùng để trau chuốt prompt, giải thích bước và điều khiển UI nhẹ." + }, + "account": { + "title": "Tài khoản vLLM MiniCPM", + "description": "Tái sử dụng tài khoản vllm_api hiện có trong KeyVault; không tạo kho thông tin xác thực riêng." + }, + "model": { + "title": "ID mô hình", + "description": "Docker vLLM MiniCPM5-1B mặc định dùng openbmb/MiniCPM5-1B." + }, + "context": { + "title": "Ngân sách ngữ cảnh an toàn", + "description": "Dùng ngân sách thận trọng 10000 token trên GPU 4GB thay vì dựa vào giới hạn lý thuyết 32k." + } + }, + "features": { + "promptPolish": { + "title": "Trau chuốt prompt", + "description": "Trau chuốt thủ công nội dung nhập trước khi gửi đến mô hình lập trình mạnh hơn." + }, + "stepExplain": { + "title": "Giải thích bước của Agent", + "description": "Tạo một hoặc hai lời giải thích ngắn bằng tiếng Trung cho các bước phát lại phiên." + }, + "uiControl": { + "title": "Điều khiển ADE/UI nhẹ", + "description": "MiniCPM chỉ được phân loại yêu cầu vào danh sách hành động cục bộ cho phép nghiêm ngặt." + }, + "contextCompact": { + "title": "Tự động bảo trì ngữ cảnh", + "description": "Cho phép MiniCPM duy trì bản tóm tắt luân phiên, tách biệt của ngữ cảnh cũ khi các phiên đã bật ở trạng thái rảnh." + } + }, "addModel": "Thêm mô hình", "sections": { "configuration": "Cấu hình", @@ -2553,7 +2669,14 @@ "diagnostics": "Chẩn đoán" }, "health": { - "status": "Chưa kiểm tra" + "status": "Chưa kiểm tra", + "title": "Kiểm tra tình trạng", + "idle": "Kiểm tra /v1/models và gửi một yêu cầu chat nhỏ.", + "checking": "Đang kiểm tra dịch vụ vLLM MiniCPM cục bộ...", + "checkButton": "Kiểm tra kết nối", + "configureFirst": "Trước tiên hãy cấu hình tài khoản vLLM MiniCPM.", + "connectedTo": "Đã kết nối với {{baseUrl}}", + "failed": "Kiểm tra tình trạng MiniCPM thất bại." }, "benchmark": { "title": "Tốc độ đầu ra MiniCPM", diff --git a/src/i18n/locales/vi/navigation.json b/src/i18n/locales/vi/navigation.json index f4eeb51f2..8b56ab24c 100644 --- a/src/i18n/locales/vi/navigation.json +++ b/src/i18n/locales/vi/navigation.json @@ -38,6 +38,7 @@ "folders": "Thư mục", "inbox": "Hộp thư đến", "issues": "Hạng mục công việc", + "openSourceRepo": "Mở kho mã nguồn", "history": "Lịch sử", "controlTower": "Control Tower", "backgroundTasks": "Tác vụ nền", @@ -145,7 +146,9 @@ }, "folderCounts": { "repo": "{{count}} Repo", - "multiRepoWorkspace": "{{count}} Workspace đa Repo" + "repo_plural": "{{count}} repo", + "multiRepoWorkspace": "{{count}} Workspace đa Repo", + "multiRepoWorkspace_plural": "{{count}} Workspace đa Repo" }, "bottomBar": { "settings": "Cài đặt", @@ -333,7 +336,27 @@ "addWorkspace": "Thêm Workspace" }, "explore": { - "title": "Khám phá" + "title": "Khám phá", + "search": "Tìm kiếm", + "searching": "Đang tìm kiếm...", + "searchPlaceholder": "Tìm kho lưu trữ GitHub (ví dụ: language:rust tauri)", + "clone": "Sao chép", + "cloning": "Đang sao chép...", + "openOnGithub": "GitHub", + "cloneSuccess": "Đã sao chép {{name}}", + "cloneFailed": "Sao chép thất bại", + "cloneNoTarget": "Chưa cấu hình thư mục Workspace mặc định. Hãy thiết lập trong Cài đặt.", + "errorTitle": "Tìm kiếm thất bại", + "noResultsTitle": "Không có kho lưu trữ nào khớp", + "noResultsSubtitle": "Hãy thử truy vấn hoặc cách sắp xếp khác.", + "resultsCount": "{{shown}} trong {{total}} kho lưu trữ", + "partial": "(một phần — tìm kiếm quá thời gian)", + "sort": { + "bestMatch": "Phù hợp nhất", + "stars": "Số sao", + "updated": "Mới cập nhật", + "forks": "Số fork" + } }, "workstation": { "dockFilter": { diff --git a/src/i18n/locales/vi/sessions.json b/src/i18n/locales/vi/sessions.json index 4fb5709c8..f4f263358 100644 --- a/src/i18n/locales/vi/sessions.json +++ b/src/i18n/locales/vi/sessions.json @@ -93,6 +93,8 @@ "description": "Các công cụ lập trình bên ngoài mà ORGII phát hiện. Các ứng dụng có thể nhập hiển thị số phiên và có thể quét lại; số còn lại hiển thị trạng thái cài đặt và nơi lưu lịch sử.", "rescanAll": "Quét lại tất cả", "rescan": "Quét lại", + "rescanUpdate": "Cập nhật", + "rescanClear": "Xóa và quét lại", "rescanning": "Đang quét lại…", "enable": "Bật", "disable": "Tắt", @@ -122,6 +124,7 @@ "apps": "Ứng dụng", "clis": "CLI" }, + "sessions_one": "{{count}} phiên", "sessions_other": "{{count}} phiên", "details": { "path": "Đường dẫn", @@ -195,7 +198,11 @@ "views": "Chế độ xem", "cliAgent": "CLI Agent", "rustAgent": "Rust Agent", - "removeDraft": "Xóa bản nháp" + "removeDraft": "Xóa bản nháp", + "githubIssues": "Vấn đề GitHub", + "githubPrs": "PR GitHub", + "showSubagents": "Hiện subagent", + "hideSubagents": "Ẩn subagent" }, "resultStatus": { "completed": "Hoàn thành", @@ -350,6 +357,16 @@ "pause": "Tạm dừng", "playbackSpeed": "Tốc độ phát", "noEvents": "Không có sự kiện", + "filters": { + "tooltip": "Lọc sự kiện", + "allEvents": "Tất cả sự kiện", + "keyInteractions": "Tương tác chính", + "fileChanges": "Thay đổi tệp", + "terminalEvents": "Sự kiện terminal", + "explore": "Khám phá", + "other": "Khác", + "selectedCount": "{{count}} bộ lọc" + }, "agentHasNotUsedTool": "Agent chưa sử dụng công cụ này", "browser": { "tabs": { @@ -438,7 +455,17 @@ "empty": "Chưa có bài gửi", "selectSubmission": "Chọn một bài gửi để xem chi tiết", "noCommits": "Chưa có Commits", - "noPullRequests": "Chưa có Pull Requests" + "noPullRequests": "Chưa có Pull Requests", + "labels": { + "created": { + "commit": "Đã tạo commit", + "pullRequest": "Đã tạo PR" + }, + "mentioned": { + "commit": "Đã đề cập commit", + "pullRequest": "Đã đề cập PR" + } + } } }, "channelsSidebar": { @@ -718,7 +745,11 @@ "insert": "Chèn" }, "compactArgHint": "", - "compactCommandDescription": "Tóm tắt ngữ cảnh cũ để giải phóng dung lượng. Tùy chọn: /compact " + "compactCommandDescription": "Tóm tắt ngữ cảnh cũ để giải phóng dung lượng. Tùy chọn: /compact ", + "pr": { + "open": "Mở PR", + "creating": "Đang tạo PR…" + } }, "listPanel": { "showingOf": "Hiển thị {{filtered}} / {{total}}", @@ -731,6 +762,7 @@ "contentCopied": "Đã sao chép nội dung!", "failedToCopyContent": "Sao chép nội dung thất bại", "regenerate": "Tạo lại", + "restoreCheckpoint": "Khôi phục điểm kiểm tra", "copyTurn": "Sao chép lượt", "exportAsMarkdown": "Xuất dưới dạng Markdown", "exportSuccess": "Đã xuất phiên!", @@ -1917,7 +1949,8 @@ "branchesTouched": "Branch" }, "modelPill": { - "immutableInSession": "Nguồn khóa, loại Agent và bậc giá được cố định khi bắt đầu phiên. Bắt đầu phiên mới để thay đổi." + "immutableInSession": "Nguồn khóa, loại Agent và bậc giá được cố định khi bắt đầu phiên. Bắt đầu phiên mới để thay đổi.", + "appliesNextTurn": "Đã chuyển tài khoản. Phản hồi hiện tại vẫn chạy bằng tài khoản trước; tài khoản mới có hiệu lực từ lượt tiếp theo." }, "creator": { "createTarget": { @@ -2579,7 +2612,8 @@ "list": { "title": "Xem danh sách nhiệm vụ", "count": "{{taskCount}} nhiệm vụ", - "empty": "Không có nhiệm vụ" + "empty": "Không có nhiệm vụ", + "countLabel": "Nhiệm vụ" }, "statusLabel": "Trạng thái", "assignedBadge": "Đã giao", @@ -2620,6 +2654,9 @@ "cards": { "openFile": "Mở trong trình soạn thảo", "openLink": "Mở liên kết", + "session": { + "open": "Mở phiên" + }, "broadcast": "→ Tất cả Agent", "agentMessage": { "fallbackTitle": "Tin nhắn", @@ -2705,6 +2742,14 @@ "close": "Đóng", "summarize": "Tóm tắt với Agent", "waiting": "Đang chờ nội dung…", - "empty": "Không có nội dung" + "empty": "Không có nội dung", + "reactDisabledTitle": "Bản xem trước React chạy trong Trình mô phỏng", + "reactDisabledDescription": "JavaScript của Agent không được thực thi trong trò chuyện. Hãy mở trong Trình mô phỏng để chạy bản xem trước React trong sandbox.", + "viewInSimulator": "Xem trong Trình mô phỏng" + }, + "canvasApp": { + "empty": "Chưa hiển thị canvas nào", + "sidebarTitle": "Canvas", + "noCanvases": "Chưa có canvas" } } diff --git a/src/i18n/locales/vi/settings.json b/src/i18n/locales/vi/settings.json index 813028647..df681cb2f 100644 --- a/src/i18n/locales/vi/settings.json +++ b/src/i18n/locales/vi/settings.json @@ -890,6 +890,15 @@ "diskCategory_personalWorkspace": "Không gian làm việc OS Agent", "diskCategory_cursorConfig": "Cấu hình CLI Session", "diskCategory_extensions": "Tiện ích mở rộng", + "diskCategory_toolResults": "Kết quả công cụ quá lớn", + "diskCategory_diagnostics": "Hàng đợi chẩn đoán", + "diskCategory_models": "Mô hình đã tải xuống", + "diskCategory_codeMap": "Chỉ mục bản đồ mã", + "diskCategory_semanticIndex": "Chỉ mục tìm kiếm ngữ nghĩa", + "diskCategory_cursorCliProfiles": "Hồ sơ Cursor CLI", + "diskCategory_kiroCliProfiles": "Hồ sơ Kiro CLI", + "diskCategory_opencodeCliProfiles": "Hồ sơ OpenCode CLI", + "diskCategory_sidecarBin": "Tệp nhị phân sidecar đã tải xuống", "diskNotScanned": "Chưa quét", "diskScanning": "Đang quét...", "tableDetail": "Detail", diff --git a/src/i18n/locales/zh-Hant/common.json b/src/i18n/locales/zh-Hant/common.json index 3e3efb9ed..dcca17a59 100644 --- a/src/i18n/locales/zh-Hant/common.json +++ b/src/i18n/locales/zh-Hant/common.json @@ -203,6 +203,11 @@ "addWorkspace": "新增工作區", "openSpotlight": "開啟 Spotlight", "openWorkspace": "開啟工作區", + "newIssue": "新增 Issue", + "closeIssue": "關閉 Issue", + "reopenIssue": "重新開啟 Issue", + "addComment": "新增留言", + "editIssue": "編輯 Issue", "skipThisVersion": "跳過此版本", "later": "稍後", "link": "連結" @@ -417,6 +422,15 @@ "nearby": "附近", "renowned": "知名", "dragToReorder": "拖拽調整消息順序", + "sendingNow": "正在傳送…", + "issues": "Issues", + "noIssues": "沒有 Issue", + "openIssues": "開啟", + "closedIssues": "已關閉", + "issueComments": "{{count}} 則留言", + "issueComments_one": "1 則留言", + "issueComments_other": "{{count}} 則留言", + "tokens": "Tokens", "sessionBlame": "Session Blame", "agentBlame": "Agent Blame", "initializeAgentBlame": "Initialize Agent Blame", @@ -807,6 +821,7 @@ }, "placeholders": { "loading": "加載中...", + "noResults": "沒有結果", "selectToViewConfig": "選擇 {{type}} 以查看或配置", "selectToViewConfigSubtitle": "從左側列表中選擇一項", "noOptions": "無選項", @@ -1121,6 +1136,9 @@ "simulatorBrowserNotice": "此瀏覽器僅用於會話回放。持久瀏覽請使用主應用中的瀏覽器(工具 → 瀏覽器)。", "tlsDevNote": "說明:部分 HTTPS 網站(如 GitHub)在開發模式下可能因證書校驗出現 TLS 錯誤。請嘗試 HTTP 或 example.com 等簡單 HTTPS 站點。", "siteUnreachableTitle": "無法訪問此網站", + "embeddedFallbackTitle": "此網站可能無法在嵌入式瀏覽器中運作", + "embeddedFallbackBody": "部分網站會封鎖 App WebView 或無法在其中正常顯示。若頁面持續空白,請改用系統瀏覽器開啟。", + "currentUrl": "目前 URL", "errorTls": "與此站點的連接不安全。HTTPS 站點在開發模式下常會出現此情況。", "errorTimeout": "連接超時,服務器響應時間過長。", "errorDns": "無法解析服務器 DNS。請檢查網址是否拼寫正確。", @@ -1211,16 +1229,95 @@ "conflictedFiles": "衝突文件需要解決", "gitAction": "Git 操作" }, + "pr": { + "title": "Pull Request", + "baseBranch": "基底", + "noDescription": "未提供描述。", + "loadingConversation": "載入中…", + "reviewNoBody": "已留下審查留言。", + "commentPlaceholder": "留下留言…", + "comment": "留言", + "approve": "核准", + "requestChanges": "要求變更", + "reply": "回覆", + "replyPlaceholder": "回覆…", + "reviewThreads": "審查留言", + "tabs": { + "conversation": "對話", + "commits": "Commits", + "checks": "檢查", + "changes": "變更" + }, + "checks": { + "none": "沒有回報檢查結果", + "noneHint": "此 Pull Request 的最新 commit 未執行 CI 檢查或狀態檢查。", + "allPassed": "所有檢查皆已通過", + "someFailed": "部分檢查失敗", + "pending": "檢查進行中" + }, + "commits": { + "backToList": "所有 commits", + "none": "沒有 commit" + }, + "changes": { + "title": "已變更檔案", + "noFiles": "沒有檔案變更", + "tooLarge": "檔案過大,無法顯示 diff", + "unavailable": "無法取得變更", + "unavailableHint": "無法解析 Pull Request 的基底與最新 commit。" + }, + "creating": "正在建立 Pull Request…", + "createError": "建立 Pull Request 失敗", + "readyHint": "分支已推送,可以建立 Pull Request", + "neutralHint": "推送分支以建立 Pull Request", + "noBranch": "未選擇分支", + "noRepoPath": "沒有可用的 Repo 路徑", + "notAuthenticated": "登入後即可建立 Pull Request", + "noOriginRemote": "尚未設定 origin remote", + "cannotParseRepoName": "無法從 origin remote 解析 Repo 名稱", + "status": { + "open": "開啟", + "merged": "已合併", + "closed": "已關閉", + "draft": "草稿" + }, + "authRequired": { + "title": "連接 GitHub", + "description": "前往「設定 → 整合 → Git」連接你的 GitHub 帳號。" + } + }, "commit": { "copySha": "複製 SHA", "shaCopied": "SHA 已複製到剪貼簿" }, "issues": { + "title": "Issues", + "loading": "正在載入 Issues…", + "empty": "沒有{{state}}的 Issue", + "failedToLoad": "載入 Issues 失敗", + "failedToCreate": "建立 Issue 失敗", + "failedToUpdate": "更新 Issue 失敗", + "failedToComment": "新增留言失敗", + "filterAll": "全部", + "filterOpen": "開啟", + "filterClosed": "已關閉", + "noGitHubRepo": "連接 GitHub Repo 以管理 Issues", + "commentPlaceholder": "留下留言…", + "submitComment": "留言", + "newIssueTitlePlaceholder": "Issue 標題", + "newIssueBodyPlaceholder": "描述此 Issue(選填)…", + "authRequired": { + "title": "連接 GitHub", + "description": "前往「設定 → 整合 → Git」連接你的 GitHub 帳號。" + }, "updated": "最後更新", "notUpdated": "未更新", "assignedTo": "指派給 {{assignees}}", "commentCount_one": "{{count}} 則留言", "commentCount_other": "{{count}} 則留言", + "reAuthRequired": "需要重新授權 GitHub", + "reAuthDescription": "你的 GitHub token 已過期。請前往「設定 → 整合 → Git」重新連接。", + "goToSettings": "前往設定", "status": { "open": "開啟", "closed": "已關閉", @@ -1271,6 +1368,7 @@ "nonCoding": "工作區", "pinned": "固定", "current": "當前", + "recent": "最近", "repo": "倉庫", "systemPaths": "系統路徑", "usedElsewhere": "在其他位置使用", @@ -1818,6 +1916,13 @@ "linesByModel": "按模型行數", "completed": "已完成", "incomplete": "未完成", + "cost": "費用", + "estimatedCost": "預估費用", + "estimated": "預估", + "estimatedTooltip": "預估費用 — tokens × 定價(此來源沒有實際計量支出)", + "totalEstimatedCost": "預估費用", + "viewCost": "費用", + "viewTokens": "Tokens", "tabs": { "overview": "概覽", "cursor": "Cursor", @@ -1973,6 +2078,14 @@ }, "sessionFilter": { "allSessions": "所有會話" + }, + "scope": { + "local": "本機", + "main": "主要 checkout", + "worktrees": "Worktrees", + "searchPlaceholder": "篩選 Worktree…", + "switchScope": "切換原始碼控制範圍", + "switchScopeActive": "切換原始碼控制範圍:{{repo}},{{branch}}" } }, "contextInfo": { @@ -1984,6 +2097,11 @@ "contextShort": "context", "estimatedFill": "約 {{pct}}% 已用", "ariaLabel": "Context 用量", + "cacheSaved": "快取節省:讀取 {{read}},寫入 {{write}}", + "remaining": "可用:剩餘 {{tokens}}", + "cacheHero": "{{pct}}% 由快取提供 · 本輪重用約 {{tokens}}", + "cacheHeroSub": "Prompt 快取最多可降低 90% 費用", + "headroom": "剩餘 {{tokens}} 空間", "previewNote": "在會話開始前,根據規則檔案大小預估。", "categories": { "rules": "Rules", @@ -2000,8 +2118,11 @@ "autoCompactNote": "即將自動摘要上下文", "compactBoundaryTitle": "上下文已壓縮", "compactBoundarySubtitle": "已總結 {{count}} 則較早的訊息", + "compactBoundarySubtitle_one": "已總結 {{count}} 則較早的訊息", + "compactBoundarySubtitle_other": "已總結 {{count}} 則較早的訊息", "compactBoundaryTokens": "{{before}} → {{after}} tokens", "startNewSession": "開始新會話", + "manualCompactSectionTitle": "手動壓縮", "manualCompactAction": "手動壓縮", "manualCompactRunning": "壓縮中", "manualCompactInProgress": "正在壓縮上下文,完成後再傳送", @@ -2077,6 +2198,7 @@ "willInclude": "工作區將包含 {{count}} 個 Repo", "statusSelectAtLeastTwo": "請至少選擇 2 個 Repo", "statusReadyToCreate": "可以創建工作區", + "statusMaxRepos": "最多可選擇 5 個 Repo", "defaultName": "工作區", "defaultNameWithRepo": "{{repo}} 工作區", "windowTitle": "工作區" @@ -2137,6 +2259,32 @@ "pickerError": "無法打開選擇器" } }, + "sqlEditor": { + "placeholder": "輸入 SQL 查詢...", + "format": "格式化", + "runQueryToSeeResults": "執行查詢以查看結果", + "executingQuery": "正在執行查詢...", + "queryFailed": "查詢失敗", + "queryCompleted": "查詢完成", + "noResults": "查詢未傳回結果", + "rowCount_one": "{{count}} 列", + "rowCount_other": "{{count}} 列", + "press": "按下", + "toRun": "以執行", + "nullValue": "NULL", + "booleanTrue": "true", + "booleanFalse": "false" + }, + "uploadZone": { + "clickOrDrag": "點擊或將檔案拖曳至此區域上傳", + "supportFormats": "支援格式:{{accept}}" + }, + "chatImage": { + "maxReached": "最多允許 {{max}} 張圖片", + "remainingWarning": "還可新增 {{remaining}} 張圖片(上限 {{max}} 張)", + "processFailed": "處理圖片失敗", + "loadFailed": "載入圖片失敗:{{fileName}}" + }, "dragDrop": { "dropFilesToUpload": "拖放文件以上傳", "dropFileToChat": "拖放文件以添加到聊天", @@ -2293,11 +2441,31 @@ "previewAlt": "預覽" }, "update": { + "available": "有可用更新", + "versionReady": "版本 {{version}} 已可下載。", + "upToDateVersion": "ORGII 已是最新版本 (v{{version}})。", + "upToDate": "ORGII 已是最新版本。", + "checkFailed": "檢查更新失敗", + "checking": "正在檢查更新…", "downloading": "正在下載更新", + "downloadingEllipsis": "正在下載更新…", + "downloadingWithSize": "正在下載更新 ({{size}})…", + "downloadingDownloaded": "正在下載更新… {{downloaded}}", + "downloadingPercent": "正在下載更新… {{percent}}%", "installing": "正在安裝更新", + "installingEllipsis": "正在安裝更新…", + "installed": "更新已安裝", + "installFailed": "更新安裝失敗", + "downloadTimedOut": "下載逾時。請檢查網路或 Proxy 後重試。", + "restarting": "正在重新啟動 ORGII 以完成更新。", + "preparingVersion": "正在準備下載 v{{version}}…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} / {{total}}", "preparingDownload": "正在準備下載…", "downloadingAndInstalling": "正在下載並安裝更新 (v{{version}})…" + }, + "codeViewer": { + "original": "原始版本", + "modified": "修改後" } } diff --git a/src/i18n/locales/zh-Hant/integrations.json b/src/i18n/locales/zh-Hant/integrations.json index 2733f2b6c..9d9618b06 100644 --- a/src/i18n/locales/zh-Hant/integrations.json +++ b/src/i18n/locales/zh-Hant/integrations.json @@ -24,12 +24,17 @@ "unlist": "下架", "confirmRemoveTitle": "移除 \"{{name}}\"?", "confirmRemoveMessage": "這將移除本地賬戶配置,此操作無法撤銷。", + "confirmRemoveActiveSessions_one": "仍有 {{count}} 個使用中 Session 使用此帳號,下一輪將會失敗:", + "confirmRemoveActiveSessions_other": "仍有 {{count}} 個使用中 Session 使用此帳號,下一輪將會失敗:", "confirmUnlistTitle": "下架 \"{{name}}\"?", "confirmUnlistMessage": "這將從市場移除該列表,本地賬戶配置將保留。", "confirmDeleteTitle": "刪除 \"{{name}}\"?", "confirmDeleteMessage": "這將永久刪除市場中的該列表。", "toasts": { "refreshed": "{{name}} 刷新成功", + "refreshedDelta": "模型已重新整理:新增 {{added}} 個,移除 {{removed}} 個", + "refreshedNoChange": "模型已重新整理 — 沒有變更", + "refreshPartial": "模型已重新整理(+{{added}} / -{{removed}}),但 {{total}} 個帳號中有 {{failed}} 個失敗", "refreshFailed": "{{name}} 驗證失敗 - 請檢查密鑰", "allRefreshed": "所有賬戶已刷新", "refreshError": "{{name}} 重新整理失敗:{{error}}", @@ -2388,11 +2393,45 @@ "connectionNamePlaceholder": "自動:{{provider}}" } }, + "gitProfiles": { + "tab": "Git 設定檔", + "title": "Git 設定檔", + "add": "新增設定檔", + "refresh": "重新整理設定檔", + "refreshed": "已重新整理全域 Git 設定檔", + "loading": "正在載入你的全域 Git 設定檔…", + "defaultProfile": "預設設定檔", + "newProfile": "新增設定檔", + "copyName": "{{name}} 副本", + "profileName": "設定檔名稱", + "authorName": "作者名稱", + "email": "電子郵件", + "selectEmail": "選擇電子郵件", + "signingKey": "簽署金鑰", + "signingKeyPlaceholder": "GPG 或 SSH 簽署金鑰 ID", + "signCommits": "簽署 commits", + "active": "使用中", + "activate": "啟用設定檔", + "activated": "{{name}} 現為全域 Git 設定檔", + "editRaw": "編輯原始設定", + "hideRaw": "隱藏原始設定", + "rawTitle": "原始 Git 設定檔", + "rawConfig": "Git 設定", + "updateFromRaw": "從設定更新設定檔", + "rawUpdated": "已從原始 Git 設定更新設定檔", + "rawInvalid": "原始 Git 設定檔無效", + "nameEmailRequired": "作者名稱與電子郵件為必填", + "deleteTitle": "刪除 Git 設定檔", + "deleteMessage": "刪除設定檔「{{name}}」?這不會變更目前的全域 Git 設定。", + "loadFailed": "載入全域 Git 設定檔失敗", + "applyFailed": "啟用 Git 設定檔失敗" + }, "devTools": { "mode": "模式", "modeUi": "UI 預覽", "modeTool": "工具", "modeInput": "輸入", + "modeSessionLink": "Session 連結", "selectionMode": "選擇方式", "selectionModeSingle": "單選", "selectionModeMultiple": "多選", diff --git a/src/i18n/locales/zh-Hant/navigation.json b/src/i18n/locales/zh-Hant/navigation.json index f077f92a6..4dc05018a 100644 --- a/src/i18n/locales/zh-Hant/navigation.json +++ b/src/i18n/locales/zh-Hant/navigation.json @@ -6,6 +6,7 @@ "dbManager": "數據庫管理", "economy": "經濟", "sourceControl": "原始碼控制", + "openSourceRepo": "開啟開放原始碼 Repo", "startSession": "開始會話", "newSession": "新建會話", "quickstart": "快速開始", @@ -146,6 +147,8 @@ }, "folderCounts": { "repo": "{{count}}個倉庫", + "repo_plural": "{{count}} 個 Repo", + "multiRepoWorkspace_plural": "{{count}} 個多 Repo 工作區", "multiRepoWorkspace": "{{count}}個多倉庫工作區" }, "bottomBar": { @@ -425,6 +428,26 @@ "addWorkspace": "新增工作區" }, "explore": { + "search": "搜尋", + "searching": "搜尋中...", + "searchPlaceholder": "搜尋 GitHub Repo(例如 language:rust tauri)", + "clone": "Clone", + "cloning": "正在 Clone...", + "openOnGithub": "GitHub", + "cloneSuccess": "已 Clone {{name}}", + "cloneFailed": "Clone 失敗", + "cloneNoTarget": "尚未設定預設工作區資料夾。請前往設定進行設定。", + "errorTitle": "搜尋失敗", + "noResultsTitle": "沒有符合的 Repo", + "noResultsSubtitle": "請嘗試其他查詢或排序方式。", + "resultsCount": "顯示 {{shown}} / {{total}} 個 Repo", + "partial": "(部分結果 — 搜尋逾時)", + "sort": { + "bestMatch": "最佳相符項目", + "stars": "星標數", + "updated": "最近更新", + "forks": "Forks" + }, "title": "探索" }, "workstation": { diff --git a/src/i18n/locales/zh-Hant/sessions.json b/src/i18n/locales/zh-Hant/sessions.json index 64a32154d..59fdf4390 100644 --- a/src/i18n/locales/zh-Hant/sessions.json +++ b/src/i18n/locales/zh-Hant/sessions.json @@ -93,6 +93,9 @@ "description": "ORGII 偵測到的外部程式設計工具。可匯入的應用程式會顯示工作階段數量並可重新掃描;其餘僅顯示安裝狀態和歷史記錄所在位置。", "rescanAll": "全部重新掃描", "rescan": "重新掃描", + "rescanUpdate": "更新", + "rescanClear": "清除並重新掃描", + "sessions_one": "{{count}} 個 Session", "rescanning": "正在重新掃描…", "enable": "啟用", "disable": "停用", @@ -197,6 +200,8 @@ "rustAgent": "Rust Agent", "removeDraft": "刪除草稿", "showSubagents": "顯示子代理", + "githubIssues": "GitHub Issues", + "githubPrs": "GitHub PRs", "hideSubagents": "隱藏子代理" }, "resultStatus": { @@ -338,6 +343,16 @@ "followThisApp": "跟隨當前應用", "followApp": "跟隨 {{appName}}", "freeBrowsing": "自由瀏覽", + "filters": { + "tooltip": "篩選事件", + "allEvents": "所有事件", + "keyInteractions": "重要互動", + "fileChanges": "檔案變更", + "terminalEvents": "Terminal 事件", + "explore": "探索", + "other": "其他", + "selectedCount": "{{count}} 個篩選條件" + }, "replaying": "回放中", "freeBrowse": "自由瀏覽", "follow": "跟隨", @@ -447,6 +462,16 @@ "empty": "暫無提交", "selectSubmission": "選擇一項提交以查看詳情", "noCommits": "暫無 Commits", + "labels": { + "created": { + "commit": "已建立 commit", + "pullRequest": "已建立 PR" + }, + "mentioned": { + "commit": "已提及 commit", + "pullRequest": "已提及 PR" + } + }, "noPullRequests": "暫無 Pull Requests" } }, @@ -737,6 +762,7 @@ "contentCopied": "內容複製!", "failedToCopyContent": "複製內容失敗", "regenerate": "重新生成", + "restoreCheckpoint": "還原檢查點", "copyTurn": "複製對話", "exportAsMarkdown": "匯出為 Markdown", "exportSuccess": "會話匯出!", @@ -1923,6 +1949,7 @@ "branchesTouched": "分支" }, "modelPill": { + "appliesNextTurn": "帳號已切換。目前的回覆仍使用先前帳號;新帳號將從下一輪開始生效。", "immutableInSession": "密鑰來源、Agent 類型和價格檔位在會話啓動時已固定。如需更改請新建會話。" }, "creator": { @@ -2585,6 +2612,7 @@ "list": { "title": "查看任務列表", "count": "{{taskCount}} 個任務", + "countLabel": "任務", "empty": "暫無任務" }, "statusLabel": "狀態", @@ -2626,6 +2654,9 @@ "cards": { "openFile": "在編輯器中開啟", "openLink": "開啟連結", + "session": { + "open": "開啟 Session" + }, "broadcast": "→ 所有 Agent", "agentMessage": { "fallbackTitle": "訊息", @@ -2711,6 +2742,14 @@ "close": "關閉", "summarize": "讓 Agent 總結", "waiting": "等待內容中…", + "reactDisabledTitle": "React 預覽會在 Simulator 中執行", + "reactDisabledDescription": "聊天中不會執行 Agent JavaScript。請在 Simulator 中開啟,以執行沙箱化的 React 預覽。", + "viewInSimulator": "在 Simulator 中檢視", "empty": "無內容" + }, + "canvasApp": { + "empty": "尚未渲染 Canvas", + "sidebarTitle": "畫布", + "noCanvases": "尚無 Canvas" } } diff --git a/src/i18n/locales/zh-Hant/settings.json b/src/i18n/locales/zh-Hant/settings.json index a3e3cfdba..6ae116163 100644 --- a/src/i18n/locales/zh-Hant/settings.json +++ b/src/i18n/locales/zh-Hant/settings.json @@ -795,6 +795,15 @@ "categoryGpu": "WebKit GPU", "categoryNetwork": "WebKit 網路", "categoryOther": "輔助程序", + "diskCategory_toolResults": "大型工具結果", + "diskCategory_diagnostics": "診斷佇列", + "diskCategory_models": "已下載模型", + "diskCategory_codeMap": "Code Map 索引", + "diskCategory_semanticIndex": "語意搜尋索引", + "diskCategory_cursorCliProfiles": "Cursor CLI 設定檔", + "diskCategory_kiroCliProfiles": "Kiro CLI 設定檔", + "diskCategory_opencodeCliProfiles": "OpenCode CLI 設定檔", + "diskCategory_sidecarBin": "已下載的 Sidecar 執行檔", "breakdownBackendRss": "後端程序 RSS", "breakdownWebkitHelpers": "WebKit / WebView 輔助程序", "breakdownToolHelpers": "終端機與工具輔助程序", diff --git a/src/i18n/locales/zh/common.json b/src/i18n/locales/zh/common.json index 0c8eb668a..f2ccee7d5 100644 --- a/src/i18n/locales/zh/common.json +++ b/src/i18n/locales/zh/common.json @@ -75,6 +75,11 @@ } }, "actions": { + "newIssue": "新建 Issue", + "closeIssue": "关闭 Issue", + "reopenIssue": "重新打开 Issue", + "addComment": "添加评论", + "editIssue": "编辑 Issue", "save": "保存", "cancel": "取消", "delete": "删除", @@ -347,6 +352,14 @@ "filterByLanguage": "按语言筛选" }, "labels": { + "issues": "Issues", + "noIssues": "暂无 Issue", + "openIssues": "开放", + "closedIssues": "已关闭", + "issueComments": "{{count}} 条评论", + "issueComments_one": "1 条评论", + "issueComments_other": "{{count}} 条评论", + "tokens": "Token", "accounts": "账户", "enabled": "已启用", "disabled": "已禁用", @@ -1232,6 +1245,84 @@ "closed": "已关闭", "completed": "已完成", "notPlanned": "未计划" + }, + "loading": "正在加载 Issue…", + "empty": "没有{{state}}的 Issue", + "failedToLoad": "加载 Issue 失败", + "failedToCreate": "创建 Issue 失败", + "failedToUpdate": "更新 Issue 失败", + "failedToComment": "添加评论失败", + "filterAll": "全部", + "filterOpen": "开放", + "filterClosed": "已关闭", + "noGitHubRepo": "连接 GitHub 仓库以管理 Issue", + "commentPlaceholder": "留下评论…", + "submitComment": "评论", + "newIssueTitlePlaceholder": "Issue 标题", + "newIssueBodyPlaceholder": "描述 Issue(可选)…", + "authRequired": { + "title": "连接 GitHub", + "description": "前往设置 → 集成 → Git,连接你的 GitHub 账户。" + }, + "reAuthRequired": "需要重新授权 GitHub", + "reAuthDescription": "你的 GitHub Token 已过期。请前往设置 → 集成 → Git 重新连接。", + "goToSettings": "前往设置" + }, + "pr": { + "title": "Pull Request", + "baseBranch": "基础分支", + "noDescription": "未提供描述。", + "loadingConversation": "正在加载…", + "reviewNoBody": "已留下审查评论。", + "commentPlaceholder": "留下评论…", + "comment": "评论", + "approve": "批准", + "requestChanges": "请求更改", + "reply": "回复", + "replyPlaceholder": "回复…", + "reviewThreads": "审查评论", + "tabs": { + "conversation": "对话", + "commits": "Commit", + "checks": "检查", + "changes": "更改" + }, + "checks": { + "none": "未报告检查结果", + "noneHint": "此 Pull Request 的最新提交未运行 CI 检查或状态检查。", + "allPassed": "所有检查均已通过", + "someFailed": "部分检查失败", + "pending": "检查进行中" + }, + "commits": { + "backToList": "所有 Commit", + "none": "暂无 Commit" + }, + "changes": { + "title": "更改的文件", + "noFiles": "没有文件更改", + "tooLarge": "文件过大,无法显示 Diff", + "unavailable": "更改不可用", + "unavailableHint": "无法解析 Pull Request 的基础提交和最新提交。" + }, + "creating": "正在创建 Pull Request…", + "createError": "创建 Pull Request 失败", + "readyHint": "分支已推送,可以创建 Pull Request", + "neutralHint": "推送分支后即可创建 Pull Request", + "noBranch": "未选择分支", + "noRepoPath": "仓库路径不可用", + "notAuthenticated": "登录后才能创建 Pull Request", + "noOriginRemote": "未配置 origin 远程仓库", + "cannotParseRepoName": "无法从 origin 远程仓库解析仓库名称", + "status": { + "open": "开放", + "merged": "已合并", + "closed": "已关闭", + "draft": "草稿" + }, + "authRequired": { + "title": "连接 GitHub", + "description": "前往设置 → 集成 → Git,连接你的 GitHub 账户。" } } }, @@ -1825,6 +1916,13 @@ "linesByModel": "按模型行数", "completed": "已完成", "incomplete": "未完成", + "cost": "费用", + "estimatedCost": "预估费用", + "estimated": "预估", + "estimatedTooltip": "预估费用 — Token 数 × 标价(此来源不产生按量计费)", + "totalEstimatedCost": "预估费用", + "viewCost": "费用", + "viewTokens": "Token", "tabs": { "overview": "概览", "cursor": "Cursor", @@ -2021,6 +2119,8 @@ "autoCompactNote": "即将自动总结上下文", "compactBoundaryTitle": "上下文已压缩", "compactBoundarySubtitle": "已总结 {{count}} 条较早的消息", + "compactBoundarySubtitle_one": "已总结 {{count}} 条较早的消息", + "compactBoundarySubtitle_other": "已总结 {{count}} 条较早的消息", "compactBoundaryTokens": "{{before}} → {{after}} tokens", "manualCompactAction": "手动压缩", "manualCompactRunning": "压缩中", @@ -2097,6 +2197,7 @@ "workspaceNamePlaceholder": "我的工作区", "willInclude": "工作区将包含 {{count}} 个 Repo", "statusSelectAtLeastTwo": "请至少选择 2 个 Repo", + "statusMaxRepos": "最多选择 5 个 Repo", "statusReadyToCreate": "可以创建工作区", "defaultName": "工作区", "defaultNameWithRepo": "{{repo}} 工作区", @@ -2313,12 +2414,58 @@ "cancel": "取消", "confirm": "退出" }, + "sqlEditor": { + "placeholder": "输入 SQL 查询…", + "format": "格式化", + "runQueryToSeeResults": "运行查询以查看结果", + "executingQuery": "正在执行查询…", + "queryFailed": "查询失败", + "queryCompleted": "查询完成", + "noResults": "查询未返回结果", + "rowCount_one": "{{count}} 行", + "rowCount_other": "{{count}} 行", + "press": "按", + "toRun": "运行", + "nullValue": "NULL", + "booleanTrue": "true", + "booleanFalse": "false" + }, + "uploadZone": { + "clickOrDrag": "点击或将文件拖到此处上传", + "supportFormats": "支持:{{accept}}" + }, + "chatImage": { + "maxReached": "最多添加 {{max}} 张图片", + "remainingWarning": "还可添加 {{remaining}} 张图片(最多 {{max}} 张)", + "processFailed": "处理图片失败", + "loadFailed": "加载图片失败:{{fileName}}" + }, "update": { + "available": "有可用更新", + "versionReady": "版本 {{version}} 已可下载。", + "upToDateVersion": "ORGII 已是最新版本 (v{{version}})。", + "upToDate": "ORGII 已是最新版本。", + "checkFailed": "检查更新失败", + "checking": "正在检查更新…", "downloading": "正在下载更新", + "downloadingEllipsis": "正在下载更新…", + "downloadingWithSize": "正在下载更新 ({{size}})…", + "downloadingDownloaded": "正在下载更新… {{downloaded}}", + "downloadingPercent": "正在下载更新… {{percent}}%", "installing": "正在安装更新", + "installingEllipsis": "正在安装更新…", + "installed": "更新已安装", + "installFailed": "更新安装失败", + "downloadTimedOut": "下载超时。请检查网络或代理后重试。", + "restarting": "正在重启 ORGII 以完成更新。", + "preparingVersion": "正在准备下载 v{{version}}…", "progressPercent": "{{percent}}%", "downloadedOfTotal": "{{downloaded}} / {{total}}", "preparingDownload": "正在准备下载…", "downloadingAndInstalling": "正在下载并安装更新 (v{{version}})…" + }, + "codeViewer": { + "original": "原始版本", + "modified": "修改后" } } diff --git a/src/i18n/locales/zh/integrations.json b/src/i18n/locales/zh/integrations.json index fade5dd66..227df1d66 100644 --- a/src/i18n/locales/zh/integrations.json +++ b/src/i18n/locales/zh/integrations.json @@ -24,12 +24,16 @@ "unlist": "下架", "confirmRemoveTitle": "移除 \"{{name}}\"?", "confirmRemoveMessage": "这将移除本地账户配置,此操作无法撤销。", + "confirmRemoveActiveSessions_one": "仍有 {{count}} 个活跃会话在使用此账号,移除后其下一轮将失败:", "confirmRemoveActiveSessions_other": "仍有 {{count}} 个活跃会话在使用此账号,移除后它们的下一轮将失败:", "confirmUnlistTitle": "下架 \"{{name}}\"?", "confirmUnlistMessage": "这将从市场移除该列表,本地账户配置将保留。", "confirmDeleteTitle": "删除 \"{{name}}\"?", "confirmDeleteMessage": "这将永久删除市场中的该列表。", "toasts": { + "refreshedDelta": "模型已刷新:新增 {{added}} 个,移除 {{removed}} 个", + "refreshedNoChange": "模型已刷新,无变化", + "refreshPartial": "模型已刷新(新增 {{added}} 个 / 移除 {{removed}} 个),但 {{total}} 个账户中有 {{failed}} 个失败", "refreshed": "{{name}} 刷新成功", "refreshFailed": "{{name}} 验证失败 - 请检查密钥", "allRefreshed": "所有账户已刷新", @@ -2445,6 +2449,7 @@ "mode": "模式", "modeUi": "UI 预览", "modeTool": "工具", + "modeSessionLink": "会话关联", "modeInput": "输入", "selectionMode": "选择方式", "selectionModeSingle": "单选", diff --git a/src/i18n/locales/zh/navigation.json b/src/i18n/locales/zh/navigation.json index 87e0df284..de1b81926 100644 --- a/src/i18n/locales/zh/navigation.json +++ b/src/i18n/locales/zh/navigation.json @@ -1,5 +1,6 @@ { "labels": { + "openSourceRepo": "开源仓库", "devRecord": "开发记录", "workItems": "工作项", "codeSearch": "代码搜索", @@ -145,6 +146,8 @@ "colleagues": "搜索同事..." }, "folderCounts": { + "repo_plural": "{{count}} 个仓库", + "multiRepoWorkspace_plural": "{{count}} 个多仓库工作区", "repo": "{{count}}个仓库", "multiRepoWorkspace": "{{count}}个多仓库工作区" }, @@ -425,7 +428,27 @@ "addWorkspace": "添加工作区" }, "explore": { - "title": "探索" + "title": "探索", + "search": "搜索", + "searching": "正在搜索…", + "searchPlaceholder": "搜索 GitHub 仓库(例如 language:rust tauri)", + "clone": "克隆", + "cloning": "正在克隆…", + "openOnGithub": "GitHub", + "cloneSuccess": "已克隆 {{name}}", + "cloneFailed": "克隆失败", + "cloneNoTarget": "未配置默认工作区文件夹。请在设置中配置。", + "errorTitle": "搜索失败", + "noResultsTitle": "没有匹配的仓库", + "noResultsSubtitle": "请尝试其他查询或排序方式。", + "resultsCount": "显示 {{shown}} 个,共 {{total}} 个仓库", + "partial": "(部分结果 — 搜索超时)", + "sort": { + "bestMatch": "最佳匹配", + "stars": "星标数", + "updated": "最近更新", + "forks": "Fork 数" + } }, "workstation": { "dockFilter": { diff --git a/src/i18n/locales/zh/sessions.json b/src/i18n/locales/zh/sessions.json index 0f97766fa..2a1047bc9 100644 --- a/src/i18n/locales/zh/sessions.json +++ b/src/i18n/locales/zh/sessions.json @@ -89,6 +89,9 @@ "dataSource": "数据源" }, "dataSource": { + "rescanUpdate": "更新", + "rescanClear": "清除并重新扫描", + "sessions_one": "{{count}} 个会话", "title": "数据源", "description": "ORGII 检测到的外部编程工具。可导入的应用会显示会话数并可重新扫描;其余仅显示安装状态和历史记录所在位置。", "rescanAll": "全部重新扫描", @@ -197,7 +200,9 @@ "rustAgent": "Rust Agent", "removeDraft": "删除草稿", "showSubagents": "显示子代理", - "hideSubagents": "隐藏子代理" + "hideSubagents": "隐藏子代理", + "githubIssues": "GitHub Issues", + "githubPrs": "GitHub PR" }, "resultStatus": { "completed": "已完成", @@ -2608,6 +2613,7 @@ "list": { "title": "查看任务列表", "count": "{{taskCount}} 个任务", + "countLabel": "任务", "empty": "暂无任务" }, "statusLabel": "状态", @@ -2743,5 +2749,10 @@ "waiting": "等待内容中…", "empty": "无内容", "viewInSimulator": "在 Simulator 中查看" + }, + "canvasApp": { + "empty": "尚未渲染画布", + "sidebarTitle": "画布", + "noCanvases": "暂无画布" } } diff --git a/src/scaffold/AppUpdater/index.test.ts b/src/scaffold/AppUpdater/index.test.ts index ffa00118d..ff6817185 100644 --- a/src/scaffold/AppUpdater/index.test.ts +++ b/src/scaffold/AppUpdater/index.test.ts @@ -41,6 +41,19 @@ vi.mock("@src/hooks/logger", () => ({ }), })); +vi.mock("@src/i18n", () => ({ + default: { + t: ( + _key: string, + defaultValue: string, + values?: Record + ) => + defaultValue.replace(/\{\{(\w+)\}\}/g, (_match, name: string) => + String(values?.[name] ?? "") + ), + }, +})); + vi.mock("@src/util/core/state/instrumentedStore", () => ({ getInstrumentedStore: () => ({ get: mocks.storeGet, @@ -66,7 +79,7 @@ describe("AppUpdater", () => { await expect(checkForUpdatesManually()).resolves.toBe(update); - expect(mocks.check).toHaveBeenCalledOnce(); + expect(mocks.check).toHaveBeenCalledWith({ timeout: 30_000 }); expect(mocks.messageInfo).toHaveBeenCalledWith( expect.objectContaining({ content: "Version 1.1.20 is ready to download.", @@ -88,7 +101,39 @@ describe("AppUpdater", () => { await installAvailableAppUpdate(); expect(mocks.check).toHaveBeenCalledOnce(); - expect(downloadAndInstall).toHaveBeenCalledOnce(); + expect(downloadAndInstall).toHaveBeenCalledWith(expect.any(Function), { + timeout: 5 * 60_000, + }); expect(mocks.relaunch).toHaveBeenCalledOnce(); }); + + it("surfaces a retry action when the update download times out", async () => { + const downloadAndInstall = vi + .fn() + .mockRejectedValue(new Error("request timed out")); + mocks.getVersion.mockResolvedValue("1.1.23"); + mocks.check.mockResolvedValue({ + available: true, + currentVersion: "1.1.23", + downloadAndInstall, + version: "1.1.24", + }); + + await installAvailableAppUpdate(); + + expect(mocks.relaunch).not.toHaveBeenCalled(); + expect(mocks.messageError).toHaveBeenCalledWith( + expect.objectContaining({ + content: + "The download timed out. Check your network or proxy, then retry.", + duration: 0, + title: "Update install failed", + cancel: expect.objectContaining({ + closeOnClick: false, + label: "Retry", + }), + }) + ); + expect(mocks.storeSet).toHaveBeenLastCalledWith(expect.anything(), false); + }); }); diff --git a/src/scaffold/AppUpdater/index.tsx b/src/scaffold/AppUpdater/index.tsx index 99da17681..c033f0bea 100644 --- a/src/scaffold/AppUpdater/index.tsx +++ b/src/scaffold/AppUpdater/index.tsx @@ -5,7 +5,9 @@ import { atom, useAtomValue } from "jotai"; import React, { useEffect } from "react"; import Message from "@src/components/Message"; +import { useVisiblePolling } from "@src/hooks/async"; import { createLogger } from "@src/hooks/logger"; +import i18n from "@src/i18n"; import { getInstrumentedStore } from "@src/util/core/state/instrumentedStore"; const log = createLogger("AppUpdater"); @@ -18,6 +20,8 @@ const UPDATE_CHECK_INTERVAL_MS = 2 * 60 * 60_000; const FOREGROUND_CHECK_MIN_INTERVAL_MS = 5 * 60_000; const INSTALL_PROGRESS_MESSAGE_MIN_INTERVAL_MS = 2_000; const UPDATE_TOAST_DURATION_MS = 5_000; +const UPDATE_CHECK_TIMEOUT_MS = 30_000; +const UPDATE_DOWNLOAD_TIMEOUT_MS = 5 * 60_000; // Reused toast slots so status updates replace in place instead of stacking. const CHECK_TOAST_ID = "app-update-check"; @@ -40,7 +44,20 @@ function store() { function getErrorMessage(error: unknown): string { if (error instanceof Error) return error.message; - return typeof error === "string" ? error : "Unknown error"; + return typeof error === "string" + ? error + : i18n.t("common:errors.unknownError", "Unknown error"); +} + +function getInstallErrorMessage(error: unknown): string { + const message = getErrorMessage(error); + if (/timed?\s*out|timeout/i.test(message)) { + return i18n.t( + "common:update.downloadTimedOut", + "The download timed out. Check your network or proxy, then retry." + ); + } + return message; } function getCachedUpdate(): Update | null { @@ -67,8 +84,12 @@ function notifyCheckSuccess( if (update) { Message.info({ id: CHECK_TOAST_ID, - title: "Update available", - content: `Version ${update.version} is ready to download.`, + title: i18n.t("common:update.available", "Update available"), + content: i18n.t( + "common:update.versionReady", + "Version {{version}} is ready to download.", + { version: update.version } + ), duration: UPDATE_TOAST_DURATION_MS, }); return; @@ -77,8 +98,12 @@ function notifyCheckSuccess( Message.success({ id: CHECK_TOAST_ID, content: currentVersion - ? `ORGII is up to date (v${currentVersion}).` - : "ORGII is up to date.", + ? i18n.t( + "common:update.upToDateVersion", + "ORGII is up to date (v{{version}}).", + { version: currentVersion } + ) + : i18n.t("common:update.upToDate", "ORGII is up to date."), duration: UPDATE_TOAST_DURATION_MS, }); } @@ -90,7 +115,7 @@ function notifyCheckFailure(error: unknown, notify: boolean): void { if (!notify) return; Message.error({ id: CHECK_TOAST_ID, - title: "Update check failed", + title: i18n.t("common:update.checkFailed", "Update check failed"), content: message, duration: UPDATE_TOAST_DURATION_MS, }); @@ -102,7 +127,7 @@ async function runUpdateCheck(notify: boolean): Promise { if (notify) { Message.info({ id: CHECK_TOAST_ID, - content: "Checking for updates…", + content: i18n.t("common:update.checking", "Checking for updates…"), duration: 0, }); } @@ -110,7 +135,7 @@ async function runUpdateCheck(notify: boolean): Promise { try { const [currentVersion, update] = await Promise.all([ getVersion().catch(() => undefined), - check(), + check({ timeout: UPDATE_CHECK_TIMEOUT_MS }), ]); setCachedUpdate(update); @@ -166,15 +191,29 @@ function createProgressReporter(): (event: DownloadEvent) => void { switch (event.event) { case "Started": return total - ? `Downloading update (${formatBytes(total)})…` - : "Downloading update…"; + ? i18n.t( + "common:update.downloadingWithSize", + "Downloading update ({{size}})…", + { size: formatBytes(total) } + ) + : i18n.t("common:update.downloadingEllipsis", "Downloading update…"); case "Progress": { - if (!total) return `Downloading update… ${formatBytes(downloaded)}`; + if (!total) { + return i18n.t( + "common:update.downloadingDownloaded", + "Downloading update… {{downloaded}}", + { downloaded: formatBytes(downloaded) } + ); + } const percent = Math.min(100, Math.round((downloaded / total) * 100)); - return `Downloading update… ${percent}%`; + return i18n.t( + "common:update.downloadingPercent", + "Downloading update… {{percent}}%", + { percent } + ); } case "Finished": - return "Installing update…"; + return i18n.t("common:update.installingEllipsis", "Installing update…"); } }; @@ -210,17 +249,26 @@ export async function installAvailableAppUpdate(): Promise { try { Message.info({ id: INSTALL_TOAST_ID, - title: "Installing update", - content: `Preparing to download v${update.version}…`, + title: i18n.t("common:update.installing", "Installing update"), + content: i18n.t( + "common:update.preparingVersion", + "Preparing to download v{{version}}…", + { version: update.version } + ), duration: 0, }); - await update.downloadAndInstall(createProgressReporter()); + await update.downloadAndInstall(createProgressReporter(), { + timeout: UPDATE_DOWNLOAD_TIMEOUT_MS, + }); Message.success({ id: INSTALL_TOAST_ID, - title: "Update installed", - content: "Restarting ORGII to finish the update.", + title: i18n.t("common:update.installed", "Update installed"), + content: i18n.t( + "common:update.restarting", + "Restarting ORGII to finish the update." + ), duration: 2500, }); @@ -229,9 +277,14 @@ export async function installAvailableAppUpdate(): Promise { } catch (error) { Message.error({ id: INSTALL_TOAST_ID, - title: "Update install failed", - content: getErrorMessage(error), - duration: 6000, + title: i18n.t("common:update.installFailed", "Update install failed"), + content: getInstallErrorMessage(error), + duration: 0, + cancel: { + label: i18n.t("common:actions.retry", "Retry"), + onClick: () => void installAvailableAppUpdate(), + closeOnClick: false, + }, }); log.error("Update install failed", error); } finally { @@ -248,27 +301,30 @@ export function useIsAppUpdateInstalling(): boolean { } export const AppUpdater: React.FC = () => { + const pollForUpdates = React.useCallback(async () => { + await checkForAppUpdates(); + }, []); + + useVisiblePolling({ + enabled: true, + intervalMs: UPDATE_CHECK_INTERVAL_MS, + poll: pollForUpdates, + immediate: false, + }); + useEffect(() => { const startupTimer = window.setTimeout(() => { void checkForAppUpdates(); }, STARTUP_CHECK_DELAY_MS); - const interval = window.setInterval(() => { - void checkForAppUpdates({ force: true }); - }, UPDATE_CHECK_INTERVAL_MS); - const checkWhenVisible = () => { if (document.visibilityState === "visible") void checkForAppUpdates(); }; window.addEventListener("focus", checkWhenVisible); - document.addEventListener("visibilitychange", checkWhenVisible); - return () => { window.clearTimeout(startupTimer); - window.clearInterval(interval); window.removeEventListener("focus", checkWhenVisible); - document.removeEventListener("visibilitychange", checkWhenVisible); }; }, []);