From 58f6533ab1abd0e25ee374c848e1457d685231d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Salavisa?= Date: Fri, 7 Aug 2026 19:52:28 +0200 Subject: [PATCH] feat(i18n): close the pt-PT parity gap (1,794 keys) (#2386) Co-authored-by: Kandev Agent Co-authored-by: Claude Opus 5 (1M context) --- apps/web/package.json | 3 +- apps/web/scripts/i18n-parity.mjs | 194 ++++ apps/web/scripts/i18n-parity.test.ts | 166 ++++ apps/web/src/locales/pt-pt/common.json | 203 ++++- apps/web/src/locales/pt-pt/integrations.json | 31 +- apps/web/src/locales/pt-pt/office.json | 891 +++++++++++++++++++ apps/web/src/locales/pt-pt/settings.json | 3 + apps/web/src/locales/pt-pt/sidebar.json | 7 + apps/web/src/locales/pt-pt/system.json | 19 + apps/web/src/locales/pt-pt/task.json | 655 ++++++++++++++ apps/web/src/locales/pt-pt/workflows.json | 7 + 11 files changed, 2168 insertions(+), 11 deletions(-) create mode 100644 apps/web/scripts/i18n-parity.mjs create mode 100644 apps/web/scripts/i18n-parity.test.ts create mode 100644 apps/web/src/locales/pt-pt/office.json diff --git a/apps/web/package.json b/apps/web/package.json index e1cc413756..cad71e7b61 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -28,7 +28,8 @@ "i18n:check": "node scripts/check-i18n-keys.mjs && node scripts/check-trans-indices.mjs && node scripts/check-inline-plurals.mjs && node scripts/check-module-scope-t.mjs", "i18n:ratchet": "node scripts/run-i18n-ratchet.mjs", "i18n:removed": "node scripts/check-removed-literals.mjs", - "i18n:sweep": "node scripts/i18n-sweep.mjs" + "i18n:sweep": "node scripts/i18n-sweep.mjs", + "i18n:parity": "node scripts/i18n-parity.mjs" }, "dependencies": { "@base-ui/react": "^1.0.0", diff --git a/apps/web/scripts/i18n-parity.mjs b/apps/web/scripts/i18n-parity.mjs new file mode 100644 index 0000000000..bb97999db8 --- /dev/null +++ b/apps/web/scripts/i18n-parity.mjs @@ -0,0 +1,194 @@ +#!/usr/bin/env node +/** + * Report translation-catalog parity: how many `en` keys each real locale is + * missing, and which keys it still carries that `en` no longer defines. + * + * WHY THIS EXISTS + * + * Real-locale parity is deliberately advisory (#2272): Chinese is maintained by + * a third party and must never be able to fail our builds. That decision stands. + * Its cost is that drift is silent — pt-PT shipped complete and then fell 1,791 + * keys behind, an entire absent namespace among them, without any check going + * red. The measurement existed only as a snippet people pasted into chat logs, + * which is the same as not existing. This makes it a command. + * + * It is a REPORT, NOT A GATE. It exits 0 whatever it finds, and it is wired into + * neither CI, nor pre-commit, nor `i18n:check`. Making it fail a build would + * quietly overturn #2272. The one exception is input it cannot read (a malformed + * catalog throws and exits non-zero) — the same line `i18n-sweep.mjs` draws, + * because an unparseable file is a broken input, not a finding. + * + * Locales and namespaces are both discovered from disk via the same helpers + * `check-i18n-keys.mjs` uses, so the two can never disagree about what a locale + * is. Adding `fr/` tomorrow extends the report with no edit here; a hardcoded + * list is the exact shape that let the last gap hide. + * + * WHAT A CLEAN RUN DOES *NOT* TELL YOU + * + * 1. It counts MISSING KEYS ONLY. A key whose English text changed after it was + * translated still counts as present, so the locale looks complete while the + * translation says something the source no longer says. Stale translations are + * invisible to this script and no check in this repo detects them today. + * 2. It measures PRESENCE, NOT QUALITY. Every key can be present and every one of + * them wrong, machine-translated, or in the wrong regional variant, and this + * prints a clean table. The pseudo-locale (Settings > General > Appearance) + * and human review remain the only checks on whether the copy is any good. + * + * One deliberate difference from `check-i18n-keys.mjs`: there, a wholly-absent + * namespace scores as a single advisory issue. Here it counts as every key it + * would have contained. That difference is the whole point — 889 absent keys + * reported as "1" is precisely how an entire missing namespace stayed invisible. + * + * Usage: node scripts/i18n-parity.mjs [localesDir] + */ +import path from "node:path"; + +import { discoverRealLocales, readLocaleNamespaces } from "./lib/i18n-catalogs.mjs"; + +const DEFAULT_LOCALES_DIR = path.join(import.meta.dirname, "..", "src", "locales"); +const LOCALES_DIR = process.argv[2] ?? DEFAULT_LOCALES_DIR; + +const SOURCE_LOCALE = "en"; + +/** + * Per-namespace counts for one locale. + * + * `missing` treats an absent namespace file as all of its `en` keys missing — + * see the note above on why this deliberately diverges from the advisory check. + */ +function localeReport(sourceNamespaces, translatedNamespaces) { + const missingByNamespace = new Map(); + const extraKeys = []; + const absentNamespaces = []; + + for (const [namespace, sourceMessages] of sourceNamespaces) { + const translatedMessages = translatedNamespaces.get(namespace); + if (!translatedMessages) { + missingByNamespace.set(namespace, sourceMessages.size); + absentNamespaces.push(namespace); + continue; + } + let missing = 0; + for (const key of sourceMessages.keys()) if (!translatedMessages.has(key)) missing += 1; + missingByNamespace.set(namespace, missing); + for (const key of translatedMessages.keys()) { + if (!sourceMessages.has(key)) extraKeys.push(`${namespace}: ${key}`); + } + } + + // A namespace the locale has and `en` does not is extra in its entirety. + const extraNamespaces = [...translatedNamespaces.keys()].filter( + (ns) => !sourceNamespaces.has(ns), + ); + + return { missingByNamespace, extraKeys, extraNamespaces, absentNamespaces }; +} + +function pad(value, width, align = "right") { + const text = String(value); + return align === "right" ? text.padStart(width) : text.padEnd(width); +} + +function renderTable(sourceNamespaces, locales, reports) { + const namespaces = [...sourceNamespaces.keys()]; + const rowLabel = (ns) => `${ns}.json`; + + const nameWidth = Math.max("namespace".length, ...namespaces.map((ns) => rowLabel(ns).length), 5); + const columnWidth = (locale, values) => + Math.max(locale.length, ...values.map((v) => String(v).length), 4) + 2; + + const sourceTotal = namespaces.reduce((sum, ns) => sum + sourceNamespaces.get(ns).size, 0); + const sourceValues = [...namespaces.map((ns) => sourceNamespaces.get(ns).size), sourceTotal]; + const sourceWidth = columnWidth(SOURCE_LOCALE, sourceValues); + + const localeTotals = locales.map((locale) => + namespaces.reduce((sum, ns) => sum + reports.get(locale).missingByNamespace.get(ns), 0), + ); + const localeWidths = locales.map((locale, index) => + columnWidth(locale, [ + ...namespaces.map((ns) => reports.get(locale).missingByNamespace.get(ns)), + localeTotals[index], + ]), + ); + + const lines = []; + lines.push( + pad("namespace", nameWidth, "left") + + pad(SOURCE_LOCALE, sourceWidth) + + locales.map((locale, i) => pad(locale, localeWidths[i])).join(""), + ); + + const ruleWidth = nameWidth + sourceWidth + localeWidths.reduce((a, b) => a + b, 0); + const rule = "-".repeat(ruleWidth); + lines.push(rule); + + for (const ns of namespaces) { + lines.push( + pad(rowLabel(ns), nameWidth, "left") + + pad(sourceNamespaces.get(ns).size, sourceWidth) + + locales + .map((locale, i) => pad(reports.get(locale).missingByNamespace.get(ns), localeWidths[i])) + .join(""), + ); + } + + lines.push(rule); + lines.push( + pad("TOTAL", nameWidth, "left") + + pad(sourceTotal, sourceWidth) + + localeTotals.map((total, i) => pad(total, localeWidths[i])).join(""), + ); + return lines.join("\n"); +} + +const sourceNamespaces = readLocaleNamespaces(LOCALES_DIR, SOURCE_LOCALE); +const locales = discoverRealLocales(LOCALES_DIR); +const reports = new Map( + locales.map((locale) => [ + locale, + localeReport(sourceNamespaces, readLocaleNamespaces(LOCALES_DIR, locale)), + ]), +); + +// Say what was measured over, always. A tool that reports "0 missing" without +// naming its denominator is indistinguishable from one that scanned nothing. +const sourceKeyCount = [...sourceNamespaces.values()].reduce((sum, m) => sum + m.size, 0); +console.log( + `scanned ${sourceNamespaces.size} namespace(s) / ${sourceKeyCount} ${SOURCE_LOCALE} key(s) ` + + `across ${locales.length} locale(s) from ${LOCALES_DIR}`, +); + +if (sourceNamespaces.size === 0) { + console.log(`\nNo ${SOURCE_LOCALE} catalog found — nothing to compare against.`); +} else if (locales.length === 0) { + console.log(`\nNo real locales found (${SOURCE_LOCALE} and pseudo are excluded).`); +} else { + console.log(`\nMISSING KEYS — the ${SOURCE_LOCALE} column is the denominator, not a finding.\n`); + console.log(renderTable(sourceNamespaces, locales, reports)); + + const absent = locales.flatMap((locale) => + reports.get(locale).absentNamespaces.map((ns) => `${locale} / ${ns}: namespace file absent`), + ); + if (absent.length) { + console.log(`\nABSENT NAMESPACES — counted above as every key they would hold.\n`); + for (const line of absent) console.log(` ${line}`); + } + + const extras = locales.flatMap((locale) => [ + ...reports.get(locale).extraNamespaces.map((ns) => `${locale} / ${ns}: whole namespace`), + ...reports.get(locale).extraKeys.map((entry) => `${locale} / ${entry}`), + ]); + console.log( + `\nEXTRA KEYS — present in the locale, absent from ${SOURCE_LOCALE}; ` + + `a rename or deletion nobody propagated.\n`, + ); + if (extras.length) { + for (const line of extras) console.log(` ${line}`); + console.log(`\n ${extras.length} extra entr(ies).`); + } else { + console.log(" (none)"); + } +} + +// Advisory by design — see the header. Never exit non-zero on a finding. +process.exit(0); diff --git a/apps/web/scripts/i18n-parity.test.ts b/apps/web/scripts/i18n-parity.test.ts new file mode 100644 index 0000000000..977a20d72e --- /dev/null +++ b/apps/web/scripts/i18n-parity.test.ts @@ -0,0 +1,166 @@ +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import path from "node:path"; +import { spawnSync } from "node:child_process"; + +import { describe, expect, it } from "vitest"; + +const SCRIPT = path.resolve(import.meta.dirname, "i18n-parity.mjs"); + +/** `{ locale: { namespace: { key: value } } }` — materialised as a locales tree. */ +type Fixture = Record>>; + +interface ParityResult { + status: number | null; + stdout: string; + stderr: string; + /** Header row locale names, in printed order, excluding the `en` denominator. */ + locales: string[]; + /** `namespace.json` -> `{ en: , : }`. */ + rows: Record>; + /** Lines under "EXTRA KEYS". */ + extras: string[]; + /** Lines under "ABSENT NAMESPACES". */ + absent: string[]; +} + +/** + * Parse the human table back into structure. Asserting on the rendered report + * (rather than an internal API) is deliberate: the printed table IS the product + * here, so a change that silently drops the denominator column should fail. + */ +function parseReport(stdout: string): Pick { + const lines = stdout.split("\n"); + const headerIndex = lines.findIndex((l) => /^namespace\s+en\b/.test(l)); + const locales = headerIndex === -1 ? [] : lines[headerIndex].trim().split(/\s+/).slice(2); + + const rows: Record> = {}; + for (const line of lines) { + const match = /^(\S+\.json|TOTAL)\s+(\d+(?:\s+\d+)*)\s*$/.exec(line); + if (!match) continue; + const counts = match[2].trim().split(/\s+/).map(Number); + rows[match[1]] = Object.fromEntries(["en", ...locales].map((name, i) => [name, counts[i]])); + } + + const section = (header: string) => { + const start = lines.findIndex((l) => l.startsWith(header)); + if (start === -1) return []; + const out: string[] = []; + for (const line of lines.slice(start + 1)) { + if (/^[A-Z]{2,}/.test(line)) break; + const isFinding = + /^ {2}\S/.test(line) && !/entr\(ies\)\.$/.test(line) && line.trim() !== "(none)"; + if (isFinding) out.push(line.trim()); + } + return out; + }; + + return { locales, rows, extras: section("EXTRA KEYS"), absent: section("ABSENT NAMESPACES") }; +} + +function runParity(fixture: Fixture): ParityResult { + const root = mkdtempSync(path.join(tmpdir(), "kandev-i18n-parity-")); + try { + for (const [locale, namespaces] of Object.entries(fixture)) { + mkdirSync(path.join(root, locale), { recursive: true }); + for (const [namespace, messages] of Object.entries(namespaces)) { + writeFileSync( + path.join(root, locale, `${namespace}.json`), + `${JSON.stringify(messages, null, 2)}\n`, + ); + } + } + const result = spawnSync(process.execPath, [SCRIPT, root], { encoding: "utf8" }); + return { + status: result.status, + stdout: result.stdout, + stderr: result.stderr, + ...parseReport(result.stdout), + }; + } finally { + rmSync(root, { recursive: true, force: true }); + } +} + +const EN_COMMON = { save: "Save", cancel: "Cancel", close: "Close" }; + +describe("i18n-parity", () => { + it("reports keys missing from a locale", () => { + const report = runParity({ + en: { common: EN_COMMON }, + "pt-pt": { common: { save: "Guardar" } }, + }); + + expect(report.rows["common.json"]).toEqual({ en: 3, "pt-pt": 2 }); + expect(report.rows.TOTAL).toEqual({ en: 3, "pt-pt": 2 }); + }); + + it("reports keys present in the locale but absent from en", () => { + const report = runParity({ + en: { common: EN_COMMON }, + "pt-pt": { common: { ...EN_COMMON, renamedAway: "Antigo" } }, + }); + + expect(report.extras).toEqual(["pt-pt / common: renamedAway"]); + // An extra key is not a missing key; it must not inflate the missing count. + expect(report.rows["common.json"]["pt-pt"]).toBe(0); + }); + + it("reports zero for a complete locale, and still prints the denominator", () => { + const report = runParity({ + en: { common: EN_COMMON }, + "pt-pt": { common: { save: "Guardar", cancel: "Cancelar", close: "Fechar" } }, + }); + + expect(report.rows["common.json"]).toEqual({ en: 3, "pt-pt": 0 }); + expect(report.extras).toEqual([]); + // The denominator is the whole point: "0 missing" over 0 keys is not a pass. + expect(report.stdout).toContain("3 en key(s)"); + }); + + it("counts a wholly-absent namespace as every key it would hold", () => { + // Deliberately unlike check-i18n-keys.mjs, which scores this as one advisory + // issue — the shape that let an 889-key namespace stay invisible. + const report = runParity({ + en: { common: EN_COMMON, office: { agent: "Agent", routine: "Routine" } }, + "pt-pt": { common: { save: "Guardar", cancel: "Cancelar", close: "Fechar" } }, + }); + + expect(report.rows["office.json"]["pt-pt"]).toBe(2); + expect(report.absent).toEqual(["pt-pt / office: namespace file absent"]); + }); + + it("discovers locales from disk instead of a hardcoded list", () => { + const report = runParity({ + en: { common: EN_COMMON }, + "pt-pt": { common: EN_COMMON }, + fr: { common: { save: "Enregistrer" } }, + "zh-cn": { common: {} }, + }); + + expect(report.locales).toEqual(["fr", "pt-pt", "zh-cn"]); + expect(report.rows["common.json"]).toEqual({ en: 3, fr: 2, "pt-pt": 0, "zh-cn": 3 }); + }); + + it("excludes en and pseudo from the locale columns", () => { + const report = runParity({ + en: { common: EN_COMMON }, + pseudo: { common: { save: "Śàvē" } }, + "pt-pt": { common: EN_COMMON }, + }); + + expect(report.locales).toEqual(["pt-pt"]); + expect(report.stdout).not.toContain("pseudo /"); + }); + + it("exits 0 even when it finds problems, because it is a report and not a gate", () => { + const report = runParity({ + en: { common: EN_COMMON }, + "pt-pt": { common: { stale: "Antigo" } }, + }); + + expect(report.rows["common.json"]["pt-pt"]).toBe(3); + expect(report.extras).toEqual(["pt-pt / common: stale"]); + expect(report.status).toBe(0); + }); +}); diff --git a/apps/web/src/locales/pt-pt/common.json b/apps/web/src/locales/pt-pt/common.json index cec13d4103..2b932dd0e1 100644 --- a/apps/web/src/locales/pt-pt/common.json +++ b/apps/web/src/locales/pt-pt/common.json @@ -2,20 +2,42 @@ "aboutContextCompactionCount": "Sobre a contagem inferida de compactações", "activeSubagents_one": "{{count}} subagente em execução", "activeSubagents_other": "{{count}} subagentes em execução", + "activeTasks": "Tarefas ativas", + "aDirectLocalExecutorProfileIsRequired": "É necessário um perfil de executor local direto para criar e utilizar um repositório vazio.", "agentDashboard": "painel do agente", "agentRun": "execução do agente", "agentRuns": "execuções do agente", "agents": "Agentes", + "agentSkillsAskTheAgentTo": "Competências do agente (peça ao agente para executar)", "allowIndexing": "Permitir indexação", + "andMoreFiles_one": "+{{count}} mais", + "andMoreFiles_other": "+{{count}} mais", + "anEnhancedPromptIsAvailable": "Está disponível um prompt melhorado.", + "apply": "Aplicar", "autoApproveAllPermissions": "Aprovar automaticamente todas as permissões", "automations": "Automatizações", + "availableTemplates": "Modelos disponíveis", + "back": "Voltar", "backToTaskOverview": "Voltar à visão geral da tarefa", + "baseBranch": "Branch de base", + "bootsASecondaryKandevDevInstance": "Arranca uma segunda instância de desenvolvimento do kandev com uma base de dados limpa, para poder verificar a alteração sem mexer na principal.", + "bootstrapFailed": "O arranque inicial falhou", + "bootstrapFailedCloseAndReopen": "O arranque inicial falhou — feche e reabra para tentar novamente.", "breadcrumb": "trilho de navegação", + "browseParentDirectory": "Navegar para o diretório superior", + "bugFix": "Correção de erro", "cancel": "Cancelar", + "cancelNewFolder": "Cancelar a nova pasta", "changelog": "Registo de alterações", + "checkingGithubAuthentication": "A verificar a autenticação do GitHub…", + "chooseAFolderOrEnterA": "Escolha uma pasta ou introduza um novo caminho nesta máquina.", "cliClient": "Cliente CLI", + "cliModeYourPromptWillBe": "Modo CLI — o seu prompt será injetado automaticamente no terminal", "cliPassthrough": "Passagem direta para a CLI", + "close": "Fechar", + "closeEsc": "Fechar (Esc)", "commandAgentsSettingsKeywords": "agentes, definições de agentes, perfis de agente, agentes instalados, claude", + "commandArchiveTaskKeywords": "arquivar, arquivar tarefa, arquivar a tarefa atual, fechar tarefa, terminar tarefa, arrumar", "commandConfigChatKeywords": "chat de configuração, modo de configuração, configurar kandev, configuração de fluxo de trabalho, configuração mcp", "commandExecutorsSettingsKeywords": "executores, perfis de executor, ambiente de execução, variáveis de ambiente, runtime, computação", "commandGoToAllTasks": "Ir para Todas as tarefas", @@ -33,6 +55,13 @@ "commandGroupNavigation": "Navegação", "commandGroupPreferences": "Preferências", "commandGroupSettings": "Definições", + "commandGroupTasks": "Tarefas", + "commandPaletteMode": "Modo do painel de comandos", + "commandPreviewAddTerminalPanel": "Adicionar painel de terminal", + "commandPreviewCommitChanges": "Fazer commit das alterações", + "commandPreviewGoToHome": "Ir para o Início", + "commandPreviewPull": "Pull", + "commandPreviewSearchTasks": "Pesquisar tarefas", "commandPromptsSettingsKeywords": "prompts, definições de prompts, prompts personalizados, excertos de prompt, modelos de prompt", "commandQuickChat": "Chat rápido", "commandQuickChatKeywords": "chat rápido, novo chat rápido, pergunta rápida, perguntar ao agente", @@ -40,44 +69,139 @@ "commandSwitchToLightMode": "Mudar para o modo claro", "commandThemeKeywords": "tema, tema de cores, aspeto", "commandWorkspaceSettingsKeywords": "área de trabalho, áreas de trabalho", + "commitsAndPushesToTheCurrent": "Faz commit e push para o branch atual.", + "commitsPushesAndOpensAPull": "Faz commit, push e abre um pull request.", "configurationChat": "Chat de configuração", + "configureAUtilityAgentToEnhance": "Configure um agente utilitário nas definições para ativar a melhoria com IA", + "configureExecutorsInSettingsToControl": "Configure os executores nas Definições para controlar onde os agentes são executados.", + "configureGithub": "Configurar o GitHub", + "confirm": "Confirmar", + "contents": "Conteúdos", + "contentSearchNeedsAnActiveTask": "A pesquisa de conteúdos precisa de uma sessão de tarefa ativa.", "contextCompactionCountHelp": "O Kandev infere esta contagem a partir das quedas observadas na utilização do contexto. Amostras em falta ou reinícios do fornecedor podem torná-la aproximada.", "contextCompactions": "Compactações", + "contribute": "Contribuir", + "contributingAsLogin": "A contribuir como <1>@{{login}}. {{access}}", + "contributingAsYourGithubAccount": "A contribuir com a sua conta do GitHub. {{access}}", + "copy": "Copiar", + "couldNotPrepareImproveKandev": "Não foi possível preparar o Melhorar o Kandev", + "createATaskDescribingYourBug": "Criar uma tarefa que descreva o seu erro ou pedido de funcionalidade", "createAWorkspaceToConfigureThisIntegration": "Crie uma área de trabalho para configurar esta integração.", + "createFolder": "Criar pasta", + "createNewRepository": "Criar um novo repositório", + "createRepository": "Criar repositório", + "createsAnEmptyGitRepository": "Cria um repositório Git vazio e regista-o nesta área de trabalho.", + "creating": "A criar…", "dAgo": "há {{diffDay}}d", "default": "pré-definido", + "defaultBadge": "Pré-definido", "deleteSession": "Eliminar sessão", + "describeABugYouHitOr": "Descreva um erro que encontrou ou uma funcionalidade que gostaria de ter, e criamos uma tarefa no seu próprio agente para a implementar no código do kandev.", + "destination": "Destino", + "discardAndContinue": "Descartar e continuar", + "discardLocalChanges": "Descartar as alterações locais?", + "discardLocalChangesAtPathDescription": "Iniciar esta tarefa descarta permanentemente as alterações sem commit do seu clone local em {{repoPath}}. Faça uma cópia de segurança do que quiser manter antes de continuar.", + "discardLocalChangesDescription": "Iniciar esta tarefa descarta permanentemente as alterações sem commit do seu clone local. Faça uma cópia de segurança do que quiser manter antes de continuar.", + "discoveringAgents": "A descobrir agentes...", + "doNotShowThisAgain": "Não voltar a mostrar", "edit": "Editar", "editTask": "Editar tarefa", - "gitScopeSkipped": "{{scope}} foi ignorado porque uma operação num repositório filho falhou ({{failedScopes}}).", + "emptyRepositoriesRunDirectlySwitch": "Os repositórios vazios são executados diretamente nesta máquina. Esta tarefa passa a usar “{{profile}}”.", + "enhancePromptWithAi": "Melhorar o prompt com IA", + "enterAValue": "Introduza um valor...", + "enterValue": "Introduzir valor...", + "error": "Erro", "executors": "Executores", "externalMcp": "MCP externo", + "failedToCreateFolder": "Não foi possível criar a pasta", + "failedToCreateRepository": "Não foi possível criar o repositório", + "failedToLoadDirectory": "Não foi possível carregar o diretório", "failedToLoadRoutine": "Não foi possível carregar a rotina", "failedToLoadSetup": "Não foi possível carregar a configuração", + "failedToRenderDiagram": "Não foi possível apresentar o diagrama", + "featureRequest": "Pedido de funcionalidade", + "files": "Ficheiros", + "folderName": "Nome da pasta", + "folders": "Pastas", "forwardStdinStdoutStraightToThe": "Encaminha o stdin/stdout diretamente para o subprocesso da CLI. Desativa o ACP.", + "getStarted": "Começar", + "githubCliNotAuthenticated": "A CLI do GitHub não está autenticada", + "gitScopeSkipped": "{{scope}} foi ignorado porque uma operação num repositório filho falhou ({{failedScopes}}).", + "goToFirstPage": "Ir para a primeira página", + "goToLastPage": "Ir para a última página", + "goToNextPage": "Ir para a página seguinte", + "goToPreviousPage": "Ir para a página anterior", "hAgo": "há {{diffHr}}h", "hideAdvancedOptions": "Ocultar opções avançadas", + "howLogContextWorks": "Como funciona o contexto de registos", + "improveKandev": "Melhorar o Kandev", + "improveKandevBugPlaceholder": "Ex.: Quando abro o quadro kanban, o texto do cabeçalho da coluna sobrepõe-se ao emblema com a contagem de tarefas em ecrãs com menos de 1200 px de largura...", + "improveKandevFeaturePlaceholder": "Ex.: Adicionar um atalho de teclado para marcar uma tarefa como Concluída a partir da vista de detalhe da tarefa, e mostrar o atalho no menu de ações da tarefa...", + "improveKandevIssuePlaceholder": "Descreva o problema ou o pedido que quer publicar. O agente pedirá os detalhes exigidos pelo modelo de issue do GitHub correspondente...", + "includeRecentBackendAndBrowserLogs": "Incluir os registos recentes do backend e do navegador como contexto para o agente", + "installed": "Instalado", "integrations": "Integrações", + "interruptedByRestart": "Interrompida por reinício", "justNow": "agora mesmo", "kandevAllowsEveryAgentPermissionRequest": "O Kandev permite todos os pedidos de permissão do agente sem o questionar.", "kandevCouldNotLoad": "Não foi possível carregar o Kandev.", + "kandevIsOpenSourceAndYou": "O Kandev é de código aberto e pode ajudar a torná-lo melhor.", + "kandevKeepsASmallInMemory": "O Kandev mantém em memória um pequeno buffer circular dos registos mais recentes do backend e dos eventos da consola do navegador. Quando esta opção está ativa, esses registos são escritos numa pasta temporária da sua máquina e os caminhos dos ficheiros são acrescentados à descrição da tarefa, para que o agente os possa ler durante a investigação.", + "lastRefreshFailed": "A última atualização falhou: {{error}}", + "latestReleaseNotes": "Notas da versão mais recente", + "loading": "A carregar…", "loadingEllipsis": "A carregar...", + "loadingFolder": "A carregar a pasta…", + "loadingIndicatorLabel": "A carregar", "loadingLabel": "A carregar {{label}}...", "loadingRoute": "A carregar {{routeName}}…", "loadingRoutine": "A carregar a rotina...", "loadingTask": "A carregar a tarefa…", + "loadingWorkflowTemplates": "A carregar os modelos de fluxo de trabalho...", "mAgo": "há {{diffMin}}m", + "matchCase": "Distinguir maiúsculas de minúsculas", "mode": "Modo", "model": "Modelo", "multiRepoUnavailableLocal": "As tarefas multi-repositório não estão disponíveis no Local até que o seu percurso de arranque inicial consiga projetar repositórios irmãos.", "multiRepoUnavailableRemoteDocker": "As tarefas multi-repositório não estão disponíveis no Remote Docker até que este suporte a criação de instâncias de tarefa.", "multiRepoUnsupportedExecutor": "As tarefas multi-repositório não são suportadas por este executor.", + "navigate": "Navegar", + "navigateBetweenPagesSearchTasksTrigger": "Navegue entre páginas, pesquise tarefas, acione operações de Git e faça a gestão dos painéis — tudo sem sair do teclado. Os comandos sensíveis ao contexto aparecem consoante a página ativa.", + "newFolder": "Nova pasta", + "newFolderName": "Nome da nova pasta", + "newReleases_one": "{{count}} nova versão", + "newReleases_other": "{{count}} novas versões", + "next": "Seguinte", + "nextEnter": "Seguinte (Enter)", + "noAuth": "Sem autenticação", "noCliClientsInstalledYetInstall": "Ainda não há clientes CLI instalados. Instale o Claude / Codex / OpenCode / Amp para ativar este seletor.", + "noCommandsFound": "Nenhum comando encontrado.", + "noContentMatchesFound": "Não foram encontradas correspondências no conteúdo.", + "noFilesFound": "Nenhum ficheiro encontrado.", + "noFoldersHerePickThisOne": "Não há pastas aqui — escolha esta ou suba um nível", + "noResults": "Sem resultados.", + "notInstalled": "Não instalado", + "notYetInstalled": "Ainda não instalado", "officeIsNotEnabledForThis": "O Office não está ativado para este runtime.", "officeRouteNotPortedYet": "Esta rota do Office é tratada pela shell da SPA, mas a sua página de cliente dedicada ainda está a ser migrada: <1>{{pathname}}", + "onboardingAgentsAutoApproveWarning": "<0>Atenção: os perfis de agente pré-definidos são executados com a aprovação automática ativa (modo YOLO).", + "onboardingAgentsHelp": "Expanda um agente para configurar o respetivo modelo e permissões. As alterações são guardadas quando avançar. Também pode adicionar agentes TUI personalizados mais tarde em Definições > Agentes.", + "onboardingStepAgentsDescription": "Faça a gestão dos agentes descobertos e instale novos.", + "onboardingStepAgentsTitle": "Agentes de IA", + "onboardingStepCommandPanelDescription": "Acesso rápido às ações a partir de qualquer sítio com um atalho de teclado.", + "onboardingStepCommandPanelTitle": "Painel de comandos", + "onboardingStepExecutorsDescription": "Os agentes podem ser executados em diferentes ambientes de execução — local, em contentor ou remoto.", + "onboardingStepExecutorsTitle": "Executores", + "onboardingStepWorkflowsDescription": "Os fluxos de trabalho definem os passos e a automatização das suas tarefas.", + "onboardingStepWorkflowsTitle": "Fluxos de trabalho com agentes", + "open": "Abrir", "openFullPage": "Abrir a página completa", "openingLastTask": "A abrir a última tarefa…", + "openIssue": "Abrir issue", + "optionalTheRepositoryTheAgentWorks": "Opcional — o repositório em que o agente trabalha.", "panels": "Painéis", + "parentDirectory": "Diretório superior", + "pending": "Pendente", "permitTheCliToUploadCode": "Permite que a CLI carregue código para indexação na nuvem (auggie / semelhantes).", "pickACliClient": "Escolher um cliente CLI", "pickACliClientToLoad": "Escolha um cliente CLI para carregar os modelos e modos disponíveis.", @@ -85,6 +209,8 @@ "pluginPanelUnavailable": "Este painel já não está disponível.", "plugins": "Plugins", "prDetails": "Detalhes do PR", + "preparingKandevRepository": "A preparar o repositório do kandev…", + "preparingKandevRepositoryInBackground": "A preparar o repositório do kandev em segundo plano. Preencha os detalhes e submeta quando estiver pronto.", "presetIconBug": "Bug", "presetIconCheck": "Visto", "presetIconCode": "Código", @@ -93,15 +219,26 @@ "presetIconSearch": "Pesquisa", "presetIconSparkle": "Brilho", "presetIconTool": "Ferramenta", + "pressCmdKToOpenItAnytime": "<0>Prima<1><2>para o abrir a qualquer momento", + "pressEnterToConfirm": "Prima Enter para confirmar", + "previousShiftEnter": "Anterior (Shift+Enter)", + "probing": "A sondar", "profileName": "Nome do perfil", "prompts": "Prompts", + "refreshAriaLabel": "Atualizar {{label}}", + "refreshBranchesGitFetch": "Atualizar os branches (git fetch)", + "refreshingLabel": "A atualizar {{label}}...", + "refreshLabelLastFetched": "Atualizar {{label}} (última obtenção {{time}})", + "regularExpression": "Expressão regular", + "releasedOn": "Lançada a {{date}}", "reload": "Recarregar", "reloadTheApplicationToTryAgain": "Recarregue a aplicação para tentar novamente.", - "requestFailed": "O pedido falhou", "rename": "Mudar o nome", - "reviewSubmoduleBoundary": "Submódulo: {{scope}}", + "repository": "Repositório", + "repositoryName": "Nome do repositório", + "requestFailed": "O pedido falhou", "reset": "Repor", - "resizeTableColumns": "Redimensionar as colunas {{left}} e {{right}} da tabela", + "resetting": "A repor…", "resetWatchChecking": "A verificar quantas tarefas seriam eliminadas…", "resetWatchDeleteAllTasks": "Isto irá eliminar todas as tarefas criadas anteriormente pela vigilância, incluindo as arquivadas. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", "resetWatchDeleteTasks_one": "Isto irá eliminar {{count}} tarefa criada anteriormente pela vigilância, incluindo as arquivadas. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", @@ -109,24 +246,78 @@ "resetWatchNoTasks": "Esta vigilância ainda não criou tarefas — apenas o estado de sondagem será limpo. O cursor de sondagem da vigilância também é limpo, pelo que a próxima verificação volta a importar todos os itens correspondentes. Esta ação não pode ser anulada.", "resetWatchPreviewFailedRequired": "Não foi possível carregar o número de tarefas afetadas. Tente novamente a pré-visualização antes de repor esta vigilância.", "resetWatchTitle": "Repor {{label}}?", - "resetting": "A repor…", + "resizeTableColumns": "Redimensionar as colunas {{left}} e {{right}} da tabela", + "results": "Resultados", "retryPreview": "Repetir a pré-visualização", + "reviewSubmoduleBoundary": "Submódulo: {{scope}}", + "rowsPerPage": "Linhas por página", + "runsFormatTypecheckTestAndLint": "Executa format, typecheck, test e lint em todo o monorepo.", + "runtimeDocker": "Docker", + "runtimeDockerDescription": "Execução em contentor para isolamento e reprodutibilidade totais.", + "runtimeGitWorktree": "Git Worktree", + "runtimeGitWorktreeDescription": "Ambiente de branch isolado sob uma raiz de worktrees para trabalho em paralelo.", + "runtimeLocal": "Local", + "runtimeLocalDescription": "Execute os agentes diretamente na sua máquina, com acesso total ao seu sistema de ficheiros local.", + "runtimeSprites": "Sprites (sprites.dev remoto)", + "runtimeSpritesDescription": "Ambiente de execução isolado por hardware para código arbitrário.", "save": "Guardar", + "scopeCommands": "Comandos", + "scopeContents": "Conteúdos", + "scopeFiles": "Ficheiros", + "scopeTitleWithShortcut": "{{label}} ({{shortcut}})", + "scratchWorkspace": "área de trabalho temporária", + "searchEllipsis": "Pesquisar…", + "searchFailedEditTheQueryOr": "A pesquisa falhou. Edite a consulta ou reabra a pesquisa para tentar novamente.", + "searchForFiles": "Pesquisar ficheiros...", + "searchForTasks": "Pesquisar tarefas...", + "searchingTaskWorkspace": "A pesquisar na área de trabalho da tarefa…", + "searchQueriesAreLimitedTo200": "As pesquisas estão limitadas a 200 caracteres.", + "searchTaskContents": "Pesquisar o conteúdo da tarefa…", + "select": "Selecionar", "settings": "Definições", "shell": "Shell", + "shellCommandPlusSlashCommandSkills": "Comando de shell que pode executar na segunda instância, além das <2>competências invocadas por comandos com barra que pode pedir ao agente para executar durante o fluxo de trabalho.", "showAdvancedOptions": "Mostrar opções avançadas", + "showCode": "Mostrar o código", + "showDiagram": "Mostrar o diagrama", + "showingRange_one": "A mostrar {{from}} a {{to}} de {{count}} resultado", + "showingRange_other": "A mostrar {{from}} a {{to}} de {{count}} resultados", + "skip": "Ignorar", + "stagesAndCommitsChangesUsingConventional": "Prepara e faz commit das alterações usando Conventional Commits.", "status": "Estado", "subtaskTitle": "Título da subtarefa", + "switchMode": "Mudar de modo", "system": "Sistema", "taskLoading": "A carregar a tarefa...", + "tasks": "Tarefas", "taskUnavailable": "Tarefa indisponível", "taskUnavailableDescription": "Não foi possível carregar esta tarefa. Pode ter sido eliminada ou pode não ter acesso.", + "theAgentForksKandevToYourAccount": "O agente faz fork de <1>{{repo}} para a sua conta do GitHub e abre um PR a partir do seu fork, creditado a si", + "theBaseBranchTheAgentStarts": "O branch de base a partir do qual o agente começa.", + "theFinalStepOpensAPullRequest": "O passo final deste fluxo de trabalho abre um pull request, o que exige que a CLI <1>{{binary}} esteja autenticada. {{message}}", + "thisEmptyRepositoryWillRunWith": "Este repositório vazio é executado com “{{profile}}” nesta máquina.", + "thisGithubAccountCannotForkKdlbs": "Esta conta do GitHub não pode fazer fork de kdlbs/kandev.", "thisPageCouldNotLoad": "Não foi possível carregar esta página.", + "thisWorkflowWillOnlyCreateA": "Este fluxo de trabalho apenas cria uma issue no GitHub a partir do modelo do repositório. O agente pedirá os detalhes em falta e aprovação para publicar; não implementa a alteração nem abre um pull request.", "title": "Título", "toastRegionLabel": "Notificações", + "typeACommand": "Escreva um comando...", + "typeToSearchFiles": "Escreva para pesquisar ficheiros...", + "typeToSearchTaskContents": "Escreva para pesquisar o conteúdo da tarefa…", "unknownPanel": "Painel desconhecido: {{component}}", "unsavedChanges": "Alterações por guardar", + "usefulCommandsAgentSkills": "Comandos úteis e competências do agente", + "useScratchInstead": "Usar antes uma área temporária", + "useThisFolder": "Usar esta pasta", + "viewFullReleaseOnGithub": "Ver a versão completa no GitHub", + "waitsForCiAndAutomatedReviews": "Aguarda pelo CI e pelas revisões automáticas e depois corrige as falhas e responde aos comentários.", + "whatSNew": "Novidades", + "whenItsDoneTheAgentOpensAPr": "Quando terminar, o agente abre um pull request para <2>{{repo}} para os responsáveis reverem, poupando-lhes tempo e levando a melhoria a toda a gente.", + "workflow": "Fluxo de trabalho", + "workflowsControlTheStepsAutomationAnd": "Os fluxos de trabalho controlam os passos, a automatização e o comportamento do agente nas suas tarefas. Pode adicionar mais fluxos de trabalho nas Definições.", "workspace": "Área de trabalho", "workspaces": "Áreas de trabalho", - "youCanUseTheNavigationOr": "Pode usar a navegação ou recarregar para tentar novamente." + "youCanUseTheNavigationOr": "Pode usar a navegação ou recarregar para tentar novamente.", + "yourAgentImplementsItInThe": "O seu agente implementa-a no repositório do kandev, com testes", + "youVerifyAndTestTheChange": "Verifica e testa a alteração numa segunda instância do kandev" } diff --git a/apps/web/src/locales/pt-pt/integrations.json b/apps/web/src/locales/pt-pt/integrations.json index f13101d22c..84a0a0cf64 100644 --- a/apps/web/src/locales/pt-pt/integrations.json +++ b/apps/web/src/locales/pt-pt/integrations.json @@ -2,31 +2,38 @@ "addDetailsAboutThisChange": "Adicione detalhes sobre esta alteração...", "allRepos": "Todos os repositórios", "anErrorOccurred": "Ocorreu um erro", - "authRequiredHeading": "É necessária autenticação no {{name}}", - "authRequiredInline": "É necessária autenticação no {{name}}.", "authenticated": "Autenticado", "authenticationFailed": "A autenticação falhou: {{error}}", + "authRequiredHeading": "É necessária autenticação no {{name}}", + "authRequiredInline": "É necessária autenticação no {{name}}.", "branchPushedNotCreated": "Branch enviado; {{shortName}} não criado", "branchWasPushedRetryCreation": "O branch foi enviado; tente novamente criar o {{longName}}.", "checkedRelative": "· verificado {{relative}}", "commit": "Commit", + "commitChangedFiles_one": "Fazer commit de {{count}} ficheiro alterado", + "commitChangedFiles_other": "Fazer commit de {{count}} ficheiros alterados", "commitChanges": "Fazer commit das alterações", "commitChangesScoped": "Fazer commit das alterações — {{scopedRepo}}", + "commitsAheadAriaLabel": "{{value}} commits à frente", + "commitsBehindAriaLabel": "{{value}} commits atrás", "committingEllipsis": "A fazer commit...", "configureAUtilityAgentInSettings": "Configure um agente utilitário nas definições para ativar a geração por IA", "copiedConfigTo": "Configuração do {{label}} copiada para {{targetName}}.", "copyConfig": "Copiar configuração", "copyConfigSettingsOnly": "Copie as definições do {{label}} de <4>{{sourceName}} para outra área de trabalho. Isto substitui a configuração atual do {{label}} na área de trabalho de destino. As vigilâncias e as automatizações não são copiadas.", "copyConfigToAnotherWorkspace": "Copiar a configuração para outra área de trabalho", - "copyConfigWithCredentials": "Copie as definições e as credenciais do {{label}} de <4>{{sourceName}} para outra área de trabalho. Isto substitui a configuração atual do {{label}} na área de trabalho de destino. As vigilâncias e as automatizações não são copiadas.", "copyConfiguration": "Copiar a configuração do {{label}}", + "copyConfigWithCredentials": "Copie as definições e as credenciais do {{label}} de <4>{{sourceName}} para outra área de trabalho. Isto substitui a configuração atual do {{label}} na área de trabalho de destino. As vigilâncias e as automatizações não são copiadas.", "copyingConfigTo": "A copiar a configuração do {{label}} para {{targetName}}…", "createAsDraft": "Criar como rascunho", + "createdSuccessfully": "{{longName}} criado com êxito", "createFailed": "Não foi possível criar o {{shortName}}", "createLongName": "Criar {{longName}}", + "createPr": "Criar PR", + "createPrCommitsAhead_one": "Criar PR ({{count}} commit à frente)", + "createPrCommitsAhead_other": "Criar PR ({{count}} commits à frente)", "createScoped": "Criar {{longName}} — {{scopedRepo}}", "createShortName": "Criar {{shortName}}", - "createdSuccessfully": "{{longName}} criado com êxito", "creatingEllipsis": "A criar...", "creatingFrom": "A criar o {{shortName}} a partir de <4>{{displayBranch}}", "creatingFromInto": "A criar o {{shortName}} a partir de <4>{{displayBranch}} → <6>{{baseBranch}}", @@ -40,6 +47,8 @@ "failedToCopyConfig": "Não foi possível copiar a configuração: {{err}}", "filesChanged_one": "<0>{{count}} ficheiro alterado", "filesChanged_other": "<0>{{count}} ficheiros alterados", + "forcePush": "Forçar push", + "fromBranch": "de {{branch}}", "generateCommitDescriptionWithAi": "Gerar a descrição do commit com IA", "generateCommitMessageWithAi": "Gerar a mensagem de commit com IA", "generateDescriptionWithAi": "Gerar a descrição do {{shortName}} com IA", @@ -47,8 +56,22 @@ "loading": "A carregar…", "longNameTitle": "Título do {{longName}}", "longNameTitlePlaceholder": "Título do {{longName}}...", + "merge": "Merge", "noChangesToCommit": "Não há alterações para commit", "noSavedQueriesYet": "Ainda não há consultas guardadas", + "ontoBranch": "sobre {{branch}}", + "openVcsOptions": "Abrir as opções de VCS", + "pickActionThenRepo": "Escolha a ação e depois o repositório", + "pickARepositoryForCommit": "Escolha um repositório para Commit", + "pickARepositoryForCreatePr": "Escolha um repositório para Criar PR", + "pickARepositoryForPush": "Escolha um repositório para Push", + "pickARepositoryForRebase": "Escolha um repositório para Rebase", + "pull": "Pull", + "push": "Push", + "pushCommitsToRemote_one": "Enviar {{count}} commit para o remoto", + "pushCommitsToRemote_other": "Enviar {{count}} commits para o remoto", + "rebase": "Rebase", + "rebaseOntoBranchBehind": "Rebase sobre {{branch}} ({{behind}} atrás)", "reconnectProvider": "Voltar a ligar o {{name}}", "repository": "Repositório", "retryShortName": "Repetir o {{shortName}}", diff --git a/apps/web/src/locales/pt-pt/office.json b/apps/web/src/locales/pt-pt/office.json new file mode 100644 index 0000000000..f520b4155a --- /dev/null +++ b/apps/web/src/locales/pt-pt/office.json @@ -0,0 +1,891 @@ +{ + "aCronScheduleExample": "Um agendamento cron (por exemplo, <1>{{cron}} para dias úteis às 9h)", + "actionOnExceed": "Ação ao exceder", + "actions": "Ações", + "actionsByAgentsAndUsersAre": "As ações dos agentes e dos utilizadores são registadas aqui.", + "actionValue": "Ação: {{action}}", + "activeAgents": "Agentes ativos", + "activeSessionCount_one": "{{count}} sessão ativa", + "activeSessionCount_other": "{{count}} sessões ativas", + "activity": "Atividade", + "activityFilterAll": "Todos os tipos", + "activityFilterBudget": "Orçamento", + "activityFilterTask": "Tarefa", + "activityStatusChangedTo": "estado alterado para {{status}}", + "adapter": "Adaptador", + "add": "Adicionar", + "addADescription": "Adicione uma descrição...", + "addApprover": "Adicionar aprovador", + "addApprovers": "Adicionar aprovadores", + "addAsLocalPath": "Adicionar como caminho local", + "addAsRemoteUrl": "Adicionar como URL remoto", + "addATitleToCreateATask": "Adicione um título para criar uma tarefa", + "addChannel": "Adicionar canal", + "addCustom": "Adicionar personalizado", + "addDescription": "Adicionar descrição...", + "addPolicy": "Adicionar política", + "addProvider": "Adicionar fornecedor…", + "addRepository": "Adicionar repositório", + "addReviewer": "Adicionar revisor", + "addReviewers": "Adicionar revisores", + "addToOrder": "Adicionar à ordem", + "advanced": "Avançado", + "agent": "Agente", + "agentAutoPaused": "Agente pausado automaticamente", + "agentAwaitingApproval": "Agente à espera de aprovação", + "agentConfigurationUpdated": "Configuração do agente atualizada", + "agentCount_one": "{{count}} agente", + "agentCount_other": "{{count}} agentes", + "agentCreated": "Agente criado", + "agentCreatedSkillsMustBeApproved": "As competências criadas por agentes têm de ser aprovadas antes da ativação", + "agentError": "Erro do agente", + "agentFinishedWorkspaceReadyForReview": "Agente terminou — área de trabalho pronta para revisão", + "agentIsActivelyWorkingOnThis": "O agente está a trabalhar ativamente nesta tarefa", + "agentIsWorkingMessageWillBe": "O agente está a trabalhar... a mensagem fica em fila", + "agentName": "Nome do agente", + "agentNotFound": "Agente não encontrado.", + "agentRecentTasks": "Tarefas recentes", + "agentRunActivity": "Atividade das execuções", + "agentRunFailed": "A execução do agente falhou", + "agents": "Agentes", + "agentSections": "Secções do agente", + "agentsEnabled": "Agentes ativados", + "agentSessionEnded": "Sessão do agente terminada", + "agentsInheritThisTierUnlessThey": "Os agentes herdam este escalão, exceto se o substituírem. Todos os fornecedores encaminhados têm de mapear este escalão para um modelo.", + "agentsThatHaveThisSkillAssigned": "Agentes a quem esta competência está atribuída", + "agentSuccessRate": "Taxa de sucesso", + "agentThatPicksUpRunsTriggered": "Agente que assume as execuções acionadas por esta rotina", + "agentTierProfiles": "Perfis de escalão dos agentes", + "agentUpdated": "Agente atualizado", + "agentWillUseThisStarterTask": "O {{name}} usa esta tarefa inicial para inspecionar os repositórios, montar a equipa e propor o próximo trabalho para aprovação.", + "agentWorkedForSeconds": "{{agent}} trabalhou durante {{seconds}} s", + "agentWorkedForSecondsRanCommands_one": "{{agent}} trabalhou durante {{seconds}} s · executou {{count}} comando", + "agentWorkedForSecondsRanCommands_other": "{{agent}} trabalhou durante {{seconds}} s · executou {{count}} comandos", + "agentWorkingForSeconds": "{{agent}} a trabalhar há {{seconds}} s", + "agentWorkingForSecondsRanCommands_one": "{{agent}} a trabalhar há {{seconds}} s · executou {{count}} comando", + "agentWorkingForSecondsRanCommands_other": "{{agent}} a trabalhar há {{seconds}} s · executou {{count}} comandos", + "alertPercent": "Alerta: {{percent}}%", + "alertThreshold": "Limiar de alerta (%)", + "all": "Tudo", + "allClear": "Está tudo em ordem.", + "allMemoryCleared": "Toda a memória foi limpa", + "allProvidersHealthy": "Todos os fornecedores estão saudáveis.", + "alwaysCreate": "Criar sempre", + "aNameEGDailyStandup": "Um nome (por exemplo, \"Reunião diária\")", + "aNameForYourWorkspaceYou": "Um nome para a sua área de trabalho. Pode alterá-lo mais tarde.", + "appearance": "Aspeto", + "appearanceSettingsSaved": "Definições de aspeto guardadas", + "applying": "A aplicar...", + "applyOnDiskYamlFilesTo": "Aplicar os ficheiros YAML em disco à base de dados.", + "approval": "Aprovação", + "approvalsAlertsAndItemsNeedingYour": "As aprovações, os alertas e os itens que precisam da sua atenção aparecem aqui.", + "approve": "Aprovar", + "approved": "Aprovado", + "approver": "Aprovador", + "asc": "Asc", + "aSkillWithThisNameAlready": "Já existe uma competência com este nome", + "assembledPrompt": "Prompt montado", + "assignATaskToThisAgent": "Atribua uma tarefa a este agente para ver o histórico de execuções.", + "assignee": "Responsável", + "aTaskTitleDescriptionWhatThe": "Um título e uma descrição de tarefa (o que o agente deve fazer em cada execução)", + "aUniqueNameForThisAgent": "Um nome único para este agente (por exemplo, CEO, Trabalhador de Frontend)", + "autoCommitAfterApproval": "Fazer commit automático após a aprovação", + "automaticProviderFallback": "Recurso automático a outro fornecedor", + "backToTasks": "Voltar às tarefas", + "barTotal": "{{label}}: {{total}}", + "beingWorkedOn": "em curso", + "beyondThisCountMissedTicksAre": "Acima deste número, os ticks perdidos são descartados (pré-definição: 25)", + "blockedActionRequired": "Bloqueada — é necessária uma ação", + "blockNewTasks": "Bloquear novas tarefas", + "boardView": "Vista de quadro", + "botTokenChatId": "{\"bot_token\": \"...\", \"chat_id\": \"...\"}", + "branch": "Branch", + "browseSkillsSh": "Explorar skills.sh", + "budgetAlert": "Alerta de orçamento", + "budgetAmount": "Orçamento: {{amount}}", + "budgetCapConcurrencyAndExecutionEnvironment": "Limite de orçamento, concorrência e ambiente de execução.", + "budgetLimitsConcurrencyAndExecutionEnvironment": "Limites de orçamento, concorrência e ambiente de execução.", + "budgetPolicies": "Políticas de orçamento", + "budgetPolicyCreated": "Política de orçamento criada", + "budgetPolicyDeleted": "Política de orçamento eliminada", + "budgets": "Orçamentos", + "bundledWithKandev": "Incluída no kandev", + "bundledWithKandevVersion": "Incluída no kandev v{{version}}", + "byAgent": "Por agente", + "byModel": "Por modelo", + "byProject": "Por projeto", + "byProvider": "Por fornecedor", + "cached": "Em cache:", + "cachedTokens": "Tokens em cache", + "cancelReasonAssigneeChanged": "o responsável mudou", + "cancelReasonReviewParticipantChanged": "o revisor mudou", + "cancelReasonTaskNotFound": "tarefa não encontrada", + "cancelReasonTaskTerminal": "tarefa concluída", + "capabilities": "Capacidades", + "capabilityCreateAgent": "Criar agente", + "capabilityCreateSubtask": "Criar subtarefa", + "capabilityDeleteSkills": "Eliminar competências", + "capabilityListSkills": "Listar competências", + "capabilityModifyAgents": "Modificar agentes", + "capabilityPostComment": "Publicar comentário", + "capabilityReadMemory": "Ler a memória", + "capabilityRequestApproval": "Pedir aprovação", + "capabilitySpawnAgentRun": "Lançar execução", + "capabilityUpdateTaskStatus": "Atualizar o estado da tarefa", + "capabilityWriteMemory": "Escrever na memória", + "catchUpMax": "Máximo de recuperação", + "catchUpPolicy": "Política de recuperação", + "ceoManagesOtherAgentsWorkersExecute": "O CEO faz a gestão dos outros agentes; os trabalhadores executam as tarefas", + "changesPushed": "Alterações enviadas", + "channelAdded": "Canal adicionado", + "channelDeleted": "Canal eliminado", + "chooseTheProfileFamilyOfficeShould": "Escolha a família de perfis que o Office deve usar quando forem atribuídos aos agentes trabalhos Frontier, Balanced ou Economy.", + "clearAll": "Limpar tudo", + "clearAllMemory": "Limpar toda a memória?", + "clearFilters": "Limpar os filtros", + "cliAgentProfile": "Perfil de agente CLI", + "clickToOpenRoutines": "Clique para abrir as Rotinas.", + "clone": "Clonar", + "cloneFailed": "A clonagem falhou", + "cloning": "A clonar...", + "coalesce": "Fundir", + "coalesceIfActive": "Fundir se estiver ativa", + "collapse": "Recolher", + "color": "Cor", + "comingSoonOnlyLocalIsSupported": "Em breve — de momento, só é suportado o Local.", + "commitMessage": "Mensagem do commit", + "compareWorkspaceDatabaseWithOnDisk": "Comparar a base de dados da área de trabalho com os ficheiros de configuração em disco.", + "concurrency": "Concorrência", + "concurrencyPolicy": "Política de concorrência", + "configJson": "Configuração (JSON)", + "configuration": "Configuração", + "configure": "Configurar", + "configured": "Configurado", + "configuredRouteTooltip": "Rota principal a partir das substituições da área de trabalho e do agente.", + "confirmTheDetailsBelowEverythingCan": "Confirme os detalhes abaixo. Tudo pode ser alterado mais tarde.", + "connectAGitRepositoryToVersion": "Ligue um repositório Git para controlar as versões desta configuração da área de trabalho.", + "controlWhatThisAgentIsAllowed": "Controle o que este agente pode fazer. As pré-definições baseiam-se no papel do agente.", + "coordinatorAgent": "Agente coordenador", + "copied": "Copiado!", + "copySlug": "Copiar o slug", + "cost": "Custo", + "costs": "Custos", + "countAvailable_one": "{{count}} disponível", + "countAvailable_other": "{{count}} disponíveis", + "countDone_one": "{{count}} concluída", + "countDone_other": "{{count}} concluídas", + "countInProgress_one": "{{count}} em curso", + "countInProgress_other": "{{count}} em curso", + "countLive_one": "{{count}} ativa", + "countLive_other": "{{count}} ativas", + "cpuCores": "Núcleos de CPU", + "create": "Criar", + "createACeoAgentToStart": "Crie um agente CEO para começar a orquestrar o trabalho nos seus projetos.", + "createAgent": "Criar agente", + "createAgentsAndSetTheirReporting": "Crie agentes e defina a respetiva estrutura hierárquica para ver o organograma.", + "createANewCliProfile": "+ Criar um novo perfil de CLI", + "createATaskOrLetAgents": "Crie uma tarefa ou deixe os agentes gerá-las a partir de rotinas.", + "createLaunch": "Criar e lançar", + "createNewSkill": "Criar nova competência", + "createOneInline": "Criar uma aqui mesmo", + "createPolicy": "Criar política", + "createProject": "Criar projeto", + "createRoutine": "Criar rotina", + "createSkill": "Criar competência", + "createTask": "Criar tarefa", + "createYourCoordinatorAgent": "Crie o seu agente coordenador", + "createYourFirstProject": "Crie o seu primeiro projeto", + "creating": "A criar...", + "cron": "Cron", + "cronExpression": "Expressão cron", + "cronExpressionTitleCase": "Expressão cron", + "current": "Atual", + "currentlyMapsTo": "Atualmente mapeia para", + "currentRouteTooltip": "Reflete a escolha do próximo lançamento. Os detalhes das sessões em curso estão em cada execução.", + "currentUtilizationOfSubscriptionRateLimit": "Utilização atual das janelas de limite de taxa da subscrição.", + "dailyDepUpdate": "Atualização diária de dependências", + "dailySuccessRate": "Taxa de sucesso diária", + "dangerZone": "Zona de perigo", + "dashboard": "Painel", + "date": "Data", + "defaultFor": "PRÉ-DEFINIDO PARA", + "defaultForRole": "pré-definido para {{role}}", + "defaultTier": "Escalão pré-definido", + "defaultWorkspace": "Área de trabalho pré-definida", + "degraded": "Degradado", + "delete": "Eliminar", + "deleteChannel": "Eliminar canal", + "deleted": "{{filename}} eliminado", + "deleteEntry": "Eliminar entrada", + "deletePolicy": "Eliminar política", + "deleteProject": "Eliminar projeto", + "deleteWorkspace": "Eliminar área de trabalho", + "deleteWorkspaceSummary": "Isto elimina permanentemente {{agents}} agentes, {{tasks}} tarefas, {{skills}} competências e a pasta da área de trabalho.", + "deleting": "A eliminar...", + "desc": "Desc", + "description": "Descrição", + "directoryPath": "Caminho do diretório", + "dirty": "com alterações", + "discardDraft": "Descartar o rascunho", + "discord": "Discord", + "dockerImage": "Imagem Docker", + "dockerImageExample": "por exemplo, node:20-slim", + "dockerImageWithExample": "Imagem Docker (por exemplo, node:20-slim)", + "duration": "Duração", + "editable": "Editável", + "editOrgChartFromTheAgents": "Edite o organograma a partir da lista de agentes.", + "editRoutine": "Editar rotina", + "effectiveActionsThisAgentCanRequest": "Ações efetivas que este agente pode pedir durante as execuções do Office.", + "eGCodeReview": "por exemplo, code-review", + "eGFrontendWorker": "por exemplo, Trabalhador de Frontend", + "enqueueMissedWithCap": "Colocar em fila os perdidos (com limite)", + "entityId": "ID da entidade", + "events": "Eventos", + "exceeded": "Excedido", + "executor": "Executor", + "executorConfiguration": "Configuração do executor", + "executorConfigurationSaved": "Configuração do executor guardada", + "executorPreference": "Preferência de executor", + "executorType": "Tipo de executor", + "existingConfigurationFound": "Foi encontrada configuração existente", + "expand": "Expandir", + "export": "Exportar", + "exportedToFilesystem": "Exportado para o sistema de ficheiros", + "exportFilesCount_one": "Exportar {{count}} ficheiro", + "exportFilesCount_other": "Exportar {{count}} ficheiros", + "exportSelectionSummary": "Exportação de {{workspace}} · {{selected}} / {{total}} ficheiros selecionados", + "exportSvg": "Exportar SVG", + "exportToFilesystem": "Exportar para o sistema de ficheiros", + "failed": "Falhadas", + "failedToAddChannel": "Não foi possível adicionar o canal", + "failedToAddRepository": "Não foi possível adicionar o repositório", + "failedToApprove": "Não foi possível aprovar", + "failedToClearMemory": "Não foi possível limpar a memória", + "failedToCompleteSetup": "Não foi possível concluir a configuração", + "failedToCreateAgent": "Não foi possível criar o agente", + "failedToCreateBudgetPolicy": "Não foi possível criar a política de orçamento", + "failedToCreateFile": "Não foi possível criar o ficheiro", + "failedToCreateIssue": "Não foi possível criar a issue", + "failedToCreateProject": "Não foi possível criar o projeto", + "failedToCreateRoutine": "Não foi possível criar a rotina", + "failedToCreateSkill": "Não foi possível criar a competência", + "failedToDelete": "Não foi possível eliminar", + "failedToDeleteBudgetPolicy": "Não foi possível eliminar a política de orçamento", + "failedToDeleteChannel": "Não foi possível eliminar o canal", + "failedToDeleteMemoryEntry": "Não foi possível eliminar a entrada de memória", + "failedToDeleteProject": "Não foi possível eliminar o projeto", + "failedToDeleteRoutine": "Não foi possível eliminar a rotina", + "failedToDeleteWorkspace": "Não foi possível eliminar a área de trabalho", + "failedToExportToFilesystem": "Não foi possível exportar para o sistema de ficheiros", + "failedToImportFromFilesystem": "Não foi possível importar do sistema de ficheiros", + "failedToImportSettings": "Não foi possível importar as definições", + "failedToImportSkill": "Não foi possível importar a competência: {{msg}}", + "failedToLoad": "Não foi possível carregar", + "failedToLoadActivity": "Não foi possível carregar a atividade", + "failedToLoadBudgets": "Não foi possível carregar os orçamentos", + "failedToLoadChannels": "Não foi possível carregar os canais", + "failedToLoadCostData": "Não foi possível carregar os dados de custos", + "failedToLoadDeletionSummary": "Não foi possível carregar o resumo da eliminação", + "failedToLoadDiffs": "Não foi possível carregar os diffs", + "failedToLoadExportBundle": "Não foi possível carregar o pacote de exportação", + "failedToLoadInstructions": "Não foi possível carregar as instruções", + "failedToLoadMemory": "Não foi possível carregar a memória", + "failedToLoadMoreTasks": "Não foi possível carregar mais tarefas", + "failedToLoadProject": "Não foi possível carregar o projeto", + "failedToLoadTask": "Não foi possível carregar a tarefa", + "failedToLoadTasks": "Não foi possível carregar as tarefas", + "failedToRefreshTasks": "Não foi possível atualizar as tarefas", + "failedToRefreshUtilization": "Não foi possível atualizar a utilização", + "failedToReject": "Não foi possível rejeitar", + "failedToRemoveRepository": "Não foi possível remover o repositório", + "failedToRunRoutine": "Não foi possível executar a rotina", + "failedToSave": "Não foi possível guardar", + "failedToSaveExecutorConfiguration": "Não foi possível guardar a configuração do executor", + "failedToSaveProject": "Não foi possível guardar o projeto", + "failedToSaveRoutine": "Não foi possível guardar a rotina", + "failedToSaveSettings": "Não foi possível guardar as definições", + "failedToUpdateAgent": "Não foi possível atualizar o agente", + "failedToUpdateRoutine": "Não foi possível atualizar a rotina", + "failedToUpdateSkills": "Não foi possível atualizar as competências", + "fallback": "Recurso", + "filter": "Filtrar", + "filterSkills": "Filtrar competências...", + "finished": "Terminada", + "finishedAgo": "Terminada {{ago}}", + "firesNow": "dispara agora", + "firstTask": "Primeira tarefa", + "fitToScreen": "Ajustar ao ecrã", + "forAgentInProject": "<0>Para <1> <2>em <3>", + "foundWorkspacesOnFilesystem_one": "Foi encontrada {{count}} área de trabalho no sistema de ficheiros. Importar as definições para começar?", + "foundWorkspacesOnFilesystem_other": "Foram encontradas {{count}} áreas de trabalho no sistema de ficheiros. Importar as definições para começar?", + "general": "Geral", + "gitUrlsOrLocalPathsWhere": "URLs de Git ou caminhos locais onde os agentes vão trabalhar neste projeto.", + "gitUrlsOrLocalPathsWhereShort": "URLs de Git ou caminhos locais onde os agentes vão trabalhar", + "giveAgentSomethingToDo": "Dê algo para fazer ao seu {{name}}", + "groupBy": "Agrupar por", + "healthy": "Saudável", + "hideApprover": "Ocultar o aprovador", + "hideReviewer": "Ocultar o revisor", + "highestUtilizationAcrossSubscriptionAgents": "Utilização mais alta entre os agentes com subscrição", + "hours": "horas", + "howAgentSessionsRunForThis": "Como são executadas as sessões de agente neste projeto.", + "howAgentSessionsRunInheritProject": "Como são executadas as sessões de agente (herdar usa a pré-definição do projeto ou da área de trabalho)", + "howAgentSessionsRunInheritUses": "Como são executadas as sessões de agente (herdar usa a pré-definição da área de trabalho)", + "howFarBackToLookFor": "Até que ponto recuar na procura de tarefas por iniciar durante as varreduras de recuperação", + "howManyTasksThisAgentCan": "Quantas tarefas este agente pode executar em simultâneo", + "identifier": "Identificador", + "identity": "Identidade", + "importContinue": "Importar e continuar", + "importedConfigEntries": "{{importedCount}} entradas de configuração importadas", + "importedFromFilesystemCreatedUpdated": "Importado do sistema de ficheiros ({{created}} criadas, {{updated}} atualizadas)", + "importFromFilesystem": "Importar do sistema de ficheiros", + "importing": "A importar...", + "in": "Entrada:", + "inbox": "Caixa de entrada", + "incomingFilesystemDatabase": "A receber (sistema de ficheiros → base de dados)", + "inFlight": "em curso", + "inherit": "Herdar", + "inheritFromProjectWorkspace": "Herdar do projeto ou da área de trabalho", + "inheritFromWorkspace": "Herdar da área de trabalho", + "inheritsTierFromWorkspace": "Herda <1>{{tier}} da área de trabalho.", + "inheritsWorkspacePolicyList": "Herda a política da área de trabalho: {{list}}.", + "inheritsWorkspacePolicyNoneSet": "Herda a política da área de trabalho (ainda não há escalões definidos por motivo de despertar).", + "injectedContinuationSummary": "Resumo de continuação injetado", + "inProgress": "Em curso", + "input": "Entrada", + "inputTokens": "Tokens de entrada", + "inReview": "Em revisão", + "instructionFileCompletionDetail": "ficheiro de instruções", + "instructionsTheAgentReceivesWhenThis": "Instruções que o agente recebe quando esta rotina é acionada", + "intended": "Pretendida", + "itemsWaitingForYourReview": "Itens à espera da sua revisão", + "kind": "Tipo", + "last14Days": "Últimos 14 dias", + "last30Days": "Últimos 30 dias", + "lastFired": "Último disparo: {{when}}", + "lastRun": "Última execução", + "lastRunFailedAgo": "A última execução falhou {{ago}}", + "lastRunNever": "Nunca", + "latestRun": "Execução mais recente", + "leadAgent": "Agente responsável", + "leadAgentName": "Responsável: {{name}}", + "limit": "Limite ($)", + "linked": "Associado", + "listView": "Vista de lista", + "live": "Ativa", + "liveNow": "Ativa agora", + "loadingExportBundle": "A carregar o pacote de exportação...", + "loadingInstructions": "A carregar as instruções...", + "loadingProject": "A carregar o projeto...", + "loadingRuns": "A carregar as execuções...", + "loadingTasks": "A carregar as tarefas...", + "loadMore": "Carregar mais", + "localDocker": "Docker local", + "localStandalone": "Local (autónomo)", + "logo": "Logótipo", + "main": "main", + "manage": "Gerir", + "manageSkillsInCompany": "Faça a gestão das competências em Empresa", + "mapOfficeAgentsToProvidersAnd": "Mapeie os agentes do Office para fornecedores e escalões com recurso controlado a alternativas. Avançado; desativado por pré-definição.", + "markFixed": "Marcar como corrigido", + "marking": "A marcar…", + "maxConcurrent": "Máximo em simultâneo", + "maxConcurrentSessions": "Máximo de sessões em simultâneo", + "memoryEntryDeleted": "Entrada de memória eliminada", + "memoryIsAccumulatedAsTheAgent": "A memória é acumulada à medida que o agente trabalha nas tarefas.", + "memoryMb": "Memória (MB)", + "metaKey": "CHAVE", + "metaMode": "MODO", + "metaSource": "ORIGEM", + "mine": "Meus", + "missingCount_one": "{{count}} em falta", + "missingCount_other": "{{count}} em falta", + "modelsUsed": "Modelos usados", + "monthly": "Mensal", + "monthlyBudget": "Orçamento mensal ($)", + "monthlySpendingLimit0Unlimited": "Limite de despesa mensal ($0 = ilimitado)", + "monthSpend": "Despesa do mês", + "moreInfoAbout": "Mais informações sobre {{label}}", + "moreOptions": "Mais opções", + "moveDown": "Mover para baixo", + "moveUp": "Mover para cima", + "name": "Nome", + "nameRoleAndReportingStructureFor": "Nome, papel e estrutura hierárquica deste agente.", + "needsAction": "Precisa de ação", + "never": "nunca", + "neverRun": "Nunca executada", + "newAgent": "Novo agente", + "newAgentHiresMustBeApproved": "As novas contratações de agentes têm de ser aprovadas antes da ativação", + "newAgentsMatchingTheseRolesGet": "Os novos agentes com estes papéis recebem esta competência automaticamente", + "newIssue": "Nova issue", + "newProject": "Novo projeto", + "newRoutine": "Nova rotina", + "newSkill": "Nova competência", + "newTask": "Nova tarefa", + "nextFire": "Próximo disparo: {{when}}", + "nextIn": "próximo dentro de {{when}}", + "noActiveExecutionProfilesAreAvailable": "Não há perfis de execução ativos disponíveis para este fornecedor.", + "noActiveSessionForThisTask": "Não há nenhuma sessão ativa para esta tarefa.", + "noActivityYet": "Ainda não há atividade.", + "noAgentProfileConfigured": "Nenhum perfil de agente configurado", + "noAgentsAttached": "Nenhum agente associado", + "noAgentsInThisWorkspaceYet": "Ainda não há agentes nesta área de trabalho.", + "noAgentsToDisplay": "Não há agentes para mostrar.", + "noAgentsYet": "Ainda não há agentes.", + "noBudget": "Sem orçamento", + "noBudgetPoliciesConfiguredAddOne": "Nenhuma política de orçamento configurada. Adicione uma para impor limites de despesa.", + "noChangesDetected": "Não foram detetadas alterações.", + "noChannelsConfiguredAddAChannel": "Nenhum canal configurado. Adicione um canal para ativar as mensagens externas.", + "noCliAgentProfilesAvailableYet": "Ainda não há perfis de agente CLI disponíveis.", + "noConversationLinkedToThisRun": "Não há nenhuma conversa associada a esta execução.", + "noCostDataYetCostsAre": "Ainda não há dados de custos. Os custos são registados quando os agentes executam tarefas.", + "noEventsRecordedForThisRun": "Ainda não há eventos registados para esta execução.", + "noGrouping": "Sem agrupamento", + "noInitialTask": "Sem tarefa inicial", + "noInstructionFilesYet": "Ainda não há ficheiros de instruções.", + "noMatches": "Sem correspondências.", + "noMatchingSkills": "Nenhuma competência correspondente", + "noMemoryEntriesYet": "Ainda não há entradas de memória.", + "noMoreRuns": "Não há mais execuções", + "none": "Nenhum", + "noneLower": "nenhum", + "noneTopLevel": "Nenhum (nível superior)", + "noProject": "Sem projeto", + "noProjectsYet": "Ainda não há projetos.", + "noProviderHasTierMapped": "Nenhum fornecedor tem o escalão {{tier}} mapeado — defina um modelo para {{tier}} em Mapeamento de escalões do fornecedor, abaixo.", + "noProviderInOrderHasTierMapped": "Nenhum fornecedor da ordem efetiva tem {{tier}} mapeado.", + "noProviderMappedForTierHelp": "Nenhum fornecedor da ordem efetiva tem o escalão {{tier}} mapeado. Selecione um perfil de execução para {{tier}} em pelo menos um fornecedor em Área de trabalho → Encaminhamento de fornecedores.", + "noProvidersConfigured": "Nenhum fornecedor configurado.", + "noProvidersSelected": "Nenhum fornecedor selecionado.", + "noRecentActivityActionsByAgents": "Sem atividade recente. As ações dos agentes e dos utilizadores aparecem aqui.", + "noRecentTasks": "Não há tarefas recentes.", + "noRepositoriesAddedYet": "Ainda não foram adicionados repositórios.", + "noRoute": "sem rota", + "noRoutinesYet": "Ainda não há rotinas.", + "noRuns": "Sem execuções", + "noRunsWithCostDataYet": "Ainda não há execuções com dados de custos.", + "noRunsYet": "Ainda não há execuções.", + "noRunsYetShort": "Ainda não há execuções", + "noScheduledWakeUpsManageRoutines": "Não há despertares agendados — faça a gestão das rotinas", + "noSkillsRegisteredYet": "Ainda não há competências registadas.", + "noSkillsYetImportFromGithub": "Ainda não há competências. Importe do GitHub ou crie as suas.", + "noTasksFound": "Nenhuma tarefa encontrada.", + "noTasksInThisProjectYet": "Ainda não há tarefas neste projeto.", + "noTasksTouchedYet": "Ainda não foram tocadas tarefas.", + "noTasksWereModifiedDuringThis": "Não foram modificadas tarefas durante esta execução.", + "notConfigured": "Não configurado", + "notifyOnly": "Apenas notificar", + "noUtilizationDataAvailable": "Não há dados de utilização disponíveis.", + "noUtilizationDataClickRefreshTo": "Não há dados de utilização. Clique em atualizar para obter a utilização atual.", + "observed": "Observado", + "off": "Desligado", + "officeTurnsYourBacklogIntoAutonomous": "O Office transforma o seu backlog em trabalho autónomo. Um agente coordenador decompõe cada tarefa, delega em agentes trabalhadores especializados e reporta-lhe o progresso. Nos próximos passos vai dar um nome a esta área de trabalho, criar o seu coordenador e, se quiser, entregar-lhe uma primeira tarefa para arrancar.", + "on": "Ligado", + "onDisk": "Em disco", + "onDiskBadge": "em disco", + "oneLineSummary": "Resumo numa linha", + "openAgent": "Abrir {{name}}", + "openBlocked": "{{open}} abertas, {{blocked}} bloqueadas", + "openInAdvancedView": "Abrir na vista avançada", + "optional": "opcional", + "optionalDescription": "Descrição opcional", + "orchestration": "Orquestração", + "orgChart": "Organograma", + "other": "Outras", + "out": "Saída:", + "outgoingDatabaseFilesystem": "A enviar (base de dados → sistema de ficheiros)", + "output": "Saída", + "outputTokens": "Tokens de saída", + "overrideTheWorkspaceTierOrProvider": "Substitua o escalão ou a ordem de fornecedores da área de trabalho para este agente.", + "overrideWakeReasonTiers": "Substituir os escalões por motivo de despertar", + "overrideWakeReasonTiersHelp": "Isto é raro. Substitua apenas se este agente precisar mesmo de um comportamento diferente no trabalho em segundo plano — por exemplo, um agente crítico para a segurança que tenha de usar Frontier mesmo em verificações de rotina. A maioria dos agentes deve herdar a política da área de trabalho.", + "overrideWhichModelTierRunsFor": "Substitua o escalão de modelo usado em tipos específicos de trabalho do agente. A maioria dos utilizadores mantém as pré-definições da área de trabalho — Economy para tarefas em segundo plano, Balanced para execuções normais. Os heartbeats, as rotinas agendadas e os alertas de orçamento são constantes em segundo plano, pelo que usar aqui um escalão mais barato pode reduzir muito o custo sem afetar o trabalho que interessa.", + "overrideWorkspacePolicyForThisAgent": "Substituir a política da área de trabalho neste agente", + "overrideWorkspaceProviderOrder": "Substituir a ordem de fornecedores da área de trabalho", + "overrideWorkspaceTier": "Substituir o escalão da área de trabalho", + "overRuns": "{{overall}}% em {{total}} execuções", + "overview": "Visão geral", + "parent": "Tarefa-mãe", + "parseErrors": "Erros de análise (", + "participantsSelected_one": "{{count}} selecionado", + "participantsSelected_other": "{{count}} selecionados", + "pathGithubUrlOrSkillsSh": "Caminho, URL do GitHub ou skills.sh", + "pauseAgent": "Pausar agente", + "pausedConsecutiveFailures_one": "Pausado — {{count}} falha consecutiva", + "pausedConsecutiveFailures_other": "Pausado — {{count}} falhas consecutivas", + "pendingApproval": "Aprovação pendente", + "pendingApprovals": "Aprovações pendentes", + "period": "Período", + "periodValue": "Período: {{period}}", + "permissions": "Permissões", + "permissionSettingsSaved": "Definições de permissões guardadas", + "permissionsUpdated": "Permissões atualizadas", + "pickAWorkspaceRepoADiscovered": "Escolha um repositório da área de trabalho, um caminho local descoberto ou cole um URL.", + "picksTheCliClientModelMode": "Escolhe o cliente CLI, o modelo, o modo e as flags que este agente vai usar.", + "platform": "Plataforma", + "preferences": "Preferências", + "primary": "Principal", + "priority": "Prioridade", + "priorityCritical": "Crítica", + "priorityHigh": "Alta", + "priorityLow": "Baixa", + "priorityMedium": "Média", + "project": "Projeto", + "projectCreated": "Projeto criado", + "projectDeleted": "Projeto eliminado", + "projectDescription": "Descrição do projeto...", + "projectName": "Nome do projeto", + "projects": "Projetos", + "projectSaved": "Projeto guardado", + "projectsGroupRelatedTasksAndRepositories": "Os projetos agrupam tarefas e repositórios relacionados.", + "projectStatusActive": "Ativo", + "projectStatusArchived": "Arquivado", + "projectStatusCompleted": "Concluído", + "projectStatusOnHold": "Suspenso", + "prompt": "Prompt", + "provider": "Fornecedor", + "providerCandidatesTriedForThisRun": "Fornecedores candidatos tentados nesta execução, por ordem.", + "providerDegraded": "Fornecedor degradado", + "providerHealth": "Saúde dos fornecedores", + "providerOrder": "Ordem dos fornecedores", + "providerRouting": "Encaminhamento de fornecedores", + "providerRoutingHeading": "Encaminhamento de fornecedores", + "providers": "Fornecedores", + "pulledLatestChanges": "Últimas alterações obtidas", + "pullFailed": "O pull falhou", + "pulling": "A fazer pull...", + "push": "Push", + "pushFailed": "O push falhou", + "pushing": "A fazer push...", + "readOnly": "Só de leitura", + "readOnlyReasonGit": "As competências geridas pelo GitHub são só de leitura", + "readOnlyReasonLocalPath": "As competências de caminho local são só de leitura", + "readOnlyReasonSkillsSh": "As competências geridas pelo skills.sh são só de leitura", + "ready": "Pronto", + "reason": "Motivo", + "recent": "Recentes", + "recentActivity": "Atividade recente", + "recentRuns": "Execuções recentes", + "recentTasks": "Tarefas recentes", + "reconnect": "Voltar a ligar", + "recovery": "Recuperação", + "recoveryLookbackWindow": "Janela de retrospetiva da recuperação", + "recoverySettingsSaved": "Definições de recuperação guardadas", + "refresh": "Atualizar", + "refreshSkills": "Atualizar as competências", + "refreshUtilization": "Atualizar a utilização", + "reject": "Rejeitar", + "rejected": "Rejeitado", + "remainingAmount": "Restante: {{amount}}", + "remoteDocker": "Docker remoto", + "remove": "Remover", + "removeApprover": "Remover o aprovador", + "removeRepository": "Remover repositório", + "removeReviewer": "Remover o revisor", + "removeSkill": "Remover a competência", + "repoCount_one": "{{count}} repositório", + "repoCount_other": "{{count}} repositórios", + "reportsTo": "Reporta a", + "repositories": "Repositórios", + "repositoryAdded": "Repositório adicionado", + "repositoryCloned": "Repositório clonado", + "repositoryRemoved": "Repositório removido", + "repositoryUrl": "URL do repositório", + "requested": "Pedida", + "requireApprovalForNewAgents": "Exigir aprovação para novos agentes", + "requireApprovalForSkillChanges": "Exigir aprovação para alterações de competências", + "requireApprovalForTaskCompletion": "Exigir aprovação para a conclusão das tarefas", + "required": "Obrigatório", + "resetsInHoursMinutes": "Repõe dentro de {{hours}}h {{minutes}}m", + "resetsInMinutes": "Repõe dentro de {{minutes}}m", + "resettingSoon": "a repor em breve", + "resolved": "Resolvida", + "resolvedRoutes": "Rotas resolvidas", + "resumeSession": "Retomar a sessão", + "retry": "Tentar novamente", + "retryAtSuffix": "· nova tentativa {{retryAt}}", + "retryAtWhen": "Nova tentativa a {{when}}", + "retryCancelledReassigned": "nova tentativa cancelada — reatribuída", + "retrying": "A tentar novamente…", + "retryNow": "Tentar novamente agora", + "reviewAndLaunch": "Rever e lançar", + "reviewer": "Revisor", + "reviewers": "Revisores", + "reviewRequest": "Pedido de revisão", + "reviewStages": "Fases de revisão", + "role": "Papel", + "roleAssistant": "Assistente", + "roleCeo": "CEO", + "roleDefault": "papel pré-definido", + "roleDevops": "DevOps", + "roleQa": "QA", + "roleSecurity": "Segurança", + "roleSpecialist": "Especialista", + "roleWorker": "Trabalhador", + "routeAttempts": "Tentativas de encaminhamento", + "routeBlocked": "Bloqueada", + "routeOutcomeFailedOther": "falhou por outro motivo", + "routeOutcomeFailedProviderUnavailable": "falhou por fornecedor indisponível", + "routeOutcomeLaunched": "lançada", + "routeOutcomeSkippedDegraded": "ignorado por estar degradado", + "routeOutcomeSkippedMaxAttempts": "ignorado por máximo de tentativas", + "routeOutcomeSkippedMissingMapping": "ignorado por falta de mapeamento", + "routeOutcomeSkippedUserAction": "ignorado por ação do utilizador", + "routineActivated": "Rotina ativada", + "routineCreated": "Rotina criada", + "routineDeleted": "Rotina eliminada", + "routineFired": "Rotina disparada", + "routinePaused": "Rotina pausada", + "routines": "Rotinas", + "routinesAutomaticallyCreateTasksOnA": "As rotinas criam tarefas automaticamente com base num agendamento ou num acionador de webhook.", + "routineSaved": "Rotina guardada", + "routineStarted": "Rotina iniciada", + "routineStatusActive": "Ativa", + "routineStatusArchived": "Arquivada", + "routineStatusPaused": "Pausada", + "routingOverridesSaved": "Substituições de encaminhamento guardadas", + "routingSettingsSaved": "Definições de encaminhamento guardadas", + "run": "Execução", + "runActivity": "Atividade das execuções", + "runCancelAssigneeChanged": "O responsável mudou", + "runCancelRetryStale": "Nova tentativa obsoleta", + "runCancelReviewParticipantChanged": "O revisor mudou", + "runCancelTaskCancelled": "Tarefa cancelada", + "runCancelTaskNotFound": "Tarefa não encontrada", + "runCancelTaskTerminal": "Tarefa concluída", + "runCount_one": "{{count}} execução", + "runCount_other": "{{count}} execuções", + "runInALocalDockerContainer": "Executar num contentor Docker local", + "runInASpritesCloudEnvironment": "Executar num ambiente na nuvem do Sprites", + "runningPausedErrors": "{{running}} em execução, {{paused}} pausadas, {{errors}} com erros", + "runNow": "Executar agora", + "runNowTitleCase": "Executar agora", + "runOnHostMachine": "Executar na máquina anfitriã", + "runs": "Execuções", + "runsAppearHereWhenARoutine": "As execuções aparecem aqui quando uma rotina é acionada.", + "runStatusCancelled": "cancelada", + "runStatusCoalesced": "fundida", + "runStatusDone": "concluída", + "runStatusFailed": "falhada", + "runStatusReceived": "recebida", + "runStatusSkipped": "ignorada", + "runStatusTaskCreated": "tarefa criada", + "runtime": "Runtime", + "runtimeCapabilities": "Capacidades do runtime", + "saveChanges": "Guardar alterações", + "saveConfiguration": "Guardar configuração", + "saved": "{{filename}} guardado", + "saveOverrides": "Guardar as substituições", + "savePermissions": "Guardar permissões", + "saveSkills": "Guardar competências", + "saving": "A guardar...", + "savingEllipsis": "A guardar…", + "schedule": "Agendamento", + "scopeId": "ID do âmbito", + "scopeType": "Tipo de âmbito", + "search": "Pesquisar...", + "searchFiles": "Pesquisar ficheiros...", + "searchingYourMachine": "A pesquisar na sua máquina…", + "searchMemory": "Pesquisar na memória...", + "searchOrPasteAUrlOr": "Pesquise ou cole um URL ou caminho…", + "searchTasks": "Pesquisar tarefas...", + "selectAFileToPreview": "Selecione um ficheiro para pré-visualizar", + "selectAFileToViewOr": "Selecione um ficheiro para ver ou editar.", + "selectAgent": "Selecionar agente", + "selectAgentOptional": "Selecionar agente (opcional)", + "selectAnAgentProfile": "Selecione um perfil de agente...", + "selectApprover": "Selecionar aprovador", + "selectAProjectToCreateATask": "Selecione um projeto para criar uma tarefa", + "selectASkillToView": "Selecione uma competência para ver", + "selectAWorkspaceToViewActivity": "Selecione uma área de trabalho para ver a atividade.", + "selectAWorkspaceToViewCosts": "Selecione uma área de trabalho para ver os custos.", + "selectExecutionProfile": "Selecionar perfil de execução", + "selectExecutor": "Selecionar executor...", + "selectProfile": "Selecionar perfil...", + "sendAMessage": "Envie uma mensagem...", + "sendAMessageToStartA": "Envie uma mensagem para iniciar uma sessão...", + "sendMessage": "Enviar mensagem", + "session": "Sessão", + "sessionId": "ID da sessão", + "sessionIdAfter": "ID da sessão (depois)", + "sessionIdBefore": "ID da sessão (antes)", + "setSpendingLimitsPerAgentOr": "Defina limites de despesa por agente ou por projeto. Os agentes são pausados quando os limites são excedidos.", + "setupTierAgentProfiles": "Configurar os perfis de agente por escalão", + "setUpYourOfficeWorkspace": "Configure a sua área de trabalho do Office", + "ship": "Entrega", + "showSystemTasks": "Mostrar as tarefas de sistema", + "skillAutoAttachedToRole": "Esta competência é associada automaticamente aos novos agentes {{role}}. Ainda assim, pode desmarcá-la para este agente.", + "skillCount_one": "{{count}} competência", + "skillCount_other": "{{count}} competências", + "skillMdContent": "Conteúdo do SKILL.md", + "skillNameInstructionsForTheAgent": "# Nome da competência\n\nInstruções para o agente...", + "skills": "Competências", + "skillSourceGithub": "GitHub", + "skillSourceGitRepository": "Repositório Git", + "skillSourceInline": "Em linha", + "skillSourceInlineEditable": "Em linha (editar no navegador)", + "skillSourceKandev": "Kandev", + "skillSourceLocal": "Local", + "skillSourceLocalPath": "Caminho local", + "skillSourceSkillsSh": "skills.sh", + "skillSourceUserHome": "Pasta pessoal do utilizador", + "skillsTeachAgentsHowToPerform": "As competências ensinam os agentes a realizar tarefas específicas. Importe do GitHub ou crie as suas.", + "skillsThisAgentOwnsSkillsAre": "Competências deste agente. As competências são injetadas no prompt de sistema do agente no início da sessão.", + "skillsUpdated": "Competências atualizadas", + "skipIfActive": "Ignorar se estiver ativa", + "skipMissed": "Ignorar os perdidos", + "sort": "Ordenar", + "sortBy": "Ordenar por", + "sortCreated": "Criado", + "sortUpdated": "Atualizado", + "sourceType": "Tipo de origem", + "spritesRemoteSandbox": "Sprites (sandbox remota)", + "staleRunCancelled": "execução obsoleta cancelada", + "standardCronExpressionExample": "Expressão cron padrão (por exemplo, {{cron}} para todas as segundas-feiras às 9h)", + "startASessionOrSendA": "Inicie uma sessão ou envie uma mensagem para começar.", + "started": "Iniciada", + "startFresh": "Começar de novo", + "startFreshSentence": "Começar de novo", + "starting": "A iniciar...", + "startSession": "Iniciar sessão", + "statusBacklog": "Backlog", + "statusBlocked": "Bloqueada", + "statusCancelled": "Cancelada", + "statusChanged": "estado alterado", + "statusDone": "Concluída", + "statusInProgress": "Em curso", + "statusInReview": "Em revisão", + "statusTodo": "Por fazer", + "stepDetails": "Detalhes", + "stepNumberTitle": "Passo {{number}}: {{title}}", + "stepSchedule": "Agendamento", + "stepTaskTemplate": "Modelo de tarefa", + "stepXOfYTitle": "Passo {{number}} de {{total}} — {{title}}", + "structuredResult": "Resultado estruturado", + "subIssueOfParent": "Subissue de {{parent}}", + "subscriptionQuota": "Quota da subscrição", + "succeeded": "Bem-sucedidas", + "successRate": "Taxa de sucesso", + "sync": "Sincronizar", + "syncTheWorkspaceDatabaseWithOn": "Sincronize a base de dados da área de trabalho com os ficheiros YAML em disco ou transfira um pacote de exportação portátil.", + "system": "Sistema", + "tabChannels": "Canais", + "tabConfiguration": "Configuração", + "tabInstructions": "Instruções", + "tabMemory": "Memória", + "tabPermissions": "Permissões", + "taskCount_one": "{{count}} tarefa", + "taskCount_other": "{{count}} tarefas", + "taskCreated": "Tarefa criada", + "taskDescription": "Descrição da tarefa", + "taskDescriptionTemplate": "Modelo de descrição da tarefa", + "taskNotFound": "Tarefa não encontrada", + "taskPrefix": "Prefixo das tarefas", + "taskReview": "Revisão da tarefa", + "tasks": "Tarefas", + "tasksByPriority": "Tarefas por prioridade", + "tasksByStatus": "Tarefas por estado", + "tasksInProgress": "Tarefas em curso", + "tasksMustBeReviewedBeforeThey": "As tarefas têm de ser revistas antes de poderem ser marcadas como concluídas", + "tasksTouched": "Tarefas tocadas", + "tasksWillBeNumbered": "As tarefas são numeradas {{prefix}}-1, {{prefix}}-2, etc.", + "tasksWorkedOnByPriority": "Tarefas trabalhadas, por prioridade", + "tasksWorkedOnByStatus": "Tarefas trabalhadas, por estado", + "taskTitle": "Título da tarefa", + "taskTitleTemplate": "Modelo de título da tarefa", + "telegram": "Telegram", + "theAgentResponsibleForManagingThis": "O agente responsável pela gestão deste projeto", + "theCoordinatorCanCreateWorkerAgents": "O coordenador pode criar agentes trabalhadores e escolher um escalão para cada um. Cada escalão resolve para o perfil aqui selecionado e pode ser alterado mais tarde no encaminhamento da área de trabalho.", + "theCoordinatorManagesOtherAgentsDelegates": "O coordenador faz a gestão dos outros agentes, delega tarefas e monitoriza o progresso.", + "thisAgentAsTheAssignee": "Este agente como responsável", + "thisCoordinatorHasNoScheduledWake": "Este coordenador não tem despertares agendados — só dispara com comentários, erros ou acionadores manuais.", + "thisPermanentlyDeletesAgentsTasksSkills": "Isto elimina permanentemente agentes, tarefas, competências, rotinas e configuração.", + "thisProvider": "este fornecedor", + "thisWillPermanentlyDeleteAllMemory": "Isto elimina permanentemente todas as entradas de memória deste agente. Esta ação não pode ser anulada.", + "thisWillPermanentlyDeleteThisInstruction": "Isto elimina permanentemente este ficheiro de instruções. Esta ação não pode ser anulada.", + "tier": "Escalão", + "tierBalanced": "Balanced", + "tierBalancedDescription": "Usado nos agentes trabalhadores gerais, quando o coordenador atribui o escalão Balanced.", + "tierBalancedHint": "Capacidade padrão", + "tierBalancedQualified": "Balanced (padrão)", + "tierBalancedUsage": "Utilização do escalão Balanced", + "tierEconomy": "Economy", + "tierEconomyDescription": "Usado nos agentes de QA, de rotina e de menor custo, quando o coordenador atribui o escalão Economy.", + "tierEconomyHint": "Modelo viável mais barato", + "tierEconomyQualified": "Economy (mais barato)", + "tierEconomyUsage": "Utilização do escalão Economy", + "tierFrontier": "Frontier", + "tierFrontierDescription": "Usado quando o coordenador cria agentes para o trabalho de maior capacidade ou atribui o escalão Frontier.", + "tierFrontierHint": "Melhor capacidade por fornecedor", + "tierFrontierQualified": "Frontier (melhor capacidade)", + "tierFrontierUsage": "Utilização do escalão Frontier", + "tierNameBalanced": "Balanced", + "tierNameEconomy": "Economy", + "tierNameFrontier": "Frontier", + "timezone": "Fuso horário", + "title": "Título", + "titleForAutoCreatedTasksUse": "Título das tarefas criadas automaticamente. Use {{name}} e {{date}} como marcadores.", + "toggleNesting": "Alternar o aninhamento", + "topToBottomFallbackOrderAgents": "Ordem de recurso, de cima para baixo. Os agentes tentam o primeiro fornecedor saudável, exceto se a substituírem.", + "toSetUpARoutineYou": "Para configurar uma rotina, vai precisar de:", + "total": "Total", + "totalApiCostsThisBillingPeriod": "Custos totais de API neste período de faturação", + "totalCost": "Custo total", + "totalSpend": "Despesa total", + "trigger": "Acionador", + "triggerComment": "Comentário", + "triggerRoutine": "Rotina", + "triggerTask": "Tarefa", + "triggerType": "Tipo de acionador", + "type": "Tipo", + "typeNameToConfirm": "Escreva {{name}} para confirmar", + "typicalMappingAtLaunchTimeThe": "Mapeamento típico. No momento do lançamento, o encaminhador percorre a ordem dos fornecedores e escolhe o primeiro que estiver saudável, pelo que um fornecedor principal degradado pode fazer com que esta execução use um fornecedor/modelo diferente do aqui apresentado.", + "unassigned": "Sem responsável", + "unassignedParen": "(sem responsável)", + "unknownError": "Erro desconhecido", + "unstartedTaskRecovered": "tarefa por iniciar recuperada", + "untitled": "(sem título)", + "updateWorkspaceConfiguration": "Atualizar a configuração da área de trabalho", + "upload": "Carregar", + "uploadLogo": "Carregar logótipo", + "useAgentSNormalTier": "Usar o escalão normal do agente", + "usedBy": "USADO POR", + "useQuery": "Usar “{{query}}”", + "usingThisAgentsWakeReasonOverrides": "A usar as substituições por motivo de despertar deste agente.", + "variables": "Variáveis", + "waiting": "À espera…", + "waitingForCapacity": "À espera de capacidade", + "wakeBudgetAlert": "Alerta de orçamento", + "wakeBudgetAlertLong": "Os alertas de orçamento são confirmações rápidas — o agente lê o alerta, decide se pausa o trabalho ou notifica uma pessoa, e volta a adormecer. Não há raciocínio pesado envolvido, pelo que o escalão mais barato é quase sempre suficiente.", + "wakeBudgetAlertRecommendation": "Trabalho de confirmação rápida → um escalão mais barato chega.", + "wakeBudgetAlertShort": "O agente é notificado quando o orçamento de uma área de trabalho ou de um projeto está perto do limite e pode ser preciso abrandar ou escalar.", + "wakeHeartbeat": "Heartbeat", + "wakeHeartbeatLong": "Os heartbeats mantêm o agente reativo: uma análise rápida da caixa de entrada, das tarefas abertas e dos alertas de orçamento. Disparam constantemente em segundo plano, pelo que usar aqui um escalão mais barato pode reduzir muito a sua despesa mensal sem afetar o trabalho que interessa.", + "wakeHeartbeatRecommendation": "Muito frequente → recomenda-se um escalão mais barato.", + "wakeHeartbeatShort": "Verificação periódica que o seu agente faz de forma agendada (a cada poucos minutos) para ver se há algo novo a precisar de atenção.", + "wakeReasonTierPolicy": "Política de escalões por motivo de despertar", + "wakeRoutineTrigger": "Acionador de rotina", + "wakeRoutineTriggerLong": "Os acionadores de rotina disparam segundo um agendamento cron que você controla. A carga de trabalho é previsível e raramente crítica no tempo, pelo que um escalão mais barato costuma ser suficiente. Substitua por agente se uma rotina específica precisar do modelo mais capaz.", + "wakeRoutineTriggerRecommendation": "Carga previsível → um escalão mais barato costuma chegar.", + "wakeRoutineTriggerShort": "Trabalhos agendados que configurou em Rotinas (por exemplo, \"resumir os PRs todas as segundas-feiras de manhã\").", + "warning": "Aviso", + "webhook": "Webhook", + "whatEachAgentWouldLaunchWith": "O que cada agente lançaria com as definições atuais.", + "whatHappensIfThePreviousRun": "O que acontece se a execução anterior ainda estiver ativa", + "whatHappensToTicksMissedWhile": "O que acontece aos ticks perdidos enquanto o backend esteve offline", + "whatTheAgentReceivedAndProduced": "O que o agente recebeu e produziu.", + "whenEnabledProviderLimitsCanMove": "Quando ativado, os limites do fornecedor podem passar uma execução para o perfil de execução seguinte. Quando desativado, o Office usa apenas o primeiro fornecedor do escalão selecionado.", + "whetherThisSkillSContentCan": "Se o conteúdo desta competência pode ser editado no Kandev", + "whichAgentManagesThisOne": "Que agente faz a gestão deste", + "workingDir": "Diretório de trabalho", + "workspaceCreatedSuccessfully": "Área de trabalho criada com sucesso", + "workspaceDefaultForThisReason": "Pré-definição da área de trabalho para este motivo:", + "workspaceDefaultTier": "Escalão pré-definido da área de trabalho", + "workspaceDefaultTierHint": "Vamos tratar <1>{{model}} como o escalão {{tier}} para {{provider}}. Pode alterá-lo mais tarde em Área de trabalho → Encaminhamento de fornecedores.", + "workspaceDeleted": "Área de trabalho eliminada", + "workspaceName": "Nome da área de trabalho", + "writeTheDatabaseStateToOn": "Escrever o estado da base de dados em ficheiros YAML no disco.", + "yourModel": "o seu modelo", + "zoomIn": "Aproximar", + "zoomOut": "Afastar" +} diff --git a/apps/web/src/locales/pt-pt/settings.json b/apps/web/src/locales/pt-pt/settings.json index 835427ef25..ac003ae401 100644 --- a/apps/web/src/locales/pt-pt/settings.json +++ b/apps/web/src/locales/pt-pt/settings.json @@ -28,6 +28,7 @@ "appriseUrlRequired": "É obrigatório pelo menos um URL de serviço Apprise.", "archiveConfirmation": "Confirmação de arquivo", "arrangeSplit": "Organizar a divisão", + "autoApprove": "Aprovação automática", "autoInstallIfNotFound": "Instalar automaticamente se não for encontrado", "autoStart": "Arranque automático", "autoStartLanguageServer": "Iniciar automaticamente o servidor de linguagem de {{language}}", @@ -350,6 +351,8 @@ "makesAgentctlValuesAvailableToPlugins": "Disponibiliza os valores do agentctl a plugins e outros consumidores. A barra de estado incorporada continua limitada ao anfitrião.", "manageApiKeysAndCredentialsSecrets": "Faça a gestão das chaves de API e das credenciais. Os segredos são guardados encriptados e injetados nos ambientes dos agentes através das variáveis de ambiente do perfil de executor.", "globalScope": "Global", + "modelWithValue": "Modelo: {{model}}", + "temperatureWithValue": "Temperatura: {{temperature}}", "workspaceScope": "Área de trabalho", "workspaceSecretsDescription": "Faça a gestão dos segredos disponíveis para os repositórios desta área de trabalho. Os perfis de agente e de executor partilhados só podem usar segredos Globais.", "revealSecretNamed": "Revelar o segredo {{name}}", diff --git a/apps/web/src/locales/pt-pt/sidebar.json b/apps/web/src/locales/pt-pt/sidebar.json index 6c91c1d3ef..6d351f1fda 100644 --- a/apps/web/src/locales/pt-pt/sidebar.json +++ b/apps/web/src/locales/pt-pt/sidebar.json @@ -27,6 +27,7 @@ "connectionUnstable": "Ligação instável", "connectionUnstableDescription": "Ligação instável. A voltar a ligar ao Kandev.", "costs": "Custos", + "disabledBadge": "Desativado", "enabledBadge": "Ativado", "expandGroup": "Expandir {{label}}", "expandSidebar": "Expandir a barra lateral", @@ -39,6 +40,7 @@ "logOut": "Terminar sessão", "maxViews_one": "máx. {{count}}", "maxViews_other": "máx. {{count}}", + "nestUnder": "Aninhar em {{title}}", "newKanbanWorkspace": "Nova área de trabalho kanban", "newOfficeWorkspace": "Nova área de trabalho de escritório", "newTask": "Nova tarefa", @@ -52,9 +54,14 @@ "offline": "Sem ligação", "openStatus": "Abrir estado", "pausedBadge": "em pausa", + "pollModeFastLabel": "focada, sondagem de 2 s", + "pollModePausedLabel": "sem subscritores", + "pollModeSlowLabel": "subscrita, sondagem de 30 s", "preferences": "Preferências", "profileAndPassword": "Perfil e palavra-passe", "projects": "Projetos", + "queuedPromptCount_one": "{{count}} prompt em fila", + "queuedPromptCount_other": "{{count}} prompts em fila", "quickChat": "Chat rápido", "quickTerminal": "Terminal rápido", "quickChatTerminals": "Terminais", diff --git a/apps/web/src/locales/pt-pt/system.json b/apps/web/src/locales/pt-pt/system.json index 345b365db9..525ad0733b 100644 --- a/apps/web/src/locales/pt-pt/system.json +++ b/apps/web/src/locales/pt-pt/system.json @@ -131,6 +131,9 @@ "healthSystemChecks": "Verificações do sistema", "healthTitle": "Saúde", "healthWhatsMonitored": "O que é monitorizado", + "host": "Anfitrião", + "hostMetrics": "Métricas do anfitrião", + "hostWithLabel": "Anfitrião: {{label}}", "inviteCopied": "Ligação de convite copiada", "inviteCopy": "Copiar a ligação de convite", "inviteCreate": "Criar ligação de convite", @@ -143,10 +146,14 @@ "inviteReadyTitle": "Ligação de convite pronta", "inviteTitle": "Convidar um utilizador", "inviteUrlLabel": "Ligação de convite", + "ioLoadHelp": "Número médio de tarefas em execução ou à espera de CPU durante o último minuto. Compare este valor com o número de núcleos de CPU do anfitrião.", + "issuesNeedAttention_one": "{{count}} problema precisa da sua atenção", + "issuesNeedAttention_other": "{{count}} problemas precisam da sua atenção", "jobStateDone": "Concluído", "jobStateFailed": "Falhou", "jobStateQueued": "Em fila", "jobStateRunning": "Em execução", + "lastUpdateUnknown": "Última atualização desconhecida", "licensesCount": "{{visible}} de {{total}}", "licensesEmpty": "Nenhuma entrada corresponde ao filtro.", "licensesFilterPlaceholder": "Filtrar por nome, licença ou ecossistema...", @@ -167,6 +174,9 @@ "messageQueueLoadFailed": "Não foi possível carregar as definições da fila de mensagens.", "messageQueueLoading": "A carregar as definições da fila de mensagens…", "messageQueueMaximumLabel": "Máximo de mensagens por sessão", + "messageQueueMergeDescription": "Permite-lhe fundir uma mensagem em fila na mensagem imediatamente acima antes de o agente as recolher, combinando rajadas de seguimentos relacionados num único turno.", + "messageQueueMergeNotice": "Só podem ser fundidas mensagens adjacentes do mesmo remetente: as suas próprias mensagens em fila fundem-se entre si, e as mensagens colocadas em fila pelo agente de outra tarefa só se fundem quando partilham a mesma tarefa de origem. As mensagens de fluxo de trabalho, de sistema e em trânsito nunca podem ser fundidas. A fusão também é rejeitada se as referências a entidades das duas mensagens, combinadas e sem duplicados, ultrapassarem 100, o limite partilhado por mensagem. Desativar esta opção oculta de imediato o controlo de fusão e não afeta as mensagens já fundidas.", + "messageQueueMergeToggleLabel": "Ativar a fusão de mensagens em fila", "messageQueueRetry": "Tentar novamente", "messageQueueSaveFailed": "Não foi possível guardar as definições da fila de mensagens.", "messageQueueSourceDefault": "Pré-definição", @@ -176,6 +186,12 @@ "messageQueueUnlimited": "Ilimitado", "messageQueueUnlimitedHelp": "Defina 0 para ilimitado. Um número inteiro positivo rejeita novas mensagens depois de esse número estar pendente numa sessão.", "messageQueueValidation": "Introduza um número inteiro igual ou superior a 0.", + "metricCpuPercent": "CPU", + "metricCpuTemp": "Temperatura da CPU", + "metricDiskPercent": "Disco", + "metricIoLoad": "Carga do sistema (1 min)", + "metricMemoryPercent": "Memória", + "metricsUnavailable": "Métricas indisponíveis", "navAbout": "Acerca", "navBackups": "Cópias de segurança", "navDatabase": "Base de dados", @@ -226,6 +242,7 @@ "selfUpdateStartingUnknown": "A iniciar a atualização para a nova versão…", "selfUpdateTimedOut": "A atualização está a demorar mais do que o esperado. Atualize para ver a versão atual.", "settingsRouteNotPorted": "Esta rota de definições é tratada pela shell da SPA, mas a sua página de cliente dedicada ainda está a ser migrada: <1>{{pathname}}", + "setupIssues": "Problemas de configuração", "statusPageDescription": "Verificações de saúde, utilização do disco e resumo da versão.", "storageAcknowledgeDaemon": "Reconhecer o daemon", "storageAcknowledgeDedicatedFirst": "Reconheça primeiro um daemon do Docker dedicado.", @@ -395,11 +412,13 @@ "storageWorkspacesDescription": "Recupere recursos que o Kandev consegue identificar com segurança como já não estando em uso.", "storageWorkspacesDetail": "{{reclaimable}} recuperáveis após o período de tolerância · {{active}} ativas", "storageWorkspacesTitle": "Áreas de trabalho e contentores", + "systemMetrics": "Métricas do sistema", "uiStateHelp": "Limpa as preferências de esquema e de interface guardadas no seu navegador (tamanhos dos painéis, tarefas afixadas, grupos expandidos, etc.). Use isto se a aplicação parecer avariada, se os painéis estiverem bloqueados ou se o esquema parecer errado. As suas tarefas, sessões e dados do servidor não são afetados - apenas o estado da interface de cada navegador. A página é recarregada após a reposição.", "uiStateReset": "Repor", "uiStateResetLabel": "Repor o esquema do navegador", "uiStateTitle": "Estado da interface", "updateAvailable": "Atualização disponível", + "updatedRelative": "Atualizado {{relative}}", "updatesApply": "Aplicar a atualização", "updatesApplyConfirmDesktop": "O Kandev instala a {{version}} e reinicia a aplicação de ambiente de trabalho.", "updatesApplyConfirmService": "O Kandev atualiza para a {{version}}, reinstala o serviço do utilizador e reinicia-o.", diff --git a/apps/web/src/locales/pt-pt/task.json b/apps/web/src/locales/pt-pt/task.json index 4a209ae8c2..37656cd933 100644 --- a/apps/web/src/locales/pt-pt/task.json +++ b/apps/web/src/locales/pt-pt/task.json @@ -1,4 +1,6 @@ { + "aPullRequestAlreadyExistsFor": "Já existe um pull request para esta tarefa", + "aSharedDocumentForYouAnd": "Um documento partilhado onde você e o agente colaboram na abordagem", "aboutContextWindowSource": "Sobre a origem da janela de contexto", "activeBadge": "ATIVA", "activeSessionRepositoryTapToSwitch": "Sessão ativa: {{agentLabel}}. Repositório: {{repositoryLabel}}. Toque para mudar.", @@ -8,7 +10,12 @@ "activity": "Atividade", "add": "Adicionar", "addAComment": "Adicionar um comentário...", + "addACommentFromTheDiff": "Adicione um comentário a partir do diff ou da vista de ficheiro e volte aqui para o rever e enviar.", + "addAPortThatIsnT": "Adicione uma porta que não seja detetada automaticamente. Útil para serviços ainda não iniciados.", + "addAgent": "Adicionar agente", "addAnOptionalComment": "Adicionar um comentário opcional", + "addAnotherRemoteRepository": "Adicionar outro repositório remoto", + "addAnotherRepository": "Adicionar outro repositório", "addApprover": "+ Adicionar aprovador", "addAtLeastOneSource": "Adicione pelo menos uma fonte.", "addBlocker": "+ Adicionar bloqueio", @@ -17,12 +24,17 @@ "addLabel": "Adicionar etiqueta", "addLabels": "+ Adicionar etiquetas", "addMore": "Adicionar mais", + "addPanel": "Adicionar painel", + "addPortManually": "Adicionar porta manualmente", + "addRemoteRepository": "Adicionar repositório remoto", + "addRepositoriesToWorkspace": "Adicionar repositórios à área de trabalho", "addRepository": "Adicionar repositório", "addReviewer": "+ Adicionar revisor", "addShort": "+ Adicionar", "addSubIssue": "Adicionar subissue", "addToWorkspace": "Adicionar à área de trabalho", "addYourCommentOrInstruction": "Adicione o seu comentário ou instrução...", + "addedRemoved": "{{added}} adicionadas · {{removed}} removidas", "adding": "A adicionar…", "advanced": "Avançado", "afterDuration": " após {{duration}}", @@ -41,11 +53,29 @@ "agentIsRunning": "O agente está em execução", "agentIsStarting": "O agente está a arrancar", "agentOutput": "Saída do agente", + "agentPermissionMode": "Modo de permissões do agente", "agentPlan": "Plano do agente", + "agentProfile": "Perfil de agente", + "agentProfile2": "Perfil de agente", "agentProfileNoLongerExists": "O perfil de agente já não existe", "agentRunning": "agente em execução", + "agentSetByWorkflow": "Agente definido pelo fluxo de trabalho", + "agentctl": "Agentctl", + "allChanges": "Todas as alterações", "allChangesTitle": "Todas as alterações", + "allWorkspaceRepositoriesAdded": "Todos os repositórios da área de trabalho já foram adicionados", + "alreadyAdded": "Já adicionado", + "alsoArchiveSubtasks_one": "Arquivar também {{count}} subtarefa", + "alsoArchiveSubtasks_other": "Arquivar também {{count}} subtarefas", + "alsoDeleteSubtasks_one": "Eliminar também {{count}} subtarefa", + "alsoDeleteSubtasks_other": "Eliminar também {{count}} subtarefas", "alwaysAllow": "Permitir sempre", + "amend": "Emendar", + "amendCommitMessage": "Emendar a mensagem do commit", + "amendCommitMessage2": "Emendar a mensagem do commit", + "amendMessage": "Emendar a mensagem", + "amending": "A emendar...", + "anEnvironmentIsCreatedWhenYou": "O ambiente é criado quando inicia uma sessão nesta tarefa.", "anErrorOccurred": "Ocorreu um erro", "anUnexpectedErrorOccurred": "Ocorreu um erro inesperado", "andMoreFilesTruncated": "...e mais ficheiros (truncado)", @@ -55,8 +85,11 @@ "annotationCount_other": "{{count}} anotações", "annotationPin": "Marcador", "answer": "resposta", + "anyUncommittedOrUnpushedChangesAre": "Quaisquer alterações sem commit ou sem push são perdidas.", + "anyUncommittedOrUnpushedChangesIn": "Quaisquer alterações sem commit ou sem push na área de trabalho serão perdidas.", "anyoneWithThisLinkCanView": "Qualquer pessoa com esta ligação pode ver esta conversa. Reveja a pré-visualização com atenção antes de publicar — depois de publicado, o retrato é carregado para o GitHub Gist na sua conta.", "approve": "Aprovar", + "approveAndContinue": "Aprovar e continuar", "approveThisAction": "Aprovar esta ação?", "approved": "Aprovada", "approvedLowercase": "aprovada", @@ -64,6 +97,14 @@ "approvedVerb": "Aprovou", "approvers": "Aprovadores", "archive": "Arquivar", + "archiveTaskConfirm": "Tem a certeza de que quer arquivar \"{{taskTitle}}\"?", + "archiveTaskTitle": "Arquivar a tarefa?", + "archiveTasksConfirm_one": "Tem a certeza de que quer arquivar {{count}} tarefa?", + "archiveTasksConfirm_other": "Tem a certeza de que quer arquivar {{count}} tarefas?", + "archiveTasksTitle_one": "Arquivar {{count}} tarefa?", + "archiveTasksTitle_other": "Arquivar {{count}} tarefas?", + "archiveTasks_one": "Arquivar {{count}} tarefa", + "archiveTasks_other": "Arquivar {{count}} tarefas", "askToMakeChanges": "Peça alterações, @mencione ficheiros", "askToMakeChangesWithCommands": "Peça alterações, @mencione ficheiros, execute /comandos", "assignee": "Responsável", @@ -75,45 +116,88 @@ "attachmentPreview": "Pré-visualização do anexo", "attachmentSizeKb": "({{size}} KB)", "attachmentsCanTotalUpTo": "Os anexos podem totalizar até {{bytes}}.", + "authentication": "Autenticação", "authenticationRequiredLogInBeforeResuming": "É necessária autenticação; inicie sessão antes de retomar", "authenticationRequiredPleaseLogInVia": "É necessária autenticação — inicie sessão através do terminal", + "autoMarkReviewedOnScroll": "Marcar como revisto automaticamente ao deslocar", + "autoStart": "Arranque automático", + "availableModes": "Modos disponíveis", "awaitingApprovalFromAgents_one": "A aguardar a aprovação de {{count}} agente", "awaitingApprovalFromAgents_other": "A aguardar a aprovação de {{count}} agentes", "awaitingUserResponse": "A aguardar a resposta do utilizador (pending_id={{pendingId}})", "back": "Voltar", + "backendRejectedSessionRequest": "O backend rejeitou o pedido de sessão.", "background": "segundo plano", "backgroundWorkIsRunning": "Há trabalho em segundo plano em execução", "baseBranch": "Branch de base", + "baseBranch2": "Branch de base", + "behindCount": "{{behind}} atrás", + "binaryFile": "Ficheiro binário", + "binaryOrEmptyDiff": "{{path}} -- diff binário ou vazio", + "blank": "Em branco", "blocked": "Bloqueada", + "blockedBy": "Bloqueada por", "blocking": "A bloquear", + "blocks": "Bloqueia", + "bothVersionsAreEmpty": "(ambas as versões estão vazias)", + "branch": "Branch", + "branchBasedOn": "Branch <1>{{branch}}, baseado em <3>{{base}}", + "branchComparisonAndTaskGitCredentials": "Comparação de branches e credenciais Git da tarefa.", + "branchDetails": "Detalhes do branch", "branchIsNoLongerAvailable": "O branch já não está disponível", + "branchName": "Nome do branch", + "browser": "Navegador", + "browserPreview": "Pré-visualização no navegador", "buildingPreview": "A construir a pré-visualização…", "byAuthor": "por {{author}}", + "byDefaultTheLocalExecutorUses": "Por pré-definição, o executor local usa o checkout atual do seu repositório. Clique para, em vez disso, criar um novo branch a partir de uma base, deixando a sua árvore de trabalho intacta.", "cachedInput": "Entrada em cache", "cancelAgent": "Cancelar o agente", "cancelLeavesWorkspaceUnchangedDetail": "<0>Cancelar deixa a área de trabalho inalterada. Se continuar, o lote é tudo-ou-nada: se alguma fonte falhar, nenhuma das novas fontes é anexada.", + "cancelTaskTree": "Cancelar a árvore de tarefas", "cancelTree": "Cancelar a árvore", "cancelled": "Cancelada", "cancelledTree": "Cancelada (árvore)", "cancelling": "A cancelar...", "cannotMarkDoneAwaitingApprovalFrom": "Não é possível marcar como concluída: a aguardar a aprovação de {{names}}", "cannotMarkDoneAwaitingApprovals": "Não é possível marcar como concluída: a aguardar aprovações", + "cannotPreviewThisFile": "Não é possível pré-visualizar este ficheiro", + "changeGithubIssue": "Alterar a issue do GitHub", "changes": "Alterações", + "changesDiscarded": "Alterações descartadas", + "changesHiddenBanner_one": "Mais {{formattedCount}} ficheiro alterado está oculto — o conjunto de alterações é demasiado grande para ser apresentado por completo.", + "changesHiddenBanner_other": "Mais {{formattedCount}} ficheiros alterados estão ocultos — o conjunto de alterações é demasiado grande para ser apresentado por completo.", "chat": "Chat", + "chooseALinkedPullRequestOr": "Escolha um pull request ou merge request associado para abrir no respetivo fornecedor.", "chooseFromSavedOrDiscoveredRepositories": "Escolha entre repositórios guardados ou descobertos.", "chooseLocalFolder": "Escolher uma pasta local", "chooseLocalGitRepository": "Escolher um repositório Git local", "chooseRepositoriesOrFoldersToMake": "Escolha os repositórios ou pastas a disponibilizar nesta tarefa.", "cleanup": "Limpeza", "clearAllAnnotations": "Limpar todas as anotações", + "cliModeYourPromptWillBe": "Modo CLI - o seu prompt será injetado automaticamente no terminal", + "clickAnywhereToStartWriting": "Clique em qualquer sítio para começar a escrever", + "clickRefreshToDetectListeningPorts": "Clique em atualizar para detetar as portas à escuta.", "cloneFromAProviderOrGit": "Clonar a partir de um fornecedor ou de um URL Git.", "close": "Fechar", "close2": "Fechar {{label}}", + "closeComposeBoxHelp": "Feche a caixa de composição (ou prima <1>Esc dentro dela). O terminal do agente CLI mantém o foco.", + "closeGroup": "Fechar o grupo", + "closeOthers": "Fechar os outros", + "closePreview": "Fechar a pré-visualização", + "closeTerminal": "Fechar o terminal?", + "closeTerminal2": "Fechar o terminal", + "closingTerminal": "A fechar o terminal", + "cmdEnterToAdd": "⌘+Enter para adicionar", + "cmdEnterToUpdate": "⌘+Enter para atualizar", "codeLanguagePlain": "Simples", "collapse": "Recolher", + "collapseAll": "Recolher tudo", "collapseLastPrompt": "Recolher o último prompt", "collapsePlan": "Recolher o plano", + "collapseSubtasks": "Recolher as subtarefas", "collapseToolbar": "Recolher a barra de ferramentas", + "color": "Cor", "command": "Comando", "commandCopied": "Comando copiado", "commandFailed": "O comando falhou", @@ -122,17 +206,31 @@ "commandSucceeded": "O comando foi bem-sucedido", "comment": "Comentar", "commentCmdShiftC": "Comentar (Cmd+Shift+C)", + "commentCount_one": "{{count}} comentário", + "commentCount_other": "{{count}} comentários", "commentOnAgentResponse": "Comentar a resposta do agente", "commentOnSelection": "Comentar a seleção", + "comments": "Comentários", "commentsOnFiles_one": "{{count}} comentário em {{files}}", "commentsOnFiles_other": "{{count}} comentários em {{files}}", "commit": "Commit", "commitChanges": "Fazer commit das alterações", "commitChangesTitle": "Fazer commit das alterações", + "commits": "Commits", "committed": "Com commit", "committingEllipsis": "A fazer commit...", + "compare": "Comparar", + "compareRevisions": "Comparar v{{before}} → v{{after}}", + "compareWithCurrent": "Comparar com a atual", + "compareWithPrevious": "Comparar com a anterior", + "comparingAgainstLabel": "a comparar com:", "completed": "Concluída", "completedSuccessfully": "{{operationName}} concluída com êxito", + "configureCredentials": "Configurar credenciais", + "connectAHealthySentryInstanceIn": "Ligue uma instância do Sentry saudável em Definições → Integrações → Sentry para associar issues.", + "connectProviderBanner": "Ligue um fornecedor de controlo de versões em <2>Definições para escolher entre os seus repositórios.", + "connectingTerminal": "A ligar o terminal...", + "container": "Contentor", "contentMarkdownSupported": "Conteúdo (aceita markdown)", "context": "Contexto", "contextFieldLabel": "contexto", @@ -143,21 +241,37 @@ "controlD": "Control D", "copied": "Copiado!", "copied2": "Copiado", + "copied3": "{{label}} copiado", "copy": "Copiar", + "copy2": "Copiar {{label}}", "copyAnnotations": "Copiar as anotações", "copyAnnotationsToClipboard": "Copiar as anotações para a área de transferência", "copyCommand": "Copiar o comando", "copyIdentifier": "Copiar o identificador", + "copyInitialPrompt": "Copiar o prompt inicial", "copyMessage": "Copiar a mensagem", "copyMessageToClipboard": "Copiar a mensagem para a área de transferência", "copyPath": "Copiar o caminho", "copyToClipboard": "Copiar para a área de transferência", + "copyUrl": "Copiar o URL", + "copyWorkspacePath": "Copiar o caminho da área de trabalho", "couldNotAddSources": "Não foi possível adicionar as fontes. As suas entradas continuam aqui para tentar novamente.", + "couldNotLoadRepositories": "Não foi possível carregar os repositórios: {{message}}", + "couldNotResolveRemoteRepository": "Não foi possível resolver o repositório remoto: {{message}}", + "couldnTStartASession": "Não foi possível iniciar uma sessão", "create": "Criar", + "createANewBranch": "Criar um novo branch", "createAsDraft": "Criar como rascunho", "createChangeRequest": "Criar {{shortName}}", "createChangeRequestLong": "Criar {{longName}}", "createFailed": "Não foi possível criar o {{shortName}}", + "createNewRepository": "Criar um novo repositório", + "createNewTask": "Criar nova tarefa", + "createNewWorkspace": "Criar nova área de trabalho", + "createOnly": "Apenas criar", + "createSession": "Criar sessão", + "createSubtask": "Criar subtarefa", + "createWithoutStartingAgent": "Criar sem iniciar o agente", "created": "Criada", "created2": "{{longName}} criado", "createdBy": "Criada por", @@ -166,22 +280,66 @@ "creatingFrom": "A criar o {{shortName}} a partir de <4>{{displayBranch}}", "creatingFromTo": "A criar o {{shortName}} a partir de <4>{{displayBranch}} para <7>{{baseBranch}}", "ctrl": "Ctrl", + "current": "atual", + "current2": "Atual", + "currentStep": "Passo atual", "customPrompt": "Prompt personalizado", "customPromptNamed": "Prompt personalizado: {{name}}", "cwd": "cwd:", + "dedicatedPortTunnelAppIsServed": "Túnel de porta dedicado. A aplicação é servida em /, pelo que os recursos e o encaminhamento funcionam corretamente.", + "defaultSubtaskTitle": "{{parent}} / Subtarefa {{index}}", "delete": "Eliminar", + "delete2": "Eliminar {{name}}", + "deleteAgent": "Eliminar agente", "deleteComment": "Eliminar comentário", + "deleteFolderConfirm": "Isto elimina permanentemente <1>{{name}}. Esta ação não pode ser anulada.", + "deleteFolderTitle": "Eliminar a pasta?", + "deleteFolderWithFilesConfirm_one": "Isto elimina permanentemente <1>{{name}} e <4>{{count}} ficheiro que contém. Esta ação não pode ser anulada.", + "deleteFolderWithFilesConfirm_other": "Isto elimina permanentemente <1>{{name}} e os <4>{{count}} ficheiros que contém. Esta ação não pode ser anulada.", + "deleteItemsLabel_one": "Eliminar {{count}} item", + "deleteItemsLabel_other": "Eliminar {{count}} itens", + "deleteItemsTitle_one": "Eliminar {{count}} item?", + "deleteItemsTitle_other": "Eliminar {{count}} itens?", + "deleteLayoutConfirm": "Eliminar {{name}}?", "deleteSession": "Eliminar a sessão?", + "deleteTaskConfirm": "Tem a certeza de que quer eliminar \"{{taskTitle}}\"? Esta ação não pode ser anulada.", + "deleteTaskTitle": "Eliminar tarefa", + "deleteTasksConfirm_one": "Tem a certeza de que quer eliminar {{count}} tarefa? Esta ação não pode ser anulada.", + "deleteTasksConfirm_other": "Tem a certeza de que quer eliminar {{count}} tarefas? Esta ação não pode ser anulada.", + "deleteTasksCount_one": "Eliminar {{count}} tarefa", + "deleteTasksCount_other": "Eliminar {{count}} tarefas", + "deleteTasksTitle_one": "Eliminar {{count}} tarefa", + "deleteTasksTitle_other": "Eliminar {{count}} tarefas", + "deletesTheCurrentTaskEnvironmentContainer": "Elimina o ambiente atual da tarefa (contentor, sandbox e/ou worktree) e força a criação de um novo na próxima execução.", + "deleting": "A eliminar...", + "deliverTheseCommentsToTheCli": "Entrega estes comentários no stdin do agente CLI como uma única mensagem — não é preciso abrir a caixa de chat. O agente recebe o mesmo markdown que resultaria de os anteceder a uma mensagem escrita.", "deny": "Negar", "describeWhatNeedsToChange": "Descreva o que precisa de ser alterado", + "describeWhatYouWantTheAgent": "Descreva o que quer que o agente faça... (@ para inserir um prompt guardado)", "describeYourChanges": "Descreva as suas alterações...", "description": "descrição", "description2": "Descrição", + "destroyTerminalConfirm": "Destruir \"{{label}}\"? Isto termina o PTY e remove-o.", + "detach": "Separar", + "detachFromParent": "Separar da tarefa-mãe", + "detachTaskFromParent": "Separar a tarefa da tarefa-mãe?", + "detachWillBecomeTopLevel": "\"{{taskTitle}}\" passa a ser uma tarefa de nível superior. O fluxo de trabalho, as subtarefas e o estado não mudam.", + "detachingChangesTheHierarchyOnlyAccess": "Separar altera apenas a hierarquia. O acesso a qualquer área de trabalho partilhada mantém-se inalterado.", "details": "Detalhes", + "detected": "Detetada", + "devServer": "Servidor de desenvolvimento", "diff": "Diff", "diffSideNew": "novo", "diffSideOld": "antigo", "discard": "Descartar", + "discardAllChangesPermanentlyThisCannot": "Descartar permanentemente todas as alterações. Isto não pode ser anulado.", + "discardAllChangesToFiles_one": "Isto descarta permanentemente todas as alterações a {{count}} ficheiro. Esta ação não pode ser anulada.", + "discardAllChangesToFiles_other": "Isto descarta permanentemente todas as alterações a {{count}} ficheiros. Esta ação não pode ser anulada.", + "discardChanges": "Descartar as alterações?", + "discardChanges2": "Descartar as alterações", + "discardChangesToFile": "Isto descarta permanentemente todas as alterações a <2>{{file}}. Esta ação não pode ser anulada.", + "discardCount": "Descartar {{selectionCount}}", + "discardFailed": "Não foi possível descartar", "dismiss": "Dispensar", "displayNameOptional": "Nome a apresentar (opcional)", "documentCount_one": "{{count}} documento", @@ -189,52 +347,116 @@ "documentDeleted": "Documento eliminado", "documentSaved": "Documento guardado", "documents": "Documentos", + "documentsAvailable": "Documentos disponíveis", "done": "Concluída", + "doubleClickToEditOrPress": "Clique duas vezes para editar (ou prima Enter)", + "doubleClickToKeepThisTab": "Clique duas vezes para manter este separador aberto", + "download": "Transferir", "downloadingModelPercent": "A transferir {{modelLabel}}… {{pct}}%", "downloadingPercent": "A transferir {{modelLabel}}, {{pct}} por cento", "draftCreated": "Rascunho de {{longName}} criado", + "dropFilesHere": "Largue aqui os ficheiros", "duration": "duração", "durationValue": "Duração: {{duration}}", "earlierUpdates_one": "Atualização anterior ({{count}})", "earlierUpdates_other": "Atualizações anteriores ({{count}})", + "editBranch": "Editar o branch {{branch}}", + "editBranch2": "Editar o branch", "editComment": "Editar comentário", + "editMarkdownComment": "Editar o comentário em markdown", + "editTheMessageForTheMost": "Edite a mensagem do commit mais recente.", "empty": "(vazio)", + "emptyGroup": "Grupo vazio", + "emptyPlan": "(plano vazio)", + "enhancedPromptApplied": "Prompt melhorado aplicado.", "enhancedPromptInserted": "Prompt melhorado inserido.", + "enterAUrlAboveOrStart": "Introduza um URL acima ou inicie o servidor de desenvolvimento", + "enterAValidPort165535": "Introduza uma porta válida (1-65535) ou deixe em branco para uma aleatória", + "enterAValidPort1655352": "Introduza uma porta válida (1-65535)", "enterCommitMessage": "Introduza a mensagem de commit...", + "enterGithubIssueUrlOrNumber": "Introduza o URL ou o número de uma issue do GitHub.", + "enterGithubPrUrlOrNumber": "Introduza o URL ou o número de um pull request do GitHub.", "enterInspectMode": "Entrar no modo de inspeção", "enterMessageContent": "Introduza o conteúdo da mensagem...", + "enterNewCommitMessage": "Introduza a nova mensagem do commit...", + "enterRepositoryUrl": "Introduza o URL de um repositório do GitHub, GitLab ou Azure DevOps.", + "environment": "Ambiente {{label}}", + "environmentPreparationFailed": "A preparação do ambiente falhou", + "environmentPrepared": "Ambiente preparado", + "environmentPreparedOnFreshSandbox": "Ambiente preparado numa sandbox nova", + "environmentPreparedWithWarnings": "Ambiente preparado com avisos", "environmentSetupFailed": "A configuração do ambiente falhou", + "environmentSetupFinishedWithErrors": "A configuração do ambiente terminou com erros", "error": "Erro", "errorData": "Dados do erro", + "executor2": "Executor", "executorEnvironmentIsUnavailable": "O ambiente do executor não está disponível.", + "executorHintDocker": "É criado um contentor Docker a partir do branch de base selecionado e é feito checkout de um branch da tarefa.", + "executorHintLocal": "O agente é executado diretamente no repositório.", + "executorHintWorktreeMulti": "É criada uma worktree do Git para cada repositório dentro de uma pasta-mãe. O agente é executado nessa pasta-mãe, para poder ver todas as worktrees lado a lado.", + "executorHintWorktreeSingle": "É criada uma worktree do Git a partir do branch de base.", + "executorProfile2": "Perfil de executor", + "executorSettings": "Definições do executor", + "executorSettingsPreparing": "Definições do executor, a preparar o ambiente", + "executorSettingsWithStatus": "Definições do executor, ambiente {{status}}", + "executorTypeLocalDocker": "Docker local", + "executorTypeLocalWorktree": "Local (worktree)", + "executorTypeRemoteDocker": "Docker remoto", + "executorTypeSpritesSandbox": "Sandbox do Sprites", + "executorTypeUnknown": "Executor desconhecido", "exitCodeShell": "Código de saída {{exitCode}}", "exitCodeUnavailable": "Código de saída indisponível", "exitCodeValue": "Código de saída: {{exitCode}}", "exitInspectMode": "Sair do modo de inspeção", "expandLastPrompt": "Expandir o último prompt", "expandPlan": "Expandir o plano", + "expandReview": "Expandir a revisão", + "expandSubtasks": "Expandir as subtarefas", "expired": "Expirada", "failed": "Falhou", "failed2": "{{operationName}} falhou", + "failedAtStep": "Falhou em: {{step}}", "failedToArchiveTask": "Não foi possível arquivar a tarefa", + "failedToChangeCompareBranch": "Não foi possível alterar o branch de comparação", + "failedToChangeModel": "Não foi possível alterar o modelo", "failedToDeleteDocument": "Não foi possível eliminar o documento", + "failedToDeleteLayout": "Não foi possível eliminar o esquema", + "failedToLinkGithubIssue": "Não foi possível associar a issue do GitHub.", + "failedToLinkGithubPullRequest": "Não foi possível associar o pull request do GitHub.", + "failedToLinkTarget": "Não foi possível associar {{target}}.", "failedToLoad": "Não foi possível carregar {{modelLabel}}", "failedToLoadDocuments": "Não foi possível carregar os documentos", "failedToLoadPreview": "Não foi possível carregar a pré-visualização.", + "failedToLoadRevision": "Não foi possível carregar a revisão", + "failedToLoadRevisionContent": "Não foi possível carregar o conteúdo da revisão", + "failedToOpenFile": "Não foi possível abrir o ficheiro", "failedToPublishShare": "Não foi possível publicar a partilha.", "failedToRead": "Não foi possível ler {{name}}", + "failedToRenameBranch": "Não foi possível mudar o nome do branch", + "failedToRenameItem": "Não foi possível mudar o nome do item", "failedToRenameTask": "Não foi possível mudar o nome da tarefa", + "failedToRestorePlan": "Não foi possível restaurar o plano", "failedToRevokeShare": "Não foi possível revogar a partilha.", "failedToSaveDocument": "Não foi possível guardar o documento", + "failedToSaveLayout": "Não foi possível guardar o esquema", "failedToSendComment": "Não foi possível enviar o comentário", + "failedToSendComments": "Não foi possível enviar os comentários", + "failedToSendMessage": "Não foi possível enviar a mensagem", + "failedToStartVsCode": "Não foi possível iniciar o VS Code", + "failedToUnarchiveTask": "Não foi possível desarquivar a tarefa", + "failedToUnlinkGithubIssue": "Não foi possível desassociar a issue do GitHub.", "failedToUpload": "Não foi possível carregar {{name}}", "file": "Ficheiro", "fileChangesTitle": "Alterações de ficheiros", "fileCountLabel_one": "{{count}} ficheiro", "fileCountLabel_other": "{{count}} ficheiros", + "fileNamesCannotContainPathSeparators": "Os nomes de ficheiro não podem conter separadores de caminho", + "filename": "nome do ficheiro...", "files": "Ficheiros", "filesChanged_one": "<0>{{count}} ficheiro alterado", "filesChanged_other": "<0>{{count}} ficheiros alterados", + "filesReviewedCount": "{{reviewedCount}} de {{totalFileCount}} ficheiros revistos", + "filterBranches": "Filtrar branches…", "filterDimensionArchived": "Arquivada", "filterDimensionExecutorType": "Tipo de executor", "filterDimensionHasDiff": "Tem diff", @@ -259,10 +481,16 @@ "filterStateReview": "Revisão", "filterTitlePlaceholder": "Subcadeia...", "filters": "Filtros", + "fingerprint": "Impressão digital", + "fix": "Corrigir", "fixTheMarkedSources": "Corrija as fontes assinaladas antes de as adicionar.", "folder": "Pasta", "folderDisplayName": "Nome a apresentar da pasta", "forcePush": "Forçar push", + "forkANewBranchFromA": "Criar um novo branch a partir de uma base (desligue para usar o checkout atual)", + "forkANewBranchFromA2": "Criar um novo branch a partir de uma base em vez de usar o checkout atual", + "forkModeANewBranchWill": "Modo de derivação: é criado um novo branch a partir da base selecionada antes de o agente ser executado. Clique para desligar e usar antes o checkout atual do seu repositório.", + "freshBranchTooltip": "Cria um novo branch a partir da base selecionada. Quaisquer alterações sem commit no seu clone local serão descartadas; se existirem, ser-lhe-á pedida confirmação.", "fromAgent": "Do agente", "fromAgentInTask": "Do agente na tarefa <1>“{{fullTitle}}”", "fromBranch": "de {{branch}}", @@ -270,7 +498,19 @@ "fromTask": "De {{title}}", "fullImpactDetails": "Detalhes completos do impacto", "fullSize": "Tamanho real {{alt}}", + "generatingSummary": "A gerar o resumo...", "gitActions": "Ações do Git", + "gitPollMode": "Sondagem do Git: {{mode}} ({{label}})", + "githubIssue": "Issue do GitHub", + "githubIssue2": "Issue do GitHub", + "githubIssueLinked": "Issue do GitHub associada", + "githubIssueNumbered": "Issue do GitHub #{{number}}", + "githubIssueRefPlaceholder": "#1470 ou {{example}}", + "githubIssueUnlinked": "Issue do GitHub desassociada", + "githubPrRefPlaceholder": "#1471 ou {{example}}", + "githubPullRequest": "Pull Request do GitHub", + "githubPullRequestLinked": "Pull request do GitHub associado", + "gitlabMergeRequest": "Merge Request do GitLab", "goToNextMessage": "Ir para a mensagem seguinte", "goToPreviousMessage": "Ir para a mensagem anterior", "groupBy": "Agrupar por", @@ -285,13 +525,25 @@ "groupStatusUpstreamError": "Fornecedor indisponível", "groupWorkflow": "Fluxo de trabalho", "groupWorkflowStep": "Passo do fluxo de trabalho", + "handOffToTarget": "Transferir para <1>{{label}}", + "handoff": "Transferir", + "hardReset": "Reposição forçada", + "helpsPreserveCommittedWorkUncommittedChanges": "Ajuda a preservar o trabalho com commit. As alterações sem commit não podem ser enviadas.", "hiddenMessagesInPreview_one": "… mais {{count}} mensagem oculta nesta pré-visualização (continua incluída na partilha) …", "hiddenMessagesInPreview_other": "… mais {{count}} mensagens ocultas nesta pré-visualização (continuam incluídas na partilha) …", "hideCommandOutput": "Ocultar a saída do comando", + "hideDebugInfo": "Ocultar a informação de depuração", + "hideDetails": "Ocultar os detalhes", "hideErrorDetails": "Ocultar os detalhes do erro: {{displayLabel}}", + "hidePreparationDetails": "Ocultar os detalhes da preparação", "hidePreviousAgentError": "Ocultar o erro anterior do agente", "hideRightPanel": "Ocultar o painel direito", + "hideRightPanels": "Ocultar os painéis da direita", "hideSidebar": "Ocultar a barra lateral", + "hideTheCommentListTheComments": "Oculta a lista de comentários. Os comentários ficam em fila e continuam a ser enviados da próxima vez que submeter (aqui ou a partir da caixa de chat).", + "host": "Anfitrião", + "isolatedWorktreeAt": "Worktree isolada em <1>{{path}}", + "iUnderstandAnyUncommittedChangesWill": "Compreendo que quaisquer alterações sem commit serão perdidas.", "image": "Imagem", "imagePreview": "Pré-visualização da imagem", "imageWithSize": "Imagem ({{bytes}})", @@ -299,10 +551,17 @@ "implementInFreshAgent": "Implementar num agente novo", "implementThePlanInThisSession": "Implementar o plano nesta sessão", "includeThePlanAsContext": "Incluir o plano como contexto", + "inheritParentWorkspace": "Herdar a área de trabalho da tarefa-mãe", "inputTokens": "Tokens de entrada", "inspectClickToPinOrDrag": "Inspeção: clique para fixar ou arraste para selecionar uma área da pré-visualização", "inspectingClickToPin": "A inspecionar - clique para fixar, arraste para selecionar uma área, Esc para sair", + "invalidName": "Nome inválido", "isTheMaximumFileSizeIs": "{{name}} tem {{size}}. O tamanho máximo de ficheiro é {{maxSize}}.", + "issue": "Issue", + "jiraTicket": "Ticket do Jira", + "jiraTicketLinked": "Ticket do Jira associado", + "jiraTicketPlaceholder": "PROJ-123 ou cole o URL do ticket", + "jiraTicketValidationHint": "Cole o URL ou a chave de um ticket do Jira (PROJ-123).", "kandevAskUserQuestion": "Kandev: Perguntar ao utilizador", "kandevCreateTask": "Kandev: Criar tarefa", "kandevCreateTaskPlan": "Kandev: Criar plano da tarefa", @@ -323,6 +582,8 @@ "kandevUpdateTask": "Kandev: Atualizar tarefa", "kandevUpdateTaskPlan": "Kandev: Atualizar plano da tarefa", "kandevWriteTaskDocument": "Kandev: Escrever documento da tarefa", + "keepOpen": "Manter aberto", + "keepRunning": "Manter em execução", "keyAndContentAreRequired": "A chave e o conteúdo são obrigatórios", "keyArrowDown": "Seta para baixo", "keyArrowLeft": "Seta para a esquerda", @@ -344,24 +605,68 @@ "labelColor": "Cor da etiqueta", "labelName": "nome da etiqueta", "labels": "Etiquetas", + "layoutPresets": "Esquemas predefinidos", + "lineLevelDiffBetweenTheTwo": "Diff ao nível da linha entre as duas versões selecionadas.", + "lineNumber": "Linha {{line}}", + "lineRange": "Linhas {{start}}-{{end}}", + "linearIssue": "Issue do Linear", + "linearIssueLinked": "Issue do Linear associada", + "linearIssuePlaceholder": "ENG-123 ou cole o URL da issue", + "linearIssueValidationHint": "Cole o URL ou o identificador de uma issue do Linear (ENG-123).", + "link": "Associar", + "linkGithubIssue": "Associar issue do GitHub", + "linkGithubPullRequest": "Associar pull request do GitHub", + "linkJiraTicket": "Associar ticket do Jira", + "linkJiraTicketDescription": "Use a chave ou o URL de um ticket do Jira para esta tarefa.", + "linkLinearIssue": "Associar issue do Linear", + "linkLinearIssueDescription": "Use o identificador ou o URL de uma issue do Linear para esta tarefa.", + "linkSentryIssue": "Associar issue do Sentry", + "linkSentryIssueDescription": "Use o ID curto ou o URL de uma issue do Sentry para esta tarefa.", + "linkedIssue": "Issue associada", + "listeningPorts": "Portas à escuta", "liveUpdateConsequenceSessionAndProcesses": "<0>Sessão e processos: o agente e os processos da área de trabalho em execução continuam enquanto o Kandev volta a analisar a área de trabalho. A tarefa, a sessão, o estado da tarefa, as mensagens, o plano, as fontes anexadas, o modelo e o modo mantêm-se.", "liveUpdateConsequenceWorkspace": "<0>Área de trabalho: os repositórios são clonados como entradas de topo com nome na atual área de trabalho remota. O diretório de trabalho do agente não muda e os ficheiros existentes e as alterações do Git não são movidos nem descartados.", "loadOlderMessages": "Carregar mensagens mais antigas", "loading": "A carregar...", + "loading2": "A carregar…", + "loadingAgentProfiles": "A carregar os perfis de agente...", + "loadingAgents": "A carregar os agentes…", + "loadingBranches": "A carregar os branches…", + "loadingBranches2": "A carregar os branches...", + "loadingBranches3": "A carregar os branches…", + "loadingChangedFiles": "A carregar os ficheiros alterados...", + "loadingChanges": "A carregar as alterações...", "loadingCommandOutput": "A carregar a saída do comando...", + "loadingCommit": "A carregar o commit...", "loadingConversation": "A carregar a conversa...", + "loadingEditor": "A carregar o editor...", + "loadingFile": "A carregar o ficheiro...", + "loadingFiles": "A carregar os ficheiros...", "loadingOlder": "a carregar mais antigas…", "loadingOlderMessages": "A carregar mensagens mais antigas...", + "loadingPlan": "A carregar o plano...", + "loadingPreview": "A carregar a pré-visualização...", + "loadingProfiles": "A carregar os perfis...", + "loadingRepositories": "A carregar os repositórios…", "loadingSessions": "A carregar as sessões…", + "loadingStatus": "A carregar o estado...", + "localCommitNotYetPushed": "Commit local (ainda sem push)", "localGitRepository": "Repositório Git local", + "login": "Iniciar sessão", "loginRequired": "É necessário iniciar sessão", + "manual": "Manual", "markAsFavorite": "Marcar como favorita", "markMessageAsFavorite": "Marcar a mensagem como favorita", + "maximize": "Maximizar", "mcpConnectionStatus": "Estado da ligação MCP", "mcpPolicyLabel": "mcp:", "mcpServers": "Servidores MCP", "mentionTasksFilesPrompts": "Mencionar tarefas, ficheiros, prompts", "merge": "Merge", + "mergeRequest": "Merge Request !{{mriid}}", + "mergeRequestLabel": "Merge Request", + "messageCommentCount_one": "{{count}} comentário à mensagem", + "messageCommentCount_other": "{{count}} comentários à mensagem", "messageCount_one": "{{count}} mensagem", "messageCount_other": "{{count}} mensagens", "messageMetadata": "Metadados da mensagem", @@ -369,6 +674,7 @@ "messageNotSent": "Mensagem não enviada", "messageSendStatusUnknown": "Estado do envio da mensagem desconhecido", "messageTime": "Hora da mensagem", + "modKeyEnterToAdd": "{{modKey}}+Enter para adicionar", "model": "modelo", "monitor": "Monitorizar", "monitorCommand": "Monitorizar: {{command}}", @@ -377,14 +683,28 @@ "moreNotShown_one": "+ mais {{count}} não mostrado", "moreNotShown_other": "+ mais {{count}} não mostrados", "moreToolbarActions": "Mais ações da barra de ferramentas", + "moveHeadToThisCommitKeep": "Move a HEAD para este commit. Mantém todas as alterações preparadas.", + "moveHere": "Mover para aqui", "moveTaskToTheNextWorkflow": "Mover a tarefa para o passo seguinte do fluxo de trabalho", + "moveTo": "Mover para", + "moving": "A mover...", + "myLayout": "O meu esquema", + "name": "Nome", "needsInput": "Precisa de resposta", + "nestUnder": "Aninhar em", "new": "Nova", + "newAgent": "Novo agente", + "newAgentInTask": "Novo agente em <1>{{title}}", "newDocument": "Novo documento", + "newFile": "Novo ficheiro", "newMessages": "Novas mensagens", "newSession": "Nova sessão", + "newSession2": "nova sessão", "newSubTask": "Nova subtarefa", + "newSubtaskFor": "Nova subtarefa para", + "newTask": "Nova tarefa", "newTerminal": "Novo terminal", + "newTerminal2": "Novo terminal", "newView": "Nova vista", "newViewName": "Nome da nova vista", "newViewUnavailable": "Nova vista indisponível. {{newViewDisabledReason}}", @@ -395,72 +715,152 @@ "noActiveSession": "Nenhuma sessão ativa", "noActiveTask": "Nenhuma tarefa ativa", "noActivityYet": "Ainda não há atividade", + "noAgentFound": "Nenhum agente encontrado.", + "noAgentProfileConfigured": "Nenhum perfil de agente configurado", + "noAgentProfileConfiguredDetail": "Esta tarefa não tem perfil de agente, e a área de trabalho, o fluxo de trabalho e o passo do fluxo de trabalho não têm nenhum definido por pré-definição. Escolha um perfil de agente pré-definido para que as novas tarefas possam iniciar uma sessão.", + "noAgentProfileConfiguredFor": "Não há nenhum perfil de agente configurado para <2>“{{name}}”. Configure as credenciais em Definições → Executores.", + "noAgentProfilesConfigured": "Nenhum perfil de agente configurado", + "noAgentProfilesConfiguredAddOne": "Nenhum perfil de agente configurado. Adicione um primeiro em Definições → Agentes.", + "noAgentRunning": "nenhum agente em execução", "noAgentsFound": "Nenhum agente encontrado.", + "noAgentsFound2": "Nenhum agente encontrado", + "noAgentsYet": "Ainda não há agentes", + "noAgentsYet2": "Ainda não há agentes.", "noAssignee": "Sem responsável", + "noBranches": "Nenhum branch", + "noBranchesForUrl": "Não há branches disponíveis para este URL.", + "noBranchesFound": "Nenhum branch encontrado", + "noChanges": "Nenhuma alteração", "noChangesToCommit": "Não há alterações para commit", "noCommandOutput": "Sem saída do comando.", "noCommandOutputYet": "Ainda não há saída do comando.", "noCommentsYet": "Ainda não há comentários", + "noCompatibleAgentProfileFor": "Não há nenhum perfil de agente compatível configurado para {{target}}. Configure as credenciais dos agentes em Definições → Executores.", + "noCompatibleAgentProfilesFor": "Não há perfis de agente compatíveis com {{target}}.", "noContent": "Sem conteúdo", "noDecisionYet": "Ainda não há decisão", "noDocumentsFound": "Nenhum documento encontrado.", "noDocumentsYet": "Ainda não há documentos.", + "noEditorsAvailable": "Nenhum editor disponível", + "noEnvironmentYet": "Ainda não há ambiente", + "noExecutorFound": "Nenhum executor encontrado.", + "noFilesFound": "Nenhum ficheiro encontrado", + "noFilesInThisCommit": "Nenhum ficheiro neste commit", "noItemsFound": "Nenhum item encontrado.", "noLabelsYet": "Ainda não há etiquetas", + "noListeningPortsDetected": "Não foram detetadas portas à escuta.", "noMatches": "Sem correspondências", + "noMatchingBranches": "Nenhum branch correspondente", "noMessagesFound": "Nenhuma mensagem encontrada.", "noMessagesYetStartTheConversation": "Ainda não há mensagens. Comece a conversa!", "noOptions": "Sem opções", "noOptions2": "Sem opções.", + "noOtherTasks": "Não há outras tarefas", "noParent": "Sem tarefa-mãe", + "noPendingReviewComments": "Não há comentários de revisão pendentes.", "noPlan": "sem plano", "noPlanFound": "Nenhum plano encontrado.", + "noProfileFound": "Nenhum perfil encontrado.", "noProfilesFound": "Nenhum perfil encontrado.", "noProject": "Sem projeto", "noProjectsFound": "Nenhum projeto encontrado.", "noQuestionsFound": "Nenhuma pergunta encontrada.", + "noRecentTasksYet": "Ainda não há tarefas recentes", "noRelatedTasksFound": "Nenhuma tarefa relacionada encontrada.", + "noRepositories": "Nenhum repositório", + "noRepositoriesAvailableInWorkspace": "Não há repositórios disponíveis nesta área de trabalho", + "noRepositoriesFound": "Nenhum repositório encontrado.", + "noResourceDetailsAvailable": "Não há detalhes de recursos disponíveis.", "noResultsFound": "Nenhum resultado encontrado", + "noRevisionsYetEditsWillAppear": "Ainda não há revisões. As edições aparecem aqui.", + "noSavedLayouts": "Nenhum esquema guardado", "noSessionsYetLaunchOneTo": "Ainda não há sessões. Lance uma para começar.", + "noSteps": "Nenhum passo", "noStepsFound": "Nenhum passo encontrado.", "noSubIssues": "Sem subissues", "noTaskSelected": "Nenhuma tarefa selecionada", "noTasksFound": "Nenhuma tarefa encontrada.", "noTerminalsYet": "Ainda não há terminais.", + "noTextualChangesBetweenTheseVersions": "Não há alterações textuais entre estas versões.", "noWorkItemsFound": "Nenhum item de trabalho encontrado", "noWorkflowsFound": "Nenhum fluxo de trabalho encontrado.", "noWorkspacesFound": "Nenhuma área de trabalho encontrada.", "none": "Nenhum", + "notConfiguredForThisExecutor": "Não configurado para este executor", + "onBranch": "No branch <1>{{branch}}", + "onDisk": "em disco", "ontoBranch": "sobre {{branch}}", + "openBrowserPreview": "Abrir a pré-visualização no navegador", + "openCodeReview": "Abrir a revisão de código", + "openComposeBoxHelp": "Abre uma caixa de composição controlada pelo kandev por cima do terminal para escrever uma mensagem de seguimento. Prima <1>Enter para enviar e <3>Shift+Enter para mudar de linha.", + "openEditor": "Abrir o editor", "openEntityReference": "Abrir {{label}}: {{title}}", "openFile": "Abrir ficheiro", "openImage": "Abrir {{alt}}", "openInAdvancedView": "Abrir na vista avançada", + "openInBrowserTab": "Abrir num separador do navegador", + "openInEditorNamed": "Abrir no {{name}}", + "openInNewTab": "Abrir num novo separador", + "openInOfficeView": "Abrir na vista de escritório", + "openInOtherEditor": "Abrir noutro editor", "openMarkdownPreview": "Abrir a pré-visualização de markdown", "openPlanDetails": "Abrir os detalhes do plano", + "openPullRequest": "Abrir o pull request", "openSidebarFilters": "Abrir os filtros da barra lateral", "openSourceTask": "Abrir a tarefa de origem {{fullTitle}}", "openTaskSwitcher": "Abrir o seletor de tarefas", "openTerminal": "Abrir terminal", "openTheBottomTerminalAndPaste": "Abra o terminal inferior e cole este comando", + "openWorkspaceFolder": "Abrir a pasta da área de trabalho", + "openWorkspaceSettings": "Abrir as definições da área de trabalho", "option": "opção {{index}}", "orTypeACustomAnswer": "Ou escreva uma resposta personalizada…", "output": "Saída", "outputTokens": "Tokens de saída", "outputTruncated": "Saída truncada", "parent": "Tarefa-mãe", + "parkedCount": "Estacionados ({{parked}})", + "parkedTerminals": "Terminais estacionados", "pastedImageCouldnTBeAttached": "Não foi possível anexar a imagem colada", + "pathBasedProxyWorksForApis": "Proxy baseado em caminho. Funciona com APIs, mas pode quebrar aplicações web que esperam ser servidas em /.", "pauseTree": "Pausar a árvore", "paused": "Em pausa", "pendingApproval": "Aprovação pendente", + "pendingReviewCommentsHelp_one": "{{count}} comentário de revisão pendente. Clique para expandir a lista — pode editar cada comentário, clicar no caminho do ficheiro para saltar para a origem ou remover um comentário com o ícone do caixote do lixo.", + "pendingReviewCommentsHelp_other": "{{count}} comentários de revisão pendentes. Clique para expandir a lista — pode editar cada comentário, clicar no caminho do ficheiro para saltar para a origem ou remover um comentário com o ícone do caixote do lixo.", "permissionRequested": "Permissão pedida", + "pickADifferentRepoLocalFolder": "Escolha outro repositório, pasta local ou URL remoto", + "pickAStartingFolderOptional": "escolha uma pasta inicial (opcional)", + "pickOrPasteARepo": "Escolha ou cole um repositório", + "pinTasksCount_one": "Fixar {{count}} tarefa", + "pinTasksCount_other": "Fixar {{count}} tarefas", "plan": "Plano", + "planCommentCount_one": "{{count}} comentário ao plano", + "planCommentCount_other": "{{count}} comentários ao plano", + "planHistory": "Histórico do plano", "planIsEmpty": "O plano está vazio", "planMode": "Modo de plano", + "planRestoredToV": "Plano restaurado para a v{{revisionnumber}}", + "planYourImplementation": "Planeie a sua implementação", + "pleaseTryAgain": "Tente novamente.", + "pluginTopBarActions": "Ações do plugin na barra superior", + "portAlreadyAdded": "Porta já adicionada", + "portForwarding": "Encaminhamento de portas", + "portForwardingTunnelActive_one": "Encaminhamento de portas ({{count}} túnel ativo)", + "portForwardingTunnelActive_other": "Encaminhamento de portas ({{count}} túneis ativos)", + "portNumber": "Número da porta", "position": "Posição {{positionLabel}}", + "prChanges": "Alterações do PR", + "preparingEllipsis": "A preparar...", + "preparingEnvironment": "A preparar o ambiente", + "preparingEnvironmentEllipsis": "A preparar o ambiente...", "preparingWorkspace": "A preparar a área de trabalho...", + "preparingWorkspace2": "A preparar a área de trabalho…", + "presets": "Predefinições", "pressEnterToUpdateYourAnswer": "Prima Enter para atualizar a sua resposta…", "pressEscToCancelCmdEnter": "Prima Esc para cancelar, Cmd+Enter para guardar", + "preview": "Pré-visualização", + "previous": "Anterior", "previousAgentError": "Erro anterior do agente", "previousMessage": "Mensagem anterior", "previousQuestion": "Pergunta anterior", @@ -469,6 +869,7 @@ "priorityHigh": "Alta", "priorityLow": "Baixa", "priorityMedium": "Média", + "private": "privado", "profileCount_one": "{{count}} perfil", "profileCount_other": "{{count}} perfis", "progress": "Progresso", @@ -477,12 +878,20 @@ "promptFieldLabel": "prompt", "providerPrivateContextThatKandevDid": "O contexto privado do fornecedor que o Kandev não registou pode não transitar. Os terminais abertos, os servidores de desenvolvimento e outros processos da área de trabalho param, incluindo o servidor do editor da tarefa.", "providerUnavailable": "Fornecedor indisponível", + "proxy": "Proxy", "publishARedactedSnapshotOfThis": "Publique um retrato censurado desta tarefa concluída como um GitHub Gist secreto na sua conta.", "publishToGithubGist": "Publicar no GitHub Gist", "publishedAnyoneWithThisLinkCan": "Publicado. Qualquer pessoa com esta ligação pode ver a conversa.", "publishing": "A publicar…", "pull": "Pull", + "pullRequest": "Pull request", + "pullRequest2": "Pull Request", + "pullRequests": "Pull requests", "push": "Push", + "pushCurrentBranchBeforeResetting": "Faça push do branch atual para o seu remoto antes de repor.", + "pushYourBranchToItsRemote": "Faça push do seu branch para o remoto na caixa de confirmação, para preservar o trabalho com commit antes de repor.", + "pushedCommit": "Commit com push", + "pushedToRemote": "Enviado para o remoto", "questionCount_one": "{{count}} pergunta", "questionCount_other": "{{count}} perguntas", "questionOfTotal": "Pergunta {{index}} de {{total}}", @@ -491,9 +900,21 @@ "queued": "Em fila", "ranCommands_one": "· executou {{count}} comando", "ranCommands_other": "· executou {{count}} comandos", + "random": "Aleatória", + "reasonAddSessionDescription": "Adicione uma descrição à sessão", + "reasonAddTaskPrompt": "Adicione um prompt à tarefa", + "reasonAddTaskTitle": "Adicione um título à tarefa", + "reasonSelectAgent": "Selecione um agente", + "reasonSelectBranch": "Selecione um branch", + "reasonSelectRepository": "Selecione um repositório", + "reasonSelectWorkflow": "Selecione um fluxo de trabalho", + "reasonSelectWorkspace": "Selecione uma área de trabalho", "rebase": "Rebase", + "recentTasks": "Tarefas recentes", + "reconnectingToTheExistingEnvironment": "A voltar a ligar ao ambiente existente…", "redactedRules": "Censurado: {{rules}}", "referenceWorkItems": "Referenciar itens de trabalho", + "refresh": "Atualizar", "rejected": "Rejeitada", "relatedBlockedBy": "Bloqueada por", "relatedBlockers": "Bloqueios", @@ -502,24 +923,41 @@ "relatedSiblings": "Tarefas irmãs", "relatedTaskCount_one": "{{count}} tarefa relacionada", "relatedTaskCount_other": "{{count}} tarefas relacionadas", + "relatedTasks": "Tarefas relacionadas", + "remote": "Remoto", + "remoteCreatedLine": "Criado: {{createdAt}}", + "remoteExecutor": "Executor remoto", + "remoteLastCheckLine": "Última verificação: {{checkedAt}}", "remoteRepository": "Repositório remoto", + "remoteStateLine": "Estado: {{state}}", + "remoteStatusFailedLine": "Falha ao obter o estado: {{error}}", + "remoteUrlPressEnter": "<0>URL remoto — prima Enter para o submeter.", "remove": "Remover", "remove2": "Remover {{name}}", "remove3": "Remover {{identifier}}", "removeAnnotation": "Remover a anotação {{number}}", + "removeComment": "Remover o comentário", "removeFile": "Remover ficheiro", "removeFilter": "Remover filtro", "removeFromFavorites": "Remover dos favoritos", "removeImage": "Remover imagem", "removeLabeled": "Remover {{label}}", "removeMessageFromFavorites": "Remover a mensagem dos favoritos", + "removeRepository": "Remover repositório", "removeSource": "Remover fonte", "rename": "Mudar o nome", + "rename2": "Mudar o nome…", + "renameTask": "Mudar o nome da tarefa", + "renameTerminalLeaveEmptyToReset": "Mude o nome do terminal (deixe vazio para repor, escreva \"{{token}}\" para o remover e parar o PTY).", "repeatedTerminalCommandsHidden_one": "{{count}} comando de terminal idêntico repetido oculto", "repeatedTerminalCommandsHidden_other": "{{count}} comandos de terminal idênticos repetidos ocultos", "repeatedTerminalCommandsShown_one": "{{count}} comando de terminal idêntico repetido mostrado", "repeatedTerminalCommandsShown_other": "{{count}} comandos de terminal idênticos repetidos mostrados", + "repo": "Repo", "repositoriesAreAddedAsTopLevel": "Os repositórios são adicionados como entradas de topo na atual área de trabalho remota. O diretório de trabalho do agente não muda.", + "repository": "repositório", + "repository2": "Repositório", + "repositoryWithPath": "Repositório · {{path}}", "requestChanges": "Solicitar alterações", "requestedChanges": "solicitou alterações", "requestedChangesPlain": "{{who}} solicitou alterações", @@ -530,6 +968,11 @@ "resetAgentContext": "Repor o contexto do agente?", "resetAgentContextClearsConversationHistory": "Repor o contexto do agente — limpa o histórico da conversa, preserva a área de trabalho", "resetContext": "Repor o contexto", + "resetEnvironment": "Repor o ambiente?", + "resetEnvironment2": "Repor o ambiente", + "resetLayout": "Repor o esquema", + "resetToCommitSha": "Repor para o commit {{shortSha}}", + "resetToThisCommit": "Repor para este commit", "resetting": "A repor...", "resize": "Redimensionar", "restart": "Reiniciar", @@ -537,17 +980,33 @@ "restartConsequenceSessionContext": "<0>Contexto da sessão: o Kandev reinicia o agente inativo preservando a tarefa, a sessão, o estado da tarefa, as mensagens, o plano, as fontes anexadas e o modelo e modo selecionados. Os fornecedores que suportam retomar entre diretórios mantêm a sua sessão nativa. Os restantes iniciam uma nova sessão e recebem a conversa registada pelo Kandev com o prompt seguinte. O contexto privado do fornecedor que o Kandev não registou pode não transitar.", "restartConsequenceWorkspace": "<0>Área de trabalho: a raiz da tarefa passa a ser o diretório de trabalho do agente. Numa tarefa com um único repositório, isto sobe o CWD um nível e mostra cada fonte como uma entrada de topo com nome. Os ficheiros existentes e as alterações do Git não são movidos nem descartados.", "restarting": "A reiniciar...", + "restore": "Restaurar", + "restoreThisVersion": "Restaurar esta versão", + "restoreToVersionConfirm": "Restaurar para a versão {{version}}?", + "restoreToVersionDescription": "Isto cria uma nova versão com o conteúdo da v{{version}}. Nada se perde; a versão atual permanece no histórico.", "restoreTree": "Restaurar a árvore", + "restoreVersion": "Restaurar a v{{version}}", + "restoredFromEarlierVersion": "restaurado a partir de uma versão anterior", + "restoring": "A restaurar...", + "restoringThisTaskSMaterializedWorkspace": "Não foi possível restaurar a área de trabalho materializada desta tarefa. Reconfigure a área de trabalho antes de arrancar.", "resume": "Retomar", + "resumeAgent": "Retomar o agente", "resumeSession": "Retomar a sessão", "resumeTree": "Retomar a árvore", + "resumingSession": "A retomar a sessão", "retry": "Tentar novamente", "retryChangeRequest": "Repetir o {{shortName}}", + "retryRemoteRepositoryResolution": "Tentar novamente resolver o repositório remoto", + "retrying": "A tentar novamente...", "reverseISearch": "(reverse-i-search)", + "revertCommit": "Reverter o commit", "review": "Revisão", "reviewComments": "Comentários da revisão", + "reviewCommentsReadyToSend_one": "{{count}} comentário de revisão pronto a enviar", + "reviewCommentsReadyToSend_other": "{{count}} comentários de revisão prontos a enviar", "reviewCommentsTitle": "Comentários da revisão", "reviewTheseChangesBeforeAddingSources": "Reveja estas alterações antes de adicionar fontes. A tarefa tem de permanecer inativa até a operação terminar.", + "reviewed": "Revistos", "reviewers": "Revisores", "revoke": "Revogar", "revokeShare": "Revogar a partilha", @@ -557,47 +1016,111 @@ "run": "Executar", "runCommand": "Executar o comando /{{name}}", "runInTerminal": "Executar no terminal", + "runInTheParentSMaterialized": "Executar na área de trabalho materializada da tarefa-mãe", + "runInTheParentSWorktree": "Executar na worktree da tarefa-mãe ({{worktreeBranch}})", + "runRepositorySetupScript": "Executar o script de configuração do repositório", + "runScript": "Executar script", "running": "em execução", + "sameBranchAsCurrentSession": "Mesmo branch da sessão atual", + "sameEnvironmentAsCurrentSession": "Mesmo ambiente da sessão atual", + "saveAndSendToAgent": "Guardar e enviar ao agente", + "saveAndSendToAgentShortcut": "Guardar e enviar ao agente ({{modKey}}+Shift+Enter)", "saveAs": "Guardar como:", "saveAs2": "Guardar como…", + "saveCommentForReview": "Guardar o comentário para revisão", + "saveCommentForReviewShortcut": "Guardar o comentário para revisão ({{modKey}}+Enter)", + "saveCurrentLayout": "Guardar o esquema atual", + "saveCurrentLayout2": "Guardar o esquema atual...", "saveOrDiscardBeforeNewView": "Guarde ou descarte as alterações antes de criar uma nova vista.", + "saveYourCurrentPanelArrangementAs": "Guarde a sua disposição atual de painéis como um esquema reutilizável.", "savedAndLocalGitRepositoriesMust": "Os repositórios Git guardados e locais têm de ter uma origem clonável para este executor. As pastas locais não estão disponíveis.", + "savedLayout": "esquema guardado", + "savedLayouts": "Esquemas guardados", "saving": "A guardar...", "scriptExecutionMetadataUnavailable": "Execução de script (metadados indisponíveis)", + "scriptExitedWithCode": "O script terminou com o código {{code}}", + "scriptFailed": "O script falhou", + "scripts": "Scripts", "scrollToActiveSession": "Ir para a sessão ativa", "scrollToLastPrompt": "Ir para o último prompt", "scrollToStartOfTranscript": "Ir para o início da transcrição", "searchAgents": "Pesquisar agentes...", + "searchBranches": "Pesquisar branches...", "searchEllipsis": "Pesquisar…", "searchEllipsis2": "Pesquisar...", + "searchFiles": "Pesquisar ficheiros", + "searchFiles2": "Pesquisar ficheiros...", "searchFilesAndPrompts": "Pesquisar ficheiros e prompts...", + "searchProfiles": "Pesquisar perfis...", "searchProjects": "Pesquisar projetos...", + "searchRepositories": "Pesquisar repositórios...", + "searchRepositoriesOrPasteARemote": "Pesquise repositórios ou cole um URL remoto", "searchTasks": "Pesquisar tarefas...", "searching": "A pesquisar…", "searchingWorkItems": "A pesquisar itens de trabalho…", + "selectASessionToOpenIts": "Selecione uma sessão para abrir a respetiva worktree", + "selectATaskToStartChatting": "Selecione uma tarefa para começar a conversar", + "selectAgent": "Selecionar agente", + "selectAgentProfile": "Selecionar perfil de agente", + "selectAnInstance": "Selecionar uma instância", + "selectBranch": "Selecionar branch", + "selectExecutorProfile": "Selecionar perfil de executor", "selectFilesAndPromptsToInclude": "· Selecione os ficheiros e prompts a incluir", + "selectOrEnterRemoteRepoFirst": "Selecione ou introduza primeiro um repositório remoto.", + "selectProfile": "Selecionar perfil", + "selectRepositoryFirst": "Selecione primeiro um repositório", + "selectSentryInstanceToLink": "Selecione a instância do Sentry a associar.", + "selectTextAndPressToComment": "Selecione o texto e prima <2>⌘⇧C para comentar", "selectValue": "Selecionar valor", "selectValues": "Selecionar valores", + "selectWorkflow": "Selecionar fluxo de trabalho", + "selectWorkspaceBeforeLinkingPr": "Selecione uma área de trabalho antes de associar um pull request do GitHub.", "selected": "Selecionada", "send": "Enviar", "sendAnswer": "Enviar resposta", "sendComment": "Enviar comentário", + "sendToAgent": "Enviar ao agente", + "sendToAgentHelp": "Prima <1>Enviar ao agente dentro do painel para os entregar de imediato ao agente CLI, ou abra apenas a caixa de chat e escreva um seguimento — os comentários são antepostos.", + "sendToWorkflow": "Enviar para o fluxo de trabalho", "senderWithSession": "{{base}} · {{sessionName}}", "sentAsNewMessage": "· enviada como nova mensagem", + "sentryInstance": "Instância do Sentry", + "sentryIssue": "Issue do Sentry", + "sentryIssueLinked": "Issue do Sentry associada", + "sentryIssuePlaceholder": "PROJ-123 ou cole o URL da issue", + "sentryIssueValidationHint": "Cole o URL ou o ID curto de uma issue do Sentry (PROJ-123).", "session": "sessão", "sessionActions": "Ações da sessão", "sessionContext": "Contexto da sessão", "sessionCount_one": "{{count}} sessão", "sessionCount_other": "{{count}} sessões", "sessionFallbackLabel": "Sessão", + "sessionModelSettings": "Definições do modelo da sessão", + "sessionNotReady": "A sessão não está pronta", + "sessionStatusBackgroundRunning": "Em execução em segundo plano", + "sessionStatusCancelled": "Cancelada", + "sessionStatusComplete": "Concluída", + "sessionStatusFailed": "Falhou", + "sessionStatusPermissionRequested": "Permissão pedida", + "sessionStatusRunning": "Em execução", + "sessionStatusWaitingForInput": "À espera de entrada", "sessions": "Sessões", + "setAsDefaultLayout": "Definir como esquema pré-definido", "setAsPrimary": "Definir como principal", "setup": "Configuração", "share": "Partilhar", "shareThisTask": "Partilhar esta tarefa", "shareThisTaskConversationAsA": "Partilhar a conversa desta tarefa como uma ligação pública", + "sharedWorkspaceMembers_one": "Área de trabalho partilhada · {{count}} membro", + "sharedWorkspaceMembers_other": "Área de trabalho partilhada · {{count}} membros", "shift": "Shift", + "shiftEnterToRun": ", ⌘+Shift+Enter para executar", + "shiftEnterToRun2": ", {{modKey}}+Shift+Enter para executar", + "shortcutTogglesChatInput": "Atalho: <1>{{shortcut}} alterna esta caixa de chat.", + "showBranchAndGitCredentialDetails": "Mostrar os detalhes do branch e das credenciais Git", + "showCode": "Mostrar o código", "showCommandOutput": "Mostrar a saída do comando", + "showDebugInfo": "Mostrar a informação de depuração", "showDetails": "Mostrar detalhes", "showErrorDetails": "Mostrar os detalhes do erro: {{displayLabel}}", "showFormatted": "Mostrar formatado", @@ -607,14 +1130,17 @@ "showMessageMetadata": "Mostrar os metadados da mensagem", "showOlderSessions_one": "Mostrar {{count}} sessão mais antiga", "showOlderSessions_other": "Mostrar {{count}} sessões mais antigas", + "showPreparationDetails": "Mostrar os detalhes da preparação", "showRawText": "Mostrar o texto em bruto", "showRightPanel": "Mostrar o painel direito", "showSidebar": "Mostrar a barra lateral", + "sibling": "Irmã", "sidebarFilters": "Filtros da barra lateral", "skipAllQuestions": "Ignorar todas as perguntas", "skipped": "Ignorada", "snapshotMessageCount_one": "{{count}} mensagem", "snapshotMessageCount_other": "{{count}} mensagens", + "softReset": "Reposição suave", "someone": "Alguém", "sort": "Ordenar", "sortCreated": "Criação", @@ -625,20 +1151,38 @@ "sortUpdated": "Atualização", "source": "Fonte", "sourceChangesTitle": "Alterações de {{source}}", + "specifyALocalPortOrLeave": "Indique uma porta local ou deixe em branco para uma aleatória. No Docker/K8s, use uma porta que já tenha exposto.", + "split": "Dividido", + "splitDown": "Dividir para baixo", + "splitRight": "Dividir para a direita", + "splitView": "Vista dividida", + "sprite": "Sprite", + "stageAll": "Preparar tudo", "stageAllChangesBeforeCommitting": "Preparar todas as alterações antes de fazer commit", "stageApproval": "Aprovação", + "stageCount": "Preparar {{selectionCount}}", + "stageFile": "Preparar o ficheiro", "stageImplement": "Implementar", "stageReview": "Revisão", "stageShip": "Entregar", "start": "iniciar", + "start2": "Iniciar", "startAgent": "Iniciar o agente", + "startAgent2": "Iniciar o agente", + "startDevServerPreview": "Iniciar a pré-visualização do servidor de desenvolvimento", "startFreshSession": "Iniciar uma sessão nova", + "startPlanMode": "Iniciar o modo de planeamento", + "startTask": "Iniciar tarefa", + "startTaskInPlanMode": "Iniciar a tarefa em modo de planeamento", + "startTunnel": "Iniciar o túnel", + "startTypingYourPlan": "Comece a escrever o seu plano...", "startVoiceInput": "Iniciar a entrada de voz", "started": "Iniciada", "starting": "A iniciar...", "startingAgent": "A iniciar {{agentLabel}}", "startingEllipsis": "A iniciar…", "startingTerminal": "A iniciar o terminal…", + "startingVsCodeServer": "A iniciar o VS Code Server", "startsANewSessionWithA": "Inicia uma nova sessão com uma janela de contexto limpa", "state": "estado", "status": "Estado", @@ -654,24 +1198,51 @@ "stepCount_other": "{{count}} passos", "stepFieldLabel": "passo", "stepNumber": "Passo {{index}}", + "stepOf": "Passo {{stepNumber}} de {{totalSteps}}: {{stepLabel}}", + "stillWorkingSubjectMany": "Uma ou mais destas tarefas continuam a trabalhar", + "stillWorkingSubjectOne": "Esta tarefa continua a trabalhar", + "stillWorkingWarning": "{{subject}} — há um agente a gerar ou a executar trabalho em segundo plano. Avançar agora descarta trabalho que ainda está em curso.", "stop": "Parar", "stopRecording": "Parar a gravação", + "stopTunnel": "Parar o túnel", "stopVoiceInput": "Parar a entrada de voz", "stoppedWithAnError": "parou com um erro", + "stopping": "A parar…", "subIssues": "Subissues", "subTasks": "Subtarefas", "submit": "Submeter", "submitAnswers": "Submeter respostas", "submitUnavailable": "Submissão indisponível", "submitting": "A submeter…", + "subtask": "Subtarefa", + "subtasksBecomeRootTasksUnlessYou": "As subtarefas passam a tarefas de raiz se não assinalar esta opção. Podem ainda estar em curso.", + "subtasksStayActiveUnlessYouTick": "As subtarefas mantêm-se ativas se não assinalar esta opção. Podem ainda estar em curso.", "successful": "{{operationName}} bem-sucedida", + "summarize": "Resumir", + "summarizeSession": "Resumir a sessão", + "summarizeSessionNamed": "Resumir {{label}}", + "summarizing": "A resumir...", + "switchRecentTasks": "Alternar entre tarefas recentes.", "switchSidebarView": "Mudar a vista da barra lateral: {{name}}", + "switchWorkflows": "Mudar de fluxo de trabalho", + "switchWorkspace": "Mudar de área de trabalho", "system": "Sistema", "systemSender": "Sistema", + "targetAlreadyExists": "O destino já existe: {{newPath}}", + "task": "Tarefa", + "taskActions": "Ações da tarefa", + "taskChat": "Chat da tarefa", "taskCount_one": "{{count}} tarefa", "taskCount_other": "{{count}} tarefas", + "taskDebug": "Depuração da tarefa", "taskDetails": "Detalhes da tarefa", + "taskHasAnAgentError": "A tarefa tem um erro de agente", + "taskName": "Nome da tarefa", + "taskNeedsRepositoryForSources": "Esta tarefa precisa de um repositório antes de se poderem adicionar origens.", "taskOverview": "Visão geral da tarefa", + "taskStatusAndAttention": "Estado da tarefa e atenção", + "taskTitle": "Título da tarefa", + "taskTools": "Ferramentas da tarefa", "taskTreeCancelled": "Árvore de tarefas cancelada", "taskTreePaused": "Árvore de tarefas em pausa", "taskTreeRestored": "Árvore de tarefas restaurada", @@ -679,28 +1250,54 @@ "tasks": "Tarefas", "tasksAffected_one": "{{count}} tarefa afetada", "tasksAffected_other": "{{count}} tarefas afetadas", + "tcpPortsWithActiveListenersInside": "Portas TCP com processos à escuta dentro do executor remoto. Clique em atualizar para voltar a analisar.", + "technicalDetails": "Detalhes técnicos", "terminal": "Terminal", "terminalCount_one": "{{count}} terminal", "terminalCount_other": "{{count}} terminais", + "terminalNotAvailableThisTaskIs": "Terminal indisponível — esta tarefa está arquivada", + "terminalNumbered": "terminal n.º {{seq}}", + "terminalPromptInputAreDisabledUntil": "O terminal e a entrada de prompt estão desativados até começar a próxima execução.", "terminalUnavailableNoActiveSession": "Terminal indisponível — não há sessão ativa.", + "terminalWithSeq": "Terminal {{seq}}", "terminals": "Terminais", + "terminate": "Terminar", + "terminateTerminal": "Terminar o terminal n.º {{seq}}", + "terminateThisKillsTheRunningPty": "Terminar {{label}}? Isto termina o PTY em execução.", "theAgentAndRunningWorkspaceProcesses": "O agente e os processos da área de trabalho em execução continuam. Os ficheiros existentes, as alterações do Git e o contexto registado da tarefa e da sessão mantêm-se.", + "theAgentCanWriteAndUpdate": "O agente pode escrever e atualizar o plano à medida que trabalha", + "theAgentHasFinishedItsLast": "O agente terminou o último turno e aguarda o próximo acionador elegível. A árvore de ficheiros abaixo é lida da worktree em disco; o histórico de chat anterior é preservado.", "theAgentHasMovedOn": "O agente já avançou. A sua resposta será enviada como uma nova mensagem.", "theAgentStoppedWithAnError": "O agente parou com um erro. Retome para repetir a mesma conversa ou inicie uma sessão nova.", "theBrowserDidnTProvideImage": "O navegador não forneceu os dados da imagem. Guarde a imagem e anexe antes o ficheiro.", + "theBuiltInDefaultLayoutWill": "O esquema Pré-definido incorporado passa a ser a pré-definição.", "theConnectionDroppedOrTimedOut": "A ligação caiu ou excedeu o tempo limite. Atualize a tarefa para confirmar se a operação foi concluída.", "theIdleAgentRestartsAtThe": "O agente inativo reinicia na raiz da tarefa. Os ficheiros existentes, as alterações do Git, o histórico da tarefa e da sessão, as mensagens, o plano, as fontes anexadas, o modelo e o modo mantêm-se.", + "theTextIsDeliveredStraightTo": "O texto é entregue diretamente no stdin do agente CLI — os comentários de revisão pendentes (se existirem) são antepostos automaticamente.", + "theseAreTheSameVersionNothing": "Estas são a mesma versão; não há nada a comparar.", "thinking": "A pensar", "thisConversationHasNoShareableContent": "Esta conversa não tem conteúdo partilhável.", + "thisExecutor": "este executor", "thisIsTheOnlySessionFor": "Esta é a única sessão desta tarefa.", "thisIsThePrimarySessionAnother": "Esta é a sessão principal. Outra sessão será definida como principal.", "thisRepositoryMustHaveACloneable": "Este repositório tem de ter uma origem clonável; o Kandev verifica-a antes de o adicionar.", "thisRestartsTheTaskWorkspace": "Isto reinicia a área de trabalho da tarefa", + "thisSavedLayoutWillBePermanently": "Este esquema guardado será removido permanentemente.", + "thisSessionDidNotFinishSetting": "Esta sessão não terminou a configuração da sua área de trabalho.", + "thisStopsTheShellAndAny": "Isto para a shell “{{terminalName}}” e qualquer comando que esteja a executar.", "thisTask": "esta tarefa", + "thisTask2": "Esta tarefa", + "thisTaskHasLinkedPullRequests": "Esta tarefa tem {{length}} pull requests associados. Escolha um para abrir no GitHub.", + "thisTaskIsArchivedAndRead": "Esta tarefa está arquivada e é só de leitura.", "thisTaskPointsToBranch": "Esta tarefa aponta para <1>{{branch}}, mas esse branch não foi encontrado no repositório remoto. Pode ter sido integrado ou eliminado.", + "thisTaskSharesItsParentS": "Esta tarefa partilha a área de trabalho da tarefa-mãe. As sessões atuais e futuras continuam a usar essa área de trabalho partilhada.", + "thisTearsDownTheCurrentContainer": "Isto desmonta o contentor, a sandbox e/ou a worktree atuais desta tarefa, para que a próxima sessão comece com um ambiente novo.", + "thisTerminal": "este terminal", "thisUpdatesTheLiveTaskWorkspace": "Isto atualiza a área de trabalho da tarefa em uso", "thisWillClearTheAgentS": "Isto limpa o histórico da conversa do agente e inicia um contexto novo. A sua área de trabalho, os ficheiros e o estado do Git são preservados.", + "thisWillPermanentlyDeleteSelectedItems": "Isto elimina permanentemente {{selectedCount}} itens selecionados. Esta ação não pode ser anulada.", "thisWillPermanentlyDeleteTheConversation": "Isto elimina permanentemente o histórico da conversa desta sessão.", + "ticket": "Ticket", "timedOutAgentMovedOn": "Tempo esgotado (o agente avançou)", "title": "título", "title2": "Título do {{longName}}", @@ -709,6 +1306,7 @@ "toFocus": "para focar", "todos": "Tarefas por fazer", "todosCompleted": "{{completed}}/{{total}} concluídas", + "toggleWordWrap": "Alternar a quebra de linha", "tokenCount_one": "{{formatted}} token", "tokenCount_other": "{{formatted}} tokens", "tokens": "tokens", @@ -721,37 +1319,70 @@ "transcribing": "A transcrever…", "transcribingVoiceInput": "A transcrever a entrada de voz", "treeActionFailed": "A ação sobre a árvore falhou", + "treeCancelDescription": "Isto cancela {{taskCount}} tarefas e interrompe {{activeRunCount}} sessões de agente ativas. Esta ação pode ser anulada com Restaurar.", "treeCost": "Custo da árvore", "treeTasks": "Tarefas da árvore", "truncated": "truncado", "truncatedParen": "(truncado)", "tryAgain": "Tente novamente", + "tunnel": "Túnel", "turnForDuration": "durante {{duration}}", "turnMessageCount_one": "· {{count}} mensagem", "turnMessageCount_other": "· {{count}} mensagens", "turnWorked": "trabalhou", "turnWorking": "a trabalhar", + "typeAMessageMentionFilesOr": "Escreva uma mensagem, @mencione ficheiros ou prompts, Shift+Enter para mudar de linha", + "typeShaToConfirm": "Escreva <1>{{shortSha}} para confirmar:", "typeToSearch": "Escreva para pesquisar...", "typeToSearchPreviousMessages": "Escreva para pesquisar nas mensagens anteriores...", "typeToSearchWorkItems": "Escreva para pesquisar itens de trabalho", + "unNestRemoveParent": "Desaninhar (remover a tarefa-mãe)", + "unarchive": "Desarquivar", + "unarchiveTask": "Desarquivar tarefa", "uncommitted": "Sem commit", + "unified": "Unificado", + "unifiedView": "Vista unificada", "unknown": "Desconhecido", + "unknownAgent": "Agente desconhecido", + "unknownError": "Erro desconhecido", + "unknownError2": "Erro desconhecido", + "unlink": "Desassociar", "unnamed": "(sem nome)", + "unpin": "Desafixar", + "unpinTasksCount_one": "Desafixar {{count}} tarefa", + "unpinTasksCount_other": "Desafixar {{count}} tarefas", "unpinWillBeRemovedAfterSend": "Desafixar (será removido após o envio)", + "unpushedCommit": "Commit sem push", + "unstageAll": "Retirar tudo da preparação", + "unstageCount": "Retirar {{selectionCount}} da preparação", + "unstageFile": "Retirar o ficheiro da preparação", "untitled": "(sem título)", "update": "Atualizar", + "updateComment": "Atualizar o comentário", + "updateTask": "Atualizar a tarefa", "updated": "Atualizada", "updatedTodos": "Tarefas por fazer atualizadas", "updating": "A atualizar…", + "updating2": "A atualizar...", + "uploadFailed": "O carregamento falhou", "uploaded": "{{name}} carregado", + "uptime": "Tempo ativo", + "useAFullGithubIssueUrl": "Use o URL completo de uma issue do GitHub para esta tarefa.", + "useAFullGithubPullRequest": "Use o URL completo de um pull request do GitHub para esta tarefa.", + "useAFullIssueUrlOr": "Use o URL completo ou o número de uma issue de {{owner}}/{{repo}}.", + "useAFullPullRequestUrl": "Use o URL completo ou o número de um pull request de {{owner}}/{{repo}}.", "useAnExistingCheckoutOnThis": "Usar um checkout existente nesta máquina.", + "usesCurrentBranch": "Usa o branch atual", "usesTheCurrentCheckoutKandevDoes": "Usa o checkout atual. O Kandev não muda o branch do seu repositório local.", "value": "Valor", + "verbIsDormant": "{{verb}} está adormecido", + "versionNumber": "Versão {{version}}", "viaSession": "através da sessão", "view": "Vista:", "viewLimitReached_one": "Pode guardar até {{count}} vista.", "viewLimitReached_other": "Pode guardar até {{count}} vistas.", "viewName": "Nome da vista", + "viewPlanHistory": "Ver o histórico do plano", "voiceInput": "Entrada de voz", "voiceInputNeedsHttps": "A entrada de voz precisa de HTTPS. Abra este site em {{secureSchemeUrl}} (ou {{localhostUrl}}) — a maioria dos navegadores móveis bloqueia as APIs de microfone em origens inseguras.", "voiceInputUnavailable": "Entrada de voz indisponível", @@ -759,9 +1390,20 @@ "voiceInputUnavailableTapForDetails": "Entrada de voz indisponível — toque para ver os detalhes", "voiceInputUnsupportedBrowser": "A entrada de voz não é suportada neste navegador. Experimente o Chrome, o Edge ou o Safari 14.5+.", "voiceTooltipHold": "{{tooltip}} (manter premido)", + "vsCode": "VS Code", + "vsCodeServer": "VS Code Server", "waitForActiveTurnToFinish": "Aguarde que o turno ativo ou a chamada de ferramenta terminem antes de adicionar fontes.", "waitForTaskSourcesToLoad": "Aguarde que as fontes da tarefa acabem de carregar antes de adicionar fontes.", + "waitingForAnActiveSession": "À espera de uma sessão ativa...", + "walkMeThroughTheseChanges": "Explicar estas alterações passo a passo", + "walkMeThroughTheseReviewChanges": "Explicar passo a passo estas alterações da revisão", "walkthrough": "Passo a passo: {{title}}", + "walkthrough2": "Passo a passo", + "walkthroughNoteCount_one": "{{count}} nota do passo a passo", + "walkthroughNoteCount_other": "{{count}} notas do passo a passo", + "websocketClientNotAvailable": "Cliente WebSocket indisponível", + "whatShouldTheAgentWorkOn": "Em que deve o agente trabalhar?", + "workdir": "Diretório de trabalho", "workedRanCommands_one": "Trabalhou -- executou {{count}} comando", "workedRanCommands_other": "Trabalhou -- executou {{count}} comandos", "workflow": "fluxo de trabalho", @@ -773,13 +1415,26 @@ "working": "A trabalhar...", "working3": "A trabalhar", "working4": "A trabalhar…", + "workingIn": "A trabalhar em <1>{{path}}", "workingInBackground": "A trabalhar em segundo plano", + "workspaceActions": "Ações da área de trabalho", "workspaceCount_one": "{{count}} área de trabalho", "workspaceCount_other": "{{count}} áreas de trabalho", + "workspaceIsStillStarting": "A área de trabalho ainda está a arrancar.", + "workspaceMode": "Modo da área de trabalho", + "workspaceModeLabel": "modo: {{mode}}", "workspaceRepository": "Repositório da área de trabalho", + "workspaceRequiresConfiguration": "A área de trabalho requer configuração", + "workspaceUnavailable": "Área de trabalho indisponível", + "worktree": "Worktree", "wouldCreateABlockerCycle": "Criaria um ciclo de bloqueios: {{cycle}}", + "writeAComment": "Escreva um comentário…", + "writeAPromptForTheAgent": "Escreva um prompt para o agente... (@ para inserir um prompt guardado)", "writeYourChangesHere": "Escreva aqui as suas alterações", "you": "Eu", "youCanAttachUpToFiles": "Pode anexar até {{maxFiles}} ficheiros.", + "yourBranchesLabel": "Os seus branches:", + "yourChangedFilesWillAppearHere": "Os seus ficheiros alterados aparecem aqui", + "yourCodeLivesInLabel": "O seu código está em:", "yourReviewIsRequestedOnThis": "A sua revisão foi pedida nesta tarefa." } diff --git a/apps/web/src/locales/pt-pt/workflows.json b/apps/web/src/locales/pt-pt/workflows.json index cbf5156bc9..4c8b95846b 100644 --- a/apps/web/src/locales/pt-pt/workflows.json +++ b/apps/web/src/locales/pt-pt/workflows.json @@ -181,6 +181,12 @@ "startStepHelp": "As novas tarefas começam neste passo. Só um passo por fluxo de trabalho pode ser o passo inicial.", "stepIsPartOfReplayCycle": "{{stepName}} faz parte de um ciclo de repetição", "stepNamePlaceholder": "Nome do passo", + "workflowPrompt": "Prompt do fluxo de trabalho", + "workflowPromptHelp": "Instruções opcionais incluídas na entrada de cada passo, antes do prompt do passo. Suporta referências {task_id} e @prompt-guardado (a mesma expansão dos prompts de passo). {{taskPrompt}} só existe nos passos. Deixe vazio para desativar. Visível para o agente e mostrado recolhido no chat.", + "workflowPromptPlaceholder": "Se o PR estiver integrado ou fechado, mova a tarefa para Concluída.\nSe precisar de criar vários pull requests, prefira orquestrar subtarefas.", + "workflowPromptCollapsedHint": "Opcional — expanda para adicionar instruções partilhadas de entrada nos passos", + "workflowPromptSetHint": "Configurado — expanda para editar", + "workflowInstructionsCollapsed": "Instruções do fluxo de trabalho", "stepPrompt": "Prompt do passo", "stepPromptHelp": "Instruções personalizadas para o agente neste passo. Use {{taskPrompt}} para incluir a descrição da tarefa.", "stepPromptPlaceholderExample": "Implementar a autenticação de utilizadores com OAuth2", @@ -225,6 +231,7 @@ "wipLimit": "Limite de WIP", "wipLimitHelp": "Máximo de tarefas admitidas (ativas) neste passo. O excedente permanece visível numa fila. Use 0 para ilimitado.", "wipLimitsNote": "O WIP limita o trabalho ativo, não a visibilidade. O excedente permanece no quadro até haver capacidade; se um alimentador selecionado também estiver cheio, a criação de novas tarefas é rejeitada.", + "workflow": "Fluxo de trabalho", "workflowCycleBlocked": "Ciclo do fluxo de trabalho bloqueado", "workflowCycleBlockedDescription": "Altere os passos do fluxo de trabalho para remover o ciclo automático antes de continuar.", "workflowCycleBlockingBody": "Este percurso volta a entrar em \"{{stepName}}\" e pode iniciar o agente novamente sem outra ação do utilizador.",