feat(i18n): close the pt-PT parity gap (1,794 keys) (#2386)

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
João Salavisa
2026-08-07 19:52:28 +02:00
committed by GitHub
parent d855d615f8
commit 58f6533ab1
11 changed files with 2168 additions and 11 deletions
+2 -1
View File
@@ -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",
+194
View File
@@ -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);
+166
View File
@@ -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<string, Record<string, Record<string, string>>>;
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: <denominator>, <locale>: <missing count> }`. */
rows: Record<string, Record<string, number>>;
/** 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<ParityResult, "locales" | "rows" | "extras" | "absent"> {
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<string, Record<string, number>> = {};
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);
});
});
+197 -6
View File
@@ -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}}</1>. {{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}}</1>",
"onboardingAgentsAutoApproveWarning": "<0>Atenção:</0> 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</0><1></1><2>para o abrir a qualquer momento</2>",
"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</2> 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}}</1> 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}}</1> 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}}</2> 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"
}
+27 -4
View File
@@ -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}}</4> 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}}</4> 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}}</4> 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}}</4>",
"creatingFromInto": "A criar o {{shortName}} a partir de <4>{{displayBranch}}</4> → <6>{{baseBranch}}</6>",
@@ -40,6 +47,8 @@
"failedToCopyConfig": "Não foi possível copiar a configuração: {{err}}",
"filesChanged_one": "<0>{{count}}</0> ficheiro alterado",
"filesChanged_other": "<0>{{count}}</0> 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}}",
+891
View File
@@ -0,0 +1,891 @@
{
"aCronScheduleExample": "Um agendamento cron (por exemplo, <1>{{cron}}</1> 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</0> <1></1> <2>em</2> <3></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}}</1> 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}}</1> 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"
}
+3
View File
@@ -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}}",
+7
View File
@@ -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",
+19
View File
@@ -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}}</1>",
"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.",
File diff suppressed because it is too large Load Diff
@@ -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.",